1582: Show local variable types in completion r=matklad a=viorina



Co-authored-by: Ekaterina Babshukova <ekaterina.babshukova@yandex.ru>
This commit is contained in:
bors[bot] 2019-07-23 16:44:15 +00:00
commit 3e086528ef
6 changed files with 30 additions and 9 deletions

View file

@ -256,6 +256,14 @@ impl SourceAnalyzer {
Some(self.infer.as_ref()?[pat_id].clone())
}
pub fn type_of_pat_by_id(
&self,
_db: &impl HirDatabase,
pat_id: expr::PatId,
) -> Option<crate::Ty> {
Some(self.infer.as_ref()?[pat_id].clone())
}
pub fn resolve_method_call(&self, call: &ast::MethodCallExpr) -> Option<Function> {
let expr_id = self.body_source_map.as_ref()?.node_expr(&call.clone().into())?;
self.infer.as_ref()?.method_resolution(expr_id)

View file

@ -1,5 +1,5 @@
//! This modules takes care of rendering various defenitions as completion items.
use hir::{Docs, HasSource, HirDisplay, PerNs, Resolution};
use hir::{Docs, HasSource, HirDisplay, PerNs, Resolution, Ty};
use join_to_string::join;
use ra_syntax::ast::NameOwner;
use test_utils::tested_by;
@ -80,10 +80,18 @@ impl Completions {
None,
),
};
CompletionItem::new(completion_kind, ctx.source_range(), local_name)
.kind(kind)
.set_documentation(docs)
.add_to(self)
let mut completion_item =
CompletionItem::new(completion_kind, ctx.source_range(), local_name);
if let Resolution::LocalBinding(pat_id) = def {
let ty = ctx
.analyzer
.type_of_pat_by_id(ctx.db, pat_id.clone())
.filter(|t| t != &Ty::Unknown)
.map(|t| t.display(ctx.db).to_string());
completion_item = completion_item.set_detail(ty);
};
completion_item.kind(kind).set_documentation(docs).add_to(self)
}
pub(crate) fn add_function(&mut self, ctx: &CompletionContext, func: hir::Function) {

View file

@ -1,5 +1,5 @@
---
created: "2019-05-23T22:23:35.122168608Z"
created: "2019-07-23T16:11:48.828805910Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
@ -18,6 +18,7 @@ expression: kind_completions
delete: [214; 214),
insert: "b",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "quux",

View file

@ -1,5 +1,5 @@
---
created: "2019-05-23T22:23:35.122797188Z"
created: "2019-07-23T16:11:48.828811567Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
@ -19,6 +19,7 @@ expression: kind_completions
delete: [79; 79),
insert: "x",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "y",
@ -26,5 +27,6 @@ expression: kind_completions
delete: [79; 79),
insert: "y",
kind: Binding,
detail: "i32",
},
]

View file

@ -1,5 +1,5 @@
---
created: "2019-05-23T22:23:35.142044205Z"
created: "2019-07-23T16:11:48.860949870Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
@ -11,6 +11,7 @@ expression: kind_completions
delete: [126; 126),
insert: "bar",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "foo",

View file

@ -1,5 +1,5 @@
---
created: "2019-05-23T22:23:35.141900902Z"
created: "2019-07-23T16:11:48.859812318Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
@ -18,5 +18,6 @@ expression: kind_completions
delete: [25; 25),
insert: "self",
kind: Binding,
detail: "&{unknown}",
},
]