Represent `crate` visibility specifier
diff --git a/src/data.rs b/src/data.rs
index 9df229b..be52452 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -139,8 +139,6 @@
/// *This type is available if Syn is built with the `"derive"` or
/// `"full"` feature.*
pub Crate(VisCrate {
- pub pub_token: Token![pub],
- pub paren_token: token::Paren,
pub crate_token: Token![crate],
}),
@@ -255,17 +253,16 @@
do_parse!(
pub_token: keyword!(pub) >>
other: parens!(keyword!(crate)) >>
- (Visibility::Crate(VisCrate {
+ (Visibility::Restricted(VisRestricted {
pub_token: pub_token,
paren_token: other.0,
- crate_token: other.1,
+ in_token: None,
+ path: Box::new(other.1.into()),
}))
)
|
keyword!(crate) => { |tok| {
Visibility::Crate(VisCrate {
- pub_token: <Token![pub]>::default(),
- paren_token: token::Paren::default(),
crate_token: tok,
})
} }
@@ -375,10 +372,7 @@
impl ToTokens for VisCrate {
fn to_tokens(&self, tokens: &mut Tokens) {
- self.pub_token.to_tokens(tokens);
- self.paren_token.surround(tokens, |tokens| {
- self.crate_token.to_tokens(tokens);
- })
+ self.crate_token.to_tokens(tokens);
}
}
@@ -386,8 +380,8 @@
fn to_tokens(&self, tokens: &mut Tokens) {
self.pub_token.to_tokens(tokens);
self.paren_token.surround(tokens, |tokens| {
- // XXX: If we have a path which is not "self" or "super",
- // automatically add the "in" token.
+ // XXX: If we have a path which is not "self" or "super" or
+ // "crate", automatically add the "in" token.
self.in_token.to_tokens(tokens);
self.path.to_tokens(tokens);
});
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 3d0dde7..30b6e5b 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -2875,8 +2875,6 @@
# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
pub fn fold_vis_crate<V: Fold + ?Sized>(_visitor: &mut V, _i: VisCrate) -> VisCrate {
VisCrate {
- pub_token: Token ! [ pub ](tokens_helper(_visitor, &(_i . pub_token).0)),
- paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
crate_token: Token ! [ crate ](tokens_helper(_visitor, &(_i . crate_token).0)),
}
}
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 6205c54..c5116ff 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -2217,8 +2217,6 @@
}
# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
pub fn visit_vis_crate<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast VisCrate) {
- tokens_helper(_visitor, &(& _i . pub_token).0);
- tokens_helper(_visitor, &(& _i . paren_token).0);
tokens_helper(_visitor, &(& _i . crate_token).0);
}
# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 202f2d9..c262c74 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -2218,8 +2218,6 @@
}
# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
pub fn visit_vis_crate_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut VisCrate) {
- tokens_helper(_visitor, &mut (& mut _i . pub_token).0);
- tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
tokens_helper(_visitor, &mut (& mut _i . crate_token).0);
}
# [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
diff --git a/tests/test_derive_input.rs b/tests/test_derive_input.rs
index bd25652..460e9ca 100644
--- a/tests/test_derive_input.rs
+++ b/tests/test_derive_input.rs
@@ -536,6 +536,31 @@
}
#[test]
+fn test_vis_crate() {
+ let raw = r#"
+ crate struct S;
+ "#;
+
+ let expected = DeriveInput {
+ ident: "S".into(),
+ vis: Visibility::Crate(VisCrate {
+ crate_token: Default::default(),
+ }),
+ attrs: vec![],
+ generics: Generics::default(),
+ data: Data::Struct(DataStruct {
+ semi_token: Some(Default::default()),
+ struct_token: Default::default(),
+ fields: Fields::Unit,
+ }),
+ };
+
+ let actual = syn::parse_str(raw).unwrap();
+
+ assert_eq!(expected, actual);
+}
+
+#[test]
fn test_pub_restricted_crate() {
let raw = r#"
pub(crate) struct S;
@@ -543,10 +568,11 @@
let expected = DeriveInput {
ident: "S".into(),
- vis: Visibility::Crate(VisCrate {
+ vis: Visibility::Restricted(VisRestricted {
pub_token: Default::default(),
- crate_token: Default::default(),
paren_token: Default::default(),
+ in_token: None,
+ path: Box::new("crate".into()),
}),
attrs: vec![],
generics: Generics::default(),