Issue #14844 has been updated by Eregon (Benoit Daloze).


mame (Yusuke Endoh) wrote:
> As far as I understand, RubyVM module is completely different than other builtin modules.
> It exposes an access to Ruby internal for very limited purpose, such as debugging the internal, prototyping a new feature, implementing a MRI-bundled feature, etc.  No compatibility is guaranteed at all; its API will arbitrarily change along with internal change.  It is never intended for normal users to use it.  Usefulness is not a priority for the modules under RubyVM.
>
> `RubyVM::AST` does not decrease the value of the parser gem.  `RubyVM::AST` is useful to investigate how MRI looks a Ruby program, but is not useful as a general Ruby program parser; it may optimize the AST by omitting some non-significant letters and restructuring the tree structure, so the result might not correspond to the original source code literally.
> 
> In short, I think that RubyVM::AST is not what people expected.
> Users may use it just for research purpose, but must not use it in production.

@mame Could you summarize this in the documentation of `RubyVM::AbstractSyntaxTree`?

Currently, it doesn't mention anything about being not stable, being not so appropriate for source code analysis, etc:

```
AbstractSyntaxTree provides methods to parse Ruby code into
abstract syntax trees. The nodes in the tree
are instances of RubyVM::AbstractSyntaxTree::Node.
```

---

I think that such an AST module could have the potential to be portable, but it would need to be much more fledged out.
Relying on the order of `children` to access AST node fields is impractical and brittle.

I think we should have nodes with methods to access each part/field, such as ModuleDefinitionNode#body, ModuleDefinitionNode#name, etc.

----------------------------------------
Feature #14844: Future of RubyVM::AST? 
https://bugs.ruby-lang.org/issues/14844#change-77514

* Author: rmosolgo (Robert Mosolgo)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Hi! Thanks for all your great work on the Ruby language. 

I saw the new RubyVM::AST module in 2.6.0-preview2 and I quickly went to try it out. 

I'd love to have a well-documented, user-friendly way to parse and manipulate Ruby code using the Ruby standard library, so I'm pretty excited to try it out. (I've been trying to learn Ripper recently, too: https://ripper-preview.herokuapp.com/, https://rmosolgo.github.io/ripper_events/ .)

Based on my exploration, I opened a small PR on GitHub with some documentation: https://github.com/ruby/ruby/pull/1888

I'm curious though, are there future plans for this module? For example, we might: 

- Add more details about each node (for example, we could expose the names of identifiers and operators through the node classes)
- Document each node type 

I see there is a lot more information in the C structures that we could expose, and I'm interested to help out if it's valuable. What do you think? 



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>