Skip to content

Commit cbbe12c

Browse files
committed
Add field for text edits to InlayHint
1 parent 5eba5eb commit cbbe12c

File tree

12 files changed

+54
-7
lines changed

12 files changed

+54
-7
lines changed

crates/ide/src/inlay_hints.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use syntax::{
1616
ast::{self, AstNode},
1717
match_ast, NodeOrToken, SyntaxNode, TextRange,
1818
};
19+
use text_edit::TextEdit;
1920

2021
use crate::{navigation_target::TryToNav, FileId};
2122

@@ -113,14 +114,26 @@ pub struct InlayHint {
113114
pub kind: InlayKind,
114115
/// The actual label to show in the inlay hint.
115116
pub label: InlayHintLabel,
117+
/// Text edit to apply when "accepting" this inlay hint.
118+
pub text_edit: Option<TextEdit>,
116119
}
117120

118121
impl InlayHint {
119122
fn closing_paren(range: TextRange) -> InlayHint {
120-
InlayHint { range, kind: InlayKind::ClosingParenthesis, label: InlayHintLabel::from(")") }
123+
InlayHint {
124+
range,
125+
kind: InlayKind::ClosingParenthesis,
126+
label: InlayHintLabel::from(")"),
127+
text_edit: None,
128+
}
121129
}
122130
fn opening_paren(range: TextRange) -> InlayHint {
123-
InlayHint { range, kind: InlayKind::OpeningParenthesis, label: InlayHintLabel::from("(") }
131+
InlayHint {
132+
range,
133+
kind: InlayKind::OpeningParenthesis,
134+
label: InlayHintLabel::from("("),
135+
text_edit: None,
136+
}
124137
}
125138
}
126139

crates/ide/src/inlay_hints/adjustment.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ pub(super) fn hints(
135135
))),
136136
None,
137137
),
138+
text_edit: None,
138139
});
139140
}
140141
if !postfix && needs_inner_parens {

crates/ide/src/inlay_hints/bind_pat.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ use syntax::{
1212
match_ast,
1313
};
1414

15-
use crate::{inlay_hints::closure_has_block_body, InlayHint, InlayHintsConfig, InlayKind};
16-
17-
use super::label_of_ty;
15+
use crate::{
16+
inlay_hints::{closure_has_block_body, label_of_ty},
17+
InlayHint, InlayHintsConfig, InlayKind,
18+
};
1819

1920
pub(super) fn hints(
2021
acc: &mut Vec<InlayHint>,
@@ -50,6 +51,7 @@ pub(super) fn hints(
5051
},
5152
kind: InlayKind::Type,
5253
label,
54+
text_edit: None,
5355
});
5456

5557
Some(())

