Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/inlay_hints/discriminant.rs')
| -rw-r--r-- | crates/ide/src/inlay_hints/discriminant.rs | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/crates/ide/src/inlay_hints/discriminant.rs b/crates/ide/src/inlay_hints/discriminant.rs index 9aef859333..5a147adabc 100644 --- a/crates/ide/src/inlay_hints/discriminant.rs +++ b/crates/ide/src/inlay_hints/discriminant.rs @@ -36,13 +36,14 @@ pub(super) fn enum_hints( return None; } for variant in enum_.variant_list()?.variants() { - variant_hints(acc, sema, &enum_, &variant); + variant_hints(acc, config, sema, &enum_, &variant); } Some(()) } fn variant_hints( acc: &mut Vec<InlayHint>, + config: &InlayHintsConfig, sema: &Semantics<'_, RootDatabase>, enum_: &ast::Enum, variant: &ast::Variant, @@ -88,7 +89,9 @@ fn variant_hints( }, kind: InlayKind::Discriminant, label, - text_edit: d.ok().map(|val| TextEdit::insert(range.start(), format!("{eq_} {val}"))), + text_edit: d.ok().map(|val| { + config.lazy_text_edit(|| TextEdit::insert(range.end(), format!("{eq_} {val}"))) + }), position: InlayHintPosition::After, pad_left: false, pad_right: false, @@ -99,8 +102,10 @@ fn variant_hints( } #[cfg(test)] mod tests { + use expect_test::expect; + use crate::inlay_hints::{ - tests::{check_with_config, DISABLED_CONFIG}, + tests::{check_edit, check_with_config, DISABLED_CONFIG}, DiscriminantHints, InlayHintsConfig, }; @@ -207,4 +212,33 @@ enum Enum { "#, ); } + + #[test] + fn edit() { + check_edit( + InlayHintsConfig { discriminant_hints: DiscriminantHints::Always, ..DISABLED_CONFIG }, + r#" +#[repr(u8)] +enum Enum { + Variant(), + Variant1, + Variant2 {}, + Variant3, + Variant5, + Variant6, +} +"#, + expect![[r#" + #[repr(u8)] + enum Enum { + Variant() = 0, + Variant1 = 1, + Variant2 {} = 2, + Variant3 = 3, + Variant5 = 4, + Variant6 = 5, + } + "#]], + ); + } } |