GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Home
  • Projects
  • Help
  • Sign in
  • Register

This view

  • Original page
  • New address

GeezerVison is showing bugs.ruby-lang.org — Feature #20624: Enhance `RubyVM::AbstractSyntaxTree::Node#locations` method and `RubyVM::AbstractSyntaxTree::Location` class - Ruby - Ruby Issue Tracking System

Project

General

Profile

Ruby
All Projects

Ruby

  • Overview
  • Activity
  • Roadmap
  • Issues
  • Repository

Custom queries

  • Backport 3.3
  • Backport 3.4
  • Backport 4.0
  • bugs: unassigned
  • DevMeeting
  • matz
  • Open issues with attachment
  • Windows
Actions
Copy link

Feature #20624

closed

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

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

Added by yui-knk (Kaneko Yuichiro) over 2 years ago. Updated over 2 years 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

  • History
  • Notes
  • Property changes
  • Associated revisions

Updated by Eregon (Benoit Daloze) over 2 years ago Actions
Copy link
#1 [ruby-core:118533]

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).
Prism is the designated Ruby parsing API, it is already adopted by many tools and it works on many Ruby implementations.

Updated by Eregon (Benoit Daloze) over 2 years ago Actions
Copy link
#2 [ruby-core:118534]

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 also only ever returns arrays with a single element, so it does not seem useful in the current state.

Updated by matz (Yukihiro Matsumoto) over 2 years ago Actions
Copy link
#3 [ruby-core:118667]

I have heard this is for further development for Universal Parser (Prism API bridge).
Accepted.

Matz.

Updated by yui-knk (Kaneko Yuichiro) over 2 years ago Actions
Copy link
#4

  • Status changed from Open to Closed

Applied in changeset git|f23485a8d693cb69fd7b84c1ab93cb4198ecfe4a.


[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
Actions
Copy link

Also available in: PDF Atom

Loading...
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.