crates/ide/src/inlay_hints/binding_mode.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,12 @@ pub(super) fn hints(
4949
(true, false) => "&",
5050
_ => return,
5151
};
52-
acc.push(InlayHint { range, kind: InlayKind::BindingMode, label: r.to_string().into() });
52+
acc.push(InlayHint {
53+
range,
54+
kind: InlayKind::BindingMode,
55+
label: r.to_string().into(),
56+
text_edit: None,
57+
});
5358
});
5459
match pat {
5560
ast::Pat::IdentPat(pat) if pat.ref_token().is_none() && pat.mut_token().is_none() => {
@@ -63,6 +68,7 @@ pub(super) fn hints(
6368
range: pat.syntax().text_range(),
6469
kind: InlayKind::BindingMode,
6570
label: bm.to_string().into(),
71+
text_edit: None,
6672
});
6773
}
6874
ast::Pat::OrPat(pat) if !pattern_adjustments.is_empty() && outer_paren_pat.is_none() => {

crates/ide/src/inlay_hints/chaining.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ pub(super) fn hints(
6161
range: expr.syntax().text_range(),
6262
kind: InlayKind::Chaining,
6363
label: label_of_ty(famous_defs, config, ty)?,
64+
text_edit: None,
6465
});
6566
}
6667
}
@@ -120,6 +121,7 @@ fn main() {
120121
},
121122
"",
122123
],
124+
text_edit: None,
123125
},
124126
InlayHint {
125127
range: 147..154,
@@ -140,6 +142,7 @@ fn main() {
140142
},
141143
"",
142144
],
145+
text_edit: None,
143146
},
144147
]
145148
"#]],
@@ -205,6 +208,7 @@ fn main() {
205208
},
206209
"",
207210
],
211+
text_edit: None,
208212
},
209213
InlayHint {
210214
range: 143..179,
@@ -225,6 +229,7 @@ fn main() {
225229
},
226230
"",
227231
],
232+
text_edit: None,
228233
},
229234
]
230235
"#]],
@@ -274,6 +279,7 @@ fn main() {
274279
},
275280
"",
276281
],
282+
text_edit: None,
277283
},
278284
InlayHint {
279285
range: 143..179,
@@ -294,6 +300,7 @@ fn main() {
294300
},
295301
"",
296302
],
303+
text_edit: None,
297304
},
298305
]
299306
"#]],
@@ -357,6 +364,7 @@ fn main() {
357364
},
358365
"<i32, bool>>",
359366
],
367+
text_edit: None,
360368
},
361369
InlayHint {
362370
range: 246..265,
@@ -390,6 +398,7 @@ fn main() {
390398
},
391399
"<i32, bool>>",
392400
],
401+
text_edit: None,
393402
},
394403
]
395404
"#]],
@@ -455,6 +464,7 @@ fn main() {
455464
},
456465
" = ()>",
457466
],
467+
text_edit: None,
458468
},
459469
InlayHint {
460470
range: 174..224,
@@ -488,6 +498,7 @@ fn main() {
488498
},
489499
" = ()>",
490500
],
501+
text_edit: None,
491502
},
492503
InlayHint {
493504
range: 174..206,
@@ -521,6 +532,7 @@ fn main() {
521532
},
522533
" = ()>",
523534
],
535+
text_edit: None,
524536
},
525537
InlayHint {
526538
range: 174..189,
@@ -541,6 +553,7 @@ fn main() {
541553
},
542554
"",
543555
],
556+
text_edit: None,
544557
},
545558
]
546559
"#]],
@@ -590,6 +603,7 @@ fn main() {
590603
},
591604
"",
592605
],
606+
text_edit: None,
593607
},
594608
InlayHint {
595609
range: 145..185,
@@ -610,6 +624,7 @@ fn main() {
610624
},
611625
"",
612626
],
627+
text_edit: None,
613628
},
614629
InlayHint {
615630
range: 145..168,
@@ -630,6 +645,7 @@ fn main() {
630645
},
631646
"",
632647
],
648+
text_edit: None,
633649
},
634650
InlayHint {
635651
range: 222..228,
@@ -648,6 +664,7 @@ fn main() {
648664
tooltip: "",
649665
},
650666
],
667+
text_edit: None,
651668
},
652669
]
653670
"#]],

crates/ide/src/inlay_hints/closing_brace.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ pub(super) fn hints(
112112
range: closing_token.text_range(),
113113
kind: InlayKind::ClosingBrace,
114114
label: InlayHintLabel::simple(label, None, linked_location),
115+
text_edit: None,
115116
});
116117

117118
None

crates/ide/src/inlay_hints/closure_ret.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ pub(super) fn hints(
4343
range: param_list.syntax().text_range(),
4444
kind: InlayKind::ClosureReturnType,
4545
label: label_of_ty(famous_defs, config, ty)?,
46+
text_edit: None,
4647
});
4748
Some(())
4849
}

crates/ide/src/inlay_hints/discriminant.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ fn variant_hints(
7575
})),
7676
None,
7777
),
78+
text_edit: None,
7879
});
7980

8081
Some(())

crates/ide/src/inlay_hints/fn_lifetime_fn.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub(super) fn hints(
2525
range: t.text_range(),
2626
kind: InlayKind::Lifetime,
2727
label: label.into(),
28+
text_edit: None,
2829
};
2930

3031
let param_list = func.param_list()?;
@@ -189,12 +190,14 @@ pub(super) fn hints(
189190
if is_empty { "" } else { ", " }
190191
)
191192
.into(),
193+
text_edit: None,
192194
});
193195
}
194196
(None, allocated_lifetimes) => acc.push(InlayHint {
195197
range: func.name()?.syntax().text_range(),
196198
kind: InlayKind::GenericParamList,
197199
label: format!("<{}>", allocated_lifetimes.iter().format(", "),).into(),
200+
text_edit: None,
198201
}),
199202
}
200203
Some(())

crates/ide/src/inlay_hints/implicit_static.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub(super) fn hints(
3434
range: t.text_range(),
3535
kind: InlayKind::Lifetime,
3636
label: "'static".to_owned().into(),
37+
text_edit: None,
3738
});
3839
}
3940
}

crates/ide/src/inlay_hints/param_name.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ pub(super) fn hints(
5757
range,
5858
kind: InlayKind::Parameter,
5959
label: InlayHintLabel::simple(param_name, None, linked_location),
60+
text_edit: None,
6061
}
6162
});
6263

crates/rust-analyzer/src/to_proto.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ pub(crate) fn inlay_hint(
510510
| InlayKind::AdjustmentPostfix
511511
| InlayKind::ClosingBrace => None,
512512
},
513-
text_edits: None,
513+
text_edits: inlay_hint.text_edit.map(|it| text_edit_vec(line_index, it)),
514514
data: None,
515515
tooltip,
516516
label,

0 commit comments

Comments
 (0)