class RubyVM::AbstractSyntaxTree::Node - RDoc Documentation

# class RubyVM::AbstractSyntaxTree::Node

`RubyVM::AbstractSyntaxTree::Node` instances are created by parse methods in `RubyVM::AbstractSyntaxTree`.

This class is MRI specific.

### Public Instance Methods

children → array click to toggle source

Returns AST nodes under this one. Each kind of node has different children, depending on what kind of node it is.

The returned array may contain other nodes or `nil`.

    # File ast.rb, line 131
    def children
      Primitive.ast_node_children
    end

first_column → integer click to toggle source

The column number in the source code where this AST’s text began.

    # File ast.rb, line 104
    def first_column
      Primitive.ast_node_first_column
    end

first_lineno → integer click to toggle source

The line number in the source code where this AST’s text began.

    # File ast.rb, line 96
    def first_lineno
      Primitive.ast_node_first_lineno
    end

inspect → string click to toggle source

Returns debugging information about this node as a string.

    # File ast.rb, line 139
    def inspect
      Primitive.ast_node_inspect
    end

last_column → integer click to toggle source

The column number in the source code where this AST’s text ended.

    # File ast.rb, line 120
    def last_column
      Primitive.ast_node_last_column
    end

last_lineno → integer click to toggle source

The line number in the source code where this AST’s text ended.

    # File ast.rb, line 112
    def last_lineno
      Primitive.ast_node_last_lineno
    end

node_id → integer click to toggle source

Returns an internal `node_id` number. Note that this is an API for ruby internal use, debugging, and research. Do not use this for any other purpose. The compatibility is not guaranteed.

    # File ast.rb, line 150
    def node_id
      Primitive.ast_node_node_id
    end

pretty_print(q) click to toggle source

    # File lib/pp.rb, line 568
    def pretty_print(q)
      q.group(1, "(#{type}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") {
        case type
        when :SCOPE
          pretty_print_children(q, %w"tbl args body")
        when :ARGS
          pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block])
        when :DEFN
          pretty_print_children(q, %w[mid body])
        when :ARYPTN
          pretty_print_children(q, %w[const pre rest post])
        when :HSHPTN
          pretty_print_children(q, %w[const kw kwrest])
        else
          pretty_print_children(q)
        end
      }
    end

pretty_print_children(q, names = []) click to toggle source

    # File lib/pp.rb, line 555
    def pretty_print_children(q, names = [])
      children.zip(names) do |c, n|
        if n
          q.breakable
          q.text "#{n}:"
        end
        q.group(2) do
          q.breakable
          q.pp c
        end
      end
    end

script_lines → array click to toggle source

Returns the original source code as an array of lines.

Note that this is an API for ruby internal use, debugging, and research. Do not use this for any other purpose. The compatibility is not guaranteed.

    # File ast.rb, line 162
    def script_lines
      Primitive.ast_node_script_lines
    end

source → string click to toggle source

Returns the code fragment that corresponds to this AST.

Note that this is an API for ruby internal use, debugging, and research. Do not use this for any other purpose. The compatibility is not guaranteed.

Also note that this API may return an incomplete code fragment that does not parse; for example, a here document following an expression may be dropped.

    # File ast.rb, line 178
    def source
      lines = script_lines
      if lines
        lines = lines[first_lineno - 1 .. last_lineno - 1]
        lines[-1] = lines[-1][0...last_column]
        lines[0] = lines[0][first_column..-1]
        lines.join
      else
        nil
      end
    end

type → symbol click to toggle source

Returns the type of this node as a symbol.

    root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
    root.type # => :SCOPE
    lasgn = root.children[2]
    lasgn.type # => :LASGN
    call = lasgn.children[1]
    call.type # => :OPCALL

    # File ast.rb, line 88
    def type
      Primitive.ast_node_type
    end