Fix compatibility with --no-default-features
diff --git a/src/data.rs b/src/data.rs
index 4821a7a..0f98116 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -213,7 +213,7 @@
self.ident.to_tokens(tokens);
self.data.to_tokens(tokens);
if let Some(ref disc) = self.discriminant {
- self.eq_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.eq_token).to_tokens(tokens);
disc.to_tokens(tokens);
}
}
@@ -243,7 +243,7 @@
self.vis.to_tokens(tokens);
if let Some(ref ident) = self.ident {
ident.to_tokens(tokens);
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
}
self.ty.to_tokens(tokens);
}
diff --git a/src/expr.rs b/src/expr.rs
index 3d4fbb3..f0e456b 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -2351,10 +2351,10 @@
self.dot_token.to_tokens(tokens);
self.method.to_tokens(tokens);
if !self.typarams.is_empty() {
- self.colon2_token.unwrap_or_default().to_tokens(tokens);
- self.lt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon2_token).to_tokens(tokens);
+ TokensOrDefault(&self.lt_token).to_tokens(tokens);
self.typarams.to_tokens(tokens);
- self.gt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.gt_token).to_tokens(tokens);
}
self.paren_token.surround(tokens, |tokens| {
self.args.to_tokens(tokens);
@@ -2418,7 +2418,7 @@
if_false: &Option<Box<Expr>>)
{
if let Some(ref if_false) = *if_false {
- else_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&else_token).to_tokens(tokens);
// If we are not one of the valid expressions to exist in an else
// clause, wrap ourselves in a block.
@@ -2465,7 +2465,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
if self.label.is_some() {
self.label.to_tokens(tokens);
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
}
self.while_token.to_tokens(tokens);
wrap_bare_struct(tokens, &self.cond);
@@ -2478,7 +2478,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
if self.label.is_some() {
self.label.to_tokens(tokens);
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
}
self.while_token.to_tokens(tokens);
self.let_token.to_tokens(tokens);
@@ -2494,7 +2494,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
if self.label.is_some() {
self.label.to_tokens(tokens);
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
}
self.for_token.to_tokens(tokens);
self.pat.to_tokens(tokens);
@@ -2509,7 +2509,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
if self.label.is_some() {
self.label.to_tokens(tokens);
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
}
self.loop_token.to_tokens(tokens);
self.body.to_tokens(tokens);
@@ -2683,7 +2683,7 @@
self.brace_token.surround(tokens, |tokens| {
self.fields.to_tokens(tokens);
if self.rest.is_some() {
- self.dot2_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.dot2_token).to_tokens(tokens);
self.rest.to_tokens(tokens);
}
})
@@ -2732,8 +2732,7 @@
// XXX: Override self.is_shorthand if expr is not an IdentExpr with
// the ident self.ident?
if !self.is_shorthand {
- self.colon_token.unwrap_or_default()
- .to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
self.expr.to_tokens(tokens);
}
}
@@ -2745,7 +2744,7 @@
tokens.append_all(&self.attrs);
self.pats.to_tokens(tokens);
if self.guard.is_some() {
- self.if_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.if_token).to_tokens(tokens);
self.guard.to_tokens(tokens);
}
self.rocket_token.to_tokens(tokens);
@@ -2767,7 +2766,7 @@
self.mode.to_tokens(tokens);
self.ident.to_tokens(tokens);
if self.subpat.is_some() {
- self.at_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.at_token).to_tokens(tokens);
self.subpat.to_tokens(tokens);
}
}
@@ -2809,8 +2808,8 @@
self.paren_token.surround(tokens, |tokens| {
for (i, token) in self.pats.iter().enumerate() {
if Some(i) == self.dots_pos {
- self.dot2_token.unwrap_or_default().to_tokens(tokens);
- self.comma_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.dot2_token).to_tokens(tokens);
+ TokensOrDefault(&self.comma_token).to_tokens(tokens);
}
token.to_tokens(tokens);
}
@@ -2878,14 +2877,14 @@
// If we have an identifier, we always need a .. token.
if self.middle.is_some() {
self.middle.to_tokens(tokens);
- self.dot2_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.dot2_token).to_tokens(tokens);
} else if self.dot2_token.is_some() {
self.dot2_token.to_tokens(tokens);
}
// Make sure we have a comma before the back half.
if !self.back.is_empty() {
- self.comma_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.comma_token).to_tokens(tokens);
self.back.to_tokens(tokens);
} else {
self.comma_token.to_tokens(tokens);
@@ -2910,7 +2909,7 @@
// XXX: Override is_shorthand if it was wrong?
if !self.is_shorthand {
self.ident.to_tokens(tokens);
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
}
self.pat.to_tokens(tokens);
}
@@ -2985,11 +2984,11 @@
self.let_token.to_tokens(tokens);
self.pat.to_tokens(tokens);
if self.ty.is_some() {
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
self.ty.to_tokens(tokens);
}
if self.init.is_some() {
- self.eq_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.eq_token).to_tokens(tokens);
self.init.to_tokens(tokens);
}
self.semi_token.to_tokens(tokens);
diff --git a/src/generics.rs b/src/generics.rs
index b169f8a..08f4619 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -379,11 +379,11 @@
return;
}
- self.lt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.lt_token).to_tokens(tokens);
self.lifetimes.to_tokens(tokens);
maybe_add_lifetime_params_comma(tokens, self);
self.ty_params.to_tokens(tokens);
- self.gt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.gt_token).to_tokens(tokens);
}
}
@@ -393,7 +393,7 @@
return;
}
- self.0.lt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.0.lt_token).to_tokens(tokens);
self.0.lifetimes.to_tokens(tokens);
maybe_add_lifetime_params_comma(tokens, &self.0);
for param in self.0.ty_params.iter() {
@@ -402,12 +402,12 @@
tokens.append_all(item.attrs.outer());
item.ident.to_tokens(tokens);
if !item.bounds.is_empty() {
- item.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.colon_token).to_tokens(tokens);
item.bounds.to_tokens(tokens);
}
param.delimiter().to_tokens(tokens);
}
- self.0.gt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.0.gt_token).to_tokens(tokens);
}
}
@@ -417,7 +417,7 @@
return;
}
- self.0.lt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.0.lt_token).to_tokens(tokens);
// Leave off the lifetime bounds and attributes
for param in self.0.lifetimes.iter() {
param.item().lifetime.to_tokens(tokens);
@@ -429,7 +429,7 @@
param.item().ident.to_tokens(tokens);
param.delimiter().to_tokens(tokens);
}
- self.0.gt_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.0.gt_token).to_tokens(tokens);
}
}
@@ -456,7 +456,7 @@
tokens.append_all(self.attrs.outer());
self.lifetime.to_tokens(tokens);
if !self.bounds.is_empty() {
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
self.bounds.to_tokens(tokens);
}
}
@@ -467,11 +467,11 @@
tokens.append_all(self.attrs.outer());
self.ident.to_tokens(tokens);
if !self.bounds.is_empty() {
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
self.bounds.to_tokens(tokens);
}
if self.default.is_some() {
- self.eq_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.eq_token).to_tokens(tokens);
self.default.to_tokens(tokens);
}
}
@@ -501,7 +501,7 @@
impl ToTokens for WhereClause {
fn to_tokens(&self, tokens: &mut Tokens) {
if !self.predicates.is_empty() {
- self.where_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.where_token).to_tokens(tokens);
self.predicates.to_tokens(tokens);
}
}
@@ -520,7 +520,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
self.lifetime.to_tokens(tokens);
if !self.bounds.is_empty() {
- self.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
self.bounds.to_tokens(tokens);
}
}
diff --git a/src/item.rs b/src/item.rs
index dca8543..978f1ad 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -1367,7 +1367,7 @@
tokens.append_all(items);
});
} else {
- item.semi.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.semi).to_tokens(tokens);
}
}
ItemKind::ForeignMod(ref item) => {
@@ -1409,11 +1409,11 @@
VariantData::Tuple(..) => {
item.data.to_tokens(tokens);
item.generics.where_clause.to_tokens(tokens);
- item.semi_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.semi_token).to_tokens(tokens);
}
VariantData::Unit => {
item.generics.where_clause.to_tokens(tokens);
- item.semi_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.semi_token).to_tokens(tokens);
}
}
}
@@ -1434,7 +1434,7 @@
item.ident.to_tokens(tokens);
item.generics.to_tokens(tokens);
if !item.supertraits.is_empty() {
- item.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.colon_token).to_tokens(tokens);
item.supertraits.to_tokens(tokens);
}
item.generics.where_clause.to_tokens(tokens);
@@ -1482,7 +1482,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
self.path.to_tokens(tokens);
if self.rename.is_some() {
- self.as_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.as_token).to_tokens(tokens);
self.rename.to_tokens(tokens);
}
}
@@ -1510,7 +1510,7 @@
fn to_tokens(&self, tokens: &mut Tokens) {
self.name.to_tokens(tokens);
if self.rename.is_some() {
- self.as_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.as_token).to_tokens(tokens);
self.rename.to_tokens(tokens);
}
}
@@ -1541,7 +1541,7 @@
});
}
None => {
- item.semi_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.semi_token).to_tokens(tokens);
}
}
}
@@ -1549,7 +1549,7 @@
item.type_token.to_tokens(tokens);
item.ident.to_tokens(tokens);
if !item.bounds.is_empty() {
- item.colon_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&item.colon_token).to_tokens(tokens);
item.bounds.to_tokens(tokens);
}
if let Some((ref eq_token, ref default)) = item.default {
@@ -1655,7 +1655,7 @@
if !self.0.inputs.empty_or_trailing() {
tokens::Comma::default().to_tokens(tokens);
}
- self.0.dot_tokens.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.0.dot_tokens).to_tokens(tokens);
}
});
self.0.output.to_tokens(tokens);
diff --git a/src/lib.rs b/src/lib.rs
index 7a7055b..9b8ef36 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -275,3 +275,18 @@
file.shebang = shebang;
Ok(file)
}
+
+#[cfg(feature = "printing")]
+struct TokensOrDefault<'a, T: 'a>(&'a Option<T>);
+
+#[cfg(feature = "printing")]
+impl<'a, T> quote::ToTokens for TokensOrDefault<'a, T>
+ where T: quote::ToTokens + Default,
+{
+ fn to_tokens(&self, tokens: &mut quote::Tokens) {
+ match *self.0 {
+ Some(ref t) => t.to_tokens(tokens),
+ None => T::default().to_tokens(tokens),
+ }
+ }
+}
diff --git a/src/ty.rs b/src/ty.rs
index cc9d2c8..4716b6f 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -840,7 +840,7 @@
match self.ty.mutability {
Mutability::Mutable(ref tok) => tok.to_tokens(tokens),
Mutability::Immutable => {
- self.const_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&self.const_token).to_tokens(tokens);
}
}
self.ty.ty.to_tokens(tokens);
@@ -901,7 +901,7 @@
};
let mut segments = self.1.segments.iter();
if pos > 0 {
- qself.as_token.unwrap_or_default().to_tokens(tokens);
+ TokensOrDefault(&qself.as_token).to_tokens(tokens);
self.1.leading_colon.to_tokens(tokens);
for (i, segment) in (&mut segments).take(pos).enumerate() {
if i + 1 == pos {