diff options
| author | Shoyu Vanilla (Flint) <modulo641@gmail.com> | 2025-09-17 17:00:31 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-17 17:00:31 +0000 |
| commit | bb7cdc25d48f18667056adcb2380630b7d3b9f0b (patch) | |
| tree | 82cb0856e6bdc8c120184171807f4c2bc35cd9b3 /src | |
| parent | 171812726d66f5c7222f7a0ba13827ced5682740 (diff) | |
| parent | 28b0e4e15e0ffd0c5f747f94dadb7a243566449d (diff) | |
| download | rust-bb7cdc25d48f18667056adcb2380630b7d3b9f0b.tar.gz rust-bb7cdc25d48f18667056adcb2380630b7d3b9f0b.zip | |
Merge pull request #20682 from A4-Tacks/fix-change-vis-applicable-on-variant
Fix applicable on variant field for change_visibility
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/change_visibility.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/change_visibility.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/change_visibility.rs index 9b9f0c4522e..7119d5b9c23 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/change_visibility.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/change_visibility.rs @@ -65,11 +65,13 @@ fn add_vis(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> { if field.visibility().is_some() { return None; } + check_is_not_variant(&field)?; (vis_offset(field.syntax()), field_name.syntax().text_range()) } else if let Some(field) = ctx.find_node_at_offset::<ast::TupleField>() { if field.visibility().is_some() { return None; } + check_is_not_variant(&field)?; (vis_offset(field.syntax()), field.syntax().text_range()) } else { return None; @@ -134,6 +136,11 @@ fn change_vis(acc: &mut Assists, vis: ast::Visibility) -> Option<()> { None } +fn check_is_not_variant(field: &impl AstNode) -> Option<()> { + let kind = field.syntax().parent()?.parent()?.kind(); + (kind != SyntaxKind::VARIANT).then_some(()) +} + #[cfg(test)] mod tests { use crate::tests::{check_assist, check_assist_not_applicable, check_assist_target}; @@ -240,6 +247,13 @@ mod tests { } #[test] + fn not_applicable_for_enum_variant_fields() { + check_assist_not_applicable(change_visibility, r"pub enum Foo { Foo1($0i32) }"); + + check_assist_not_applicable(change_visibility, r"pub enum Foo { Foo1 { $0n: i32 } }"); + } + + #[test] fn change_visibility_target() { check_assist_target(change_visibility, "$0fn foo() {}", "fn"); check_assist_target(change_visibility, "pub(crate)$0 fn foo() {}", "pub(crate)"); |
