Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/highlight_related.rs')
-rw-r--r--crates/ide/src/highlight_related.rs38
1 files changed, 22 insertions, 16 deletions
diff --git a/crates/ide/src/highlight_related.rs b/crates/ide/src/highlight_related.rs
index bb96c92519..80624eeae8 100644
--- a/crates/ide/src/highlight_related.rs
+++ b/crates/ide/src/highlight_related.rs
@@ -1,9 +1,8 @@
use std::iter;
-use hir::{FilePosition, FileRange, HirFileId, InFile, Semantics, db};
+use hir::{EditionedFileId, FilePosition, FileRange, HirFileId, InFile, Semantics, db};
use ide_db::{
FxHashMap, FxHashSet, RootDatabase,
- base_db::salsa::AsDynDatabase,
defs::{Definition, IdentClass},
helpers::pick_best_token,
search::{FileReference, ReferenceCategory, SearchScope},
@@ -12,7 +11,7 @@ use ide_db::{
preorder_expr_with_ctx_checker,
},
};
-use span::EditionedFileId;
+use span::FileId;
use syntax::{
AstNode,
SyntaxKind::{self, IDENT, INT_NUMBER},
@@ -61,16 +60,14 @@ pub(crate) fn highlight_related(
let _p = tracing::info_span!("highlight_related").entered();
let file_id = sema
.attach_first_edition(file_id)
- .unwrap_or_else(|| EditionedFileId::current_edition(file_id));
- let editioned_file_id_wrapper =
- ide_db::base_db::EditionedFileId::new(sema.db.as_dyn_database(), file_id);
-
- let syntax = sema.parse(editioned_file_id_wrapper).syntax().clone();
+ .unwrap_or_else(|| EditionedFileId::current_edition(sema.db, file_id));
+ let span_file_id = file_id.editioned_file_id(sema.db);
+ let syntax = sema.parse(file_id).syntax().clone();
let token = pick_best_token(syntax.token_at_offset(offset), |kind| match kind {
T![?] => 4, // prefer `?` when the cursor is sandwiched like in `await$0?`
T![->] => 4,
- kind if kind.is_keyword(file_id.edition()) => 3,
+ kind if kind.is_keyword(span_file_id.edition()) => 3,
IDENT | INT_NUMBER => 2,
T![|] => 1,
_ => 0,
@@ -92,11 +89,18 @@ pub(crate) fn highlight_related(
T![break] | T![loop] | T![while] | T![continue] if config.break_points => {
highlight_break_points(sema, token).remove(&file_id)
}
- T![|] if config.closure_captures => highlight_closure_captures(sema, token, file_id),
- T![move] if config.closure_captures => highlight_closure_captures(sema, token, file_id),
- _ if config.references => {
- highlight_references(sema, token, FilePosition { file_id, offset })
+ T![|] if config.closure_captures => {
+ highlight_closure_captures(sema, token, file_id, span_file_id.file_id())
+ }
+ T![move] if config.closure_captures => {
+ highlight_closure_captures(sema, token, file_id, span_file_id.file_id())
}
+ _ if config.references => highlight_references(
+ sema,
+ token,
+ FilePosition { file_id, offset },
+ span_file_id.file_id(),
+ ),
_ => None,
}
}
@@ -105,6 +109,7 @@ fn highlight_closure_captures(
sema: &Semantics<'_, RootDatabase>,
token: SyntaxToken,
file_id: EditionedFileId,
+ vfs_file_id: FileId,
) -> Option<Vec<HighlightedRange>> {
let closure = token.parent_ancestors().take(2).find_map(ast::ClosureExpr::cast)?;
let search_range = closure.body()?.syntax().text_range();
@@ -137,7 +142,7 @@ fn highlight_closure_captures(
.sources(sema.db)
.into_iter()
.flat_map(|x| x.to_nav(sema.db))
- .filter(|decl| decl.file_id == file_id)
+ .filter(|decl| decl.file_id == vfs_file_id)
.filter_map(|decl| decl.focus_range)
.map(move |range| HighlightedRange { range, category })
.chain(usages)
@@ -150,6 +155,7 @@ fn highlight_references(
sema: &Semantics<'_, RootDatabase>,
token: SyntaxToken,
FilePosition { file_id, offset }: FilePosition,
+ vfs_file_id: FileId,
) -> Option<Vec<HighlightedRange>> {
let defs = if let Some((range, resolution)) =
sema.check_for_format_args_template(token.clone(), offset)
@@ -261,7 +267,7 @@ fn highlight_references(
.sources(sema.db)
.into_iter()
.flat_map(|x| x.to_nav(sema.db))
- .filter(|decl| decl.file_id == file_id)
+ .filter(|decl| decl.file_id == vfs_file_id)
.filter_map(|decl| decl.focus_range)
.map(|range| HighlightedRange { range, category })
.for_each(|x| {
@@ -279,7 +285,7 @@ fn highlight_references(
},
};
for nav in navs {
- if nav.file_id != file_id {
+ if nav.file_id != vfs_file_id {
continue;
}
let hl_range = nav.focus_range.map(|range| {