diff --git a/src/treesit.c b/src/treesit.c index 7393404f7ea..e2986c186b8 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -2043,7 +2043,9 @@ If NODE is nil, return nil. */) treesit_initialize (); TSNode treesit_node = XTS_NODE (node)->node; - /* ts_node_type could return NULL, see source code. */ + /* ts_node_type could return NULL, see source code (tree-sitter can't + find the string name of a node type by its id in its node name + obarray). */ const char *type = ts_node_type (treesit_node); return type == NULL ? Vtreesit_str_empty : build_string (type); } @@ -3595,6 +3597,10 @@ treesit_traverse_match_predicate (TSTreeCursor *cursor, Lisp_Object pred, if (STRINGP (pred)) { const char *type = ts_node_type (node); + /* ts_node_type returning NULL means something unexpected happend + in tree-sitter, in this case the only reasonable thing is to + not match anything. */ + if (type == NULL) return false; return fast_c_string_match (pred, type, strlen (type)) >= 0; } else if (FUNCTIONP (pred)) @@ -3632,6 +3638,10 @@ treesit_traverse_match_predicate (TSTreeCursor *cursor, Lisp_Object pred, { /* A bit of code duplication here, but should be fine. */ const char *type = ts_node_type (node); + /* ts_node_type returning NULL means something unexpected + happend in tree-sitter, in this case the only reasonable + thing is to not match anything */ + if (type == NULL) return false; if (!(fast_c_string_match (car, type, strlen (type)) >= 0)) return false;