Restore CompletionItem immutability
This commit is contained in:
parent
6654b9aff3
commit
953b5f23cc
@ -190,7 +190,7 @@ impl CompletionItem {
|
|||||||
}
|
}
|
||||||
/// What string is used for filtering.
|
/// What string is used for filtering.
|
||||||
pub fn lookup(&self) -> &str {
|
pub fn lookup(&self) -> &str {
|
||||||
self.lookup.as_deref().unwrap_or_else(|| self.label())
|
self.lookup.as_deref().unwrap_or(&self.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn kind(&self) -> Option<CompletionItemKind> {
|
pub fn kind(&self) -> Option<CompletionItemKind> {
|
||||||
@ -205,10 +205,6 @@ impl CompletionItem {
|
|||||||
self.score
|
self.score
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_score(&mut self, score: CompletionScore) {
|
|
||||||
self.score = Some(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn trigger_call_info(&self) -> bool {
|
pub fn trigger_call_info(&self) -> bool {
|
||||||
self.trigger_call_info
|
self.trigger_call_info
|
||||||
}
|
}
|
||||||
@ -310,7 +306,6 @@ impl Builder {
|
|||||||
self.deprecated = Some(deprecated);
|
self.deprecated = Some(deprecated);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
#[allow(unused)]
|
|
||||||
pub(crate) fn set_score(mut self, score: CompletionScore) -> Builder {
|
pub(crate) fn set_score(mut self, score: CompletionScore) -> Builder {
|
||||||
self.score = Some(score);
|
self.score = Some(score);
|
||||||
self
|
self
|
||||||
|
@ -23,22 +23,20 @@ impl Completions {
|
|||||||
ty: &Type,
|
ty: &Type,
|
||||||
) {
|
) {
|
||||||
let is_deprecated = is_deprecated(field, ctx.db);
|
let is_deprecated = is_deprecated(field, ctx.db);
|
||||||
let mut completion_item = CompletionItem::new(
|
let ty = ty.display(ctx.db).to_string();
|
||||||
CompletionKind::Reference,
|
let name = field.name(ctx.db);
|
||||||
ctx.source_range(),
|
let mut completion_item =
|
||||||
field.name(ctx.db).to_string(),
|
CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.to_string())
|
||||||
)
|
|
||||||
.kind(CompletionItemKind::Field)
|
.kind(CompletionItemKind::Field)
|
||||||
.detail(ty.display(ctx.db).to_string())
|
.detail(ty.clone())
|
||||||
.set_documentation(field.docs(ctx.db))
|
.set_documentation(field.docs(ctx.db))
|
||||||
.set_deprecated(is_deprecated)
|
.set_deprecated(is_deprecated);
|
||||||
.build();
|
|
||||||
|
|
||||||
if let Some(score) = compute_score(&completion_item, ctx) {
|
if let Some(score) = compute_score(ctx, &ty, &name.to_string()) {
|
||||||
completion_item.set_score(score);
|
completion_item = completion_item.set_score(score);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.add(completion_item);
|
completion_item.add_to(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn add_tuple_field(&mut self, ctx: &CompletionContext, field: usize, ty: &Type) {
|
pub(crate) fn add_tuple_field(&mut self, ctx: &CompletionContext, field: usize, ty: &Type) {
|
||||||
@ -308,8 +306,9 @@ impl Completions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn compute_score(
|
pub(crate) fn compute_score(
|
||||||
completion_item: &CompletionItem,
|
|
||||||
ctx: &CompletionContext,
|
ctx: &CompletionContext,
|
||||||
|
ty: &str,
|
||||||
|
name: &str,
|
||||||
) -> Option<CompletionScore> {
|
) -> Option<CompletionScore> {
|
||||||
let (active_name, active_type) = if let Some(record_field) = &ctx.record_field_syntax {
|
let (active_name, active_type) = if let Some(record_field) = &ctx.record_field_syntax {
|
||||||
if let Some((struct_field, _)) = ctx.sema.resolve_record_field(record_field) {
|
if let Some((struct_field, _)) = ctx.sema.resolve_record_field(record_field) {
|
||||||
@ -334,17 +333,15 @@ pub(crate) fn compute_score(
|
|||||||
|
|
||||||
// Compute score
|
// Compute score
|
||||||
// For the same type
|
// For the same type
|
||||||
if let Some(a_parameter_type) = completion_item.detail() {
|
if &active_type == ty {
|
||||||
if &active_type == a_parameter_type {
|
|
||||||
// If same type + same name then go top position
|
// If same type + same name then go top position
|
||||||
let res = if active_name == completion_item.label() {
|
let res = if active_name == name {
|
||||||
CompletionScore::TypeAndNameMatch
|
CompletionScore::TypeAndNameMatch
|
||||||
} else {
|
} else {
|
||||||
CompletionScore::TypeMatch
|
CompletionScore::TypeMatch
|
||||||
};
|
};
|
||||||
return Some(res);
|
return Some(res);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user