[swift-evolution] [Accepted] SE-0168: Multi-Line String Literals

Kevin Nattinger swift at nattinger.net
Wed Apr 19 17:15:10 CDT 2017


I agree, but unfortunately it’s probably too late now.

> On Apr 19, 2017, at 3:11 PM, Martin Waitz via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Hi,
> 
> I think, it would be more natural to include the last newline.
> Multi-line String literals are for multiple lines.
> And each line ends in a \n. Otherwise it wouldn’t be a line.
> 
> Having
>     """
>     line 1
>     """
>     +
>     """
>     line 2
>     """
>     ==
>     """
>     line 1
>     line 2
>     """
> 
> makes a lot of sense to me.
> 
> Or do we want to magically add a trailing newline everywhere as we do in print()?
> Better change print to only add the newline when necessary! (e.g. by adding a new parameter which defaults to „auto“)
> 
>> Martin
> 
>> Am 19.04.2017 um 23:51 schrieb Adrian Zubarev via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>>:
>> 
>> This is the natural way of text blocks. If you really need a blank line you can add one at the start/end or alternatively use \n.
>> 
>> """
>> 
>> Foo  
>> 
>> """
>> 
>> // Equals "\nFoo\n"
>> 
>> 
>> 
>> -- 
>> Adrian Zubarev
>> Sent with Airmail
>> 
>> Am 19. April 2017 um 22:53:07, Vladimir.S via swift-evolution (swift-evolution at swift.org <mailto:swift-evolution at swift.org>) schrieb:
>> 
>>> On 19.04.2017 23:03, Joe Groff via swift-evolution wrote:
>>> > Proposal Link: 
>>> > https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md <https://github.com/apple/swift-evolution/blob/master/proposals/0168-multi-line-string-literals.md>
>>> > 
>>> > Hello Swift Community,
>>> > 
>>> > The review of SE-0168: "Multi-Line String Literals" ran from April 6...12, 2017. The 
>>> > proposal is *accepted with revisions. *Community feedback was largely positive on the 
>>> > idea, though the discussion highlighted several under-specified aspects.
>>> > 
>>> > - Questions arose about whether text could appear on the same line as the opening and 
>>> > closing delimiter, and how that would interact with the de-indentation algorithm. The 
>>> > core team feels that it is important to keep this feature focused on its purpose of 
>>> > allowing the easy embedding of pasted blocks of text, so *text inside the literal on 
>>> > the same line as either delimiter should be disallowed.*
>>> > 
>>> > // Allowed, equal to "foo\nbar"
>>> > """
>>> > foo
>>> > bar
>>> > """
>>> 
>>> Could you clarify, shouldn't this be equal to "foo\nbar\n" ? I.e. with trailing \n 
>>> for "bar" line?
>>> I didn't find any clarification about the injecting of line-end for last text 
>>> line(not for the """ delimiter).
>>> 
>>> > 
>>> > // Not allowed
>>> > """foo
>>> > bar
>>> > """
>>> > 
>>> > // Not allowed
>>> > """
>>> > foo
>>> > bar"""
>>> > 
>>> > This keeps the model straightforward to describe: a *single newline *is always 
>>> > stripped after the opening delimiter and before the closing one, and the closing 
>>> > delimiter's position always determines the indentation level of the entire literal. 
>>> > The core team acknowledges that single-line triple quoted strings have other uses in 
>>> > other languages, such as to avoid excessive escaping in a string that contains lots 
>>> > of literal quotes, but supporting that alongside the indentation-stripping behavior 
>>> > leads to a lot of subtlety, and there could be other solutions to the escaping 
>>> > problem down the line, such as raw strings. If nothing else, single-line triple 
>>> > quoted strings can be considered later as an additive feature.
>>> > 
>>> > - The core team also believes that *underindentation or inconsistent tab/space usage 
>>> > within the indentation should be an error.* Every line inside the literal must begin 
>>> > with the exact sequence of spaces and tabs that precedes the closing delimiter.
>>> > 
>>> > """
>>> > <tab><space>this is OK
>>> > <space><space>this is an error
>>> > <space><tab>this is also an error
>>> > <tab>under-indenting is an error too
>>> > <tab><space><space>but you can go nuts after the indentation all you want
>>> > <tab><space><tab>you do you
>>> > <tab><space>"""
>>> > 
>>> > - The quoted string should *normalize newlines* to \n in the value of the literal, 
>>> > regardless of whether the source file uses \n (Unix), \r\n (Windows), or \r (classic 
>>> > Mac) line endings. Likewise, when the compiler strips the initial and final newline 
>>> > from the literal value, it will strip one of any of the \n, \r\n, or \r line-ending 
>>> > sequences from both ends of the literal.
>>> > 
>>> > // equal to "foo\nfoo\nfoo\nfoo"
>>> > """^J
>>> > foo^M^J
>>> > foo^J
>>> > foo^M
>>> > foo^M
>>> > """
>>> > 
>>> > - It should be clarified that *multiline strings support the same escapes and 
>>> > interpolations* as single-line strings. This allows a literal """ to be written \""". 
>>> > Discussion on the list raised the idea of allowing a line to end with \ to "escape" 
>>> > the newline and elide it from the value of the literal; the core team had concerns 
>>> > about only allowing that inside multi-line literals and felt that that could also be 
>>> > considered later as an additive feature.
>>> > 
>>> > Thanks John, Brent, and Tyler for the original proposal, and thanks to everyone who 
>>> > participated in the discussion!
>>> > 
>>> > -Joe
>>> > Review Manager
>>> > 
>>> > 
>>> > _______________________________________________
>>> > swift-evolution mailing list
>>> > swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> > https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> > 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170419/d171b2ec/attachment.html>


More information about the swift-evolution mailing list