Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/typing.rs')
| -rw-r--r-- | crates/ide/src/typing.rs | 18 |
1 files changed, 8 insertions, 10 deletions
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 = |