@@ -65,11 +65,13 @@ fn add_vis(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
65
65
if field. visibility ( ) . is_some ( ) {
66
66
return None ;
67
67
}
68
+ check_is_not_variant ( & field) ?;
68
69
( vis_offset ( field. syntax ( ) ) , field_name. syntax ( ) . text_range ( ) )
69
70
} else if let Some ( field) = ctx. find_node_at_offset :: < ast:: TupleField > ( ) {
70
71
if field. visibility ( ) . is_some ( ) {
71
72
return None ;
72
73
}
74
+ check_is_not_variant ( & field) ?;
73
75
( vis_offset ( field. syntax ( ) ) , field. syntax ( ) . text_range ( ) )
74
76
} else {
75
77
return None ;
@@ -134,6 +136,11 @@ fn change_vis(acc: &mut Assists, vis: ast::Visibility) -> Option<()> {
134
136
None
135
137
}
136
138
139
+ fn check_is_not_variant ( field : & impl AstNode ) -> Option < ( ) > {
140
+ let kind = field. syntax ( ) . parent ( ) ?. parent ( ) ?. kind ( ) ;
141
+ ( kind != SyntaxKind :: VARIANT ) . then_some ( ( ) )
142
+ }
143
+
137
144
#[ cfg( test) ]
138
145
mod tests {
139
146
use crate :: tests:: { check_assist, check_assist_not_applicable, check_assist_target} ;
@@ -239,6 +246,13 @@ mod tests {
239
246
) ;
240
247
}
241
248
249
+ #[ test]
250
+ fn not_applicable_for_enum_variant_fields ( ) {
251
+ check_assist_not_applicable ( change_visibility, r"pub enum Foo { Foo1($0i32) }" ) ;
252
+
253
+ check_assist_not_applicable ( change_visibility, r"pub enum Foo { Foo1 { $0n: i32 } }" ) ;
254
+ }
255
+
242
256
#[ test]
243
257
fn change_visibility_target ( ) {
244
258
check_assist_target ( change_visibility, "$0fn foo() {}" , "fn" ) ;
0 commit comments