Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir/src/source_analyzer.rs10
-rw-r--r--crates/ide-completion/src/tests/expression.rs1
-rw-r--r--crates/ide-completion/src/tests/type_pos.rs7
3 files changed, 15 insertions, 3 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index 0ae30604a8..d624d37577 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -67,7 +67,10 @@ impl SourceAnalyzer {
let scopes = db.expr_scopes(def);
let scope = match offset {
None => scope_for(&scopes, &source_map, node),
- Some(offset) => scope_for_offset(db, &scopes, &source_map, node.with_value(offset)),
+ Some(offset) => {
+ let file_id = node.file_id.original_file(db.upcast());
+ scope_for_offset(db, &scopes, &source_map, InFile::new(file_id.into(), offset))
+ }
};
let resolver = resolver_for_scope(db.upcast(), def, scope);
SourceAnalyzer {
@@ -88,7 +91,10 @@ impl SourceAnalyzer {
let scopes = db.expr_scopes(def);
let scope = match offset {
None => scope_for(&scopes, &source_map, node),
- Some(offset) => scope_for_offset(db, &scopes, &source_map, node.with_value(offset)),
+ Some(offset) => {
+ let file_id = node.file_id.original_file(db.upcast());
+ scope_for_offset(db, &scopes, &source_map, InFile::new(file_id.into(), offset))
+ }
};
let resolver = resolver_for_scope(db.upcast(), def, scope);
SourceAnalyzer { resolver, def: Some((def, body, source_map)), infer: None, file_id }
diff --git a/crates/ide-completion/src/tests/expression.rs b/crates/ide-completion/src/tests/expression.rs
index ded8e48d4e..c05a7ad9fa 100644
--- a/crates/ide-completion/src/tests/expression.rs
+++ b/crates/ide-completion/src/tests/expression.rs
@@ -513,6 +513,7 @@ fn quux(x: i32) {
",
expect![[r#"
fn quux(…) fn(i32)
+ lc x i32
ma m!(…) macro_rules! m
bt u32
kw crate::
diff --git a/crates/ide-completion/src/tests/type_pos.rs b/crates/ide-completion/src/tests/type_pos.rs
index 191acb9053..8943d303b6 100644
--- a/crates/ide-completion/src/tests/type_pos.rs
+++ b/crates/ide-completion/src/tests/type_pos.rs
@@ -90,11 +90,16 @@ fn x<'lt, T, const C: usize>() -> $0
}
#[test]
-fn fn_return_type2() {
+fn fn_return_type_no_local_items() {
check(
r#"
fn foo() -> B$0 {
struct Bar;
+ enum Baz {}
+ union Bax {
+ i: i32,
+ f: f32
+ }
}
"#,
expect![[r#"