From d6195fa21f09aa3f987e09d847c156e1788ec834 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Fri, 13 Mar 2020 11:45:58 +0100 Subject: Fix completion of HashMap::new The `ty` function in code_model returned the type with placeholders for type parameters. That's nice for printing, but not good for completion, because placeholders won't unify with anything else: So the type we got for `HashMap` was `HashMap`, which doesn't unify with `HashMap`, so the `new` method wasn't shown. Now we instead return `HashMap<{unknown}, {unknown}, {unknown}>`, which does unify with the impl type. Maybe we should just expose this properly as variables though, i.e. we'd return something like `exists HashMap` (in Chalk notation). It'll make the API more complicated, but harder to misuse. (And it would handle cases like `type TypeAlias = HashMap` more correctly.) --- crates/ra_ide/src/display/function_signature.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide/src/display/function_signature.rs') diff --git a/crates/ra_ide/src/display/function_signature.rs b/crates/ra_ide/src/display/function_signature.rs index 2c4c932de..ec1bbd5a0 100644 --- a/crates/ra_ide/src/display/function_signature.rs +++ b/crates/ra_ide/src/display/function_signature.rs @@ -64,7 +64,7 @@ impl FunctionSignature { .fields(db) .into_iter() .map(|field: hir::StructField| { - let ty = field.ty(db); + let ty = field.signature_ty(db); format!("{}", ty.display(db)) }) .collect(); @@ -102,7 +102,7 @@ impl FunctionSignature { .into_iter() .map(|field: hir::StructField| { let name = field.name(db); - let ty = field.ty(db); + let ty = field.signature_ty(db); format!("{}: {}", name, ty.display(db)) }) .collect(); -- cgit v1.2.3