unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Gregory Heytings <gregory@heytings.org>
Cc: wkirschbaum@gmail.com, Eli Zaretskii <eliz@gnu.org>,
	casouri@gmail.com, 62333@debbugs.gnu.org
Subject: bug#62333: 30.0.50; Issue with tree-sitter syntax tree during certain changes
Date: Tue, 28 Mar 2023 02:20:09 +0300	[thread overview]
Message-ID: <683e0eb4-8f36-b8bd-ab0b-022845cafdac@yandex.ru> (raw)
In-Reply-To: <728618716b8c5349d27e@heytings.org>

On 27/03/2023 11:24, Gregory Heytings wrote:
> 
>>>>> Again, I'm talking about using a parser library.  We may need to 
>>>>> introduce a way of limiting the parser to a certain range of buffer 
>>>>> text positions, independently of narrowing.
>>>>
>>>> Except it's already limited by narrowing.
>>>
>>> Which is a fragile, semi-broken means, as we all know.
>>
>> What is a broken mess, is user-level narrowing. And how the downstream 
>> code can never guess the purpose the narrowing was applied for.
>>
> 
> Note that this is what labeled narrowings attempts to solve.  It's 
> perhaps not the best way to deal with code that has existed for a long 
> time (because such code is not prepared to handle that kind of narrowing 
> gracefully), but I don't see why it couldn't be used in new code/modes 
> such as tree-sitter ones.  It is independent of user-level narrowing, 
> and downstream code can act differently depending on the reason for 
> which the narrowing was applied.

It indeed sounds like something we had considered before: different 
types of narrowing (at the time we only wanted to distinguish between 
two types: "soft" and "hard", the latter for use by mixed-mode features, 
or other stuff which wanted to preclude full widening, such as Info). 
But that fizzled out on the prototyping stage.

(Aside: tree-sitter itself has its own support for "ranges", which will 
work without any narrowing related stuff as long as grammars for all 
langs are available -- or perhaps the combination should be available as 
a grammar too, I'm not sure -- anyway, it doesn't need much help, but it 
would still be nice to support embedding tree-sitter managed code inside 
"regular" modes, or have better support for mixing said regular modes, 
something we already do.)

