Fix applicable on variant field for change_visibility

Enum variant fields do not allow visibility

Example
---
```rust
enum Foo {
    Variant($0String),
}
```

**Before this PR**:

```rust
enum Foo {
    Variant(pub(crate) String),
}
```

**After this PR**:

Assist not applicable
This commit is contained in:
A4-Tacks 2025-09-17 22:57:25 +08:00
parent c307fd8e33
commit 28b0e4e15e
No known key found for this signature in database
GPG key ID: DBD861323040663B

View file

@ -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};
@ -239,6 +246,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");