Project

General

Profile

Actions

Feature #20624

closed

Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class

Added by yui-knk (Kaneko Yuichiro) 4 months ago. Updated 4 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:118531]

Description

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

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

Actions

Also available in: Atom PDF

Like1
Like0Like0Like0Like0