summaryrefslogtreecommitdiff
path: root/src/fns.c
diff options
context:
space:
mode:
authorYuan Fu <casouri@gmail.com>2023-01-12 17:07:21 -0800
committerYuan Fu <casouri@gmail.com>2023-01-12 17:11:38 -0800
commit956889d8ff1c79db45ca9b1711f406961e71c272 (patch)
tree4d44cc819db4ff7433ac2a02bf61f693182de00f /src/fns.c
parent8f446c2d39736d752829e37100eede3f484b827e (diff)
downloademacs-956889d8ff1c79db45ca9b1711f406961e71c272.tar.gz
Equal now recognizes tree-sitter nodes (bug#60659)
Now equal uses ts_node_eq to check equality between nodes. * doc/lispref/parsing.texi: (Accessing Node Information): Update manual. * src/fns.c (internal_equal): Handle tree-sitter nodes. * src/treesit.c (treesit_node_eq): New function. (Ftreesit_node_eq): Factor out. Update docstring. * src/treesit.h (treesit_node_eq): Declare new function.
Diffstat (limited to 'src/fns.c')
-rw-r--r--src/fns.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/fns.c b/src/fns.c
index 1aaf17914a2..d5f7565d3d7 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -38,6 +38,10 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "puresize.h"
#include "gnutls.h"
+#ifdef HAVE_TREE_SITTER
+#include "treesit.h"
+#endif
+
enum equal_kind { EQUAL_NO_QUIT, EQUAL_PLAIN, EQUAL_INCLUDING_PROPERTIES };
static bool internal_equal (Lisp_Object, Lisp_Object,
enum equal_kind, int, Lisp_Object);
@@ -2822,6 +2826,10 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, enum equal_kind equal_kind,
&& !memcmp (bool_vector_data (o1), bool_vector_data (o2),
bool_vector_bytes (size)));
}
+ if (TS_NODEP (o1))
+ {
+ return treesit_node_eq (o1, o2);
+ }
/* Aside from them, only true vectors, char-tables, compiled
functions, and fonts (font-spec, font-entity, font-object)