diff options
| author | XFFXFF <1247714429@qq.com> | 2022-06-16 16:43:08 +0800 |
|---|---|---|
| committer | XFFXFF <1247714429@qq.com> | 2022-06-16 20:34:37 +0800 |
| commit | 6df969f5f4e9dffd19024962e051e6f9f94e9805 (patch) | |
| tree | 320a22becb2129fe75973e28a4d8a5374d90cb0c | |
| parent | fbf8e122349320f67b32282def871fe95d48f33d (diff) | |
| download | rust-6df969f5f4e9dffd19024962e051e6f9f94e9805.tar.gz rust-6df969f5f4e9dffd19024962e051e6f9f94e9805.zip | |
the offset used for the completion cursor should always be relative to the original file and not to the marco file
| -rw-r--r-- | crates/hir/src/source_analyzer.rs | 10 | ||||
| -rw-r--r-- | crates/ide-completion/src/tests/expression.rs | 1 | ||||
| -rw-r--r-- | crates/ide-completion/src/tests/type_pos.rs | 7 |
3 files changed, 15 insertions, 3 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs index 0ae30604a8a..d624d375774 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 ded8e48d4ea..c05a7ad9fa5 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 191acb90532..8943d303b60 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