Skip to content

Assorted macro/rust-analyzer woes #586

@davidbarsky

Description

@davidbarsky

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:

  1. 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!
  2. 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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions