From: Dmitry Gutov <dmitry@gutov.dev>
To: Yuan Fu <casouri@gmail.com>
Cc: Eli Zaretskii <eliz@gnu.org>,
66732@debbugs.gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>,
dominik@honnef.co
Subject: bug#66732: tree-sitter fontification doesn't update multi-line syntax reliably
Date: Wed, 20 Dec 2023 03:52:11 +0200 [thread overview]
Message-ID: <b3ec49bf-d530-74f9-75e5-9781632f41bb@gutov.dev> (raw)
In-Reply-To: <FE337722-21AE-422E-9873-46B72F578621@gmail.com>
On 19/12/2023 05:12, Yuan Fu wrote:
>
>> On Dec 17, 2023, at 10:32 AM, Dmitry Gutov<dmitry@gutov.dev> wrote:
>>
>> On 17/12/2023 03:16, Yuan Fu wrote:
>>> +(defun treesit--pre-syntax-ppss (&rest _)
>>> + "Force reparse and consequently run all notifiers.
>>> +
>>> +Similar to font-lock, we want to update the `syntax' text
>>> +property before `syntax-ppss' starts working on the text."
>>> + (treesit--pre-redisplay)
>>> + nil)
>> This callback might be the best place to inform syntax-propertize about the extended bounds which need to be re-parsed, so I'm not sure about Stefan's suggestion to return nil here.
>>
>> Even calling syntax-ppss-flush-cache wouldn't be a full solution, because that wouldn't update the value of START in syntax-propertize.
> Makes sense. Then I think a treeist function that returns the latest affected regions is in order?
But latest compared to what? To the previous invocation of the parser?
What if the current caller uses this function and expects to see changes
since time X, but some other feature already instantiated the parser
sometime between X and NOW? The callbacks which would run now would send
notifications compared to that other previous (unknown) invocation.
There could be some system which keeps checkpoints that the callers
could reference, but I'm not sure what's the best shape. And how the
older history, not needed by any callers anymore, would be evicted (some
weak hash map could work, but any caller that's not careful could create
leaks...).
And without the above, we'll need a separate callback which would call
syntax-ppss-flush-cache when the parser sends notifcations while invoked
outside of syntax-propertize-extend-region-functions. And then its code
will have to care about context anyway (inside s-p-e-r-f or not).
next prev parent reply other threads:[~2023-12-20 1:52 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-24 14:22 bug#66732: tree-sitter fontification doesn't update multi-line syntax reliably Dominik Honnef
2023-10-24 23:15 ` Dmitry Gutov
2023-10-29 12:22 ` Eli Zaretskii
2023-11-18 8:37 ` Eli Zaretskii
2023-12-11 4:16 ` Yuan Fu
2023-12-11 12:05 ` Eli Zaretskii
2023-12-11 14:35 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-11 15:53 ` Dmitry Gutov
2023-12-12 7:50 ` Yuan Fu
2023-12-12 12:43 ` Dmitry Gutov
2023-12-13 3:28 ` Yuan Fu
2023-12-13 3:45 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-13 7:12 ` Yuan Fu
2023-12-13 14:30 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-14 1:43 ` Dmitry Gutov
2023-12-14 8:29 ` Yuan Fu
2023-12-15 1:01 ` Dmitry Gutov
2023-12-15 7:12 ` Yuan Fu
2023-12-16 5:56 ` Yuan Fu
2023-12-16 15:22 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-16 17:11 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-16 17:23 ` Dmitry Gutov
2023-12-16 17:43 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-16 19:18 ` Yuan Fu
2023-12-16 19:57 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-16 23:09 ` Dmitry Gutov
2023-12-17 1:16 ` Yuan Fu
2023-12-17 18:32 ` Dmitry Gutov
2023-12-19 3:12 ` Yuan Fu
2023-12-20 1:52 ` Dmitry Gutov [this message]
2023-12-20 5:43 ` Yuan Fu
2023-12-20 11:31 ` Dmitry Gutov
2023-12-16 23:02 ` Dmitry Gutov
2023-12-20 2:01 ` Dmitry Gutov
2023-12-20 3:08 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-16 22:56 ` Dmitry Gutov
2023-12-18 18:27 ` Dmitry Gutov
2023-12-18 19:12 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-18 19:33 ` Eli Zaretskii
2023-12-18 23:10 ` Dmitry Gutov
2023-12-19 3:22 ` Eli Zaretskii
2023-12-19 3:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-19 12:41 ` Eli Zaretskii
2023-12-19 12:44 ` Dmitry Gutov
2023-12-20 20:50 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-23 10:17 ` Eli Zaretskii
2023-12-23 18:02 ` Yuan Fu
2023-12-23 20:46 ` Dmitry Gutov
2023-12-23 20:51 ` Dmitry Gutov
2023-12-23 23:07 ` Yuan Fu
2023-12-24 2:10 ` Dmitry Gutov
2023-12-24 3:02 ` Yuan Fu
2023-12-23 20:55 ` Dmitry Gutov
2023-12-24 6:03 ` Eli Zaretskii
2024-02-08 1:40 ` Yuan Fu
2023-12-18 23:08 ` Dmitry Gutov
2023-12-20 20:50 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-12 15:34 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b3ec49bf-d530-74f9-75e5-9781632f41bb@gutov.dev \
--to=dmitry@gutov.dev \
--cc=66732@debbugs.gnu.org \
--cc=casouri@gmail.com \
--cc=dominik@honnef.co \
--cc=eliz@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.