Function: treesit-node-match-p
treesit-node-match-p is a function defined in treesit.c.
Signature
(treesit-node-match-p NODE PREDICATE &optional IGNORE-MISSING)
Documentation
Check whether NODE matches PREDICATE.
PREDICATE can be a symbol representing a thing in
treesit-thing-settings, or a predicate, like regexp matching node
type, etc. See treesit-thing-settings for more details.
Return non-nil if NODE matches PREDICATE, nil otherwise. If NODE is nil, return nil.
Signals treesit-invalid-predicate if there's no definition of THING
in treesit-thing-settings, or if PREDICATE is malformed. If
IGNORE-MISSING is non-nil, don't signal an error for missing THING
definition, but still signal for malformed PREDICATE.
Source Code
// Defined in /usr/src/emacs/src/treesit.c
{
if (NILP (node)) return Qnil;
CHECK_TS_NODE (node);
Lisp_Object parser = XTS_NODE (node)->parser;
Lisp_Object language = XTS_PARSER (parser)->language_symbol;
Lisp_Object signal_data = Qnil;
if (!treesit_traverse_validate_predicate (predicate, language,
&signal_data, 0))
{
Lisp_Object err_symbol = XCAR (signal_data);
Lisp_Object data = XCDR (signal_data);
if (!NILP (ignore_missing)
&& EQ (err_symbol, Qtreesit_predicate_not_found))
return Qnil;
xsignal1 (err_symbol, data);
}
TSTreeCursor cursor = ts_tree_cursor_new (XTS_NODE (node)->node);
specpdl_ref count = SPECPDL_INDEX ();
record_unwind_protect_ptr (treesit_traverse_cleanup_cursor, &cursor);
bool match = false;
match = treesit_traverse_match_predicate (&cursor, predicate,
parser, false);
unbind_to (count, Qnil);
return match ? Qt : Qnil;
}