Actions
Feature #20624
closedEnhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
Feature #20624:
Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
Status:
Closed
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_locthen_keyword_locend_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::Locationclass which has these methods#first_lineno#first_column#last_lineno#last_column
- Add
RubyVM::AbstractSyntaxTree::Node#locationsmethod which returns multiple location information of the node- The first location is same with the whole node location
Implementation¶
Actions