begin; foo; ensure; bar; end
^^^^^^^^^^^^
def foo((bar, baz)); end
^^^^^^^^^^
A list of statements.
Visit a destructured positional parameter node.
BEGIN {} ^^^^^^^^
Visit the list of statements of a statements node. We support nil statements in the list. This would normally not be allowed by the structure of the prism parse tree, but we manually add them here so that we can mirror Ripper’s void stmt.
Visit a heredoc node that is representing a string.
Visit a heredoc node that is representing an xstring.
Return the best specification that contains the file matching path
, among those already activated.
Return the best specification in the record that contains the file matching path
, among those already activated.
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
def foo(*bar); end
^^^^
def foo(*); end
^