[ruby-core:118534] [Ruby master Feature#20624] Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
From:
"Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date:
2024-07-10 15:28:22 UTC
List:
ruby-core #118534
Issue #20624 has been updated by Eregon (Benoit Daloze).
This new API also seems hard-to-use BTW, because `RubyVM::AbstractSyntaxTree::Node#locations` returns an Array of locations, so how is one supposed to know the location at which index of that Array corresponds to what?
[The current branch](https://github.com/yui-knk/ruby/commit/1efb7e97e04277c98dbad678047926d95d2659d4) also only ever returns arrays with a single element, so it does not seem useful in the current state.
----------------------------------------
Feature #20624: Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class
https://bugs.ruby-lang.org/issues/20624#change-109054
* 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/