Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21944 from Veykril/push-spxqtymwtzvk
Remove `RootQueryDb`
Lukas Wirth 7 weeks ago
parent 96ea61b · parent c8f04f8 · commit f4b77dc
-rw-r--r--crates/base-db/src/change.rs5
-rw-r--r--crates/base-db/src/editioned_file_id.rs57
-rw-r--r--crates/base-db/src/input.rs22
-rw-r--r--crates/base-db/src/lib.rs108
-rw-r--r--crates/hir-def/src/attrs.rs6
-rw-r--r--crates/hir-def/src/db.rs4
-rw-r--r--crates/hir-def/src/expr_store/scope.rs5
-rw-r--r--crates/hir-def/src/expr_store/tests/body/block.rs6
-rw-r--r--crates/hir-def/src/import_map.rs6
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mbe.rs16
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mod.rs3
-rw-r--r--crates/hir-def/src/nameres.rs2
-rw-r--r--crates/hir-def/src/nameres/tests.rs1
-rw-r--r--crates/hir-def/src/nameres/tests/incremental.rs60
-rw-r--r--crates/hir-def/src/nameres/tests/macros.rs5
-rw-r--r--crates/hir-def/src/test_db.rs13
-rw-r--r--crates/hir-expand/src/builtin/fn_macro.rs2
-rw-r--r--crates/hir-expand/src/db.rs8
-rw-r--r--crates/hir-expand/src/files.rs8
-rw-r--r--crates/hir-expand/src/span_map.rs2
-rw-r--r--crates/hir-ty/src/consteval/tests.rs4
-rw-r--r--crates/hir-ty/src/test_db.rs10
-rw-r--r--crates/hir-ty/src/tests/incremental.rs42
-rw-r--r--crates/hir/src/lib.rs18
-rw-r--r--crates/hir/src/semantics.rs14
-rw-r--r--crates/hir/src/semantics/source_to_def.rs5
-rw-r--r--crates/ide-completion/src/context.rs6
-rw-r--r--crates/ide-db/src/lib.rs8
-rw-r--r--crates/ide-db/src/prime_caches.rs11
-rw-r--r--crates/ide-db/src/search.rs4
-rw-r--r--crates/ide-db/src/symbol_index.rs16
-rw-r--r--crates/ide-db/src/test_data/test_doc_alias.txt30
-rw-r--r--crates/ide-db/src/test_data/test_symbol_index_collection.txt138
-rw-r--r--crates/ide-db/src/test_data/test_symbols_exclude_imports.txt4
-rw-r--r--crates/ide-db/src/test_data/test_symbols_with_imports.txt8
-rw-r--r--crates/ide-diagnostics/src/handlers/unlinked_file.rs8
-rw-r--r--crates/ide-diagnostics/src/lib.rs11
-rw-r--r--crates/ide-ssr/src/from_comment.rs4
-rw-r--r--crates/ide-ssr/src/matching.rs4
-rw-r--r--crates/ide/src/doc_links.rs4
-rw-r--r--crates/ide/src/expand_macro.rs4
-rw-r--r--crates/ide/src/fetch_crates.rs4
-rw-r--r--crates/ide/src/lib.rs15
-rw-r--r--crates/ide/src/navigation_target.rs5
-rw-r--r--crates/ide/src/parent_module.rs4
-rw-r--r--crates/ide/src/runnables.rs4
-rw-r--r--crates/ide/src/signature_help.rs4
-rw-r--r--crates/ide/src/static_index.rs14
-rw-r--r--crates/ide/src/test_explorer.rs8
-rw-r--r--crates/ide/src/typing.rs7
-rw-r--r--crates/ide/src/typing/on_enter.rs3
-rw-r--r--crates/ide/src/view_crate_graph.rs7
-rw-r--r--crates/load-cargo/src/lib.rs4
-rw-r--r--crates/test-fixture/src/lib.rs4
54 files changed, 404 insertions, 371 deletions
diff --git a/crates/base-db/src/change.rs b/crates/base-db/src/change.rs
index c728f3e5ca..4d4bf78cbc 100644
--- a/crates/base-db/src/change.rs
+++ b/crates/base-db/src/change.rs
@@ -9,7 +9,8 @@ use triomphe::Arc;
use vfs::FileId;
use crate::{
- CrateGraphBuilder, CratesIdMap, LibraryRoots, LocalRoots, RootQueryDb, SourceRoot, SourceRootId,
+ CrateGraphBuilder, CratesIdMap, LibraryRoots, LocalRoots, SourceDatabase, SourceRoot,
+ SourceRootId,
};
/// Encapsulate a bunch of raw `.set` calls on the database.
@@ -49,7 +50,7 @@ impl FileChange {
self.crate_graph = Some(graph);
}
- pub fn apply(self, db: &mut dyn RootQueryDb) -> Option<CratesIdMap> {
+ pub fn apply(self, db: &mut dyn SourceDatabase) -> Option<CratesIdMap> {
let _p = tracing::info_span!("FileChange::apply").entered();
if let Some(roots) = self.roots {
let mut local_roots = FxHashSet::default();
diff --git a/crates/base-db/src/editioned_file_id.rs b/crates/base-db/src/editioned_file_id.rs
index 8721f3a0ff..a77b45f8ae 100644
--- a/crates/base-db/src/editioned_file_id.rs
+++ b/crates/base-db/src/editioned_file_id.rs
@@ -5,14 +5,71 @@ use std::hash::Hash;
use salsa::Database;
use span::Edition;
+use syntax::{SyntaxError, ast};
use vfs::FileId;
+use crate::SourceDatabase;
+
#[salsa::interned(debug, constructor = from_span_file_id, no_lifetime)]
#[derive(PartialOrd, Ord)]
pub struct EditionedFileId {
field: span::EditionedFileId,
}
+// Currently does not work due to a salsa bug
+// #[salsa::tracked]
+// impl EditionedFileId {
+// #[salsa::tracked(lru = 128)]
+// pub fn parse(self, db: &dyn SourceDatabase) -> syntax::Parse<ast::SourceFile> {
+// let _p = tracing::info_span!("parse", ?self).entered();
+// let (file_id, edition) = self.unpack(db);
+// let text = db.file_text(file_id).text(db);
+// ast::SourceFile::parse(text, edition)
+// }
+
+// // firewall query
+// #[salsa::tracked(returns(as_deref))]
+// pub fn parse_errors(self, db: &dyn SourceDatabase) -> Option<Box<[SyntaxError]>> {
+// let errors = self.parse(db).errors();
+// match &*errors {
+// [] => None,
+// [..] => Some(errors.into()),
+// }
+// }
+// }
+
+impl EditionedFileId {
+ pub fn parse(self, db: &dyn SourceDatabase) -> syntax::Parse<ast::SourceFile> {
+ #[salsa::tracked(lru = 128)]
+ pub fn parse(
+ db: &dyn SourceDatabase,
+ file_id: EditionedFileId,
+ ) -> syntax::Parse<ast::SourceFile> {
+ let _p = tracing::info_span!("parse", ?file_id).entered();
+ let (file_id, edition) = file_id.unpack(db);
+ let text = db.file_text(file_id).text(db);
+ ast::SourceFile::parse(text, edition)
+ }
+ parse(db, self)
+ }
+
+ // firewall query
+ pub fn parse_errors(self, db: &dyn SourceDatabase) -> Option<&[SyntaxError]> {
+ #[salsa::tracked(returns(as_deref))]
+ pub fn parse_errors(
+ db: &dyn SourceDatabase,
+ file_id: EditionedFileId,
+ ) -> Option<Box<[SyntaxError]>> {
+ let errors = file_id.parse(db).errors();
+ match &*errors {
+ [] => None,
+ [..] => Some(errors.into()),
+ }
+ }
+ parse_errors(db, self)
+ }
+}
+
impl EditionedFileId {
#[inline]
pub fn new(db: &dyn Database, file_id: FileId, edition: Edition) -> Self {
diff --git a/crates/base-db/src/input.rs b/crates/base-db/src/input.rs
index 4f32abafd7..38f9c5a5a1 100644
--- a/crates/base-db/src/input.rs
+++ b/crates/base-db/src/input.rs
@@ -21,7 +21,10 @@ use span::Edition;
use triomphe::Arc;
use vfs::{AbsPathBuf, AnchoredPath, FileId, VfsPath, file_set::FileSet};
-use crate::{CrateWorkspaceData, EditionedFileId, FxIndexSet, RootQueryDb};
+use crate::{
+ CrateWorkspaceData, EditionedFileId, FxIndexSet, SourceDatabase, all_crates,
+ set_all_crates_with_durability,
+};
pub type ProcMacroPaths =
FxHashMap<CrateBuilderId, Result<(String, AbsPathBuf), ProcMacroLoadingError>>;
@@ -490,13 +493,13 @@ impl Crate {
/// including the crate itself.
///
/// **Warning**: do not use this query in `hir-*` crates! It kills incrementality across crate metadata modifications.
- pub fn transitive_rev_deps(self, db: &dyn RootQueryDb) -> Box<[Crate]> {
+ pub fn transitive_rev_deps(self, db: &dyn SourceDatabase) -> Box<[Crate]> {
let mut worklist = vec![self];
let mut rev_deps = FxHashSet::default();
rev_deps.insert(self);
let mut inverted_graph = FxHashMap::<_, Vec<_>>::default();
- db.all_crates().iter().for_each(|&krate| {
+ all_crates(db).iter().for_each(|&krate| {
krate
.data(db)
.dependencies
@@ -586,15 +589,15 @@ impl CrateGraphBuilder {
Ok(())
}
- pub fn set_in_db(self, db: &mut dyn RootQueryDb) -> CratesIdMap {
+ pub fn set_in_db(self, db: &mut dyn SourceDatabase) -> CratesIdMap {
+ let old_all_crates = all_crates(db);
+
// For some reason in some repositories we have duplicate crates, so we use a set and not `Vec`.
// We use an `IndexSet` because the list needs to be topologically sorted.
let mut all_crates = FxIndexSet::with_capacity_and_hasher(self.arena.len(), FxBuildHasher);
let mut visited = FxHashMap::default();
let mut visited_root_files = FxHashSet::default();
- let old_all_crates = db.all_crates();
-
let crates_map = db.crates_map();
// salsa doesn't compare new input to old input to see if they are the same, so here we are doing all the work ourselves.
for krate in self.iter() {
@@ -612,17 +615,14 @@ impl CrateGraphBuilder {
if old_all_crates.len() != all_crates.len()
|| old_all_crates.iter().any(|&krate| !all_crates.contains(&krate))
{
- db.set_all_crates_with_durability(
- Arc::new(Vec::from_iter(all_crates).into_boxed_slice()),
- Durability::MEDIUM,
- );
+ set_all_crates_with_durability(db, all_crates, Durability::MEDIUM);
}
return visited;
fn go(
graph: &CrateGraphBuilder,
- db: &mut dyn RootQueryDb,
+ db: &mut dyn SourceDatabase,
crates_map: &CratesMap,
visited: &mut FxHashMap<CrateBuilderId, Crate>,
visited_root_files: &mut FxHashSet<FileId>,
diff --git a/crates/base-db/src/lib.rs b/crates/base-db/src/lib.rs
index 5baf4ce6f9..e438505c07 100644
--- a/crates/base-db/src/lib.rs
+++ b/crates/base-db/src/lib.rs
@@ -36,7 +36,6 @@ pub use query_group;
use rustc_hash::{FxHashSet, FxHasher};
use salsa::{Durability, Setter};
pub use semver::{BuildMetadata, Prerelease, Version, VersionReq};
-use syntax::{Parse, SyntaxError, ast};
use triomphe::Arc;
pub use vfs::{AnchoredPath, AnchoredPathBuf, FileId, VfsPath, file_set::FileSet};
@@ -236,36 +235,6 @@ pub struct SourceRootInput {
pub source_root: Arc<SourceRoot>,
}
-/// Database which stores all significant input facts: source code and project
-/// model. Everything else in rust-analyzer is derived from these queries.
-#[query_group::query_group]
-pub trait RootQueryDb: SourceDatabase + salsa::Database {
- /// Parses the file into the syntax tree.
- #[salsa::invoke(parse)]
- #[salsa::lru(128)]
- fn parse(&self, file_id: EditionedFileId) -> Parse<ast::SourceFile>;
-
- /// Returns the set of errors obtained from parsing the file including validation errors.
- #[salsa::transparent]
- fn parse_errors(&self, file_id: EditionedFileId) -> Option<&[SyntaxError]>;
-
- #[salsa::transparent]
- fn toolchain_channel(&self, krate: Crate) -> Option<ReleaseChannel>;
-
- /// Crates whose root file is in `id`.
- #[salsa::invoke_interned(source_root_crates)]
- fn source_root_crates(&self, id: SourceRootId) -> Arc<[Crate]>;
-
- #[salsa::transparent]
- fn relevant_crates(&self, file_id: FileId) -> Arc<[Crate]>;
-
- /// Returns the crates in topological order.
- ///
- /// **Warning**: do not use this query in `hir-*` crates! It kills incrementality across crate metadata modifications.
- #[salsa::input]
- fn all_crates(&self) -> Arc<Box<[Crate]>>;
-}
-
#[salsa_macros::db]
pub trait SourceDatabase: salsa::Database {
/// Text of the file.
@@ -353,46 +322,67 @@ impl CrateWorkspaceData {
}
}
-fn toolchain_channel(db: &dyn RootQueryDb, krate: Crate) -> Option<ReleaseChannel> {
+pub fn toolchain_channel(db: &dyn salsa::Database, krate: Crate) -> Option<ReleaseChannel> {
krate.workspace_data(db).toolchain.as_ref().and_then(|v| ReleaseChannel::from_str(&v.pre))
}
-fn parse(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Parse<ast::SourceFile> {
- let _p = tracing::info_span!("parse", ?file_id).entered();
- let (file_id, edition) = file_id.unpack(db.as_dyn_database());
- let text = db.file_text(file_id).text(db);
- ast::SourceFile::parse(text, edition)
+#[salsa::input(singleton, debug)]
+struct AllCrates {
+ crates: std::sync::Arc<[Crate]>,
}
-fn parse_errors(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Option<&[SyntaxError]> {
- #[salsa_macros::tracked(returns(ref))]
- fn parse_errors(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Option<Box<[SyntaxError]>> {
- let errors = db.parse(file_id).errors();
- match &*errors {
- [] => None,
- [..] => Some(errors.into()),
- }
- }
- parse_errors(db, file_id).as_ref().map(|it| &**it)
+pub fn set_all_crates_with_durability(
+ db: &mut dyn salsa::Database,
+ crates: impl IntoIterator<Item = Crate>,
+ durability: Durability,
+) {
+ AllCrates::try_get(db)
+ .unwrap_or_else(|| AllCrates::new(db, std::sync::Arc::default()))
+ .set_crates(db)
+ .with_durability(durability)
+ .to(crates.into_iter().collect());
}
-fn source_root_crates(db: &dyn RootQueryDb, id: SourceRootId) -> Arc<[Crate]> {
- let crates = db.all_crates();
- crates
- .iter()
- .copied()
- .filter(|&krate| {
- let root_file = krate.data(db).root_file_id;
- db.file_source_root(root_file).source_root_id(db) == id
- })
- .collect()
+/// Returns the crates in topological order.
+///
+/// **Warning**: do not use this query in `hir-*` crates! It kills incrementality across crate metadata modifications.
+pub fn all_crates(db: &dyn salsa::Database) -> std::sync::Arc<[Crate]> {
+ AllCrates::try_get(db).map_or(std::sync::Arc::default(), |all_crates| all_crates.crates(db))
+}
+
+// FIXME: VFS rewrite should allow us to get rid of this wrapper
+#[doc(hidden)]
+#[salsa::interned]
+pub struct InternedSourceRootId {
+ pub id: SourceRootId,
+}
+
+/// Crates whose root file is in `id`.
+pub fn source_root_crates(db: &dyn SourceDatabase, id: SourceRootId) -> &[Crate] {
+ #[salsa::tracked(returns(deref))]
+ pub fn source_root_crates<'db>(
+ db: &'db dyn SourceDatabase,
+ id: InternedSourceRootId<'db>,
+ ) -> Box<[Crate]> {
+ let crates = AllCrates::get(db).crates(db);
+ let id = id.id(db);
+ crates
+ .iter()
+ .copied()
+ .filter(|&krate| {
+ let root_file = krate.data(db).root_file_id;
+ db.file_source_root(root_file).source_root_id(db) == id
+ })
+ .collect()
+ }
+ source_root_crates(db, InternedSourceRootId::new(db, id))
}
-fn relevant_crates(db: &dyn RootQueryDb, file_id: FileId) -> Arc<[Crate]> {
+pub fn relevant_crates(db: &dyn SourceDatabase, file_id: FileId) -> &[Crate] {
let _p = tracing::info_span!("relevant_crates").entered();
let source_root = db.file_source_root(file_id);
- db.source_root_crates(source_root.source_root_id(db))
+ source_root_crates(db, source_root.source_root_id(db))
}
#[must_use]
diff --git a/crates/hir-def/src/attrs.rs b/crates/hir-def/src/attrs.rs
index aa7dad8bf1..dddfe8cefd 100644
--- a/crates/hir-def/src/attrs.rs
+++ b/crates/hir-def/src/attrs.rs
@@ -351,13 +351,13 @@ fn attrs_source(
let krate = def_map.krate();
let (definition, declaration, extra_crate_attrs) = match def_map[id].origin {
ModuleOrigin::CrateRoot { definition } => {
- let definition_source = db.parse(definition).tree();
+ let definition_source = definition.parse(db).tree();
let definition = InFile::new(definition.into(), definition_source.into());
let extra_crate_attrs = parse_extra_crate_attrs(db, krate);
(definition, None, extra_crate_attrs)
}
ModuleOrigin::File { declaration, declaration_tree_id, definition, .. } => {
- let definition_source = db.parse(definition).tree();
+ let definition_source = definition.parse(db).tree();
let definition = InFile::new(definition.into(), definition_source.into());
let declaration = InFile::new(declaration_tree_id.file_id(), declaration);
let declaration = declaration.with_value(declaration.to_node(db));
@@ -742,7 +742,7 @@ impl AttrFlags {
#[salsa::tracked(returns(ref))]
pub fn doc_html_root_url(db: &dyn DefDatabase, krate: Crate) -> Option<SmolStr> {
let root_file_id = krate.root_file_id(db);
- let syntax = db.parse(root_file_id).tree();
+ let syntax = root_file_id.parse(db).tree();
let extra_crate_attrs =
parse_extra_crate_attrs(db, krate).into_iter().flat_map(|src| src.attrs());
diff --git a/crates/hir-def/src/db.rs b/crates/hir-def/src/db.rs
index 5d5d435398..9dd7768ead 100644
--- a/crates/hir-def/src/db.rs
+++ b/crates/hir-def/src/db.rs
@@ -1,5 +1,5 @@
//! Defines database & queries for name resolution.
-use base_db::{Crate, RootQueryDb, SourceDatabase};
+use base_db::{Crate, SourceDatabase};
use hir_expand::{
EditionedFileId, HirFileId, InFile, Lookup, MacroCallId, MacroDefId, MacroDefKind,
db::ExpandDatabase,
@@ -22,7 +22,7 @@ use crate::{
use salsa::plumbing::AsId;
#[query_group::query_group(InternDatabaseStorage)]
-pub trait InternDatabase: RootQueryDb {
+pub trait InternDatabase: SourceDatabase {
// region: items
#[salsa::interned]
fn intern_use(&self, loc: UseLoc) -> UseId;
diff --git a/crates/hir-def/src/expr_store/scope.rs b/crates/hir-def/src/expr_store/scope.rs
index 40ae0b7de4..9738ac5c44 100644
--- a/crates/hir-def/src/expr_store/scope.rs
+++ b/crates/hir-def/src/expr_store/scope.rs
@@ -371,7 +371,6 @@ fn compute_expr_scopes(
#[cfg(test)]
mod tests {
- use base_db::RootQueryDb;
use hir_expand::{InFile, name::AsName};
use span::FileId;
use syntax::{AstNode, algo::find_node_at_offset, ast};
@@ -414,7 +413,7 @@ mod tests {
let (file_id, _) = editioned_file_id.unpack(&db);
- let file_syntax = db.parse(editioned_file_id).syntax_node();
+ let file_syntax = editioned_file_id.parse(&db).syntax_node();
let marker: ast::PathExpr = find_node_at_offset(&file_syntax, offset).unwrap();
let function = find_function(&db, file_id);
@@ -570,7 +569,7 @@ fn foo() {
let (file_id, _) = editioned_file_id.unpack(&db);
- let file = db.parse(editioned_file_id).ok().unwrap();
+ let file = editioned_file_id.parse(&db).ok().unwrap();
let expected_name = find_node_at_offset::<ast::Name>(file.syntax(), expected_offset.into())
.expect("failed to find a name at the target offset");
let name_ref: ast::NameRef = find_node_at_offset(file.syntax(), offset).unwrap();
diff --git a/crates/hir-def/src/expr_store/tests/body/block.rs b/crates/hir-def/src/expr_store/tests/body/block.rs
index 83594ee021..71fcced2d8 100644
--- a/crates/hir-def/src/expr_store/tests/body/block.rs
+++ b/crates/hir-def/src/expr_store/tests/body/block.rs
@@ -190,13 +190,13 @@ fn f() {
"#,
expect![[r#"
ModuleIdLt {
- [salsa id]: Id(3803),
+ [salsa id]: Id(3403),
krate: Crate(
- Id(2400),
+ Id(2000),
),
block: Some(
BlockId(
- 4801,
+ 4401,
),
),
}"#]],
diff --git a/crates/hir-def/src/import_map.rs b/crates/hir-def/src/import_map.rs
index 0014e1af5c..ba077b1b2e 100644
--- a/crates/hir-def/src/import_map.rs
+++ b/crates/hir-def/src/import_map.rs
@@ -499,7 +499,7 @@ fn search_maps(
#[cfg(test)]
mod tests {
- use base_db::RootQueryDb;
+ use base_db::all_crates;
use expect_test::{Expect, expect};
use test_fixture::WithFixture;
@@ -536,7 +536,7 @@ mod tests {
expect: Expect,
) {
let db = TestDB::with_files(ra_fixture);
- let all_crates = db.all_crates();
+ let all_crates = all_crates(&db);
let krate = all_crates
.iter()
.copied()
@@ -616,7 +616,7 @@ mod tests {
fn check(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect) {
let db = TestDB::with_files(ra_fixture);
- let all_crates = db.all_crates();
+ let all_crates = all_crates(&db);
let actual = all_crates
.iter()
diff --git a/crates/hir-def/src/macro_expansion_tests/mbe.rs b/crates/hir-def/src/macro_expansion_tests/mbe.rs
index d93df7af6a..7b5d0103e6 100644
--- a/crates/hir-def/src/macro_expansion_tests/mbe.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mbe.rs
@@ -35,9 +35,9 @@ macro_rules! f {
};
}
-struct#0:MacroRules[BE8F, 0]@58..64#18432# MyTraitMap2#0:MacroCall[BE8F, 0]@31..42#ROOT2024# {#0:MacroRules[BE8F, 0]@72..73#18432#
- map#0:MacroRules[BE8F, 0]@86..89#18432#:#0:MacroRules[BE8F, 0]@89..90#18432# #0:MacroRules[BE8F, 0]@89..90#18432#::#0:MacroRules[BE8F, 0]@91..93#18432#std#0:MacroRules[BE8F, 0]@93..96#18432#::#0:MacroRules[BE8F, 0]@96..98#18432#collections#0:MacroRules[BE8F, 0]@98..109#18432#::#0:MacroRules[BE8F, 0]@109..111#18432#HashSet#0:MacroRules[BE8F, 0]@111..118#18432#<#0:MacroRules[BE8F, 0]@118..119#18432#(#0:MacroRules[BE8F, 0]@119..120#18432#)#0:MacroRules[BE8F, 0]@120..121#18432#>#0:MacroRules[BE8F, 0]@121..122#18432#,#0:MacroRules[BE8F, 0]@122..123#18432#
-}#0:MacroRules[BE8F, 0]@132..133#18432#
+struct#0:MacroRules[BE8F, 0]@58..64#17408# MyTraitMap2#0:MacroCall[BE8F, 0]@31..42#ROOT2024# {#0:MacroRules[BE8F, 0]@72..73#17408#
+ map#0:MacroRules[BE8F, 0]@86..89#17408#:#0:MacroRules[BE8F, 0]@89..90#17408# #0:MacroRules[BE8F, 0]@89..90#17408#::#0:MacroRules[BE8F, 0]@91..93#17408#std#0:MacroRules[BE8F, 0]@93..96#17408#::#0:MacroRules[BE8F, 0]@96..98#17408#collections#0:MacroRules[BE8F, 0]@98..109#17408#::#0:MacroRules[BE8F, 0]@109..111#17408#HashSet#0:MacroRules[BE8F, 0]@111..118#17408#<#0:MacroRules[BE8F, 0]@118..119#17408#(#0:MacroRules[BE8F, 0]@119..120#17408#)#0:MacroRules[BE8F, 0]@120..121#17408#>#0:MacroRules[BE8F, 0]@121..122#17408#,#0:MacroRules[BE8F, 0]@122..123#17408#
+}#0:MacroRules[BE8F, 0]@132..133#17408#
"#]],
);
}
@@ -197,7 +197,7 @@ macro_rules! mk_struct {
#[macro_use]
mod foo;
-struct#1:MacroRules[DB0C, 0]@59..65#18432# Foo#0:MacroCall[DB0C, 0]@32..35#ROOT2024#(#1:MacroRules[DB0C, 0]@70..71#18432#u32#0:MacroCall[DB0C, 0]@41..44#ROOT2024#)#1:MacroRules[DB0C, 0]@74..75#18432#;#1:MacroRules[DB0C, 0]@75..76#18432#
+struct#1:MacroRules[DB0C, 0]@59..65#17408# Foo#0:MacroCall[DB0C, 0]@32..35#ROOT2024#(#1:MacroRules[DB0C, 0]@70..71#17408#u32#0:MacroCall[DB0C, 0]@41..44#ROOT2024#)#1:MacroRules[DB0C, 0]@74..75#17408#;#1:MacroRules[DB0C, 0]@75..76#17408#
"#]],
);
}
@@ -423,10 +423,10 @@ m! { foo, bar }
macro_rules! m {
($($i:ident),*) => ( impl Bar { $(fn $i() {})* } );
}
-impl#\18432# Bar#\18432# {#\18432#
- fn#\18432# foo#\ROOT2024#(#\18432#)#\18432# {#\18432#}#\18432#
- fn#\18432# bar#\ROOT2024#(#\18432#)#\18432# {#\18432#}#\18432#
-}#\18432#
+impl#\17408# Bar#\17408# {#\17408#
+ fn#\17408# foo#\ROOT2024#(#\17408#)#\17408# {#\17408#}#\17408#
+ fn#\17408# bar#\ROOT2024#(#\17408#)#\17408# {#\17408#}#\17408#
+}#\17408#
"#]],
);
}
diff --git a/crates/hir-def/src/macro_expansion_tests/mod.rs b/crates/hir-def/src/macro_expansion_tests/mod.rs
index 8317c56caf..eabdada67c 100644
--- a/crates/hir-def/src/macro_expansion_tests/mod.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mod.rs
@@ -16,7 +16,6 @@ mod proc_macros;
use std::{any::TypeId, iter, ops::Range, sync};
-use base_db::RootQueryDb;
use expect_test::Expect;
use hir_expand::{
AstId, ExpansionInfo, InFile, MacroCallId, MacroCallKind, MacroKind,
@@ -75,7 +74,7 @@ fn check_errors(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect)
let editioned_file_id =
ast_id.file_id.file_id().expect("macros inside macros are not supported");
- let ast = db.parse(editioned_file_id).syntax_node();
+ let ast = editioned_file_id.parse(&db).syntax_node();
let ast_id_map = db.ast_id_map(ast_id.file_id);
let node = ast_id_map.get_erased(ast_id.value).to_node(&ast);
Some((node.text_range(), errors))
diff --git a/crates/hir-def/src/nameres.rs b/crates/hir-def/src/nameres.rs
index 5fda1beab4..56b3f03f7b 100644
--- a/crates/hir-def/src/nameres.rs
+++ b/crates/hir-def/src/nameres.rs
@@ -346,7 +346,7 @@ impl ModuleOrigin {
match self {
&ModuleOrigin::File { definition: editioned_file_id, .. }
| &ModuleOrigin::CrateRoot { definition: editioned_file_id } => {
- let sf = db.parse(editioned_file_id).tree();
+ let sf = editioned_file_id.parse(db).tree();
InFile::new(editioned_file_id.into(), ModuleSource::SourceFile(sf))
}
&ModuleOrigin::Inline { definition, definition_tree_id } => InFile::new(
diff --git a/crates/hir-def/src/nameres/tests.rs b/crates/hir-def/src/nameres/tests.rs
index fe55252e25..08d98dff33 100644
--- a/crates/hir-def/src/nameres/tests.rs
+++ b/crates/hir-def/src/nameres/tests.rs
@@ -4,7 +4,6 @@ mod incremental;
mod macros;
mod mod_resolution;
-use base_db::RootQueryDb;
use expect_test::{Expect, expect};
use test_fixture::WithFixture;
diff --git a/crates/hir-def/src/nameres/tests/incremental.rs b/crates/hir-def/src/nameres/tests/incremental.rs
index 5b75c078ec..0f1828abce 100644
--- a/crates/hir-def/src/nameres/tests/incremental.rs
+++ b/crates/hir-def/src/nameres/tests/incremental.rs
@@ -1,6 +1,6 @@
use base_db::{
CrateDisplayName, CrateGraphBuilder, CrateName, CrateOrigin, CrateWorkspaceData,
- DependencyBuilder, Env, RootQueryDb, SourceDatabase,
+ DependencyBuilder, Env, SourceDatabase, all_crates,
};
use expect_test::{Expect, expect};
use intern::Symbol;
@@ -56,11 +56,11 @@ pub const BAZ: u32 = 0;
"#,
);
- for &krate in db.all_crates().iter() {
+ for &krate in all_crates(&db).iter() {
crate_def_map(&db, krate);
}
- let all_crates_before = db.all_crates();
+ let all_crates_before = all_crates(&db);
{
// Add dependencies: c -> b, b -> a.
@@ -100,15 +100,15 @@ pub const BAZ: u32 = 0;
new_crate_graph.set_in_db(&mut db);
}
- let all_crates_after = db.all_crates();
+ let all_crates_after = all_crates(&db);
assert!(
- Arc::ptr_eq(&all_crates_before, &all_crates_after),
+ std::sync::Arc::ptr_eq(&all_crates_before, &all_crates_after),
"the all_crates list should not have been invalidated"
);
execute_assert_events(
&db,
|| {
- for &krate in db.all_crates().iter() {
+ for &krate in all_crates(&db).iter() {
crate_def_map(&db, krate);
}
},
@@ -167,22 +167,22 @@ fn no() {}
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"EnumVariants::of_",
]
"#]],
expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -225,16 +225,16 @@ pub struct S {}
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"decl_macro_expander_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"macro_def_shim",
"file_item_tree_query",
@@ -245,7 +245,7 @@ pub struct S {}
"#]],
expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -283,21 +283,21 @@ fn f() { foo }
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"crate_local_def_map",
"proc_macros_for_crate_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"macro_def_shim",
"file_item_tree_query",
@@ -310,7 +310,7 @@ fn f() { foo }
"#]],
expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -407,22 +407,22 @@ pub struct S {}
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"crate_local_def_map",
"proc_macros_for_crate_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"decl_macro_expander_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"macro_def_shim",
"file_item_tree_query",
@@ -446,7 +446,7 @@ pub struct S {}
"#]],
expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -524,16 +524,16 @@ m!(Z);
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"decl_macro_expander_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"macro_def_shim",
"file_item_tree_query",
@@ -571,7 +571,7 @@ m!(Z);
&[("file_item_tree_query", 1), ("parse_macro_expansion_shim", 0)],
expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -611,7 +611,7 @@ pub type Ty = ();
[
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
]
"#]],
@@ -629,7 +629,7 @@ pub type Ty = ();
&[("file_item_tree_query", 1), ("parse", 1)],
expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
diff --git a/crates/hir-def/src/nameres/tests/macros.rs b/crates/hir-def/src/nameres/tests/macros.rs
index a013f8b2bc..f073cf777d 100644
--- a/crates/hir-def/src/nameres/tests/macros.rs
+++ b/crates/hir-def/src/nameres/tests/macros.rs
@@ -1,3 +1,4 @@
+use base_db::all_crates;
use expect_test::expect;
use itertools::Itertools;
@@ -1129,7 +1130,7 @@ pub fn derive_macro_2(_item: TokenStream) -> TokenStream {
}
"#,
);
- let krate = *db.all_crates().last().expect("no crate graph present");
+ let krate = *all_crates(&db).last().expect("no crate graph present");
let def_map = crate_def_map(&db, krate);
assert_eq!(def_map.data.exported_derives.len(), 1);
@@ -1497,7 +1498,7 @@ struct TokenStream;
fn proc_attr(a: TokenStream, b: TokenStream) -> TokenStream { a }
"#,
);
- let krate = *db.all_crates().last().expect("no crate graph present");
+ let krate = *all_crates(&db).last().expect("no crate graph present");
let def_map = crate_def_map(&db, krate);
let root_module = &def_map[def_map.root].scope;
diff --git a/crates/hir-def/src/test_db.rs b/crates/hir-def/src/test_db.rs
index 0d260279f9..b854d2aa21 100644
--- a/crates/hir-def/src/test_db.rs
+++ b/crates/hir-def/src/test_db.rs
@@ -3,8 +3,9 @@
use std::{fmt, panic, sync::Mutex};
use base_db::{
- Crate, CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Nonce, RootQueryDb,
- SourceDatabase, SourceRoot, SourceRootId, SourceRootInput,
+ Crate, CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Nonce, SourceDatabase,
+ SourceRoot, SourceRootId, SourceRootInput, all_crates, relevant_crates,
+ set_all_crates_with_durability,
};
use hir_expand::{InFile, files::FilePosition};
use salsa::Durability;
@@ -49,7 +50,7 @@ impl Default for TestDB {
};
this.set_expand_proc_attr_macros_with_durability(true, Durability::HIGH);
// This needs to be here otherwise `CrateGraphBuilder` panics.
- this.set_all_crates(Arc::new(Box::new([])));
+ set_all_crates_with_durability(&mut this, std::iter::empty(), Durability::HIGH);
_ = base_db::LibraryRoots::builder(Default::default())
.durability(Durability::MEDIUM)
.new(&this);
@@ -145,7 +146,7 @@ impl SourceDatabase for TestDB {
impl TestDB {
pub(crate) fn fetch_test_crate(&self) -> Crate {
- let all_crates = self.all_crates();
+ let all_crates = all_crates(self);
all_crates
.iter()
.copied()
@@ -157,7 +158,7 @@ impl TestDB {
}
pub(crate) fn module_for_file(&self, file_id: FileId) -> ModuleId {
- for &krate in self.relevant_crates(file_id).iter() {
+ for &krate in relevant_crates(self, file_id).iter() {
let crate_def_map = crate_def_map(self, krate);
for (local_id, data) in crate_def_map.modules() {
if data.origin.file_id().map(|file_id| file_id.file_id(self)) == Some(file_id) {
@@ -288,7 +289,7 @@ impl TestDB {
let source_map = &Body::with_source_map(self, def_with_body).1;
let scopes = ExprScopes::body_expr_scopes(self, def_with_body);
- let root_syntax_node = self.parse(file_id).syntax_node();
+ let root_syntax_node = file_id.parse(self).syntax_node();
let scope_iter =
algo::ancestors_at_offset(&root_syntax_node, position.offset).filter_map(|node| {
let block = ast::BlockExpr::cast(node)?;
diff --git a/crates/hir-expand/src/builtin/fn_macro.rs b/crates/hir-expand/src/builtin/fn_macro.rs
index b3572a1cef..9962677a9d 100644
--- a/crates/hir-expand/src/builtin/fn_macro.rs
+++ b/crates/hir-expand/src/builtin/fn_macro.rs
@@ -828,7 +828,7 @@ fn include_expand(
let span_map = db.real_span_map(editioned_file_id);
// FIXME: Parse errors
ExpandResult::ok(syntax_node_to_token_tree(
- &db.parse(editioned_file_id).syntax_node(),
+ &editioned_file_id.parse(db).syntax_node(),
SpanMap::RealSpanMap(span_map),
span,
syntax_bridge::DocCommentDesugarMode::ProcMacro,
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs
index 020731cf9a..8a6b56d932 100644
--- a/crates/hir-expand/src/db.rs
+++ b/crates/hir-expand/src/db.rs
@@ -1,6 +1,6 @@
//! Defines database & queries for macro expansion.
-use base_db::{Crate, RootQueryDb};
+use base_db::{Crate, SourceDatabase};
use mbe::MatchedArmIndex;
use span::{AstIdMap, Edition, Span, SyntaxContext};
use syntax::{AstNode, Parse, SyntaxError, SyntaxNode, SyntaxToken, T, ast};
@@ -48,7 +48,7 @@ pub enum TokenExpander {
}
#[query_group::query_group]
-pub trait ExpandDatabase: RootQueryDb {
+pub trait ExpandDatabase: SourceDatabase {
/// The proc macros. Do not use this! Use `proc_macros_for_crate()` instead.
#[salsa::input]
fn proc_macros(&self) -> Arc<ProcMacros>;
@@ -343,7 +343,7 @@ fn ast_id_map(db: &dyn ExpandDatabase, file_id: HirFileId) -> AstIdMap {
/// file or a macro expansion.
fn parse_or_expand(db: &dyn ExpandDatabase, file_id: HirFileId) -> SyntaxNode {
match file_id {
- HirFileId::FileId(file_id) => db.parse(file_id).syntax_node(),
+ HirFileId::FileId(file_id) => file_id.parse(db).syntax_node(),
HirFileId::MacroFile(macro_file) => {
db.parse_macro_expansion(macro_file).value.0.syntax_node()
}
@@ -389,7 +389,7 @@ pub(crate) fn parse_with_map(
) -> (Parse<SyntaxNode>, SpanMap) {
match file_id {
HirFileId::FileId(file_id) => {
- (db.parse(file_id).to_syntax(), SpanMap::RealSpanMap(db.real_span_map(file_id)))
+ (file_id.parse(db).to_syntax(), SpanMap::RealSpanMap(db.real_span_map(file_id)))
}
HirFileId::MacroFile(macro_file) => {
let (parse, map) = db.parse_macro_expansion(macro_file).value;
diff --git a/crates/hir-expand/src/files.rs b/crates/hir-expand/src/files.rs
index fce92c8a3e..71da560b15 100644
--- a/crates/hir-expand/src/files.rs
+++ b/crates/hir-expand/src/files.rs
@@ -198,7 +198,7 @@ trait FileIdToSyntax: Copy {
impl FileIdToSyntax for EditionedFileId {
fn file_syntax(self, db: &dyn db::ExpandDatabase) -> SyntaxNode {
- db.parse(self).syntax_node()
+ self.parse(db).syntax_node()
}
}
impl FileIdToSyntax for MacroCallId {
@@ -333,8 +333,8 @@ impl<SN: Borrow<SyntaxNode>> InFile<SN> {
)?;
let kind = self.kind();
- let value = db
- .parse(editioned_file_id)
+ let value = editioned_file_id
+ .parse(db)
.syntax_node()
.covering_element(range)
.ancestors()
@@ -521,7 +521,7 @@ impl<N: AstNode> InFile<N> {
)?;
// FIXME: This heuristic is brittle and with the right macro may select completely unrelated nodes?
- let anc = db.parse(editioned_file_id).syntax_node().covering_element(range);
+ let anc = editioned_file_id.parse(db).syntax_node().covering_element(range);
let value = anc.ancestors().find_map(N::cast)?;
Some(InRealFile::new(editioned_file_id, value))
}
diff --git a/crates/hir-expand/src/span_map.rs b/crates/hir-expand/src/span_map.rs
index 71d0b880ca..aa8603341b 100644
--- a/crates/hir-expand/src/span_map.rs
+++ b/crates/hir-expand/src/span_map.rs
@@ -86,7 +86,7 @@ pub(crate) fn real_span_map(
let mut pairs = vec![(syntax::TextSize::new(0), span::ROOT_ERASED_FILE_AST_ID)];
let ast_id_map = db.ast_id_map(editioned_file_id.into());
- let tree = db.parse(editioned_file_id).tree();
+ let tree = editioned_file_id.parse(db).tree();
// This is an incrementality layer. Basically we can't use absolute ranges for our spans as that
// would mean we'd invalidate everything whenever we type. So instead we make the text ranges
// relative to some AstIds reducing the risk of invalidation as typing somewhere no longer
diff --git a/crates/hir-ty/src/consteval/tests.rs b/crates/hir-ty/src/consteval/tests.rs
index 31cf86476f..aee27dcfde 100644
--- a/crates/hir-ty/src/consteval/tests.rs
+++ b/crates/hir-ty/src/consteval/tests.rs
@@ -1,4 +1,4 @@
-use base_db::RootQueryDb;
+use base_db::all_crates;
use hir_def::signatures::ConstSignature;
use hir_expand::EditionedFileId;
use rustc_apfloat::{
@@ -108,7 +108,7 @@ fn pretty_print_err(e: ConstEvalError, db: &TestDB) -> String {
let mut err = String::new();
let span_formatter = |file, range| format!("{file:?} {range:?}");
let display_target =
- DisplayTarget::from_crate(db, *db.all_crates().last().expect("no crate graph present"));
+ DisplayTarget::from_crate(db, *all_crates(db).last().expect("no crate graph present"));
match e {
ConstEvalError::MirLowerError(e) => {
e.pretty_print(&mut err, db, span_formatter, display_target)
diff --git a/crates/hir-ty/src/test_db.rs b/crates/hir-ty/src/test_db.rs
index 243456c85f..e19e26ebc4 100644
--- a/crates/hir-ty/src/test_db.rs
+++ b/crates/hir-ty/src/test_db.rs
@@ -3,8 +3,8 @@
use std::{fmt, panic, sync::Mutex};
use base_db::{
- CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Nonce, RootQueryDb,
- SourceDatabase, SourceRoot, SourceRootId, SourceRootInput,
+ CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Nonce, SourceDatabase, SourceRoot,
+ SourceRootId, SourceRootInput, all_crates, relevant_crates, set_all_crates_with_durability,
};
use hir_def::{ModuleId, db::DefDatabase, nameres::crate_def_map};
@@ -45,7 +45,7 @@ impl Default for TestDB {
};
this.set_expand_proc_attr_macros_with_durability(true, Durability::HIGH);
// This needs to be here otherwise `CrateGraphBuilder` panics.
- this.set_all_crates(Arc::new(Box::new([])));
+ set_all_crates_with_durability(&mut this, std::iter::empty(), Durability::HIGH);
_ = base_db::LibraryRoots::builder(Default::default())
.durability(Durability::MEDIUM)
.new(&this);
@@ -142,7 +142,7 @@ impl panic::RefUnwindSafe for TestDB {}
impl TestDB {
pub(crate) fn module_for_file_opt(&self, file_id: impl Into<FileId>) -> Option<ModuleId> {
let file_id = file_id.into();
- for &krate in self.relevant_crates(file_id).iter() {
+ for &krate in relevant_crates(self, file_id).iter() {
let crate_def_map = crate_def_map(self, krate);
for (module_id, data) in crate_def_map.modules() {
if data.origin.file_id().map(|file_id| file_id.file_id(self)) == Some(file_id) {
@@ -161,7 +161,7 @@ impl TestDB {
&self,
) -> FxHashMap<EditionedFileId, Vec<(TextRange, String)>> {
let mut files = Vec::new();
- for &krate in self.all_crates().iter() {
+ for &krate in all_crates(self).iter() {
let crate_def_map = crate_def_map(self, krate);
for (module_id, _) in crate_def_map.modules() {
let file_id = crate_def_map[module_id].origin.file_id();
diff --git a/crates/hir-ty/src/tests/incremental.rs b/crates/hir-ty/src/tests/incremental.rs
index e806999cb4..7cda259664 100644
--- a/crates/hir-ty/src/tests/incremental.rs
+++ b/crates/hir-ty/src/tests/incremental.rs
@@ -31,11 +31,11 @@ fn foo() -> i32 {
&[("InferenceResult::for_body_", 1)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"InferenceResult::for_body_",
"FunctionSignature::of_",
@@ -76,7 +76,7 @@ fn foo() -> i32 {
&[("InferenceResult::for_body_", 0)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -119,11 +119,11 @@ fn baz() -> i32 {
&[("InferenceResult::for_body_", 3)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"InferenceResult::for_body_",
"FunctionSignature::of_",
@@ -189,7 +189,7 @@ fn baz() -> i32 {
&[("InferenceResult::for_body_", 1)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -239,11 +239,11 @@ $0",
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"TraitImpls::for_crate_",
"lang_items",
@@ -278,7 +278,7 @@ pub struct NewStruct {
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -314,11 +314,11 @@ $0",
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"TraitImpls::for_crate_",
"lang_items",
@@ -354,7 +354,7 @@ pub enum SomeEnum {
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -390,11 +390,11 @@ $0",
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"TraitImpls::for_crate_",
"lang_items",
@@ -427,7 +427,7 @@ fn bar() -> f32 {
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -467,11 +467,11 @@ $0",
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"TraitImpls::for_crate_",
"lang_items",
@@ -512,7 +512,7 @@ impl SomeStruct {
&[("TraitImpls::for_crate_", 1)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
@@ -568,11 +568,11 @@ fn main() {
&[("trait_solve_shim", 0)],
expect_test::expect![[r#"
[
- "source_root_crates_shim",
+ "source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
"ast_id_map",
- "parse_shim",
+ "parse",
"real_span_map_shim",
"TraitItems::query_with_diagnostics_",
"Body::of_",
@@ -664,7 +664,7 @@ fn main() {
&[("trait_solve_shim", 0)],
expect_test::expect![[r#"
[
- "parse_shim",
+ "parse",
"ast_id_map",
"file_item_tree_query",
"real_span_map_shim",
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index eb5b3b37a6..89f3cfd140 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -45,7 +45,7 @@ use std::{
};
use arrayvec::ArrayVec;
-use base_db::{CrateDisplayName, CrateOrigin, LangCrateOrigin};
+use base_db::{CrateDisplayName, CrateOrigin, LangCrateOrigin, all_crates};
use either::Either;
use hir_def::{
AdtId, AssocItemId, AssocItemLoc, BuiltinDeriveImplId, CallableDefId, ConstId, ConstParamId,
@@ -243,7 +243,7 @@ impl Crate {
}
pub fn reverse_dependencies(self, db: &dyn HirDatabase) -> Vec<Crate> {
- let all_crates = db.all_crates();
+ let all_crates = all_crates(db);
all_crates
.iter()
.copied()
@@ -310,7 +310,7 @@ impl Crate {
}
pub fn all(db: &dyn HirDatabase) -> Vec<Crate> {
- db.all_crates().iter().map(|&id| Crate { id }).collect()
+ all_crates(db).iter().map(|&id| Crate { id }).collect()
}
/// Try to get the root URL of the documentation of a crate.
@@ -334,7 +334,7 @@ impl Crate {
}
fn core(db: &dyn HirDatabase) -> Option<Crate> {
- db.all_crates()
+ all_crates(db)
.iter()
.copied()
.find(|&krate| {
@@ -547,7 +547,7 @@ impl HasCrate for ModuleDef {
fn krate(&self, db: &dyn HirDatabase) -> Crate {
match self.module(db) {
Some(module) => module.krate(db),
- None => Crate::core(db).unwrap_or_else(|| db.all_crates()[0].into()),
+ None => Crate::core(db).unwrap_or_else(|| all_crates(db)[0].into()),
}
}
}
@@ -3394,7 +3394,7 @@ impl BuiltinType {
}
pub fn ty<'db>(self, db: &'db dyn HirDatabase) -> Type<'db> {
- let core = Crate::core(db).map(|core| core.id).unwrap_or_else(|| db.all_crates()[0]);
+ let core = Crate::core(db).map(|core| core.id).unwrap_or_else(|| all_crates(db)[0]);
let interner = DbInterner::new_no_crate(db);
Type::new_for_crate(core, Ty::from_builtin_type(interner, self.inner))
}
@@ -4898,12 +4898,12 @@ impl Impl {
std::iter::successors(module.block(db), |block| block.loc(db).module.block(db))
.filter_map(|block| TraitImpls::for_block(db, block).as_deref())
.for_each(|impls| impls.for_self_ty(&simplified_ty, &mut extend_with_impls));
- for &krate in &**db.all_crates() {
+ for &krate in &*all_crates(db) {
TraitImpls::for_crate(db, krate)
.for_self_ty(&simplified_ty, &mut extend_with_impls);
}
} else {
- for &krate in &**db.all_crates() {
+ for &krate in &*all_crates(db) {
TraitImpls::for_crate(db, krate)
.for_self_ty(&simplified_ty, &mut extend_with_impls);
}
@@ -7175,7 +7175,7 @@ pub fn resolve_absolute_path<'a, I: Iterator<Item = Symbol> + Clone + 'a>(
.next()
.into_iter()
.flat_map(move |crate_name| {
- db.all_crates()
+ all_crates(db)
.iter()
.filter(|&krate| {
krate
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 4e9e3c44be..9a31a08ffb 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -10,7 +10,7 @@ use std::{
ops::{self, ControlFlow, Not},
};
-use base_db::FxIndexSet;
+use base_db::{FxIndexSet, all_crates, toolchain_channel};
use either::Either;
use hir_def::{
BuiltinDeriveImplId, DefWithBodyId, ExpressionStoreOwnerId, HasModule, MacroId, StructId,
@@ -392,7 +392,7 @@ impl<DB: HirDatabase + ?Sized> Semantics<'_, DB> {
}
pub fn is_nightly(&self, krate: Crate) -> bool {
- let toolchain = self.db.toolchain_channel(krate.into());
+ let toolchain = toolchain_channel(self.db.as_dyn_database(), krate.into());
// `toolchain == None` means we're in some detached files. Since we have no information on
// the toolchain being used, let's just allow unstable items to be listed.
matches!(toolchain, Some(base_db::ReleaseChannel::Nightly) | None)
@@ -458,7 +458,7 @@ impl<'db> SemanticsImpl<'db> {
pub fn parse(&self, file_id: EditionedFileId) -> ast::SourceFile {
let hir_file_id = file_id.into();
- let tree = self.db.parse(file_id).tree();
+ let tree = file_id.parse(self.db).tree();
self.cache(tree.syntax().clone(), hir_file_id);
tree
}
@@ -467,7 +467,7 @@ impl<'db> SemanticsImpl<'db> {
pub fn first_crate(&self, file: FileId) -> Option<Crate> {
match self.file_to_module_defs(file).next() {
Some(module) => Some(module.krate(self.db)),
- None => self.db.all_crates().last().copied().map(Into::into),
+ None => all_crates(self.db).last().copied().map(Into::into),
}
}
@@ -484,7 +484,7 @@ impl<'db> SemanticsImpl<'db> {
pub fn parse_guess_edition(&self, file_id: FileId) -> ast::SourceFile {
let file_id = self.attach_first_edition(file_id);
- let tree = self.db.parse(file_id).tree();
+ let tree = file_id.parse(self.db).tree();
self.cache(tree.syntax().clone(), file_id.into());
tree
}
@@ -2461,7 +2461,7 @@ fn macro_call_to_macro_id(
Either::Left(it) => {
let node = match it.file_id {
HirFileId::FileId(file_id) => {
- it.to_ptr(db).to_node(&db.parse(file_id).syntax_node())
+ it.to_ptr(db).to_node(&file_id.parse(db).syntax_node())
}
HirFileId::MacroFile(macro_file) => {
let expansion_info = ctx.cache.get_or_insert_expansion(ctx.db, macro_file);
@@ -2473,7 +2473,7 @@ fn macro_call_to_macro_id(
Either::Right(it) => {
let node = match it.file_id {
HirFileId::FileId(file_id) => {
- it.to_ptr(db).to_node(&db.parse(file_id).syntax_node())
+ it.to_ptr(db).to_node(&file_id.parse(db).syntax_node())
}
HirFileId::MacroFile(macro_file) => {
let expansion_info = ctx.cache.get_or_insert_expansion(ctx.db, macro_file);
diff --git a/crates/hir/src/semantics/source_to_def.rs b/crates/hir/src/semantics/source_to_def.rs
index a9a779a287..59bccc22d8 100644
--- a/crates/hir/src/semantics/source_to_def.rs
+++ b/crates/hir/src/semantics/source_to_def.rs
@@ -85,6 +85,7 @@
//! active crate for a given position, and then provide an API to resolve all
//! syntax nodes against this specific crate.
+use base_db::relevant_crates;
use either::Either;
use hir_def::{
AdtId, BlockId, BuiltinDeriveImplId, ConstId, ConstParamId, DefWithBodyId, EnumId,
@@ -145,7 +146,7 @@ impl SourceToDefCache {
return m;
}
self.included_file_cache.insert(file, None);
- for &crate_id in db.relevant_crates(file.file_id(db)).iter() {
+ for &crate_id in relevant_crates(db, file.file_id(db)).iter() {
db.include_macro_invoc(crate_id).iter().for_each(|&(macro_call_id, file_id)| {
self.included_file_cache.insert(file_id, Some(macro_call_id));
});
@@ -180,7 +181,7 @@ impl SourceToDefCtx<'_, '_> {
self.cache.file_to_def_cache.entry(file).or_insert_with(|| {
let mut mods = SmallVec::new();
- for &crate_id in self.db.relevant_crates(file).iter() {
+ for &crate_id in relevant_crates(self.db, file).iter() {
// Note: `mod` declarations in block modules cannot be supported here
let crate_def_map = crate_def_map(self.db, crate_id);
let n_mods = mods.len();
diff --git a/crates/ide-completion/src/context.rs b/crates/ide-completion/src/context.rs
index 4fd0348156..a91f123176 100644
--- a/crates/ide-completion/src/context.rs
+++ b/crates/ide-completion/src/context.rs
@@ -6,7 +6,7 @@ mod tests;
use std::iter;
-use base_db::RootQueryDb as _;
+use base_db::toolchain_channel;
use hir::{
DisplayTarget, HasAttrs, InFile, Local, ModuleDef, ModuleSource, Name, PathResolution,
ScopeDef, Semantics, SemanticsScope, Symbol, Type, TypeInfo,
@@ -715,7 +715,7 @@ impl<'db> CompletionContext<'db> {
// actual completion.
let file_with_fake_ident = {
let (_, edition) = editioned_file_id.unpack(db);
- let parse = db.parse(editioned_file_id);
+ let parse = editioned_file_id.parse(db);
parse.reparse(TextRange::empty(offset), COMPLETION_MARKER, edition).tree()
};
@@ -768,7 +768,7 @@ impl<'db> CompletionContext<'db> {
let containing_function = scope.containing_function();
let edition = krate.edition(db);
- let toolchain = db.toolchain_channel(krate.into());
+ let toolchain = toolchain_channel(db, krate.into());
// `toolchain == None` means we're in some detached files. Since we have no information on
// the toolchain being used, let's just allow unstable items to be listed.
let is_nightly = matches!(toolchain, Some(base_db::ReleaseChannel::Nightly) | None);
diff --git a/crates/ide-db/src/lib.rs b/crates/ide-db/src/lib.rs
index cde0705d8a..8d16826e19 100644
--- a/crates/ide-db/src/lib.rs
+++ b/crates/ide-db/src/lib.rs
@@ -60,8 +60,8 @@ use salsa::Durability;
use std::{fmt, mem::ManuallyDrop};
use base_db::{
- CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Files, Nonce, RootQueryDb,
- SourceDatabase, SourceRoot, SourceRootId, SourceRootInput, query_group,
+ CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Files, Nonce, SourceDatabase,
+ SourceRoot, SourceRootId, SourceRootInput, query_group, set_all_crates_with_durability,
};
use hir::{
FilePositionWrapper, FileRangeWrapper,
@@ -197,7 +197,7 @@ impl RootDatabase {
nonce: Nonce::new(),
};
// This needs to be here otherwise `CrateGraphBuilder` will panic.
- db.set_all_crates(Arc::new(Box::new([])));
+ set_all_crates_with_durability(&mut db, std::iter::empty(), Durability::HIGH);
CrateGraphBuilder::default().set_in_db(&mut db);
db.set_proc_macros_with_durability(Default::default(), Durability::MEDIUM);
_ = base_db::LibraryRoots::builder(Default::default())
@@ -253,7 +253,7 @@ impl RootDatabase {
}
#[query_group::query_group]
-pub trait LineIndexDatabase: base_db::RootQueryDb {
+pub trait LineIndexDatabase: base_db::SourceDatabase {
#[salsa::invoke_interned(line_index)]
fn line_index(&self, file_id: FileId) -> Arc<LineIndex>;
}
diff --git a/crates/ide-db/src/prime_caches.rs b/crates/ide-db/src/prime_caches.rs
index d264428212..12a48d65ac 100644
--- a/crates/ide-db/src/prime_caches.rs
+++ b/crates/ide-db/src/prime_caches.rs
@@ -4,15 +4,12 @@
//! various caches, it's not really advanced at the moment.
use std::panic::AssertUnwindSafe;
+use base_db::all_crates;
use hir::{Symbol, import_map::ImportMap};
use rustc_hash::FxHashMap;
use salsa::{Cancelled, Database};
-use crate::{
- FxIndexMap, RootDatabase,
- base_db::{Crate, RootQueryDb},
- symbol_index::SymbolIndex,
-};
+use crate::{FxIndexMap, RootDatabase, base_db::Crate, symbol_index::SymbolIndex};
/// We're indexing many crates.
#[derive(Debug)]
@@ -56,7 +53,7 @@ pub fn parallel_prime_caches(
// to compute the symbols/import map of an already computed def map in that time.
let (reverse_deps, mut to_be_done_deps) = {
- let all_crates = db.all_crates();
+ let all_crates = all_crates(db);
let to_be_done_deps = all_crates
.iter()
.map(|&krate| (krate, krate.data(db).dependencies.len() as u32))
@@ -200,7 +197,7 @@ pub fn parallel_prime_caches(
)
};
- let crate_def_maps_total = db.all_crates().len();
+ let crate_def_maps_total = all_crates(db).len();
let mut crate_def_maps_done = 0;
let (mut crate_import_maps_total, mut crate_import_maps_done) = (0usize, 0usize);
let (mut module_symbols_total, mut module_symbols_done) = (0usize, 0usize);
diff --git a/crates/ide-db/src/search.rs b/crates/ide-db/src/search.rs
index 25acb47f7b..69459a4b72 100644
--- a/crates/ide-db/src/search.rs
+++ b/crates/ide-db/src/search.rs
@@ -7,7 +7,7 @@
use std::mem;
use std::{cell::LazyCell, cmp::Reverse};
-use base_db::{RootQueryDb, SourceDatabase};
+use base_db::{SourceDatabase, all_crates};
use either::Either;
use hir::{
Adt, AsAssocItem, DefWithBody, EditionedFileId, ExpressionStoreOwner, FileRange,
@@ -161,7 +161,7 @@ impl SearchScope {
fn crate_graph(db: &RootDatabase) -> SearchScope {
let mut entries = FxHashMap::default();
- let all_crates = db.all_crates();
+ let all_crates = all_crates(db);
for &krate in all_crates.iter() {
let crate_data = krate.data(db);
let source_root = db.file_source_root(crate_data.root_file_id).source_root_id(db);
diff --git a/crates/ide-db/src/symbol_index.rs b/crates/ide-db/src/symbol_index.rs
index 183f6b6495..2ad3a51c3d 100644
--- a/crates/ide-db/src/symbol_index.rs
+++ b/crates/ide-db/src/symbol_index.rs
@@ -27,7 +27,10 @@ use std::{
ops::ControlFlow,
};
-use base_db::{CrateOrigin, LangCrateOrigin, LibraryRoots, LocalRoots, RootQueryDb, SourceRootId};
+use base_db::{
+ CrateOrigin, InternedSourceRootId, LangCrateOrigin, LibraryRoots, LocalRoots, SourceRootId,
+ source_root_crates,
+};
use fst::{Automaton, Streamer, raw::IndexedValue};
use hir::{
Crate, Module,
@@ -255,7 +258,7 @@ pub fn world_symbols(db: &RootDatabase, mut query: Query) -> Vec<FileSymbol<'_>>
let mut crates = Vec::new();
for &root in LocalRoots::get(db).roots(db).iter() {
- crates.extend(db.source_root_crates(root).iter().copied())
+ crates.extend(source_root_crates(db, root).iter().copied())
}
crates
.par_iter()
@@ -322,7 +325,7 @@ fn resolve_path_to_modules(
// If not anchored to crate, also search for modules matching first segment in local crates
if !anchor_to_crate {
for &root in LocalRoots::get(db).roots(db).iter() {
- for &krate in db.source_root_crates(root).iter() {
+ for &krate in source_root_crates(db, root).iter() {
let root_module = Crate::from(krate).root_module(db);
for child in root_module.children(db) {
if let Some(name) = child.name(db)
@@ -369,11 +372,6 @@ impl<'db> SymbolIndex<'db> {
db: &'db dyn HirDatabase,
source_root_id: SourceRootId,
) -> &'db SymbolIndex<'db> {
- // FIXME:
- #[salsa::interned]
- struct InternedSourceRootId {
- id: SourceRootId,
- }
#[salsa::tracked(returns(ref))]
fn library_symbols<'db>(
db: &'db dyn HirDatabase,
@@ -385,7 +383,7 @@ impl<'db> SymbolIndex<'db> {
hir::attach_db(db, || {
let mut symbol_collector = SymbolCollector::new(db, true);
- db.source_root_crates(source_root_id.id(db))
+ source_root_crates(db, source_root_id.id(db))
.iter()
.flat_map(|&krate| Crate::from(krate).modules(db))
// we specifically avoid calling other SymbolsDatabase queries here, even though they do the same thing,
diff --git a/crates/ide-db/src/test_data/test_doc_alias.txt b/crates/ide-db/src/test_data/test_doc_alias.txt
index fc98ebb069..17d002e8bf 100644
--- a/crates/ide-db/src/test_data/test_doc_alias.txt
+++ b/crates/ide-db/src/test_data/test_doc_alias.txt
@@ -2,7 +2,7 @@
(
Module {
id: ModuleIdLt {
- [salsa id]: Id(3400),
+ [salsa id]: Id(3000),
},
},
[
@@ -12,7 +12,7 @@
Struct(
Struct {
id: StructId(
- 3c01,
+ 3801,
),
},
),
@@ -20,7 +20,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -49,7 +49,7 @@
Struct(
Struct {
id: StructId(
- 3c00,
+ 3800,
),
},
),
@@ -57,7 +57,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -86,7 +86,7 @@
Struct(
Struct {
id: StructId(
- 3c00,
+ 3800,
),
},
),
@@ -94,7 +94,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -123,7 +123,7 @@
Struct(
Struct {
id: StructId(
- 3c00,
+ 3800,
),
},
),
@@ -131,7 +131,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -160,7 +160,7 @@
Struct(
Struct {
id: StructId(
- 3c00,
+ 3800,
),
},
),
@@ -168,7 +168,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -197,7 +197,7 @@
Struct(
Struct {
id: StructId(
- 3c01,
+ 3801,
),
},
),
@@ -205,7 +205,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -234,7 +234,7 @@
Struct(
Struct {
id: StructId(
- 3c00,
+ 3800,
),
},
),
@@ -242,7 +242,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
diff --git a/crates/ide-db/src/test_data/test_symbol_index_collection.txt b/crates/ide-db/src/test_data/test_symbol_index_collection.txt
index 02a023038a..1b20a574bd 100644
--- a/crates/ide-db/src/test_data/test_symbol_index_collection.txt
+++ b/crates/ide-db/src/test_data/test_symbol_index_collection.txt
@@ -2,7 +2,7 @@
(
Module {
id: ModuleIdLt {
- [salsa id]: Id(3400),
+ [salsa id]: Id(3000),
},
},
[
@@ -11,14 +11,14 @@
def: EnumVariant(
EnumVariant {
id: EnumVariantId(
- 7c00,
+ 7800,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -48,14 +48,14 @@
def: TypeAlias(
TypeAlias {
id: TypeAliasId(
- 7000,
+ 6c00,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -83,14 +83,14 @@
def: EnumVariant(
EnumVariant {
id: EnumVariantId(
- 7c01,
+ 7801,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -120,14 +120,14 @@
def: Const(
Const {
id: ConstId(
- 6800,
+ 6400,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -155,14 +155,14 @@
def: Const(
Const {
id: ConstId(
- 6802,
+ 6402,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -191,7 +191,7 @@
Enum(
Enum {
id: EnumId(
- 5400,
+ 5000,
),
},
),
@@ -199,7 +199,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -228,7 +228,7 @@
Macro {
id: Macro2Id(
Macro2Id(
- 5000,
+ 4c00,
),
),
},
@@ -236,7 +236,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -265,7 +265,7 @@
Macro {
id: Macro2Id(
Macro2Id(
- 5000,
+ 4c00,
),
),
},
@@ -273,7 +273,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -301,14 +301,14 @@
def: Static(
Static {
id: StaticId(
- 6c00,
+ 6800,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -337,7 +337,7 @@
Struct(
Struct {
id: StructId(
- 4c01,
+ 4801,
),
},
),
@@ -345,7 +345,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -374,7 +374,7 @@
Struct(
Struct {
id: StructId(
- 4c00,
+ 4800,
),
},
),
@@ -382,7 +382,7 @@
loc: DeclarationLocation {
hir_file_id: MacroFile(
MacroCallId(
- Id(4400),
+ Id(4000),
),
),
ptr: SyntaxNodePtr {
@@ -411,7 +411,7 @@
Struct(
Struct {
id: StructId(
- 4c05,
+ 4805,
),
},
),
@@ -419,7 +419,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -450,7 +450,7 @@
Struct(
Struct {
id: StructId(
- 4c06,
+ 4806,
),
},
),
@@ -458,7 +458,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -489,7 +489,7 @@
Struct(
Struct {
id: StructId(
- 4c07,
+ 4807,
),
},
),
@@ -497,7 +497,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -526,7 +526,7 @@
Struct(
Struct {
id: StructId(
- 4c02,
+ 4802,
),
},
),
@@ -534,7 +534,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -562,14 +562,14 @@
def: Trait(
Trait {
id: TraitId(
- 6000,
+ 5c00,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -598,7 +598,7 @@
Macro {
id: Macro2Id(
Macro2Id(
- 5000,
+ 4c00,
),
),
},
@@ -606,7 +606,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -635,7 +635,7 @@
Union(
Union {
id: UnionId(
- 5800,
+ 5400,
),
},
),
@@ -643,7 +643,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -671,14 +671,14 @@
def: Module(
Module {
id: ModuleIdLt {
- [salsa id]: Id(3401),
+ [salsa id]: Id(3001),
},
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -706,14 +706,14 @@
def: Module(
Module {
id: ModuleIdLt {
- [salsa id]: Id(3402),
+ [salsa id]: Id(3002),
},
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -742,7 +742,7 @@
Macro {
id: MacroRulesId(
MacroRulesId(
- 4001,
+ 3c01,
),
),
},
@@ -750,7 +750,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -778,14 +778,14 @@
def: Function(
FunctionId(
FunctionId(
- 6402,
+ 6002,
),
),
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -815,14 +815,14 @@
def: Function(
FunctionId(
FunctionId(
- 6401,
+ 6001,
),
),
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -853,7 +853,7 @@
Macro {
id: MacroRulesId(
MacroRulesId(
- 4000,
+ 3c00,
),
),
},
@@ -861,7 +861,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -889,14 +889,14 @@
def: Function(
FunctionId(
FunctionId(
- 6400,
+ 6000,
),
),
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -925,7 +925,7 @@
Macro {
id: MacroRulesId(
MacroRulesId(
- 4001,
+ 3c01,
),
),
},
@@ -933,7 +933,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -961,14 +961,14 @@
def: Function(
FunctionId(
FunctionId(
- 6403,
+ 6003,
),
),
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -998,7 +998,7 @@
(
Module {
id: ModuleIdLt {
- [salsa id]: Id(3401),
+ [salsa id]: Id(3001),
},
},
[
@@ -1008,7 +1008,7 @@
Struct(
Struct {
id: StructId(
- 4c03,
+ 4803,
),
},
),
@@ -1016,7 +1016,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
@@ -1044,7 +1044,7 @@
(
Module {
id: ModuleIdLt {
- [salsa id]: Id(3402),
+ [salsa id]: Id(3002),
},
},
[
@@ -1053,14 +1053,14 @@
def: Trait(
Trait {
id: TraitId(
- 6000,
+ 5c00,
),
},
),
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
@@ -1089,7 +1089,7 @@
Macro {
id: Macro2Id(
Macro2Id(
- 5000,
+ 4c00,
),
),
},
@@ -1097,7 +1097,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
@@ -1126,7 +1126,7 @@
Struct(
Struct {
id: StructId(
- 4c04,
+ 4804,
),
},
),
@@ -1134,7 +1134,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
@@ -1163,7 +1163,7 @@
Macro {
id: Macro2Id(
Macro2Id(
- 5000,
+ 4c00,
),
),
},
@@ -1171,7 +1171,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
@@ -1200,7 +1200,7 @@
Struct(
Struct {
id: StructId(
- 4c04,
+ 4804,
),
},
),
@@ -1208,7 +1208,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
diff --git a/crates/ide-db/src/test_data/test_symbols_exclude_imports.txt b/crates/ide-db/src/test_data/test_symbols_exclude_imports.txt
index aff1d56c56..f8ae687b78 100644
--- a/crates/ide-db/src/test_data/test_symbols_exclude_imports.txt
+++ b/crates/ide-db/src/test_data/test_symbols_exclude_imports.txt
@@ -5,7 +5,7 @@
Struct(
Struct {
id: StructId(
- 4000,
+ 3c00,
),
},
),
@@ -13,7 +13,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
diff --git a/crates/ide-db/src/test_data/test_symbols_with_imports.txt b/crates/ide-db/src/test_data/test_symbols_with_imports.txt
index bf5d81cfb1..2282815a61 100644
--- a/crates/ide-db/src/test_data/test_symbols_with_imports.txt
+++ b/crates/ide-db/src/test_data/test_symbols_with_imports.txt
@@ -5,7 +5,7 @@
Struct(
Struct {
id: StructId(
- 4000,
+ 3c00,
),
},
),
@@ -13,7 +13,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3001),
+ Id(2c01),
),
),
ptr: SyntaxNodePtr {
@@ -42,7 +42,7 @@
Struct(
Struct {
id: StructId(
- 4000,
+ 3c00,
),
},
),
@@ -50,7 +50,7 @@
loc: DeclarationLocation {
hir_file_id: FileId(
EditionedFileId(
- Id(3000),
+ Id(2c00),
),
),
ptr: SyntaxNodePtr {
diff --git a/crates/ide-diagnostics/src/handlers/unlinked_file.rs b/crates/ide-diagnostics/src/handlers/unlinked_file.rs
index 1283a11700..d7a0a3b0f5 100644
--- a/crates/ide-diagnostics/src/handlers/unlinked_file.rs
+++ b/crates/ide-diagnostics/src/handlers/unlinked_file.rs
@@ -4,7 +4,7 @@ use std::iter;
use hir::crate_def_map;
use hir::{InFile, ModuleSource};
-use ide_db::base_db::RootQueryDb;
+use ide_db::base_db;
use ide_db::text_edit::TextEdit;
use ide_db::{
FileId, FileRange, LineIndexDatabase, base_db::SourceDatabase, source_change::SourceChange,
@@ -101,8 +101,8 @@ fn fixes(
};
// check crate roots, i.e. main.rs, lib.rs, ...
- let relevant_crates = db.relevant_crates(file_id);
- 'crates: for &krate in &*relevant_crates {
+ let relevant_crates = base_db::relevant_crates(db, file_id);
+ 'crates: for &krate in relevant_crates {
// FIXME: This shouldnt need to access the crate def map directly
let crate_def_map = crate_def_map(ctx.sema.db, krate);
@@ -157,7 +157,7 @@ fn fixes(
paths.into_iter().find_map(|path| source_root.file_for_path(&path))
})?;
stack.pop();
- let relevant_crates = db.relevant_crates(parent_id);
+ let relevant_crates = base_db::relevant_crates(db, parent_id);
'crates: for &krate in relevant_crates.iter() {
let crate_def_map = crate_def_map(ctx.sema.db, krate);
let Some((_, module)) = crate_def_map.modules().find(|(_, module)| {
diff --git a/crates/ide-diagnostics/src/lib.rs b/crates/ide-diagnostics/src/lib.rs
index a74a52ceec..519639db00 100644
--- a/crates/ide-diagnostics/src/lib.rs
+++ b/crates/ide-diagnostics/src/lib.rs
@@ -96,7 +96,7 @@ use hir::{
use ide_db::{
FileId, FileRange, FxHashMap, FxHashSet, RootDatabase, Severity, SnippetCap,
assists::{Assist, AssistId, AssistResolveStrategy, ExprFillDefaultMode},
- base_db::{ReleaseChannel, RootQueryDb as _},
+ base_db::{ReleaseChannel, all_crates, toolchain_channel},
generated::lints::{CLIPPY_LINT_GROUPS, DEFAULT_LINT_GROUPS, DEFAULT_LINTS, Lint, LintGroup},
imports::insert_use::InsertUseConfig,
label::Label,
@@ -303,7 +303,8 @@ pub fn syntax_diagnostics(
let (file_id, _) = editioned_file_id.unpack(db);
// [#3434] Only take first 128 errors to prevent slowing down editor/ide, the number 128 is chosen arbitrarily.
- db.parse_errors(editioned_file_id)
+ editioned_file_id
+ .parse_errors(db)
.into_iter()
.flatten()
.take(128)
@@ -353,14 +354,14 @@ pub fn semantic_diagnostics(
let module = sema.file_to_module_def(file_id);
let is_nightly = matches!(
- module.and_then(|m| db.toolchain_channel(m.krate(db).into())),
+ module.and_then(|m| toolchain_channel(db, m.krate(db).into())),
Some(ReleaseChannel::Nightly) | None
);
let krate = match module {
Some(module) => module.krate(db),
None => {
- match db.all_crates().last() {
+ match all_crates(db).last() {
Some(last) => (*last).into(),
// short-circuit, return an empty vec of diagnostics
None => return vec![],
@@ -375,7 +376,7 @@ pub fn semantic_diagnostics(
// A bunch of parse errors in a file indicate some bigger structural parse changes in the
// file, so we skip semantic diagnostics so we can show these faster.
Some(m) => {
- if db.parse_errors(editioned_file_id).is_none_or(|es| es.len() < 16) {
+ if editioned_file_id.parse_errors(db).is_none_or(|es| es.len() < 16) {
m.diagnostics(db, &mut diags, config.style_lints);
}
}
diff --git a/crates/ide-ssr/src/from_comment.rs b/crates/ide-ssr/src/from_comment.rs
index 181cc74a51..83b8c3dc81 100644
--- a/crates/ide-ssr/src/from_comment.rs
+++ b/crates/ide-ssr/src/from_comment.rs
@@ -1,7 +1,7 @@
//! This module allows building an SSR MatchFinder by parsing the SSR rule
//! from a comment.
-use ide_db::{EditionedFileId, FilePosition, FileRange, RootDatabase, base_db::RootQueryDb};
+use ide_db::{EditionedFileId, FilePosition, FileRange, RootDatabase};
use syntax::{
TextRange,
ast::{self, AstNode, AstToken},
@@ -19,7 +19,7 @@ pub fn ssr_from_comment(
let comment = {
let file_id = EditionedFileId::current_edition(db, frange.file_id);
- let file = db.parse(file_id);
+ let file = file_id.parse(db);
file.tree().syntax().token_at_offset(frange.range.start()).find_map(ast::Comment::cast)
}?;
let comment_text_without_prefix = comment.text().strip_prefix(comment.prefix()).unwrap();
diff --git a/crates/ide-ssr/src/matching.rs b/crates/ide-ssr/src/matching.rs
index 264f0660d7..ab5a0f70f5 100644
--- a/crates/ide-ssr/src/matching.rs
+++ b/crates/ide-ssr/src/matching.rs
@@ -7,7 +7,7 @@ use crate::{
resolving::{ResolvedPattern, ResolvedRule, UfcsCallInfo},
};
use hir::{FileRange, FindPathConfig, Semantics};
-use ide_db::{FxHashMap, base_db::RootQueryDb};
+use ide_db::{FxHashMap, base_db::all_crates};
use std::{cell::Cell, iter::Peekable};
use syntax::{
SmolStr, SyntaxElement, SyntaxElementChildren, SyntaxKind, SyntaxNode, SyntaxToken,
@@ -621,7 +621,7 @@ impl<'db, 'sema> Matcher<'db, 'sema> {
})?
.original;
let krate = self.sema.scope(expr.syntax()).map(|it| it.krate()).unwrap_or_else(|| {
- hir::Crate::from(*self.sema.db.all_crates().last().expect("no crate graph present"))
+ hir::Crate::from(*all_crates(self.sema.db).last().expect("no crate graph present"))
});
code_type
diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs
index 33bed9501a..fd462d003d 100644
--- a/crates/ide/src/doc_links.rs
+++ b/crates/ide/src/doc_links.rs
@@ -17,7 +17,7 @@ use hir::{
};
use ide_db::{
RootDatabase,
- base_db::{CrateOrigin, LangCrateOrigin, ReleaseChannel, RootQueryDb},
+ base_db::{CrateOrigin, LangCrateOrigin, ReleaseChannel, toolchain_channel},
defs::{Definition, NameClass, NameRefClass},
documentation::{Documentation, HasDocs},
helpers::pick_best_token,
@@ -552,7 +552,7 @@ fn get_doc_base_urls(
.and_then(|it| Url::parse(&it).ok());
let krate = def.krate(db);
let channel = krate
- .and_then(|krate| db.toolchain_channel(krate.into()))
+ .and_then(|krate| toolchain_channel(db, krate.into()))
.unwrap_or(ReleaseChannel::Nightly)
.as_str();
diff --git a/crates/ide/src/expand_macro.rs b/crates/ide/src/expand_macro.rs
index 44285d9315..6f4ea70e0a 100644
--- a/crates/ide/src/expand_macro.rs
+++ b/crates/ide/src/expand_macro.rs
@@ -235,7 +235,7 @@ fn _format(
file_id: FileId,
expansion: &str,
) -> Option<String> {
- use ide_db::base_db::RootQueryDb;
+ use ide_db::base_db::relevant_crates;
// hack until we get hygiene working (same character amount to preserve formatting as much as possible)
const DOLLAR_CRATE_REPLACE: &str = "__r_a_";
@@ -250,7 +250,7 @@ fn _format(
};
let expansion = format!("{prefix}{expansion}{suffix}");
- let &crate_id = db.relevant_crates(file_id).iter().next()?;
+ let &crate_id = relevant_crates(db, file_id).iter().next()?;
let edition = crate_id.data(db).edition;
#[allow(clippy::disallowed_methods)]
diff --git a/crates/ide/src/fetch_crates.rs b/crates/ide/src/fetch_crates.rs
index 956379e722..ad5af8bfe1 100644
--- a/crates/ide/src/fetch_crates.rs
+++ b/crates/ide/src/fetch_crates.rs
@@ -1,6 +1,6 @@
use ide_db::{
FileId, FxIndexSet, RootDatabase,
- base_db::{CrateOrigin, RootQueryDb},
+ base_db::{CrateOrigin, all_crates},
};
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -20,7 +20,7 @@ pub struct CrateInfo {
//
// ![Show Dependency Tree](https://user-images.githubusercontent.com/5748995/229394139-2625beab-f4c9-484b-84ed-ad5dee0b1e1a.png)
pub(crate) fn fetch_crates(db: &RootDatabase) -> FxIndexSet<CrateInfo> {
- db.all_crates()
+ all_crates(db)
.iter()
.copied()
.map(|crate_id| (crate_id.data(db), crate_id.extra_data(db)))
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 196ada2a6e..f3e51e1919 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -63,11 +63,12 @@ use std::panic::{AssertUnwindSafe, UnwindSafe};
use cfg::CfgOptions;
use fetch_crates::CrateInfo;
use hir::{ChangeWithProcMacros, EditionedFileId, crate_def_map, sym};
+use ide_db::base_db::relevant_crates;
use ide_db::ra_fixture::RaFixtureAnalysis;
use ide_db::{
FxHashMap, FxIndexSet, LineIndexDatabase,
base_db::{
- CrateOrigin, CrateWorkspaceData, Env, FileSet, RootQueryDb, SourceDatabase, VfsPath,
+ CrateOrigin, CrateWorkspaceData, Env, FileSet, SourceDatabase, VfsPath,
salsa::{Cancelled, Database},
},
prime_caches, symbol_index,
@@ -342,7 +343,7 @@ impl Analysis {
self.with_db(|db| {
let editioned_file_id_wrapper = EditionedFileId::current_edition(&self.db, file_id);
- db.parse(editioned_file_id_wrapper).tree()
+ editioned_file_id_wrapper.parse(db).tree()
})
}
@@ -370,7 +371,7 @@ impl Analysis {
pub fn matching_brace(&self, position: FilePosition) -> Cancellable<Option<TextSize>> {
self.with_db(|db| {
let file_id = EditionedFileId::current_edition(&self.db, position.file_id);
- let parse = db.parse(file_id);
+ let parse = file_id.parse(db);
let file = parse.tree();
matching_brace::matching_brace(&file, position.offset)
})
@@ -431,7 +432,7 @@ impl Analysis {
self.with_db(|db| {
let editioned_file_id_wrapper =
EditionedFileId::current_edition(&self.db, frange.file_id);
- let parse = db.parse(editioned_file_id_wrapper);
+ let parse = editioned_file_id_wrapper.parse(db);
join_lines::join_lines(config, &parse.tree(), frange.range)
})
}
@@ -472,7 +473,7 @@ impl Analysis {
// FIXME: Edition
self.with_db(|db| {
let editioned_file_id_wrapper = EditionedFileId::current_edition(&self.db, file_id);
- let source_file = db.parse(editioned_file_id_wrapper).tree();
+ let source_file = editioned_file_id_wrapper.parse(db).tree();
file_structure::file_structure(&source_file, config)
})
}
@@ -505,7 +506,7 @@ impl Analysis {
let editioned_file_id_wrapper = EditionedFileId::current_edition(&self.db, file_id);
folding_ranges::folding_ranges(
- &db.parse(editioned_file_id_wrapper).tree(),
+ &editioned_file_id_wrapper.parse(db).tree(),
collapsed_text,
)
})
@@ -658,7 +659,7 @@ impl Analysis {
/// Returns crates that this file *might* belong to.
pub fn relevant_crates_for(&self, file_id: FileId) -> Cancellable<Vec<Crate>> {
- self.with_db(|db| db.relevant_crates(file_id).iter().copied().collect())
+ self.with_db(|db| relevant_crates(db, file_id).to_vec())
}
/// Returns the edition of the given crate.
diff --git a/crates/ide/src/navigation_target.rs b/crates/ide/src/navigation_target.rs
index 92020321f4..99f8634bcb 100644
--- a/crates/ide/src/navigation_target.rs
+++ b/crates/ide/src/navigation_target.rs
@@ -11,7 +11,7 @@ use hir::{
};
use ide_db::{
FileId, FileRange, RootDatabase, SymbolKind,
- base_db::{CrateOrigin, LangCrateOrigin, RootQueryDb},
+ base_db::{CrateOrigin, LangCrateOrigin, all_crates},
defs::{Definition, find_std_module},
documentation::{Documentation, HasDocs},
famous_defs::FamousDefs,
@@ -861,8 +861,7 @@ impl TryToNav for hir::BuiltinType {
sema: &Semantics<'_, RootDatabase>,
) -> Option<UpmappingResult<NavigationTarget>> {
let db = sema.db;
- let krate = db
- .all_crates()
+ let krate = all_crates(db)
.iter()
.copied()
.find(|&krate| matches!(krate.data(db).origin, CrateOrigin::Lang(LangCrateOrigin::Std)))
diff --git a/crates/ide/src/parent_module.rs b/crates/ide/src/parent_module.rs
index 96d829d126..509ec2ab40 100644
--- a/crates/ide/src/parent_module.rs
+++ b/crates/ide/src/parent_module.rs
@@ -1,7 +1,7 @@
use hir::{Semantics, crate_def_map};
use ide_db::{
FileId, FilePosition, RootDatabase,
- base_db::{Crate, RootQueryDb},
+ base_db::{Crate, relevant_crates},
};
use itertools::Itertools;
use syntax::{
@@ -53,7 +53,7 @@ pub(crate) fn parent_module(db: &RootDatabase, position: FilePosition) -> Vec<Na
/// This returns `Vec` because a module may be included from several places.
pub(crate) fn crates_for(db: &RootDatabase, file_id: FileId) -> Vec<Crate> {
- db.relevant_crates(file_id)
+ relevant_crates(db, file_id)
.iter()
.copied()
.filter(|&crate_id| {
diff --git a/crates/ide/src/runnables.rs b/crates/ide/src/runnables.rs
index 7b8313b4cb..3b472390d2 100644
--- a/crates/ide/src/runnables.rs
+++ b/crates/ide/src/runnables.rs
@@ -5,10 +5,10 @@ use ast::HasName;
use cfg::{CfgAtom, CfgExpr};
use hir::{AsAssocItem, HasAttrs, HasCrate, HasSource, Semantics, Symbol, sym};
use ide_assists::utils::{has_test_related_attribute, test_related_attribute_syn};
+use ide_db::base_db::all_crates;
use ide_db::impl_empty_upmap_from_ra_fixture;
use ide_db::{
FilePosition, FxHashMap, FxIndexMap, FxIndexSet, RootDatabase, SymbolKind,
- base_db::RootQueryDb,
defs::Definition,
helpers::visit_file_defs,
search::{FileReferenceNode, SearchScope},
@@ -505,7 +505,7 @@ fn module_def_doctest(sema: &Semantics<'_, RootDatabase>, def: Definition) -> Op
let krate = def.krate(db);
let edition = krate.map(|it| it.edition(db)).unwrap_or(Edition::CURRENT);
let display_target = krate
- .unwrap_or_else(|| (*db.all_crates().last().expect("no crate graph present")).into())
+ .unwrap_or_else(|| (*all_crates(db).last().expect("no crate graph present")).into())
.to_display_target(db);
if !has_runnable_doc_test(db, &attrs) {
return None;
diff --git a/crates/ide/src/signature_help.rs b/crates/ide/src/signature_help.rs
index 9eb01b12f2..cf796b2715 100644
--- a/crates/ide/src/signature_help.rs
+++ b/crates/ide/src/signature_help.rs
@@ -1975,8 +1975,8 @@ trait Sub: Super + Super {
fn f() -> impl Sub<$0
"#,
expect![[r#"
- trait Sub<SuperTy = …, SubTy = …>
- ^^^^^^^^^^^ ---------
+ trait Sub<SubTy = …, SuperTy = …>
+ ^^^^^^^^^ -----------
"#]],
);
}
diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs
index 3192c4c136..4b2c9ceef9 100644
--- a/crates/ide/src/static_index.rs
+++ b/crates/ide/src/static_index.rs
@@ -5,7 +5,7 @@ use arrayvec::ArrayVec;
use hir::{Crate, Module, Semantics, db::HirDatabase};
use ide_db::{
FileId, FileRange, FxHashMap, FxHashSet, RootDatabase,
- base_db::{RootQueryDb, SourceDatabase, VfsPath},
+ base_db::{SourceDatabase, VfsPath},
defs::{Definition, IdentClass},
documentation::Documentation,
famous_defs::FamousDefs,
@@ -124,16 +124,8 @@ fn documentation_for_definition(
_ => None,
};
- def.docs(
- sema.db,
- famous_defs.as_ref(),
- def.krate(sema.db)
- .unwrap_or_else(|| {
- (*sema.db.all_crates().last().expect("no crate graph present")).into()
- })
- .to_display_target(sema.db),
- )
- .map(Documentation::into_owned)
+ def.docs(sema.db, famous_defs.as_ref(), def.krate(sema.db)?.to_display_target(sema.db))
+ .map(Documentation::into_owned)
}
// FIXME: This is a weird function
diff --git a/crates/ide/src/test_explorer.rs b/crates/ide/src/test_explorer.rs
index 4792566f5f..02040ef138 100644
--- a/crates/ide/src/test_explorer.rs
+++ b/crates/ide/src/test_explorer.rs
@@ -1,8 +1,8 @@
//! Discovers tests
use hir::{Crate, Module, ModuleDef, Semantics};
-use ide_db::base_db;
-use ide_db::{FileId, RootDatabase, base_db::RootQueryDb};
+use ide_db::base_db::{self, all_crates};
+use ide_db::{FileId, RootDatabase};
use syntax::TextRange;
use crate::{NavigationTarget, Runnable, TryToNav, runnables::runnable_fn};
@@ -26,7 +26,7 @@ pub struct TestItem {
}
pub(crate) fn discover_test_roots(db: &RootDatabase) -> Vec<TestItem> {
- db.all_crates()
+ all_crates(db)
.iter()
.copied()
.filter(|&id| id.data(db).origin.is_local())
@@ -48,7 +48,7 @@ pub(crate) fn discover_test_roots(db: &RootDatabase) -> Vec<TestItem> {
fn find_crate_by_id(db: &RootDatabase, crate_id: &str) -> Option<base_db::Crate> {
// here, we use display_name as the crate id. This is not super ideal, but it works since we
// only show tests for the local crates.
- db.all_crates().iter().copied().find(|&id| {
+ all_crates(db).iter().copied().find(|&id| {
id.data(db).origin.is_local()
&& id.extra_data(db).display_name.as_ref().is_some_and(|x| x.to_string() == crate_id)
})
diff --git a/crates/ide/src/typing.rs b/crates/ide/src/typing.rs
index e8b0c92dcb..ec620982ff 100644
--- a/crates/ide/src/typing.rs
+++ b/crates/ide/src/typing.rs
@@ -17,7 +17,7 @@ mod on_enter;
use either::Either;
use hir::EditionedFileId;
-use ide_db::{FilePosition, RootDatabase, base_db::RootQueryDb};
+use ide_db::{FilePosition, RootDatabase, base_db::relevant_crates};
use span::Edition;
use std::iter;
@@ -70,13 +70,12 @@ pub(crate) fn on_char_typed(
if !TRIGGER_CHARS.contains(&char_typed) {
return None;
}
- let edition = db
- .relevant_crates(position.file_id)
+ let edition = relevant_crates(db, position.file_id)
.first()
.copied()
.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 file = &editioned_file_id_wrapper.parse(db);
let char_matches_position =
file.tree().syntax().text().char_at(position.offset) == Some(char_typed);
if !stdx::always!(char_matches_position) {
diff --git a/crates/ide/src/typing/on_enter.rs b/crates/ide/src/typing/on_enter.rs
index fdc583a15c..82f1278398 100644
--- a/crates/ide/src/typing/on_enter.rs
+++ b/crates/ide/src/typing/on_enter.rs
@@ -1,7 +1,6 @@
//! Handles the `Enter` key press. At the momently, this only continues
//! comments, but should handle indent some time in the future as well.
-use ide_db::base_db::RootQueryDb;
use ide_db::{FilePosition, RootDatabase};
use syntax::{
AstNode, SmolStr, SourceFile,
@@ -52,7 +51,7 @@ use ide_db::text_edit::TextEdit;
pub(crate) fn on_enter(db: &RootDatabase, position: FilePosition) -> Option<TextEdit> {
let editioned_file_id_wrapper =
ide_db::base_db::EditionedFileId::current_edition(db, position.file_id);
- let parse = db.parse(editioned_file_id_wrapper);
+ let parse = editioned_file_id_wrapper.parse(db);
let file = parse.tree();
let token = file.syntax().token_at_offset(position.offset).left_biased()?;
diff --git a/crates/ide/src/view_crate_graph.rs b/crates/ide/src/view_crate_graph.rs
index 25deffe10e..e1670b7187 100644
--- a/crates/ide/src/view_crate_graph.rs
+++ b/crates/ide/src/view_crate_graph.rs
@@ -1,10 +1,9 @@
use dot::{Id, LabelText};
+use ide_db::base_db::all_crates;
use ide_db::base_db::salsa::plumbing::AsId;
use ide_db::{
FxHashMap, RootDatabase,
- base_db::{
- BuiltCrateData, BuiltDependency, Crate, ExtraCrateData, RootQueryDb, SourceDatabase,
- },
+ base_db::{BuiltCrateData, BuiltDependency, Crate, ExtraCrateData, SourceDatabase},
};
// Feature: View Crate Graph
@@ -18,7 +17,7 @@ use ide_db::{
// |---------|-------------|
// | VS Code | **rust-analyzer: View Crate Graph** |
pub(crate) fn view_crate_graph(db: &RootDatabase, full: bool) -> Result<String, String> {
- let all_crates = db.all_crates();
+ let all_crates = all_crates(db);
let crates_to_render = all_crates
.iter()
.copied()
diff --git a/crates/load-cargo/src/lib.rs b/crates/load-cargo/src/lib.rs
index 8753eab43a..297e37f1f6 100644
--- a/crates/load-cargo/src/lib.rs
+++ b/crates/load-cargo/src/lib.rs
@@ -738,7 +738,7 @@ fn resolve_sub_span(
#[cfg(test)]
mod tests {
- use ide_db::base_db::RootQueryDb;
+ use ide_db::base_db::all_crates;
use vfs::file_set::FileSetConfigBuilder;
use super::*;
@@ -766,7 +766,7 @@ mod tests {
let (db, _vfs, _proc_macro) =
load_workspace(workspace, &cargo_config.extra_env, &load_cargo_config).unwrap();
- let n_crates = db.all_crates().len();
+ let n_crates = all_crates(&db).len();
// RA has quite a few crates, but the exact count doesn't matter
assert!(n_crates > 20);
}
diff --git a/crates/test-fixture/src/lib.rs b/crates/test-fixture/src/lib.rs
index e271c32c86..f346535ca1 100644
--- a/crates/test-fixture/src/lib.rs
+++ b/crates/test-fixture/src/lib.rs
@@ -11,7 +11,7 @@ use base_db::target::TargetData;
use base_db::{
Crate, CrateDisplayName, CrateGraphBuilder, CrateName, CrateOrigin, CrateWorkspaceData,
DependencyBuilder, Env, FileChange, FileSet, FxIndexMap, LangCrateOrigin, SourceDatabase,
- SourceRoot, Version, VfsPath,
+ SourceRoot, Version, VfsPath, all_crates,
};
use cfg::CfgOptions;
use hir_expand::{
@@ -227,7 +227,7 @@ pub trait WithFixture: Default + ExpandDatabase + SourceDatabase + 'static {
}
fn test_crate(&self) -> Crate {
- self.all_crates().iter().copied().find(|&krate| !krate.data(self).origin.is_lang()).unwrap()
+ all_crates(self).iter().copied().find(|&krate| !krate.data(self).origin.is_lang()).unwrap()
}
}