Project

General

Profile

Actions

Bug #19544

open

Custom quotes inconsistency

Added by hurricup (Alexandr Evstigneev) 3 months ago. Updated 3 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:112988]

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) 3 months 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) 3 months 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"

%w cannot 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) 3 months ago

mame (Yusuke Endoh) wrote in #note-1:

%w cannot 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.

Actions

Also available in: Atom PDF

Like0
Like1Like0Like0