Actions
Feature #20624
openEnhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
Status:
Open
Assignee:
-
Target version:
-
Description
Background¶
It's revealed that single location information is not enough for some node types.
For example, Prism::IfNode
include these locations
if_keyword_loc
then_keyword_loc
end_keyword_loc
-
location
(this is whole node location)
I propose RubyVM::AbstractSyntaxTree::Node#locations
method to provide multiple locations information, and RubyVM::AbstractSyntaxTree::Location
class for location information.
Example¶
node = RubyVM::AbstractSyntaxTree.parse("1 + 2")
node = node
locs = node.locations
loc = locs.first
p node
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:5>
p loc.class
# => RubyVM::AbstractSyntaxTree::Location
p [loc.first_lineno, loc.first_column, loc.last_lineno, loc.last_column]
# => [1, 0, 1, 5]
Interface¶
- Add
RubyVM::AbstractSyntaxTree::Location
class which has these methods#first_lineno
#first_column
#last_lineno
#last_column
- Add
RubyVM::AbstractSyntaxTree::Node#locations
method which returns multiple location information of the node- The first location is same with the whole node location
Implementation¶
Actions
Like1
Like0Like0