Skip to content

Commit 4e588df

Browse files
committed
Don't allow lookup by self for unprefixed self access completions
1 parent c6133fe commit 4e588df

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

crates/ide_completion/src/render.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,16 +132,17 @@ fn render_field_(
132132
ctx.source_range(),
133133
receiver.map_or_else(|| name.clone(), |receiver| format!("{}.{}", receiver, name)),
134134
);
135-
item.kind(SymbolKind::Field)
136-
.detail(ty.display(ctx.db()).to_string())
137-
.set_documentation(field.docs(ctx.db()))
138-
.set_deprecated(is_deprecated);
139135

140136
item.set_relevance(CompletionRelevance {
141137
type_match: compute_type_match(ctx.completion, ty),
142138
exact_name_match: compute_exact_name_match(ctx.completion, &name),
143139
..CompletionRelevance::default()
144140
});
141+
item.kind(SymbolKind::Field)
142+
.detail(ty.display(ctx.db()).to_string())
143+
.set_documentation(field.docs(ctx.db()))
144+
.set_deprecated(is_deprecated)
145+
.lookup_by(name);
145146

146147
if let Some(_ref_match) = compute_ref_match(ctx.completion, ty) {
147148
// FIXME
@@ -164,7 +165,9 @@ fn render_tuple_field_(
164165
receiver.map_or_else(|| field.to_string(), |receiver| format!("{}.{}", receiver, field)),
165166
);
166167

167-
item.kind(SymbolKind::Field).detail(ty.display(ctx.db()).to_string());
168+
item.kind(SymbolKind::Field)
169+
.detail(ty.display(ctx.db()).to_string())
170+
.lookup_by(field.to_string());
168171

169172
item.build()
170173
}

crates/ide_completion/src/render/function.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,29 +58,29 @@ impl<'a> FunctionRender<'a> {
5858
Some(FunctionRender { ctx, name, receiver, func: fn_, ast_node, is_method })
5959
}
6060

61-
fn render(mut self, import_to_add: Option<ImportEdit>) -> CompletionItem {
61+
fn render(self, import_to_add: Option<ImportEdit>) -> CompletionItem {
6262
let params = self.params();
63-
if let Some(receiver) = &self.receiver {
64-
self.name = format!("{}.{}", receiver, &self.name)
65-
}
66-
let mut item = CompletionItem::new(
67-
CompletionKind::Reference,
68-
self.ctx.source_range(),
69-
self.name.clone(),
70-
);
63+
let call = if let Some(receiver) = &self.receiver {
64+
format!("{}.{}", receiver, &self.name)
65+
} else {
66+
self.name.clone()
67+
};
68+
let mut item =
69+
CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), call.clone());
7170
item.kind(self.kind())
7271
.set_documentation(self.ctx.docs(self.func))
7372
.set_deprecated(
7473
self.ctx.is_deprecated(self.func) || self.ctx.is_deprecated_assoc_item(self.func),
7574
)
7675
.detail(self.detail())
77-
.add_call_parens(self.ctx.completion, self.name.clone(), params)
78-
.add_import(import_to_add);
76+
.add_call_parens(self.ctx.completion, call.clone(), params)
77+
.add_import(import_to_add)
78+
.lookup_by(self.name);
7979

8080
let ret_type = self.func.ret_type(self.ctx.db());
8181
item.set_relevance(CompletionRelevance {
8282
type_match: compute_type_match(self.ctx.completion, &ret_type),
83-
exact_name_match: compute_exact_name_match(self.ctx.completion, &self.name),
83+
exact_name_match: compute_exact_name_match(self.ctx.completion, &call),
8484
..CompletionRelevance::default()
8585
});
8686

@@ -263,7 +263,7 @@ fn bar(s: &S) {
263263
);
264264

265265
check_edit(
266-
"self.foo",
266+
"foo",
267267
r#"
268268
struct S {}
269269
impl S {

0 commit comments

Comments
 (0)