GNU bug report logs -
#61302
29.0.60; rust-ts-mode does not show function-invocation on field-properties
Previous Next
Reported by: jostein <at> kjonigsen.net
Date: Sun, 5 Feb 2023 20:16:01 UTC
Severity: normal
Found in version 29.0.60
Done: Dmitry Gutov <dgutov <at> yandex.ru>
Bug is archived. No further changes may be made.
Full log
Message #13 received at 61302-done <at> debbugs.gnu.org (full text, mbox):
Hi!
On 05/02/2023 22:15, Jostein Kjønigsen wrote:
> Steps to reproduce:
>
> - set font-lock level 4 to enable highlighting of function-invocations
> - create a new buffer and activate rust-ts-mode
>
> Try writing a function which invokes functions indirectly trough
> field-properties. Example below:
>
> pub fn should_handle(url: String) -> bool {
> if url.ends_with(".css")
> || url.ends_with(".js")
> || url.ends_with(".png")
> || url.ends_with(".jpg")
> {
> false
> } else {
> true
> }
> }
>
> Observe that:
>
> - ends_with() is fontified as a property-access, not as a
> function-invocation.
> - (plain function invocation is highlighted as expected though)
>
> From my preliminary inspection of the rust-ts-mode source-code, this
> seems to be because of a very general override later in the file:
>
> rust-ts-mode.el, line 248 or so:
>
> :language 'rust
> :feature 'property
> :override t
> '((field_identifier) @font-lock-property-face
> (shorthand_field_initializer (identifier) @font-lock-property-face))
>
> Dissabling "override" for this feature fixes the fontification of method
> invocations, but I haven't done enough testing to see if there are other
> unexpected side-effects.
Thanks for the report. I've installed the patch below, commit a529b0d6463.
Note that I wouldn't recommend using the level 4 straight away, because
of the 'variable' feature that's not very precise.
It's probably better to use level 3 and add the extra features you need
using treesit-font-lock-recompute-features, or use level 4 and drop
'variable'. But that's my opinion.
diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el
index 18b42b9eced..5c71a8ad461 100644
--- a/lisp/progmodes/rust-ts-mode.el
+++ b/lisp/progmodes/rust-ts-mode.el
@@ -234,6 +234,11 @@ rust-ts-mode--font-lock-settings
(use_as_clause alias: (identifier) @font-lock-type-face)
(use_list (identifier) @font-lock-type-face))
+ :language 'rust
+ :feature 'property
+ '((field_identifier) @font-lock-property-face
+ (shorthand_field_initializer (identifier) @font-lock-property-face))
+
:language 'rust
:feature 'variable
'((identifier) @font-lock-variable-name-face
@@ -245,12 +250,6 @@ rust-ts-mode--font-lock-settings
:override t
'((escape_sequence) @font-lock-escape-face)
- :language 'rust
- :feature 'property
- :override t
- '((field_identifier) @font-lock-property-face
- (shorthand_field_initializer (identifier) @font-lock-property-face))
-
:language 'rust
:feature 'error
:override t
This bug report was last modified 2 years and 91 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.