[ruby-core:118531] [Ruby master Feature#20624] Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
From:
"yui-knk (Kaneko Yuichiro) via ruby-core" <ruby-core@...>
Date:
2024-07-10 15:06:11 UTC
List:
ruby-core #118531
Issue #20624 has been reported by yui-knk (Kaneko Yuichiro).
----------------------------------------
Feature #20624: Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
https://bugs.ruby-lang.org/issues/20624
* 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/
______________________________________________
ruby-core mailing list -- [email protected]
To unsubscribe send an email to [email protected]
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/