The new narrowing feature with labels kind of resembles that, except if 
I'm thinking about "intents", I could probably enumerate "visual" (for 
interactive narrowing), "hard" (for mixed-mode stuff or Info), or... 
"movement" (simply performed to constrain movement, but without goal to 
alter the parsing context -- such as narrowing before calling 
forward-sexp, in blink-matching-paren's example). These could be 
documented and assigned relative depth, sorting them like "hard > 
movement > visual", where code willing to undo "movement" would 
naturally undo "visual" as well, and code will to undo "hard" narrowing 
would undo them all.

How treesit-forward-sexp would handle "movement" narrowing is something 
up for discussion, though: maybe just ignore it (given that there is no 
performance tax), or maybe it would still perform a position check at 
the end (after finding the matching paren), to see if it ends up beyond 
the accessible region.





  parent reply	other threads:[~2023-03-27 23:20 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21 14:00 bug#62333: 30.0.50; Issue with tree-sitter syntax tree during certain changes Wilhelm Kirschbaum
2023-03-23  1:03 ` Dmitry Gutov
2023-03-23  3:03   ` Yuan Fu
2023-03-23  4:20     ` Dmitry Gutov
2023-03-23  7:13       ` Eli Zaretskii
2023-03-23 21:18         ` Yuan Fu
2023-03-23 21:30           ` Dmitry Gutov
2023-03-23 22:06           ` Dmitry Gutov
2023-03-23 23:59             ` Yuan Fu
2023-03-24  6:05               ` Eli Zaretskii
2023-03-24  7:34                 ` Yuan Fu
2023-03-25  1:51                   ` Dmitry Gutov
2023-03-25 12:34                     ` Eli Zaretskii
2023-03-25 13:00                       ` Dmitry Gutov
2023-03-25 13:14                         ` Eli Zaretskii
2023-03-25 13:44                           ` Dmitry Gutov
2023-03-25 14:09                             ` Eli Zaretskii
2023-03-25 14:18                               ` Dmitry Gutov
2023-03-25 14:41                                 ` Eli Zaretskii
2023-03-25 15:25                                   ` Dmitry Gutov
2023-03-25 15:57                                     ` Eli Zaretskii
2023-03-25 16:03                                       ` Dmitry Gutov
2023-03-25 16:24                                         ` Eli Zaretskii
2023-03-25 17:05                                           ` Dmitry Gutov
2023-03-25 17:40                                             ` Eli Zaretskii
2023-03-25 19:31                                               ` Yuan Fu
2023-03-25 23:29                                                 ` Dmitry Gutov
2023-03-26 22:52                                                   ` Yuan Fu
2023-03-27  1:29                                                     ` Dmitry Gutov
2023-03-26  4:28                                                 ` Eli Zaretskii
2023-03-26 22:57                                                   ` Yuan Fu
2023-03-27 13:32                                                     ` Eli Zaretskii
2023-03-27 18:43                                                       ` Yuan Fu
2023-03-25 22:57                                               ` Dmitry Gutov
2023-03-26  5:04                                                 ` Eli Zaretskii
2023-03-26  9:25                                                   ` Dmitry Gutov
2023-03-26 10:01                                                     ` Eli Zaretskii
2023-03-26 22:00                                                       ` Dmitry Gutov
2023-03-27  8:24                                                         ` Gregory Heytings
2023-03-27 13:39                                                           ` Eli Zaretskii
2023-03-27 20:05                                                             ` Gregory Heytings
2023-03-28 11:30                                                               ` Eli Zaretskii
2023-03-28 11:39                                                                 ` Gregory Heytings
2023-03-28 12:11                                                                   ` Eli Zaretskii
2023-03-28 12:25                                                                     ` Gregory Heytings
2023-03-28 12:36                                                                       ` Eli Zaretskii
2023-03-27 23:06                                                             ` Dmitry Gutov
2023-03-28 11:32                                                               ` Eli Zaretskii
2023-03-28 21:08                                                                 ` Dmitry Gutov
2023-03-29 11:08                                                                   ` Eli Zaretskii
2023-03-31  1:10                                                                     ` Dmitry Gutov
2023-03-31  1:27                                                                       ` Dmitry Gutov
2023-03-31  6:19                                                                       ` Eli Zaretskii
2023-03-31  7:46                                                                         ` Eli Zaretskii
2023-03-31 12:38                                                                           ` Dmitry Gutov
2023-03-31 13:03                                                                             ` Eli Zaretskii
2023-03-31 13:26                                                                               ` Dmitry Gutov
2023-03-31 12:46                                                                         ` Dmitry Gutov
2023-03-31 13:06                                                                           ` Eli Zaretskii
2023-03-31 18:43                                                                           ` Yuan Fu
2023-04-01  1:53                                                                             ` Dmitry Gutov
2023-04-01  5:47                                                                             ` Eli Zaretskii
2023-04-01 16:12                                                                               ` Dmitry Gutov
2023-04-02 22:08                                                                               ` Yuan Fu
2023-04-03 12:31                                                                                 ` Eli Zaretskii
2023-03-27 23:20                                                           ` Dmitry Gutov [this message]
2023-03-27 13:29                                                         ` Eli Zaretskii
2023-03-27 23:33                                                           ` Dmitry Gutov
2023-03-28 11:38                                                             ` Eli Zaretskii
2023-03-28 21:19                                                               ` Dmitry Gutov
2023-03-29 11:17                                                                 ` Eli Zaretskii
2023-03-30 15:50                                                                   ` Gregory Heytings
2023-03-30 16:04                                                                     ` Eli Zaretskii
2023-03-30 16:28                                                                       ` Gregory Heytings
2023-03-30 16:40                                                                         ` Eli Zaretskii
2023-03-30 17:27                                                                           ` Gregory Heytings
2023-03-30 17:47                                                                             ` Eli Zaretskii
2023-03-30 20:14                                                                               ` Gregory Heytings
2023-03-30 22:08                                                                                 ` Gregory Heytings
2023-03-31  6:15                                                                                   ` Eli Zaretskii
2023-03-31  1:25                                                                       ` Dmitry Gutov
2023-03-31  6:22                                                                         ` Eli Zaretskii
2023-03-31  1:17                                                                   ` Dmitry Gutov

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=683e0eb4-8f36-b8bd-ab0b-022845cafdac@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=62333@debbugs.gnu.org \
    --cc=casouri@gmail.com \
    --cc=eliz@gnu.org \
    --cc=gregory@heytings.org \
    --cc=wkirschbaum@gmail.com \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).