-
Notifications
You must be signed in to change notification settings - Fork 184
Description
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 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! - 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!