unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Yuan Fu <casouri@gmail.com>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: emacs-devel <emacs-devel@gnu.org>
Subject: Re: Status update of tree-sitter features
Date: Fri, 30 Dec 2022 03:16:59 -0800	[thread overview]
Message-ID: <599B2C6F-C05F-4BB5-9509-2E07D848D573@gmail.com> (raw)
In-Reply-To: <f54a8dc2-4636-df7f-5280-9712d2a963aa@yandex.ru>



> On Dec 29, 2022, at 8:38 AM, Dmitry Gutov <dgutov@yandex.ru> wrote:
> 
> On 29/12/2022 11:21, Yuan Fu wrote:
> 
>>>>> If it's only about calls, maybe call this category funcall?
>>>> Function, property and variable are for every occurrence of them (the touted “consistent highlighting”). So there will be a bit of overlap between function, variable, and definition.
>>> 
>>> By "overlap", do you mean that font-lock rules should also have entries for variable/function definitions with category 'variable'/'function'?
>>> 
>>> In case somebody removes 'definition' from their list of enabled features but keeps 'variable' and 'function' there?
>> Basically, if you enable definition alone, you get highlight for function/variable/class definition. If you enable function/variable alone, you get highlight for all occurrence of function/variable identifiers, which would includ what definition highlights. Definition can be seen as the union of subsets of function & variable feature.
> 
> Yes, but is that classification useful enough to justify the duplication in the font-lock rules' definitions?
> 
> FWIW, I "broke" python-ts-mode in 8503b370be1, according to this definition. Sorry?
> 
> But what do we get by this particular classification?
> 
> The user will be able to disable 'definitions' and still have all function definitions highlighted? But not, say, variable definitions?
> 
> That doesn't strike me as particularly more useful than e.g. disabling 'definitions' and having all function references highlighted (but not definitions). Which we would make possible by limiting 'function' to non-definitions.

Right now you can choose to highlight:
1. Only definition identifiers, be it function, variable, class, etc
2. All function identifiers
3. All variable identifiers

There could be better features, but the existing ones still have their merits. If you want a feature that highlights only funcalls, maybe we can add them, if there are enough time & interest.

>>>>>> variable                every variable identifier
>>>>> 
>>>>> 'variable', so far, seems like the least useful. When enabled, it lights up every bit of text that remained from other matchers -- because identifier are everywhere.
>>>> Yes, but apparently people want it ;-)
>>> 
>>> Well, if they really do.
>>> 
>>> I figured that people who added this maybe haven't tested this thoroughly. And that maybe they expected the effect of that "local variables highlights" feature that some editors showcase already.
>> The purpose of the standard list is to regulate features, so if a major mode wants to support a feature in the list, it uses the definition and name from that list (rather than creating a feature with same definition but different name, or same name but different definition). If a major mode really want variable feature, they can add it, if not, they don’t have to.
> 
> Okay, I also have a different, somewhat related question.
> 
> Certain languages have a special syntax for "variables".
> 
> Ruby has @instance_variable and $global_variable -- the @ and $ are used both during assignment and for later reference.
> 
> Perl has $var and @array_var.
> 
> PHP has $local_var.
> 
> Up until now we've highlighted those with font-lock-variable-name-face. Except for @array_var in Perl, which has separate derived face. Either way, we did highlight them.
> 
> What category should we use for them in ts-based modes? If it's 'variable', then won't be highlighted by default.
> 
> If 'variable' matchers in other existing ts modes didn't include all identifiers everywhere, we could put 'variable' into level 3.
> 
> Or we could add a separate category for all those, I guess.

If a major mode thinks highlighting all variables is the best default behavior, it can support the variable feature and put it at level 3. The standard list is just a guideline.

> 
>>>>> For Emacs 29, though, I would discourage the use of 'variable’.
>>>> It’s on level 4, meaning not enabled by default, so I think it’s fine.
>>> 
>>> Fair enough. If someone wants function/property but not variable, they could fine-tune the list.
>> Right. All the features in level 4 are pretty over-the-top IMO, so simply bumping to level 4 and enable everything is probably not the way to go.
> 
> I actually considered having level 4 enabled. The punctuation faces look like 'default' without customization anyway, so it doesn't turn into angry fruit salad right away. One can stop at customizing the "brackets" face, for example.
> 
> Though I'd probably also want 'function' and 'property' highlights to use other faces, distinct from 'function-name' and 'variable-name’.

You could use level 4 and remove unwanted features, yes. I guess that works too :-)

Yuan




  reply	other threads:[~2022-12-30 11:16 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-28  9:44 Status update of tree-sitter features Yuan Fu
2022-12-28 15:40 ` Mickey Petersen
2022-12-29  0:15   ` Yuan Fu
2022-12-28 23:27 ` Dmitry Gutov
2022-12-29  0:23   ` Yuan Fu
2022-12-29  0:34     ` Dmitry Gutov
2022-12-29  9:21       ` Yuan Fu
2022-12-29 16:38         ` Dmitry Gutov
2022-12-30 11:16           ` Yuan Fu [this message]
2022-12-30 23:41             ` Dmitry Gutov
2022-12-31 22:15               ` Yuan Fu
2022-12-29  3:28     ` Stefan Monnier
2022-12-29  9:23       ` Yuan Fu
2022-12-30 14:27       ` Jostein Kjønigsen
2022-12-30 15:37         ` Eli Zaretskii

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=599B2C6F-C05F-4BB5-9509-2E07D848D573@gmail.com \
    --to=casouri@gmail.com \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    /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).