Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-completion/src/context/analysis.rs10
-rw-r--r--crates/ide-completion/src/tests/type_pos.rs37
2 files changed, 47 insertions, 0 deletions
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index 3ea5065903..4f5266051b 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -884,6 +884,16 @@ fn classify_name_ref(
};
let make_path_kind_type = |ty: ast::Type| {
let location = type_location(ty.syntax());
+ if let Some(p) = ty.syntax().parent() {
+ if ast::GenericArg::can_cast(p.kind()) || ast::GenericArgList::can_cast(p.kind()) {
+ if let Some(p) = p.parent().and_then(|p| p.parent()) {
+ if let Some(segment) = ast::PathSegment::cast(p) {
+ let path = segment.parent_path().top_path();
+ dbg!(sema.resolve_path(&path));
+ }
+ }
+ }
+ }
PathKind::Type { location: location.unwrap_or(TypeLocation::Other) }
};
diff --git a/crates/ide-completion/src/tests/type_pos.rs b/crates/ide-completion/src/tests/type_pos.rs
index 8cb1ff4a12..4869ac17ad 100644
--- a/crates/ide-completion/src/tests/type_pos.rs
+++ b/crates/ide-completion/src/tests/type_pos.rs
@@ -719,3 +719,40 @@ pub struct S;
"#]],
)
}
+
+#[test]
+fn completes_const_and_type_generics_separately() {
+ check(
+ r#"
+struct Foo;
+const X: usize = 0;
+mod foo {
+ fn foo<T>() {}
+}
+fn main() {
+ self::foo::foo::<F$0>();
+}
+"#,
+ expect![[r#"
+ st Foo
+ bt u32
+ kw crate::
+ kw self::
+ "#]],
+ );
+ check(
+ r#"
+struct Foo;
+const X: usize = 0;
+fn foo<const X: usize>() {}
+fn main() {
+ foo::<F$0>();
+}
+"#,
+ expect![[r#"
+ ct X
+ kw crate::
+ kw self::
+ "#]],
+ );
+}