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`).
diff --git a/crates/ide-completion/src/context.rs b/crates/ide-completion/src/context.rs
index 8b435f4..db34bea 100644
--- a/crates/ide-completion/src/context.rs
+++ b/crates/ide-completion/src/context.rs
@@ -466,7 +466,7 @@
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),
}
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs
index 0f13bea..db69b22 100644
--- a/crates/ide-completion/src/render.rs
+++ b/crates/ide-completion/src/render.rs
@@ -1731,6 +1731,51 @@
}
#[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(
r#"