Subject: Re: bug#61205: 'function' in 3rd element of treesit-font-lock-feature-list

From: Dmitry Gutov <[email-masked]>
Date: Thu, 2 Feb 2023 13:11:30 +0200

On 02/02/2023 05:29, Randy Taylor wrote:
> On Wednesday, February 1st, 2023 at 21:44, Dmitry Gutov <[email-masked]> wrote:
>> On 02/02/2023 04:34, Randy Taylor wrote:
>>
>>> On Tuesday, January 31st, 2023 at 21:08, Dmitry [email-masked] wrote:
>>>
>>>> X-Debbugs-Cc: Yuan [email-masked], Randy [email-masked]
>>>>
>>>> Some new built-in modes has 'function' feature highlighting thus enabled
>>>> by default.
>>>>
>>>> rust-ts-mode, go-ts-mode, cmake-mode
>>>>
>>>> Should we move it to 4 for consistency with the rest?
>>>>
>>>> Previously, we talked about that and concluded that function calls are
>>>> usually everywhere and are easy to notice without additional highlighting.
>>>> If that's what folks decided on then we should keep everything consistent.
>>>
>>> Personally, I find it odd that out of the box default highlighting wouldn't highlight function calls.
>>
>>
>> I think that's more useful in some languages, and less in others.
> 
> Sure, and people will have different opinions on it too. But I still think out of the box we should be highlighting most things like other editors do.

Perhaps we should have an extra level between 3 (highlight sparingly 
like other Emacs modes do) and 4 (highlight everything including stuff 
that doesn't always look great).

> It's easy enough to take out what you don't like.

Note that in this case "taking out" some things uncovered that the 
highlighting really isn't great in a different configuration.

>> I guess we settled on this particular convention to be more consistent
>> with existing major modes in Emacs. But I can see how it can be
>> appealing, especially in languages with more complex syntax such as Rust.
>>
>> Same for 'property'.
>>
>> The one feature that I'm fairly certain is currently useless is
>> 'variable', because we don't have any variable scope tracking (yet), and
>> the grammars don't do it for us. So too many tokens get highlighted with
>> font-lock-variable-name-face. Try the current rust-ts-mode, for example:
>> almost everything ends up with that face.
> 
> If anything that isn't a variable is getting highlighted, then that's a bug. Anything it's catching that isn't a variable can probably be dealt with similar to how token_tree is dealt with.

With a list of exceptions? I hadn't thought about that. But it sounds 
like it might be a fair amount of work. Depends on the specific grammar, 
of course.

Note that you'd also need to add such rules for every "feature" that 
might be disabled by the user, for its identifier tokens not to start 
being highlighted as a variable (if the user kept 'variable' in the 
features list). That's the current design we're working off.

And tree-sitter has a recommended mechanism for highlighting locals. We 
just haven't implemented it yet.