Hi Loris,

"Loris Bennett" <[email protected]> writes:

> Hi Xiyue,
>
> Xiyue Deng <[email protected]> writes:
>
>> Hi Loris,
>>
>> "Loris Bennett" <[email protected]> writes:
>>
>>> Hi,
>>>
>>> I am on Debian 13 and am trying to install the Python language grammar for
>>> tree sitter.  IIUC there is some ABI issue regarding the installed version 
>>> of
>>> libtree-sitter (on Debian 13: 0.22.6) and the version of the language 
>>> grammar
>>> one can install.
>>>
>>> However I have tried multiple versions of the grammar, from the very old to
>>> the most recent and always get the error:
>>>
>>>   Warning (treesit): The installed language grammar for python cannot be 
>>> located or has problems (version-mismatch): 15
>>>
>>> What am I doing wrong?
>>>
>>
>> tree-sitter transitioned to ABI 15 since 0.23.x, which explains why you
>> are seeing this issue on Trixie which has 0.22.6 as you've discovered.
>> This would not be an issue if you regenerate everything in the language
>> source code, but Emacs only cares about the generated parser code
>> (usually src/parser.c and src/scanner.c), and if the release you use is
>> generated using a newer tree-sitter you'll see this issue.
>>
>> A simple fix is to find the last release that was generated with
>> tree-sitter on ABI 14.  For python, you can add the following to your
>> init.el (I'm using boxquote and you can remove the prefixes using `M-x
>> boxquote-unbox-region'):
>>
>> ,----[ tree-sitter-python for ABI 14 ]
>> | (add-to-list 'treesit-language-source-alist
>> |              `((python "https://github.com/tree-sitter/tree-sitter-python";
>> |                        ,(if (< (treesit-library-abi-version) 15)
>> |                             "v0.23.6"
>> |                           "master"))))
>> `----
>>
>> Hopefully we'll have some tree-sitter grammars shipped in Forky so that
>> users can use the *-ts-mode without such hassle.
>
> Unfortunately the snippet above doesn't help.  I still get the version
> mismatch error.  Even if I specify v0.23.6 explicitly when asked for the tag
> or branch, an ABI 15 version of the grammar is still seems to be built.  I
> even tried the oldest tag, v0.0.2, but still got the same error.
>
> I'm not sure what is going on.  The shared object files themselves certainly
> seem to differ (I renamed the file generated with the tag v0.0.2):
>
>   [17:03:16] loris (2021) ~/.emacs.d.work/tree-sitter
>   $ ll
>   total 1236
>   -rwxr-xr-x 1 loris users 777056 Feb 11 16:58 libtree-sitter-python.0.0.2.so
>   -rwxr-xr-x 1 loris users 484112 Feb 11 17:01 libtree-sitter-python.so
>
> Any ideas?
>

If you have previously tried to compile a grammar library of ABI 15, it
will produce a libtree-sitter-python.so anyway but fails to load in
Emacs.  And after that, if you tried to compile a grammar library of ABI
14, it will show the same ABI mismatch error, but the produced
libtree-sitter-python.so is actually correct and usable (at least this
is what I observe on my Trixie system: I can enable python-ts-mode on a
.py file just fine after this.)

You can also try to remove the libtree-sitter-python.so file first,
restart Emacs, and install the grammar again, which should then produce
no errors.

Let me know if any of these works (or not).

> Cheers,
>
> Loris
>
>> P.S. For people using treesit-auto, I've been using a
>> treesit-language-source-alist setting that should work with Trixie for
>> most of the incompatible grammars that it supports.  Hope this is
>> useful.
>>
>> Note: I have to fork some of the repos as Emacs doesn't seem to support
>> checking out a specific commit and I need to create a branch for it to
>> work.  Also tree-sitter-latex doesn't ship src/parser.c at all so I just
>> regenerated the source code manually.  If you know of a better way to
>> handle these do let me know :)
>>
>> ,----[ treesit-auto compatible settings for ABI 14 ]
>> | (setq treesit-language-source-alist
>> |       `((bash "https://github.com/tree-sitter/tree-sitter-bash";
>> |               ,(if (< (treesit-library-abi-version) 15)
>> |                    "v0.21.0"
>> |                  "master"))
>> |         (bibtex "https://github.com/manphiz/tree-sitter-bibtex";
>> |                 ,(if (< (treesit-library-abi-version) 15)
>> |                      "last-abi-14"
>> |                    "master"))
>> |         (c "https://github.com/tree-sitter/tree-sitter-c";
>> |            ,(if (< (treesit-library-abi-version) 15)
>> |                 "v0.23.1"
>> |               "master"))
>> |         (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp";
>> |                  ,(if (< (treesit-library-abi-version) 15)
>> |                       "v0.21.3"
>> |                     "master"))
>> |         (css "https://github.com/tree-sitter/tree-sitter-css";
>> |              ,(if (< (treesit-library-abi-version) 15)
>> |                   "v0.21.1"
>> |                 "master"))
>> |         (go "https://github.com/tree-sitter/tree-sitter-go";
>> |             ,(if (< (treesit-library-abi-version) 15)
>> |                  "v0.21.2"
>> |                "master"))
>> |         (gomod "https://github.com/camdencheek/tree-sitter-go-mod";
>> |                ,(if (< (treesit-library-abi-version) 15)
>> |                     "v1.1.0"
>> |                   "master"))
>> |         (janet "https://github.com/manphiz/tree-sitter-janet";
>> |                ,(if (< (treesit-library-abi-version) 15)
>> |                     "last-abi-14"
>> |                   "master"))
>> |         (javascript "https://github.com/tree-sitter/tree-sitter-javascript";
>> |                     ,(if (< (treesit-library-abi-version) 15)
>> |                          "v0.21.4"
>> |                        "master"))
>> |         (julia "https://github.com/tree-sitter/tree-sitter-julia";
>> |                ,(if (< (treesit-library-abi-version) 15)
>> |                     "v0.23.1"
>> |                   "master"))
>> |         (latex "https://github.com/manphiz/tree-sitter-latex"; 
>> "manual-abi-14")
>> |         (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua";
>> |              ,(if (< (treesit-library-abi-version) 15)
>> |                   "v0.3.0"
>> |                 "master"))
>> |         (magik "https://github.com/krn-robin/tree-sitter-magik";
>> |                ,(if (< (treesit-library-abi-version) 15)
>> |                     "0.0.1"
>> |                   "master"))
>> |         (markdown 
>> "https://github.com/tree-sitter-grammars/tree-sitter-markdown";
>> |                   "main")
>> |         (nu "https://github.com/manphiz/tree-sitter-nu";
>> |             ,(if (< (treesit-library-abi-version) 15)
>> |                  "last-abi-14"
>> |                "master"))
>> |         (perl "https://github.com/ganezdragon/tree-sitter-perl";
>> |               ,(if (< (treesit-library-abi-version) 15)
>> |                    "v1.1.1"
>> |                  "master"))
>> |         (python "https://github.com/tree-sitter/tree-sitter-python";
>> |                 ,(if (< (treesit-library-abi-version) 15)
>> |                      "v0.23.6"
>> |                    "master"))
>> |         (rust "https://github.com/tree-sitter/tree-sitter-rust";
>> |               ,(if (< (treesit-library-abi-version) 15)
>> |                    "v0.23.3"
>> |                  "master"))
>> |         (sql "https://github.com/manphiz/tree-sitter-sql";
>> |              ,(if (< (treesit-library-abi-version) 15)
>> |                   "last-abi-14"
>> |                 "gh-pages"))
>> |         (vue "https://github.com/manphiz/tree-sitter-vue";
>> |              ,(if (< (treesit-library-abi-version) 15)
>> |                   "last-abi-14"
>> |                 "master"))
>> |         (yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml";
>> |               ,(if (< (treesit-library-abi-version) 15)
>> |                    "v0.7.2"
>> |                  "master"))))
>> `----
>>
>>> Cheers,
>>>
>>> Loris

-- 
Regards,
Xiyue Deng

Attachment: signature.asc
Description: PGP signature

Reply via email to