Auto merge of #17192 - roife:fix-issue-17179, r=lnicola

Fix source_range for INT_NUMBER in completion

fix #17179.

Previously r-a use `TextRange::empty(self.position.offset)` as `source_range` for `INT_NUMBER`, so the `text_edit` would always be an insertion, which results in #17179.

This PR changed it by using `text_range` of `original_token` (same as `IDENT`).
This commit is contained in:
bors 2024-05-07 07:24:15 +00:00
commit 9ec04ed43d
2 changed files with 46 additions and 1 deletions

View file

@ -466,7 +466,7 @@ impl CompletionContext<'_> {
cov_mark::hit!(completes_if_lifetime_without_idents);
TextRange::at(self.original_token.text_range().start(), TextSize::from(1))
}
IDENT | LIFETIME_IDENT | UNDERSCORE => self.original_token.text_range(),
IDENT | LIFETIME_IDENT | UNDERSCORE | INT_NUMBER => self.original_token.text_range(),
_ if kind.is_keyword() => self.original_token.text_range(),
_ => TextRange::empty(self.position.offset),
}

View file

@ -1730,6 +1730,51 @@ fn foo(a: A) { B { bar: a.$0 }; }
)
}
#[test]
fn tuple_field_detail() {
check(
r#"
struct S(i32);
fn f() -> i32 {
let s = S(0);
s.0$0
}
"#,
SymbolKind::Field,
expect![[r#"
[
CompletionItem {
label: "0",
source_range: 56..57,
delete: 56..57,
insert: "0",
kind: SymbolKind(
Field,
),
detail: "i32",
relevance: CompletionRelevance {
exact_name_match: false,
type_match: Some(
Exact,
),
is_local: false,
is_item_from_trait: false,
is_item_from_notable_trait: false,
is_name_already_imported: false,
requires_import: false,
is_op_method: false,
is_private_editable: false,
postfix_match: None,
is_definite: false,
function: None,
},
},
]
"#]],
);
}
#[test]
fn record_field_and_call_relevances() {
check_relevance(