Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | crates/base-db/src/editioned_file_id.rs | 14 | ||||
| -rw-r--r-- | crates/hir-def/src/nameres/tests/incremental.rs | 1 | ||||
| -rw-r--r-- | crates/hir-ty/src/tests/macros.rs | 10 | ||||
| -rw-r--r-- | crates/ide-db/src/traits.rs | 5 | ||||
| -rw-r--r-- | crates/ide/src/typing.rs | 18 | ||||
| -rw-r--r-- | crates/test-fixture/src/lib.rs | 13 |
6 files changed, 39 insertions, 22 deletions
diff --git a/crates/base-db/src/editioned_file_id.rs b/crates/base-db/src/editioned_file_id.rs index 13fb05d565..062e3b59d9 100644 --- a/crates/base-db/src/editioned_file_id.rs +++ b/crates/base-db/src/editioned_file_id.rs @@ -20,7 +20,7 @@ const _: () = { use zalsa_::interned as zalsa_struct_; type Configuration_ = EditionedFileId; - #[derive(Debug, Clone, PartialEq, Eq)] + #[derive(Debug, Clone, Eq)] pub struct EditionedFileIdData { editioned_file_id: span::EditionedFileId, krate: Crate, @@ -52,6 +52,14 @@ const _: () = { editioned_file_id: span::EditionedFileId, } + impl PartialEq for EditionedFileIdData { + fn eq(&self, other: &Self) -> bool { + let Self { editioned_file_id, krate: _ } = self; + let Self { editioned_file_id: other_editioned_file_id, krate: _ } = other; + editioned_file_id == other_editioned_file_id + } + } + impl Hash for EditionedFileIdData { #[inline] fn hash<H: Hasher>(&self, state: &mut H) { @@ -210,6 +218,8 @@ const _: () = { /// 1. The file is not in the module tree. /// 2. You are latency sensitive and cannot afford calling the def map to precisely compute the origin /// (e.g. on enter feature, folding, etc.). + // FIXME: Remove this and all the weird crate ignoring plumbing around this + // This can cause a variety of weird bugs https://rust-lang.zulipchat.com/#narrow/channel/185405-t-compiler.2Frust-analyzer/topic/Broken.20token.20mapping/with/577739887 pub fn from_span_guess_origin( db: &dyn RootQueryDb, editioned_file_id: span::EditionedFileId, @@ -281,6 +291,8 @@ impl EditionedFileId { /// 1. The file is not in the module tree. /// 2. You are latency sensitive and cannot afford calling the def map to precisely compute the origin /// (e.g. on enter feature, folding, etc.). + // FIXME: Remove this and all the weird crate ignoring plumbing around this + // This can cause a variety of weird bugs https://rust-lang.zulipchat.com/#narrow/channel/185405-t-compiler.2Frust-analyzer/topic/Broken.20token.20mapping/with/577739887 #[inline] pub fn current_edition_guess_origin(db: &dyn RootQueryDb, file_id: FileId) -> Self { Self::from_span_guess_origin(db, span::EditionedFileId::current_edition(file_id)) diff --git a/crates/hir-def/src/nameres/tests/incremental.rs b/crates/hir-def/src/nameres/tests/incremental.rs index 225ba95863..b2a056ff2a 100644 --- a/crates/hir-def/src/nameres/tests/incremental.rs +++ b/crates/hir-def/src/nameres/tests/incremental.rs @@ -118,7 +118,6 @@ pub const BAZ: u32 = 0; expect![[r#" [ "crate_local_def_map", - "file_item_tree_query", "crate_local_def_map", ] "#]], diff --git a/crates/hir-ty/src/tests/macros.rs b/crates/hir-ty/src/tests/macros.rs index 2f41de64cb..28a688d4a3 100644 --- a/crates/hir-ty/src/tests/macros.rs +++ b/crates/hir-ty/src/tests/macros.rs @@ -9,16 +9,16 @@ use super::{check_infer, check_types}; fn cfg_impl_def() { check_types( r#" -//- /main.rs crate:main deps:foo cfg:test +//- /main.rs crate:main deps:foo cfg:some_cfg use foo::S as T; struct S; -#[cfg(test)] +#[cfg(some_cfg)] impl S { fn foo1(&self) -> i32 { 0 } } -#[cfg(not(test))] +#[cfg(not(some_cfg))] impl S { fn foo2(&self) -> i32 { 0 } } @@ -31,12 +31,12 @@ fn test() { //- /foo.rs crate:foo pub struct S; -#[cfg(not(test))] +#[cfg(not(some_cfg))] impl S { pub fn foo3(&self) -> i32 { 0 } } -#[cfg(test)] +#[cfg(some_cfg)] impl S { pub fn foo4(&self) -> i32 { 0 } } diff --git a/crates/ide-db/src/traits.rs b/crates/ide-db/src/traits.rs index 7200e7fbe5..41ef501653 100644 --- a/crates/ide-db/src/traits.rs +++ b/crates/ide-db/src/traits.rs @@ -113,6 +113,7 @@ fn assoc_item_of_trait( #[cfg(test)] mod tests { + use base_db::RootQueryDb; use expect_test::{Expect, expect}; use hir::{EditionedFileId, FilePosition, Semantics}; use span::Edition; @@ -130,7 +131,9 @@ mod tests { database.apply_change(change_fixture.change); let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker ($0)"); - let file_id = EditionedFileId::from_span_guess_origin(&database, file_id); + + let &krate = database.relevant_crates(file_id.file_id()).first().unwrap(); + let file_id = EditionedFileId::from_span(&database, file_id, krate); let offset = range_or_offset.expect_offset(); (database, FilePosition { file_id, offset }) } diff --git a/crates/ide/src/typing.rs b/crates/ide/src/typing.rs index f8b0dbfe62..ca2194fceb 100644 --- a/crates/ide/src/typing.rs +++ b/crates/ide/src/typing.rs @@ -17,10 +17,7 @@ mod on_enter; use either::Either; use hir::EditionedFileId; -use ide_db::{ - FilePosition, RootDatabase, - base_db::{RootQueryDb, SourceDatabase}, -}; +use ide_db::{FilePosition, RootDatabase, base_db::RootQueryDb}; use span::Edition; use std::iter; @@ -73,15 +70,16 @@ pub(crate) fn on_char_typed( if !TRIGGER_CHARS.contains(&char_typed) { return None; } - let edition = db - .source_root_crates(db.file_source_root(position.file_id).source_root_id(db)) + let krate = db + .relevant_crates(position.file_id) .first() - .map_or(Edition::CURRENT, |crates| crates.data(db).edition); - // FIXME: We are hitting the database here, if we are unlucky this call might block momentarily - // causing the editor to feel sluggish! We need to make this bail if it would block too long? - let editioned_file_id_wrapper = EditionedFileId::from_span_guess_origin( + .copied() + .unwrap_or_else(|| *db.all_crates().first().unwrap()); + let edition = krate.data(db).edition; + let editioned_file_id_wrapper = EditionedFileId::from_span( db, span::EditionedFileId::new(position.file_id, edition), + krate, ); let file = &db.parse(editioned_file_id_wrapper); let char_matches_position = diff --git a/crates/test-fixture/src/lib.rs b/crates/test-fixture/src/lib.rs index ca68edd88c..93d4650cd3 100644 --- a/crates/test-fixture/src/lib.rs +++ b/crates/test-fixture/src/lib.rs @@ -149,8 +149,9 @@ pub trait WithFixture: Default + ExpandDatabase + SourceDatabase + 'static { let fixture = ChangeFixture::parse(ra_fixture); fixture.change.apply(&mut db); assert_eq!(fixture.files.len(), 1, "Multiple file found in the fixture"); - let file = EditionedFileId::from_span_guess_origin(&db, fixture.files[0]); - (db, file) + let &krate = db.relevant_crates(fixture.files[0].file_id()).first().unwrap(); + let file_id = EditionedFileId::from_span(&db, fixture.files[0], krate); + (db, file_id) } /// See the trait documentation for more information on fixtures. @@ -165,7 +166,10 @@ pub trait WithFixture: Default + ExpandDatabase + SourceDatabase + 'static { let files = fixture .files .into_iter() - .map(|file| EditionedFileId::from_span_guess_origin(&db, file)) + .map(|file| { + let &krate = db.relevant_crates(file.file_id()).first().unwrap(); + EditionedFileId::from_span(&db, file, krate) + }) .collect(); (db, files) } @@ -222,7 +226,8 @@ pub trait WithFixture: Default + ExpandDatabase + SourceDatabase + 'static { let (file_id, range_or_offset) = fixture .file_position .expect("Could not find file position in fixture. Did you forget to add an `$0`?"); - let file_id = EditionedFileId::from_span_guess_origin(&db, file_id); + let &krate = db.relevant_crates(file_id.file_id()).first().unwrap(); + let file_id = EditionedFileId::from_span(&db, file_id, krate); (db, file_id, range_or_offset) } |