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

Martin Waitz tali at admingilde.org
Wed Apr 19 17:11:02 CDT 2017


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>:
> 
> 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
>> > 
>> > 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
>> > 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
> 
> 
> _______________________________________________
> 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>

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


More information about the swift-evolution mailing list