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.rs52
1 files changed, 44 insertions, 8 deletions
diff --git a/crates/ide/src/inlay_hints/discriminant.rs b/crates/ide/src/inlay_hints/discriminant.rs
index 8f2949cb38..f1e1955d14 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,
@@ -75,9 +76,11 @@ fn variant_hints(
}
Err(_) => format!("{eq_} ?"),
},
- Some(InlayTooltip::String(match &d {
- Ok(_) => "enum variant discriminant".into(),
- Err(e) => format!("{e:?}"),
+ Some(config.lazy_tooltip(|| {
+ InlayTooltip::String(match &d {
+ Ok(_) => "enum variant discriminant".into(),
+ Err(e) => format!("{e:?}"),
+ })
})),
None,
);
@@ -88,7 +91,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,13 +104,15 @@ 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,
};
#[track_caller]
- fn check_discriminants(ra_fixture: &str) {
+ fn check_discriminants(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
check_with_config(
InlayHintsConfig { discriminant_hints: DiscriminantHints::Always, ..DISABLED_CONFIG },
ra_fixture,
@@ -113,7 +120,7 @@ mod tests {
}
#[track_caller]
- fn check_discriminants_fieldless(ra_fixture: &str) {
+ fn check_discriminants_fieldless(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
check_with_config(
InlayHintsConfig {
discriminant_hints: DiscriminantHints::Fieldless,
@@ -207,4 +214,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,
+ }
+ "#]],
+ );
+ }
}