[swift-evolution] multi-line string literals

Travis Tilley ttilley at gmail.com
Fri Dec 11 00:33:49 CST 2015

I had been operating on the assumption that a leading blank line would be
stripped if present, since the syntax in code would look much cleaner, but
a trailing line would not since it would likely be intentional. I guess
that's another detail that would need to be fleshed out if we decide to go
with triple quote syntax (which, at this point, isn't a given... chris
lattner brings up some very good points that might require more involved,
potentially heredoc-like, syntax to solve).

Your fourth rule, however, I don't agree with at all. It should be obvious
from where you place the final quotes whether or not the string includes a
trailing newline. Just like in ruby, I believe in and value the principle
of least surprize.

- Travis Tilley

On Fri, Dec 11, 2015 at 1:04 AM, Jason Dusek <jason.dusek at gmail.com> wrote:

> On Thu, 10 Dec 2015 at 21:45, Travis Tilley via swift-evolution <
> swift-evolution at swift.org> wrote:
> The ruby <<- heredoc syntax, unlike the << heredoc syntax, will strip
>> indentation if necessary. Technically, it searches for the "least indented
>> line" in the whole string, and removes exactly that amount from each line.
>> So yes, the indentation problem -is- solved in ruby (though it might break
>> entirely if you have empty lines, since the least indented line has no
>> indentation).
> To my mind, the rules should be:
>    1. The indentation level is set from the least indented line that is
>    not the first line and is not empty.
>    2. A leading empty line is removed.
>    3. The leading line, if there is any text in it, is not subject to
>    de-indentation.
> I genuinely believe these three rules taken together address all the
> errors and infelicities to which triple quotes and HEREDOCs subject us.
> Here are some examples:
> text = """
>     Some
>   Features
>     Are
>     Discussed
> """# From (1): The indentation is taken from the third line below `text`, so it's 2.# From (2): First line is: "\n" so it is removed.# From (3): No effect.
> text = """  Some
>           Features
>             Are
>             Discussed
> """# From (1): The indentation is taken again from the line reading "Features". Here it is 10.# From (2): No effect.# From (3): The leading whitespace in `  Some` is preserved.
> Do you all think these rules pass muster?
> A fourth rule — one which seems advisable but also less necessary than the
> others — is that a string constructed in this way always ends with a
> newline. It is a rule that perhaps leads to surprises and inconsistencies.
> Best Regards,
> Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151211/8e5920c0/attachment.html>

More information about the swift-evolution mailing list