[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Disable tree-sitter font-locking for smaller ranges
From: |
Yuan Fu |
Subject: |
Re: Disable tree-sitter font-locking for smaller ranges |
Date: |
Sun, 16 Oct 2022 22:04:58 -0700 |
> On Oct 16, 2022, at 3:32 AM, Theodor Thornhill <theo@thornhill.no> wrote:
>
>
> Hi Yuan!
>
> I've been trying to tweak the font-locking for tree-sitter in
> js/ts-mode, and I'm still struggling with the template strings. Is
> there a way to _disable_ font-locking for smaller ranges?
>
> Let's say you have this string:
> ```
> `Some string with ${5+5} many template substitutions ${foo().bar().baz()}`;
> ```
>
> This string will match something like:
> ```
> (template_string (template_substitution) :*)
> ```
>
> If you use this as a query:
> ```
> (template_string) @font-lock-string-face
> ```
>
> Everything inside the string is in string-face.
>
> If you add
> ```
> (template_substitution
> "${" @font-lock-constant-face
> (_)
> "}" @font-lock-constant-face)
> ```
>
> You get font-locking in the ranges inside the squigglies, as expected.
> However, if there isn't defined any rules for say, "(), . []" etc, the
> template_string capture will bleed into the substitution, because its
> range suggests it should. It would be nice to say something like:
>
> ```
> (defvar fonts ()
> (treesit-font-lock-rules
> :language 'tsx
> :override t
> :feature 'basic
> '((template_string (_):* @disabled) @font-lock-string-face
> (template_substitution ["${" "}"] @font-lock-constant-face)))
> ```
>
> to ensure that whatever is inside the wildcard match will _not_ be
> considered for the string face, but whatever is still inside the bigger
> range will. Is this currently possible? If not, is
> it possible to add? I guess I could make a function that would remove
> the range, but that seems fiddly and error prone.
>
> I've tried fiddling with the :feature flag in 'treesit-font-lock-rules',
> but I never found a combination that did what I wanted.
>
> Adding a small image of a stupid snipped just to make the point more visual
The image you attached looks perfectly fine to me. Do you not want to font-lock
what’s inside a substitution? I’m not exactly sure what result you want to
archive.
If you don’t want font-lock in substitutions, you can put
> '((template_string) @font-lock-string-face
> (template_substitution ["${" "}"] @font-lock-constant-face))
After all other queries, and mark these two with :override t. That should do it.
Also, when I was browsing tsx’s grammar file, I didn’t find definition of
template_substitution at all. That means at least some part of js and tsx’s
grammar are not interchangeable.
Yuan
- Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/16
- Re: Disable tree-sitter font-locking for smaller ranges,
Yuan Fu <=
- Re: Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Yuan Fu, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Yuan Fu, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Yuan Fu, 2022/10/17
- Re: Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/18
- Re: Disable tree-sitter font-locking for smaller ranges, Theodor Thornhill, 2022/10/18
- Re: Disable tree-sitter font-locking for smaller ranges, Yuan Fu, 2022/10/18