Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/change_visibility.rs')
-rw-r--r--crates/ide-assists/src/handlers/change_visibility.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/change_visibility.rs b/crates/ide-assists/src/handlers/change_visibility.rs
index 9b9f0c4522..7119d5b9c2 100644
--- a/crates/ide-assists/src/handlers/change_visibility.rs
+++ b/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)");