“foo #{bar}” ^^^^^^^^^^^^
‘foo #{bar}` ^^^^^^^^^^^^
/(?<foo>foo)/ =~ bar ^^^^^^^^^^^^^^^^^^^^
foo, bar = baz ^^^^^^^^^^^^^^
Visit a destructured positional parameter node.
__ENCODING__ ^^^^^^^^^^^^
__FILE__ ^^^^^^^^
__LINE__ ^^^^^^^^
Visit a heredoc node that is representing a string.
Visit a heredoc node that is representing an xstring.
Interpolate substitution vars in the arg (i.e. $(DEFFILE))
Example:
x.foo ^^^^ x.foo(42) ^^^^ x&.foo ^^^^^ x[42] ^^^^ x.foo = 1 ^^^^^^ x[42] = 1 ^^^^^^ x + 1 ^ +x ^ foo(42) ^^^ foo 42 ^^^ foo ^^^
Example:
x.foo(42) ^^ x[42] ^^ x.foo = 1 ^ x[42] = 1 ^^^^^^^ x[] = 1 ^^^^^ x + 1 ^ foo(42) ^^ foo 42 ^^
Foo ||= bar
becomes
defined?(Foo) ? Foo : Foo = bar
Reset nil attributes to their default values to make the spec valid
When there is an invalid block with a keyword missing an end right before another end, it is unclear where which keyword is missing the end
Take this example:
class Dog # 1 def bark # 2 puts "woof" # 3 end # 4
However due to github.com/ruby/syntax_suggest/issues/32 the problem line will be identified as:
> class Dog # 1
Because lines 2, 3, and 4 are technically valid code and are expanded first, deemed valid, and hidden. We need to un-hide the matching end line 4. Also work backwards and if there’s a mis-matched keyword, show it too