[Rd] [WISH / PATCH] possibility to split string literals across multiple lines

Gábor Csárdi
Wed, 14 Jun 2017 15:18:44 -0000

I don't think it is reasonable to change the parser this way. This is
currently valid R code:

a <- "foo"
"bar"

and with the new syntax, it is also valid, but with a different
meaning. Or you can even consider

a <- "foo"
bar %>% func() %>% print()

etc.

I like the idea of string literals, but the C/C++ way clearly does not
work. The Python/Julia way might, i.e.:

"""this is a
multi-line
lineral"""

Gabor

On Wed, Jun 14, 2017 at 4:12 PM, William Dunlap via R-devel
<r-devel at r-project.org> wrote:
> If you are changing the parser (which is a major change) you
> might consider treating strings in the C/C++ way:
>    char *s = "A"
>                    "B";
> means the same as
>    char *s = "AB";
>
> I am not a big fan of that syntax but it is widely used.
>
> A backslash at the end of the line leads to errors when you accidently
> put a space after the backslash and the editor doesn't flag it.
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Wed, Jun 14, 2017 at 3:58 AM, Andreas Kersting <r-devel at
akersting.de>
> wrote:
>
>> Hi,
>>
>> I would really like to have a way to split long string literals across
>> multiple lines in R.
>>
>> Currently, if a string literal spans multiple lines, there is no way to
>> inhibit the introduction of newline characters:
>>
>> > "aaa
>> + bbb"
>> [1] "aaa\nbbb"
>>
>>
>> If a line ends with a backslash, it is just ignored:
>>
>> > "aaa\
>> + bbb"
>> [1] "aaa\nbbb"
>>
>>
>> We could use this fact to implement string splitting in a fairly
>> backward-compatible way, since currently such trailing backslashes
should
>> hardly be used as they do not have any effect. The attached patch makes
the
>> parser ignore a newline character directly following a backslash:
>>
>> > "aaa\
>> + bbb"
>> [1] "aaabbb"
>>
>>
>> I personally would also prefer if leading blanks (spaces and tabs) in
the
>> second line are ignored to allow for proper indentation:
>>
>> >   "aaa \
>> +    bbb"
>> [1] "aaa bbb"
>>
>> >   "aaa\
>> +    \ bbb"
>> [1] "aaa bbb"
>>
>> This is also implemented by this patch.
>>
>>
>> An alternative approach could be to have something like
>>
>> ("aaa "
>> "bbb")
>>
>> or
>>
>> ("aaa ",
>> "bbb")
>>
>> be interpreted as "aaa bbb".
>>
>> I don't know the ins and outs of the parser of R (hence: please
very
>> carefully review the attached patch), but I guess this would be more
work
>> to implement!?
>>
>>
>> What do you think? Is there anybody else who is missing this feature in
>> the first place?
>>
>> Regards,
>> Andreas
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel