rust-lang / rust-lang/rust-analyzer

Improve `Semantics` construction performance

Open
#17,116 6 comments 1 reaction 1 assignee View on GitHub

@bit-aloo is already working on this.

Since Mar 4, 2025.

A-hir A-ide A-perf E-medium
Dominant language
Rust
Stars
16.9k
Forks
2.2k
Avg merge
1d 12h
Merged PRs (30d)
72

Description

hir::Semantics is a general cache used to be able to resolve any syntax node to its semantic definition. This is generally slow given the kind of work it does, but quite often we do a lot more work than necessary, populating unnecessary DynMap tables and more importantly, we populate it via parsing, where the parsing happens through direct database calls, even though the Semantics itself caches these. That means for big enough files we can end up with thrashing the LRU cache a fair bit. We should fix that, a related problem is the HasSource trait going through the database instead of Semantics which means we can end up with nodes not cached by Semantics ultimately ending up in panics when it tries to lookup stuff (which has happened in the past).

So the things that need to be changed are:

This will most likely require adding callbacks to some of the hir-def crate APIs to abstract away the parsing (and then add / keep the current APIs as convenience APIs where Semantics won't be involved).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.