
Issue #20624 has been updated by matz (Yukihiro Matsumoto). I have heard this is for further development for Universal Parser (Prism API bridge). Accepted. Matz. ---------------------------------------- Feature #20624: Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class https://bugs.ruby-lang.org/issues/20624#change-109193 * Author: yui-knk (Kaneko Yuichiro) * Status: Open ---------------------------------------- # 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 ```ruby 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 https://github.com/yui-knk/ruby/tree/ast_locations -- https://bugs.ruby-lang.org/