emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Questions about tree-sitter


From: BTuin
Subject: Re: Questions about tree-sitter
Date: Wed, 13 Sep 2023 14:43:09 +0200
User-agent: Mozilla Thunderbird

Le 12/09/2023 à 02:22, Yuan Fu a écrit :


On Sep 9, 2023, at 9:39 AM, Augustin Chéneau (BTuin) <btuin@mailo.com> wrote:

Le 08/09/2023 à 18:43, Yuan Fu a écrit :
On Sep 8, 2023, at 4:53 AM, Augustin Chéneau (BTuin) <btuin@mailo.com> wrote:

Le 06/09/2023 à 06:07, Yuan Fu a écrit :
I added local parser support to master. If everything goes right, you just need 
to add a :local t flag in treesit-range-rules. Check out the modified 
bision-ts-mode.el that I hacked up for an example. BTW, it’s vital that you 
define treesit-language-at-point-function for a multi-language mode.
Yuan

Thanks a lot!

I did some tests and it's working pretty well.
Awesome!


It seems I spoke a bit too soon  :(
When I edit the buffer, sometimes there is an offset between the text and the 
nodes after modifying the buffer, or the syntax highlighting breaks in C code.

I attached an example Bison file if needed.

Thanks. I was able to reproduce this, but then can’t. I’ll keep looking into 
this, if you found out something new please let me know.


It may be unrelated, but I have this popping in *Messages* sometimes:

Error during redisplay: (jit-lock-function 1410) signaled (treesit-load-language-error not-found ("libtree-sitter-nil" "libtree-sitter-nil.0" "libtree-sitter-nil.0.0" "libtree-sitter-nil.so" "libtree-sitter-nil.so.0" "libtree-sitter-nil.so.0.0") "No such file or directory")



I have a few issues though:

- I first defined `treesit-language-at-point-function` using
`treesit-node-at`.  However, `treesit-node-at` itself uses
`treesit-language-at-point-function` which causes an infinite recursion.
So I instead used `treesit-local-parsers-at` to check if a local parser is 
used.  Is it a good solution?
No no, you should use the host langauge’s parser (bison) and see if point is in 
an undelimited_code_block, and return c or bison accordingly. I’m highlight 
this in the docstring, thanks.

So I need to call `treesit-node-at` with `'bison` as the value for 
PARSER-OR-LANG to see in which node I am?
Then I think there is a problem with `treesit-node-at`, because it always call 
`treesit-language-at` even if PARSER-OR-LANG is provided.
I propose a fix in the attached patch.

You are right. I applied a similar fix. It should be good now. Thanks!

Thanks!






reply via email to

[Prev in Thread] Current Thread [Next in Thread]