I noticed a few issues with Salsa's macro that impact the accuracy of rust-analyzer's semantic highlighting. While the syntax theme that I'm using has support for semantic highlighting (so there's more bandwidth for the syntax highlighting to look slightly off), I confirmed the weirdness using a VS Code command called "Developer: Inspect Editor Tokens and Scopes" to determine just exactly how slightly off the different tokens are. Using tests/is_send_sync.rs as an example:
The struct keyword in struct MyInput, struct MyTracked<'db>, and struct MyInterned<'db> is reported as function, not a keyword.
a. The lifetimes in the tracked and interned structs are reported as functions, not lifetimes.
b. the field named field on MyInput is reported to be variable, not a property.
c. The fields on MyTracked and MyInterned are reported to be methods, not fields. Arguably, this is the correct decision!
the tracked function fn test(db: &dyn Database, input: MyInput)'s name ("test") is reported as a struct, not a function.
In tests/input_field_durability.rs on struct MyInput, the field types (bool and usize) are reported as unresolved references, not primitives.
I think it'd be good to resolve these either in Salsa or rust-analyzer since it's part of Salsa's fit-and-finish and these token mismatches might larger, more subtle issues in how rust-analyzer handles Salsa.
On the plus side, go-to-def/find-references on Salsa-annotated functions and structs work!
I noticed a few issues with Salsa's macro that impact the accuracy of rust-analyzer's semantic highlighting. While the syntax theme that I'm using has support for semantic highlighting (so there's more bandwidth for the syntax highlighting to look slightly off), I confirmed the weirdness using a VS Code command called "Developer: Inspect Editor Tokens and Scopes" to determine just exactly how slightly off the different tokens are. Using
tests/is_send_sync.rs
as an example:struct
keyword instruct MyInput
,struct MyTracked<'db>
, andstruct MyInterned<'db>
is reported as function, not a keyword. a. The lifetimes in the tracked and interned structs are reported as functions, not lifetimes. b. the field namedfield
onMyInput
is reported to be variable, not a property. c. The fields onMyTracked
andMyInterned
are reported to be methods, not fields. Arguably, this is the correct decision!fn test(db: &dyn Database, input: MyInput)
's name ("test") is reported as a struct, not a function.In
tests/input_field_durability.rs
onstruct MyInput
, the field types (bool
andusize
) are reported as unresolved references, not primitives.I think it'd be good to resolve these either in Salsa or rust-analyzer since it's part of Salsa's fit-and-finish and these token mismatches might larger, more subtle issues in how rust-analyzer handles Salsa.
On the plus side, go-to-def/find-references on Salsa-annotated functions and structs work!