emacs-devel
[Top][All Lists]
Advanced

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

Re: Status update of tree-sitter features


From: Dmitry Gutov
Subject: Re: Status update of tree-sitter features
Date: Thu, 29 Dec 2022 18:38:24 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2

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.

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.

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'.



reply via email to

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