Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/base-db/src/editioned_file_id.rs14
-rw-r--r--crates/hir-def/src/nameres/tests/incremental.rs1
-rw-r--r--crates/hir-ty/src/tests/macros.rs10
-rw-r--r--crates/ide-db/src/traits.rs5
-rw-r--r--crates/ide/src/typing.rs18
-rw-r--r--crates/test-fixture/src/lib.rs13
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)
}