From: "Eregon (Benoit Daloze) via ruby-core" Date: 2024-07-10T15:19:58+00:00 Subject: [ruby-core:118533] [Ruby master Feature#20624] Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class Issue #20624 has been updated by Eregon (Benoit Daloze). What is the motivation to improve this RubyVM API which AFAIK should not be used anymore? `RubyVM::AbstractSyntaxTree` is an experimental unstable hard-to-use API which only works on CRuby (from [the documentation](https://docs.ruby-lang.org/en/3.3/RubyVM/AbstractSyntaxTree.html)). Prism is the designated Ruby parsing API, it is already adopted by many tools and it works on many Ruby implementations. ---------------------------------------- Feature #20624: Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class https://bugs.ruby-lang.org/issues/20624#change-109053 * 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 # => # 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/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/