[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Help understanding ruby.el percent literal syntax

From: Philippe Vaucher
Subject: Re: Help understanding ruby.el percent literal syntax
Date: Wed, 19 Jun 2019 17:51:57 +0200

ruby-mode uses syntax-propertize to make it so that

    config.allow_sites = %w{twitter facebook pinterest linkedin}

is treated somewhat like

    config.allow_sites = "w{twitter facebook pinterest linkedin"

So if you go to the end of the line and try to skip back over the
previous `sexp` you'll end up in front of the `%` rather than in front
of the `{`.

The purpose is probably to handle things like:

    config.allow_sites = %w{twitter facebook # pinterest linkedin}

where the `#` would otherwise be taken as the beginning of a comment.

Ah right, that makes sense.

> If I comment out the call to `ruby-syntax-propertize-percent-literal', then
> the bug in evil-surround is gone, and everything just looks the same
> visually (the percent literals are correctly highlighted).

Not sure what "comment out the call" means exactly, but from my reading
of the code, it would result in mayhem (the %w{ above would probably
be highlighted as if he extended to the end of the buffer).

What I meant was "if I edit `ruby-syntax-propertize' so it never calls `ruby-syntax-propertize-percent-literal' at line 1929". But I think you are right, it would probably break on your example with the comment above.

In order to interact better with things like Evil's
delimiter-replacement, ruby-mode.el could be changed so that instead of
marking the opening `%` and the closing `}` with the `|` syntax, it
would mark the `%` and `w` part with `'` syntax and then arrange to mark
the inside of the delimited text with an ad-hoc syntax table that
doesn't treat `#` as a comment started nor `"` as a string delimiter
(i.e., the same syntax-table used by the `with-syntax-table`
in `ruby-syntax-propertize-percent-literal`).  Or alternatively, it
could look for things like `#` and `"` and give them a `.` syntax.

Thank you a lot for the explanation and the suggestion! We'll see what we can do :-)

Kind regards,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]