Class: TreeSitter::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/tree-sitter/node.rb,
ext/tree-sitter/node.c

Defined Under Namespace

Classes: Point

Instance Method Summary collapse

Instance Method Details

#child(child_index) ⇒ Object

Public: Return the child at the specified index.

Returns a TreeSitter::Node or nil.



213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'ext/tree-sitter/node.c', line 213

VALUE rb_node_child(VALUE self, VALUE child_index)
{
  Check_Type(child_index, T_FIXNUM);
  uint32_t i = NUM2UINT(child_index);

  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  uint32_t child_count = ts_node_child_count(node->ts_node);

  if (i > child_count) {
    return Qnil;
  } else {
    TSNode child = ts_node_child(node->ts_node, i);
    return rb_new_node(child, node->ts_document);
  }
}

#child_countObject

Public: The number of named and unnamed children.

Returns an Integer.



103
104
105
106
107
108
109
110
111
112
113
# File 'ext/tree-sitter/node.c', line 103

VALUE rb_node_child_count(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  if (node->ts_node.data) {
    return UINT2NUM(ts_node_child_count(node->ts_node));
  } else {
    return UINT2NUM(0);
  }
}

#childrenObject



5
6
7
# File 'lib/tree-sitter/node.rb', line 5

def children
  child_count.times.map { |i| child(i) }
end

#end_positionObject

Public: Get the ending position for a node.

Returns a Point.



72
73
74
75
76
77
78
79
80
81
82
83
# File 'ext/tree-sitter/node.c', line 72

VALUE rb_node_end_point(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  TSPoint start = ts_node_end_point(node->ts_node);

  Point *point = malloc(sizeof(Point));
  point->ts_point = start;

  return Data_Wrap_Struct(rb_cPoint, NULL, rb_point_free, point);
}

#first_childObject

Public: Return the first child.

Returns a TreeSitter::Node or nil.



137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'ext/tree-sitter/node.c', line 137

VALUE rb_node_first_child(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  TSNode child = ts_node_child(node->ts_node, 0);

  if (child.data) {
    return rb_new_node(child, node->ts_document);
  } else {
    return Qnil;
  }
}

#first_named_childObject

Public: Return the first named child.

Returns a TreeSitter::Node or nil.



156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'ext/tree-sitter/node.c', line 156

VALUE rb_node_first_named_child(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  TSNode child = ts_node_named_child(node->ts_node, 0);

  if (child.data) {
    return rb_new_node(child, node->ts_document);
  } else {
    return Qnil;
  }
}

#last_childObject

Public: Return the last named child.

Returns a TreeSitter::Node or nil.



194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'ext/tree-sitter/node.c', line 194

VALUE rb_node_last_named_child(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  uint32_t child_count = ts_node_named_child_count(node->ts_node);
  if (child_count > 0) {
    TSNode child = ts_node_named_child(node->ts_node, child_count - 1);
    return rb_new_node(child, node->ts_document);
  } else {
    return Qnil;
  }
}

#last_named_childObject

Public: Return the last named child.

Returns a TreeSitter::Node or nil.



194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'ext/tree-sitter/node.c', line 194

VALUE rb_node_last_named_child(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  uint32_t child_count = ts_node_named_child_count(node->ts_node);
  if (child_count > 0) {
    TSNode child = ts_node_named_child(node->ts_node, child_count - 1);
    return rb_new_node(child, node->ts_document);
  } else {
    return Qnil;
  }
}

#named?Boolean

Public: Does the node have a name?

Returns a Boolean.

Returns:

  • (Boolean)


90
91
92
93
94
95
96
# File 'ext/tree-sitter/node.c', line 90

VALUE rb_node_is_named(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  return ts_node_is_named(node->ts_node) ? Qtrue : Qfalse;
}

#named_child(child_index) ⇒ Object

Public: Return the named child at the specified index.

Returns a TreeSitter::Node or nil.



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# File 'ext/tree-sitter/node.c', line 236

VALUE rb_node_named_child(VALUE self, VALUE child_index)
{
  Check_Type(child_index, T_FIXNUM);
  uint32_t i = NUM2UINT(child_index);

  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  uint32_t child_count = ts_node_named_child_count(node->ts_node);

  if (i > child_count) {
    return Qnil;
  } else {
    TSNode child = ts_node_named_child(node->ts_node, i);
    return rb_new_node(child, node->ts_document);
  }
}

#named_child_countObject

Public: The number of named children.

Returns an Integer.



120
121
122
123
124
125
126
127
128
129
130
# File 'ext/tree-sitter/node.c', line 120

VALUE rb_node_named_child_count(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  if (node->ts_node.data) {
    return UINT2NUM(ts_node_named_child_count(node->ts_node));
  } else {
    return UINT2NUM(0);
  }
}

#named_childrenObject



9
10
11
# File 'lib/tree-sitter/node.rb', line 9

def named_children
  named_child_count.times.map { |i| named_child(i) }
end

#node_typeObject

Public: The node type.

Returns a String.



37
38
39
40
41
42
43
# File 'ext/tree-sitter/node.c', line 37

VALUE rb_node_type(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  return rb_str_new_cstr(ts_node_type(node->ts_node, node->ts_document));
}

#start_positionObject

Public: Get the starting position for a node.

Returns a Point.



55
56
57
58
59
60
61
62
63
64
65
# File 'ext/tree-sitter/node.c', line 55

VALUE rb_node_start_point(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  TSPoint start = ts_node_start_point(node->ts_node);
  Point *point = malloc(sizeof(Point));
  point->ts_point = start;

  return Data_Wrap_Struct(rb_cPoint, NULL, rb_point_free, point);
}

#text(input) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/tree-sitter/node.rb', line 13

def text(input)
  rows = input.lines[start_position.row..end_position.row]

  if rows.count > 1
    rows.map.with_index do |line, i|
      next line[start_position.column, -1] if i == 0
      next line[0, end_position.column] if i == rows.count - 1
      line
    end.join
  else
    rows[0][start_position.column..end_position.column - 1]
  end
end

#to_sObject

Public: Render the node and its children as a string.

Returns a String.



24
25
26
27
28
29
30
# File 'ext/tree-sitter/node.c', line 24

VALUE rb_node_to_s(VALUE self)
{
  AstNode *node;
  Data_Get_Struct(self, AstNode, node);

  return rb_str_new_cstr(ts_node_string(node->ts_node, node->ts_document));
}