Function: treesit-node-descendant-for-range
treesit-node-descendant-for-range is a function defined in treesit.c.
Signature
(treesit-node-descendant-for-range NODE BEG END &optional NAMED)
Documentation
Return the smallest node that covers buffer positions BEG to END.
The returned node is a descendant of NODE. Return nil if there is no such node. If NAMED is non-nil, look for named child only. NAMED defaults to nil. If NODE is nil, return nil.
Other relevant functions are documented in the treesit group.
Shortdoc
;; treesit
(treesit-node-descendant-for-range node 2 3)
e.g. => #<treesit-node (primitive_type) in 1-4>
Source Code
// Defined in /usr/src/emacs/src/treesit.c
{
if (NILP (node)) return Qnil;
treesit_check_node (node);
struct buffer *buf = XBUFFER (XTS_PARSER (XTS_NODE (node)->parser)->buffer);
ptrdiff_t visible_beg = XTS_PARSER (XTS_NODE (node)->parser)->visible_beg;
treesit_check_position (beg, buf);
treesit_check_position (end, buf);
treesit_initialize ();
ptrdiff_t byte_beg = buf_charpos_to_bytepos (buf, XFIXNUM (beg));
ptrdiff_t byte_end = buf_charpos_to_bytepos (buf, XFIXNUM (end));
TSNode treesit_node = XTS_NODE (node)->node;
TSNode child;
if (NILP (named))
child = ts_node_descendant_for_byte_range (treesit_node, byte_beg - visible_beg,
byte_end - visible_beg);
else
child = ts_node_named_descendant_for_byte_range (treesit_node,
byte_beg - visible_beg,
byte_end - visible_beg);
if (ts_node_is_null (child))
return Qnil;
return make_treesit_node (XTS_NODE (node)->parser, child);
}