I admit I have not been following this closely and have not read all proposals
and counter proposals and concerns - but of course that isn’t going to stop me
from tossing out my own suggestion!
My idea starts with this:
let code = #string // some code that we are generating
+ #string and some more code here
+ #string another line here
+ #string
+ #string including a blank line if we wanted
+ #string etc.
When used in this way, it simply generates a string literal from everything
that follows “#string” up to and including the newline. To chain multiple lines
together, it just uses string’s normal + operator. This would be the same as
writing the following code:
let code = "// some code that we are generating\n"
+ "and some more code here\n"
+ "another line here\n"
+ "\n"
+ "including a blank line if we wanted\n"
+ "etc.\n"
I would then extend this to support some other useful approaches such as:
#string(THE_END)
blah blah blah \\\ blah
can be anything \o/
what ever!!
THE_END
Or to use the entire contents of an external file:
#string(“file.txt")
l8r
Sean
> On May 5, 2016, at 3:51 PM, Brent Royal-Gordon via swift-evolution
> <[email protected]> wrote:
>
>> It had the idea that maybe the motivation behind continuation quotes is to
>> make using multiline strings harder to use; in order to discourage their use
>> at all.
>
> Absolutely not, and frankly I resent the implication.
>
> I'm looking at a space where (in my opinion) all existing designs are ugly
> and inelegant and trying to find something better. There are *reasons* Swift
> 2 doesn't allow newlines in quote marks; I'm trying to address them, not
> ignore them. There are nasty formatting problems; I'm trying to solve them,
> not tolerate them. There are significant context-sensitivity issues; I'm
> trying to fix them, not punt the problem to a syntax highlighter that is
> absent or incorrect in half of our tools.
>
> Here's a piece of code-generating code I once wrote, ported to this prototype:
>
> https://gist.github.com/brentdax/8a8ee1f6028230f68ed85b7f3ebc95bf
>
> (The actual code generation starts on line 93.)
>
> And here's the same code in (beta-era) Swift 2:
>
>
> https://github.com/brentdax/WebResponder/blob/master/WebResponderCore/WebResponderCore/codes2swift.swift
>
> I think the new version is an improvement over the old. I think I like it
> better than I would with `"""` or heredocs forcing things against the left
> margin. I think it's nice that I can look at any line—out of context, random
> access—and see which parts are string literals. I think if I want to add a
> doc comment to each of the constants it generates, I have to do a little
> awkward code shuffling, but the result is worth it:
>
> for statusLine in statusLines {
> code += " /// The HTTP \(statusLine.code) \(statusLine.message)
> status, used with `HTTPResponseType.status`.
> " \(statusLine.constant)
> "
> ""
> }
>
> Overall, I find this code a lot more pleasant to read than it was in Swift 2,
> and somewhat more pleasant than it would be with `"""` or a heredoc. Maybe
> you don't agree; maybe you'd rather import some other language's warts. I
> understand—those warts come with convenience advantages, and you might prefer
> that convenience to the other things.
>
> But at least have the basic respect for opposing viewpoints not to impugn my
> motives because you disagree with me or don't like what I suggest. That is
> just not nice.
>
> --
> Brent Royal-Gordon
> Architechies
>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution