The internal TSNode
nothrow @nogc this(TSNode
tsnode);
Create a new Node.
If the passed tsnode is null, it will trigger an error in the debug mode.
static nothrow @nogc @trusted Nullable!Node
create(TSNode
tsnode);
Creates a new Node from the given nullable TSNode
| TSNode tsnode |
a C tsnode, which can be a null node. |
a Nullable!Node, which gives the node if it is not a null node, and null if it is.
Check if the Node is a null node.
Note:
this function should be only used when creating a Node with its constructor in the release mode (instead of using Node.create).
All the methods of Node already use Node.create and return a Nullable!Node.
const nothrow @nogc auto
id();
Get a numeric id for this node that is unique.
Within a given syntax tree, no two nodes have the same id. However, if
a new tree is created based on an older tree, and a node from the old
tree is reused in the process, then that node will have the same id in
both trees.
const nothrow @nogc auto
kind_id();
Get this node's type as a numerical id.
const nothrow @nogc auto
kind();
Get this node's type as a string.
const nothrow @nogc auto
language();
const nothrow @nogc auto
is_named();
Check if this node is named.
Named nodes correspond to named rules in the grammar, whereas anonymous nodes
correspond to string literals in the grammar.
const nothrow @nogc auto is_extra();
Check if this node is extra.
Extra nodes represent things like comments, which are not required the grammar,
but can appear anywhere.
const nothrow @nogc auto
has_changes();
Check if this node has been edited
const nothrow @nogc auto
has_error();
Check if this node represents a syntax error or contains any syntax errors anywhere
within it.
const nothrow @nogc auto
is_error();
Check if this node represents a syntax error.
Syntax errors represent parts of the code that could not be incorporated into a
valid syntax tree.
const nothrow @nogc auto
is_missing();
Check if this node is missing.
Missing nodes are inserted by the parser in order to recover from certain kinds of
syntax errors.
const nothrow @nogc auto
start_byte();
Get the byte offsets where this node starts
const nothrow @nogc auto
end_byte();
Get the byte offsets where this node end.
const nothrow @nogc auto
byte_range();
Get the byte range of source code that this node represents.
const nothrow @nogc auto
start_position();
Get this node's start position in terms of rows and columns.
const nothrow @nogc auto
end_position();
Get this node's end position in terms of rows and columns.
const nothrow @nogc auto
range();
Get the range of source code that this node represents, both in terms of raw bytes
and of row/column coordinates.
const nothrow @nogc auto
child(size_t
child_index);
Get the node's child at the given index, where zero represents the first
child.
This method is fairly fast, but its cost is technically log(child_index), so you
if you might be iterating over a long list of children, you should use
[Node::children] instead.
A Nulllable!Node
const nothrow @nogc auto
child_count();
Get this node's number of children
const nothrow @nogc auto
named_child(size_t
i);
Get this node's named child at the given index.
See also [Node::is_named].
This method is fairly fast, but its cost is technically log(i), so you
if you might be iterating over a long list of children, you should use
[Node::named_children] instead.
A Nulllable!Node
const nothrow @nogc auto
named_child_count();
Get this node's number of named children.
See also [Node::is_named].
const auto
child_by_field_name(string
field_name);
Get the first child with the given field name.
A Nulllable!Node
const nothrow @nogc auto
child_by_field_id(ushort
field_id);
Get the first child with the given field name.
A Nulllable!Node
const nothrow @nogc auto
children(TreeCursor*
cursor);
Iterate over this node children.
const nothrow @nogc auto
named_children(TreeCursor*
cursor);
Iterate over this node named children.
See also [Node::children].
const nothrow @nogc auto
children_by_field_id(ushort
field_id, TreeCursor*
cursor);
Iterate over this node children with a given field id.
See also [Node::children_by_field_name].
const auto
children_by_field_name(string
field_name, TreeCursor*
cursor);
Iterate over this node children with a given field name.
See also [Node::children].
const nothrow @nogc auto
has_parent();
Check if the node has a immediate parent
Note:
parent method already does this check
const nothrow @nogc auto
parent();
Get this node immediate parent.
a Nullable!Node, which gives the parent node if it has a parent, and null if the node has no parent.
const nothrow @nogc @trusted auto
nth_parent(in uint
max_nth = 2);
Find the nth parent of node. It goes up until it hits a null parent or max_nth.
| uint max_nth |
the maximum level to go up. |
A node. If the given node doesn't have a parent, it returns the node itself.
Note:
the nth might not be reached if there are no more parents.
const nothrow @nogc auto
has_next_sibling();
Check if the node has a next sibling.
Note:
next_sibling method already does this check
const nothrow @nogc auto
next_sibling();
Get this node next sibling.
A Nulllable!Node
const nothrow @nogc auto
has_prev_sibling();
Check if the node has a previous sibling.
Note:
prev_sibling method already does this check
const nothrow @nogc auto
prev_sibling();
Get this node previous sibling.
A Nulllable!Node
const nothrow @nogc auto
next_named_sibling();
Get this node next named sibling.
A Nulllable!Node
const nothrow @nogc auto
prev_named_sibling();
Get this node previous named sibling.
A Nulllable!Node
const nothrow @nogc auto
descendant_for_byte_range(uint
start, uint
end);
Get the smallest node within this node that spans the given range.
A Nulllable!Node
const nothrow @nogc auto
named_descendant_for_byte_range(uint
start, uint
end);
Get the smallest named node within this node that spans the given range.
A Nulllable!Node
const nothrow @nogc auto
descendant_for_point_range(Point
start, Point
end);
Get the smallest node within this node that spans the given range.
A Nulllable!Node
const nothrow @nogc auto
named_descendant_for_point_range(Point
start, Point
end);
Get the smallest named node within this node that spans the given range.
A Nulllable!Node
const nothrow auto
to_string();
Convert Node to string
const nothrow @nogc auto
utf8_text(string
source_code);
const nothrow @nogc auto
utf8_text(ubyte[]
source);
Convert Node to utf8 string
const nothrow @nogc auto
utf16_text(ushort[]
source);
Convert Node to utf16 string
const nothrow @nogc auto
walk();
const @nogc @trusted auto
hash();
Hash a node. This returns a unique string for this node.
const void
traverse(TreeVisitor
visitor);
Traverse this
Node and all its descendants in a top-down left to right manner while
applying the
visitor at each
Node.
const nothrow void
traverse_nothrow(TreeVisitor
visitor);
Traverse this
Node and all its descendants in a top-down left to right manner while
applying the
visitor at each
Node.
NOTE:
if you are sure that TreeVisitor is nothrow
nothrow @nogc auto
edit(const InputEdit*
edit);
Edit this node to keep it in-sync with source code that has been edited.
This function is only rarely needed. When you
edit a syntax tree with the
[Tree::
edit] method, all of the nodes that you retrieve from the tree
afterward will already reflect the
edit. You only need to use [Node::
edit]
when you have a specific
Node instance that you want to keep and continue
to use after an
edit.