On Thu, 11 Jun 2026 12:25:19 -0500 Rob Browning <[email protected]> wrote: > James McCoy <[email protected]> writes: > > > A tree-sitter 0.26 transition is staged in experimental. Emacs currently > > fails to build against that version. > > [...] > > > Upstream has a patch[0] to address the build failure, but it doesn't > > apply cleanly against the current Debian package. > > > > [0]: > > https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/src/treesit.c?id=d587ce8c65a0e22ab0a63ef2873a3dfcfbeba1 > > OK, I'll try to take a closer look in the next week or so. > > Thanks > -- > Rob Browning > rlb @defaultvalue.org and @debian.org > GPG as of 2011-07-10 E6A9 DA3C C9FD 1FF8 C676 D2C4 C0F0 39E9 ED1B 597A > GPG as of 2002-11-03 14DD 432F AE39 534D B592 F9A0 25C8 D377 8C7E 73A4 > >
I have tried to adapt the patch to the 30.2 release and removed the chunk that caused the conflict. Please find the updated patch attached. -- Regards, Xiyue Deng
From a5d0874bcf780036c7389d0cf1fbf1658df65b29 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii <[email protected]> Date: Fri, 17 Oct 2025 14:15:41 +0300 Subject: [PATCH] Support Tree-sitter version 0.26 and later Adapted for Emacs 30.2. * src/treesit.c (init_treesit_functions) [TREE_SITTER_LANGUAGE_VERSION >= 15]: Define prototype for, and load 'ts_language_abi_version' instead of the deprecated (and removed in tree-sitter 0.26) 'ts_language_version'. (ts_language_abi_version) [TREE_SITTER_LANGUAGE_VERSION >= 15]: Define on WINDOWSNT, instead of 'ts_language_version'. (treesit_language_abi_version): New compatibility function. (treesit_load_language, Ftreesit_language_abi_version): Use 'treesit_language_abi_version' instead of 'ts_language_version'. (Bug#79627) --- src/treesit.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/treesit.c b/src/treesit.c index e2986c186b8..4d6bf9a5dbd 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -34,7 +34,11 @@ Copyright (C) 2021-2025 Free Software Foundation, Inc. # include "w32common.h" /* In alphabetical order. */ +#if TREE_SITTER_LANGUAGE_VERSION >= 15 +#undef ts_language_abi_version +#else #undef ts_language_version +#endif #undef ts_node_child #undef ts_node_child_by_field_name #undef ts_node_child_count @@ -89,7 +93,11 @@ Copyright (C) 2021-2025 Free Software Foundation, Inc. #undef ts_tree_get_changed_ranges #undef ts_tree_root_node +#if TREE_SITTER_LANGUAGE_VERSION >= 15 +DEF_DLL_FN (uint32_t, ts_language_abi_version, (const TSLanguage *)); +#else DEF_DLL_FN (uint32_t, ts_language_version, (const TSLanguage *)); +#endif DEF_DLL_FN (TSNode, ts_node_child, (TSNode, uint32_t)); DEF_DLL_FN (TSNode, ts_node_child_by_field_name, (TSNode, const char *, uint32_t)); @@ -166,7 +174,11 @@ init_treesit_functions (void) if (!library) return false; +#if TREE_SITTER_LANGUAGE_VERSION >= 15 + LOAD_DLL_FN (library, ts_language_abi_version); +#else LOAD_DLL_FN (library, ts_language_version); +#endif LOAD_DLL_FN (library, ts_node_child); LOAD_DLL_FN (library, ts_node_child_by_field_name); LOAD_DLL_FN (library, ts_node_child_count); @@ -224,7 +236,11 @@ init_treesit_functions (void) return true; } +#if TREE_SITTER_LANGUAGE_VERSION >= 15 +#define ts_language_abi_version fn_ts_language_abi_version +#else #define ts_language_version fn_ts_language_version +#endif #define ts_node_child fn_ts_node_child #define ts_node_child_by_field_name fn_ts_node_child_by_field_name #define ts_node_child_count fn_ts_node_child_count @@ -632,6 +648,22 @@ treesit_load_language_push_for_each_suffix (Lisp_Object lib_base_name, } } +/* This function is a compatibility shim. Tree-sitter 0.25 introduced + ts_language_abi_version as a replacement for ts_language_version, and + tree-sitter 0.26 removed ts_language_version. Here we use the fact + that 0.25 bumped TREE_SITTER_LANGUAGE_VERSION to 15, to use the new + function instead of the old one, when Emacs is compiled against + tree-sitter version 0.25 or newer. */ +static uint32_t +treesit_language_abi_version (const TSLanguage *ts_lang) +{ +#if TREE_SITTER_LANGUAGE_VERSION >= 15 + return ts_language_abi_version (ts_lang); +#else + return ts_language_version (ts_lang); +#endif +} + /* Load the dynamic library of LANGUAGE_SYMBOL and return the pointer to the language definition. @@ -817,7 +849,7 @@ DEFUN ("treesit-language-abi-version", Ftreesit_language_abi_version, &signal_data); if (ts_language == NULL) return Qnil; - uint32_t version = ts_language_version (ts_language); + uint32_t version = treesit_language_abi_version (ts_language); return make_fixnum((ptrdiff_t) version); } } -- 2.53.0
signature.asc
Description: PGP signature

