class RubyVM::AbstractSyntaxTree::Node
RubyVM::AbstractSyntaxTree::Node экземпляры создаются методами разбора в RubyVM::AbstractSyntaxTree.
Публичные методы экземпляров
static VALUE
rb_ast_node_children(VALUE self)
{
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
return node_children(data->ast, data->node);
} Возвращает узлы дерева абстрактного синтаксиса (AST), находящиеся ниже этого. Каждый тип узла имеет разные дочерние элементы, в зависимости от его типа.
Возвращаемый массив может содержать другие узлы или nil.
static VALUE
rb_ast_node_first_column(VALUE self)
{
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
return INT2NUM(nd_first_column(data->node));
} Номер столбца в исходном коде, где начался текст этого узла AST.
static VALUE
rb_ast_node_first_lineno(VALUE self)
{
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
return INT2NUM(nd_first_lineno(data->node));
} Номер строки в исходном коде, где начался текст этого узла AST.
static VALUE
rb_ast_node_inspect(VALUE self)
{
VALUE str;
VALUE cname;
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
cname = rb_class_path(rb_obj_class(self));
str = rb_str_new2("#<");
rb_str_append(str, cname);
rb_str_catf(str, ":%s@%d:%d-%d:%d>",
node_type_to_str(data->node),
nd_first_lineno(data->node), nd_first_column(data->node),
nd_last_lineno(data->node), nd_last_column(data->node));
return str;
} Возвращает отладочную информацию об этом узле в виде строки.
static VALUE
rb_ast_node_last_column(VALUE self)
{
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
return INT2NUM(nd_last_column(data->node));
} Номер столбца в исходном коде, где закончился текст этого узла AST.
static VALUE
rb_ast_node_last_lineno(VALUE self)
{
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
return INT2NUM(nd_last_lineno(data->node));
} Номер строки в исходном коде, где закончился текст этого узла AST.
# File lib/pp.rb, line 531
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])
else
pretty_print_children(q)
end
}
end # File lib/pp.rb, line 518
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 static VALUE
rb_ast_node_type(VALUE self)
{
struct ASTNodeData *data;
TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
return rb_sym_intern_ascii_cstr(node_type_to_str(data->node));
} Возвращает тип этого узла в виде символа.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
root.type # => :SCOPE
call = root.children[2]
call.type # => :OPCALL
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.