From 167567407260e4c211374eb3dd25eef0157220c5 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Mon, 9 Mar 2026 11:08:57 +0100 Subject: [PATCH] Do not re-query source roots per crate in analysis-stats --- .../rust-analyzer/crates/base-db/src/editioned_file_id.rs | 2 +- src/tools/rust-analyzer/crates/ide/src/typing.rs | 5 ++--- .../crates/rust-analyzer/src/cli/analysis_stats.rs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/tools/rust-analyzer/crates/base-db/src/editioned_file_id.rs b/src/tools/rust-analyzer/crates/base-db/src/editioned_file_id.rs index db3730bccdf4..8721f3a0ff3b 100644 --- a/src/tools/rust-analyzer/crates/base-db/src/editioned_file_id.rs +++ b/src/tools/rust-analyzer/crates/base-db/src/editioned_file_id.rs @@ -1,5 +1,5 @@ //! Defines [`EditionedFileId`], an interned wrapper around [`span::EditionedFileId`] that -//! is interned (so queries can take it) and remembers its crate. +//! is interned (so queries can take it) and stores only the underlying `span::EditionedFileId`. use std::hash::Hash; diff --git a/src/tools/rust-analyzer/crates/ide/src/typing.rs b/src/tools/rust-analyzer/crates/ide/src/typing.rs index 11bfb982cf41..e8b0c92dcb20 100644 --- a/src/tools/rust-analyzer/crates/ide/src/typing.rs +++ b/src/tools/rust-analyzer/crates/ide/src/typing.rs @@ -70,12 +70,11 @@ pub(crate) fn on_char_typed( if !TRIGGER_CHARS.contains(&char_typed) { return None; } - let krate = db + let edition = db .relevant_crates(position.file_id) .first() .copied() - .unwrap_or_else(|| *db.all_crates().first().unwrap()); - let edition = krate.data(db).edition; + .map_or(Edition::CURRENT, |krate| krate.data(db).edition); let editioned_file_id_wrapper = EditionedFileId::new(db, position.file_id, edition); let file = &db.parse(editioned_file_id_wrapper); let char_matches_position = diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/cli/analysis_stats.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/cli/analysis_stats.rs index caa35879aa00..82f04aa78ebb 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/cli/analysis_stats.rs +++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/cli/analysis_stats.rs @@ -127,7 +127,7 @@ pub fn run(self, verbosity: Verbosity) -> anyhow::Result<()> { .iter() .cloned() .map(|krate| (db.file_source_root(krate.root_file(db)).source_root_id(db), krate)) - .unique(); + .unique_by(|(source_root_id, _)| *source_root_id); let mut dep_loc = 0; let mut workspace_loc = 0;