[swift-evolution] multi-line string literals.

Brent Royal-Gordon brent at architechies.com
Mon Apr 25 18:59:27 CDT 2016

> To audition Xcode using the following multi-line syntax:
>         let xml = "<?xml version=\"1.0\"?>
>             "<catalog>
>             "   <book id=\"bk101\" empty=\"\">
>             "       <author>\(author)</author>
>             "       <title>XML Developer's Guide</title>
>             "       <genre>Computer</genre>
>             "       <price>44.95</price>
>             "       <publish_date>2000-10-01</publish_date>
>             "       <description>An in-depth look at creating applications with XML.</description>
>             "   </book>
>             "</catalog>
>             ""
>         print(xml)
> You can install:  http://johnholdsworth.com/swift-LOCAL-2016-04-25-a-osx.tar.gz

This is super-cool, and in a little bit of testing, I really like what this does to multiline strings. The quotation marks on the left end up forming a column that marks the lines as special, much like using `///` on multiline doc comments instead of `/**`.

In the spirit of building prototypes, I wrote a Perl script which generates literals in various formats: <https://dl.dropboxusercontent.com/u/64017186/make-swift-literal.pl> It allows you to feed in different strings and evaluate how they might look with various language features we might add.

The command takes a file on the command line ("-" for stdin, nothing to use the contents of the pasteboard) and prints it as a Swift literal. It supports the following options:

* --multiline|nomultiline: Controls the hanging-quote format we've been discussing for multiline quotes.
* --unescaped|nounescaped: Controls the `e"string"` format we've been discussing for quotes that ignore escaping.
* --quotes=n: Sets the number of quotation marks to be used.
* --auto|noauto: If enabled, the exact settings are chosen heuristically, with the command-line options being used as maximums. If disabled, the options directly control the settings used.

The default is to use heuristics, enable all options with a very high maximum number of quotes, and read the string from the pasteboard. (These defaults are controlled from lines 9 and 13-16.) I chose these defaults so that this can be used to prototype a "Paste as String Literal" command in TextMate 2. Just open the Swift bundle in the bundle editor, paste the script into a new "Paste as String Literal" command, and choose "Key Equivalent: Ctrl-Cmd-V", "Input: Nothing", and "Output: Replace Selection".

Brent Royal-Gordon

More information about the swift-evolution mailing list