summaryrefslogtreecommitdiff
path: root/ast.rb
diff options
context:
space:
mode:
authoryui-knk <[email protected]>2024-07-10 22:28:22 +0900
committerYuichiro Kaneko <[email protected]>2024-07-23 12:36:00 +0900
commitf23485a8d693cb69fd7b84c1ab93cb4198ecfe4a (patch)
tree12b99fc07f809edbd9ac32f3951a07f46e30a8cd /ast.rb
parent5617fec1f81d0f05563b70fd04e9494896f6abc7 (diff)
[Feature #20624] Enhance `RubyVM::AbstractSyntaxTree::Node#locations`
This commit introduce `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class. Ruby AST node will hold multiple locations information. `RubyVM::AbstractSyntaxTree::Node#locations` provides a way to access these locations information. `RubyVM::AbstractSyntaxTree::Location` is a class which holds these location information: * `#first_lineno` * `#first_column` * `#last_lineno` * `#last_column`
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11226
Diffstat (limited to 'ast.rb')
-rw-r--r--ast.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/ast.rb b/ast.rb
index 51ee5b3d59..aae68fd9a7 100644
--- a/ast.rb
+++ b/ast.rb
@@ -272,5 +272,62 @@ module RubyVM::AbstractSyntaxTree
nil
end
end
+
+ # call-seq:
+ # node.locations -> array
+ #
+ # Returns location objects associated with the AST node.
+ # The returned array contains RubyVM::AbstractSyntaxTree::Location.
+ def locations
+ Primitive.ast_node_locations
+ end
+ end
+
+ # RubyVM::AbstractSyntaxTree::Location instances are created by
+ # RubyVM::AbstractSyntaxTree#locations.
+ #
+ # This class is MRI specific.
+ #
+ class Location
+
+ # call-seq:
+ # location.first_lineno -> integer
+ #
+ # The line number in the source code where this AST's text began.
+ def first_lineno
+ Primitive.ast_location_first_lineno
+ end
+
+ # call-seq:
+ # location.first_column -> integer
+ #
+ # The column number in the source code where this AST's text began.
+ def first_column
+ Primitive.ast_location_first_column
+ end
+
+ # call-seq:
+ # location.last_lineno -> integer
+ #
+ # The line number in the source code where this AST's text ended.
+ def last_lineno
+ Primitive.ast_location_last_lineno
+ end
+
+ # call-seq:
+ # location.last_column -> integer
+ #
+ # The column number in the source code where this AST's text ended.
+ def last_column
+ Primitive.ast_location_last_column
+ end
+
+ # call-seq:
+ # location.inspect -> string
+ #
+ # Returns debugging information about this location as a string.
+ def inspect
+ Primitive.ast_location_inspect
+ end
end
end