mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
Don't allow lookup by self for unprefixed self access completions
This commit is contained in:
parent
c6133fe51c
commit
4e588dfd88
2 changed files with 21 additions and 18 deletions
|
@ -132,16 +132,17 @@ fn render_field_(
|
||||||
ctx.source_range(),
|
ctx.source_range(),
|
||||||
receiver.map_or_else(|| name.clone(), |receiver| format!("{}.{}", receiver, name)),
|
receiver.map_or_else(|| name.clone(), |receiver| format!("{}.{}", receiver, name)),
|
||||||
);
|
);
|
||||||
item.kind(SymbolKind::Field)
|
|
||||||
.detail(ty.display(ctx.db()).to_string())
|
|
||||||
.set_documentation(field.docs(ctx.db()))
|
|
||||||
.set_deprecated(is_deprecated);
|
|
||||||
|
|
||||||
item.set_relevance(CompletionRelevance {
|
item.set_relevance(CompletionRelevance {
|
||||||
type_match: compute_type_match(ctx.completion, ty),
|
type_match: compute_type_match(ctx.completion, ty),
|
||||||
exact_name_match: compute_exact_name_match(ctx.completion, &name),
|
exact_name_match: compute_exact_name_match(ctx.completion, &name),
|
||||||
..CompletionRelevance::default()
|
..CompletionRelevance::default()
|
||||||
});
|
});
|
||||||
|
item.kind(SymbolKind::Field)
|
||||||
|
.detail(ty.display(ctx.db()).to_string())
|
||||||
|
.set_documentation(field.docs(ctx.db()))
|
||||||
|
.set_deprecated(is_deprecated)
|
||||||
|
.lookup_by(name);
|
||||||
|
|
||||||
if let Some(_ref_match) = compute_ref_match(ctx.completion, ty) {
|
if let Some(_ref_match) = compute_ref_match(ctx.completion, ty) {
|
||||||
// FIXME
|
// FIXME
|
||||||
|
@ -164,7 +165,9 @@ fn render_tuple_field_(
|
||||||
receiver.map_or_else(|| field.to_string(), |receiver| format!("{}.{}", receiver, field)),
|
receiver.map_or_else(|| field.to_string(), |receiver| format!("{}.{}", receiver, field)),
|
||||||
);
|
);
|
||||||
|
|
||||||
item.kind(SymbolKind::Field).detail(ty.display(ctx.db()).to_string());
|
item.kind(SymbolKind::Field)
|
||||||
|
.detail(ty.display(ctx.db()).to_string())
|
||||||
|
.lookup_by(field.to_string());
|
||||||
|
|
||||||
item.build()
|
item.build()
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,29 +58,29 @@ impl<'a> FunctionRender<'a> {
|
||||||
Some(FunctionRender { ctx, name, receiver, func: fn_, ast_node, is_method })
|
Some(FunctionRender { ctx, name, receiver, func: fn_, ast_node, is_method })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render(mut self, import_to_add: Option<ImportEdit>) -> CompletionItem {
|
fn render(self, import_to_add: Option<ImportEdit>) -> CompletionItem {
|
||||||
let params = self.params();
|
let params = self.params();
|
||||||
if let Some(receiver) = &self.receiver {
|
let call = if let Some(receiver) = &self.receiver {
|
||||||
self.name = format!("{}.{}", receiver, &self.name)
|
format!("{}.{}", receiver, &self.name)
|
||||||
}
|
} else {
|
||||||
let mut item = CompletionItem::new(
|
self.name.clone()
|
||||||
CompletionKind::Reference,
|
};
|
||||||
self.ctx.source_range(),
|
let mut item =
|
||||||
self.name.clone(),
|
CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), call.clone());
|
||||||
);
|
|
||||||
item.kind(self.kind())
|
item.kind(self.kind())
|
||||||
.set_documentation(self.ctx.docs(self.func))
|
.set_documentation(self.ctx.docs(self.func))
|
||||||
.set_deprecated(
|
.set_deprecated(
|
||||||
self.ctx.is_deprecated(self.func) || self.ctx.is_deprecated_assoc_item(self.func),
|
self.ctx.is_deprecated(self.func) || self.ctx.is_deprecated_assoc_item(self.func),
|
||||||
)
|
)
|
||||||
.detail(self.detail())
|
.detail(self.detail())
|
||||||
.add_call_parens(self.ctx.completion, self.name.clone(), params)
|
.add_call_parens(self.ctx.completion, call.clone(), params)
|
||||||
.add_import(import_to_add);
|
.add_import(import_to_add)
|
||||||
|
.lookup_by(self.name);
|
||||||
|
|
||||||
let ret_type = self.func.ret_type(self.ctx.db());
|
let ret_type = self.func.ret_type(self.ctx.db());
|
||||||
item.set_relevance(CompletionRelevance {
|
item.set_relevance(CompletionRelevance {
|
||||||
type_match: compute_type_match(self.ctx.completion, &ret_type),
|
type_match: compute_type_match(self.ctx.completion, &ret_type),
|
||||||
exact_name_match: compute_exact_name_match(self.ctx.completion, &self.name),
|
exact_name_match: compute_exact_name_match(self.ctx.completion, &call),
|
||||||
..CompletionRelevance::default()
|
..CompletionRelevance::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ fn bar(s: &S) {
|
||||||
);
|
);
|
||||||
|
|
||||||
check_edit(
|
check_edit(
|
||||||
"self.foo",
|
"foo",
|
||||||
r#"
|
r#"
|
||||||
struct S {}
|
struct S {}
|
||||||
impl S {
|
impl S {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue