Bug #19544
closedCustom quotes inconsistency
Description
According to parse_percent in parse.y:
For % we should be able use ascii non alphanumeric delimiters.
But, p % jim beam ; does not work. Presumably because of some look-ahead distincting % from percent-string starter. Seems it is the same for any \s after %
For the explicit % construction, with type specifier %[QqWwIisrx] we should be able to use non-alphanumeric ascii characters, which includes \s. But:
This works:
p %s
jim beam
And this does not:
p %w
jim\ beam
with unterminated list error.
First seems unavoidable, but second looks like obvious error of finding terminating \n
Updated by mame (Yusuke Endoh) over 2 years ago
Presumably because of some look-ahead distincting % from percent-string starter
It depends on the lex state, not look-ahead. If you place % in a context where the beginning of an expression is expected, you can write %-literal with spaces as delimiters.
p(% foo ) #=> "foo"
p(% jim\ beam ) #=> "jim beam"
%w cannot be used with a space delimiter because it interprets all whitespace characters as a word delimiter.
Updated by hurricup (Alexandr Evstigneev) over 2 years ago
mame (Yusuke Endoh) wrote in #note-1:
Presumably because of some look-ahead distincting % from percent-string starter
It depends on the lex state, not look-ahead. If you place
%in a context where the beginning of an expression is expected, you can write %-literal with spaces as delimiters.p(% foo ) #=> "foo" p(% jim\ beam ) #=> "jim beam"
%wcannot be used with a space delimiter because it interprets all whitespace characters as a word delimiter.
Thank you! This sounds reasonable. Then feels that list-like quotations ops [WwIi] should error about \s term, not unterminated list, which may be confusing.
Updated by hurricup (Alexandr Evstigneev) over 2 years ago
mame (Yusuke Endoh) wrote in #note-1:
%wcannot be used with a space delimiter because it interprets all whitespace characters as a word delimiter.
Also, it could be usable, because space may be used as delimiter and \n as word separator and vice versa.
Updated by nobu (Nobuyoshi Nakada) over 2 years ago
- Related to Bug #19563: Ripper.tokenize(code).join != code when heredoc and multiline %w[] literal is on the same line added
Updated by nobu (Nobuyoshi Nakada) over 2 years ago
- Status changed from Open to Closed
Fixed at ac8a16237c727ae2a1446ef6dc810d0e750971fb.