]> git.lizzy.rs Git - rust.git/blobdiff - src/macros.rs
Cargo clippy
[rust.git] / src / macros.rs
index 9d665c4a0b2b5ce4aa0242a0f76ef83cea99e4f9..9c32e7f62befe3703e9498bbf261f5da808f9ad5 100644 (file)
@@ -35,7 +35,7 @@
 use shape::{Indent, Shape};
 use utils::mk_sp;
 
-const FORCED_BRACKET_MACROS: &'static [&'static str] = &["vec!"];
+const FORCED_BRACKET_MACROS: &[&str] = &["vec!"];
 
 // FIXME: use the enum from libsyntax?
 #[derive(Clone, Copy, PartialEq, Eq)]
@@ -50,6 +50,7 @@ pub enum MacroPosition {
     Item,
     Statement,
     Expression,
+    Pat,
 }
 
 impl MacroStyle {
@@ -70,10 +71,10 @@ pub enum MacroArg {
 
 impl Rewrite for MacroArg {
     fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> {
-        match self {
-            &MacroArg::Expr(ref expr) => expr.rewrite(context, shape),
-            &MacroArg::Ty(ref ty) => ty.rewrite(context, shape),
-            &MacroArg::Pat(ref pat) => pat.rewrite(context, shape),
+        match *self {
+            MacroArg::Expr(ref expr) => expr.rewrite(context, shape),
+            MacroArg::Ty(ref ty) => ty.rewrite(context, shape),
+            MacroArg::Pat(ref pat) => pat.rewrite(context, shape),
         }
     }
 }
@@ -118,6 +119,7 @@ pub fn rewrite_macro(
     context.inside_macro = true;
     if context.config.use_try_shorthand() {
         if let Some(expr) = convert_try_mac(mac, context) {
+            context.inside_macro = false;
             return expr.rewrite(context, shape);
         }
     }
@@ -126,11 +128,13 @@ pub fn rewrite_macro(
 
     let macro_name = match extra_ident {
         None => format!("{}!", mac.node.path),
-        Some(ident) => if ident == symbol::keywords::Invalid.ident() {
-            format!("{}!", mac.node.path)
-        } else {
-            format!("{}! {}", mac.node.path, ident)
-        },
+        Some(ident) => {
+            if ident == symbol::keywords::Invalid.ident() {
+                format!("{}!", mac.node.path)
+            } else {
+                format!("{}! {}", mac.node.path, ident)
+            }
+        }
     };
 
     let style = if FORCED_BRACKET_MACROS.contains(&&macro_name[..]) {
@@ -140,7 +144,7 @@ pub fn rewrite_macro(
     };
 
     let ts: TokenStream = mac.node.stream();
-    if ts.is_empty() && !contains_comment(&context.snippet(mac.span)) {
+    if ts.is_empty() && !contains_comment(context.snippet(mac.span)) {
         return match style {
             MacroStyle::Parens if position == MacroPosition::Item => {
                 Some(format!("{}();", macro_name))
@@ -160,7 +164,7 @@ pub fn rewrite_macro(
         loop {
             match parse_macro_arg(&mut parser) {
                 Some(arg) => arg_vec.push(arg),
-                None => return Some(context.snippet(mac.span)),
+                None => return Some(context.snippet(mac.span).to_owned()),
             }
 
             match parser.token {
@@ -180,13 +184,13 @@ pub fn rewrite_macro(
                                         break;
                                     }
                                 }
-                                None => return Some(context.snippet(mac.span)),
+                                None => return Some(context.snippet(mac.span).to_owned()),
                             }
                         }
                     }
-                    return Some(context.snippet(mac.span));
+                    return Some(context.snippet(mac.span).to_owned());
                 }
-                _ => return Some(context.snippet(mac.span)),
+                _ => return Some(context.snippet(mac.span).to_owned()),
             }
 
             parser.bump();
@@ -208,7 +212,7 @@ pub fn rewrite_macro(
                 &arg_vec.iter().map(|e| &*e).collect::<Vec<_>>()[..],
                 mac.span,
                 shape,
-                context.config.fn_call_width(),
+                context.config.width_heuristics().fn_call_width,
                 trailing_comma,
             ).map(|rw| match position {
                 MacroPosition::Item => format!("{};", rw),
@@ -219,7 +223,7 @@ pub fn rewrite_macro(
             let mac_shape = shape.offset_left(macro_name.len())?;
             // Handle special case: `vec![expr; expr]`
             if vec_with_semi {
-                let (lbr, rbr) = if context.config.spaces_within_square_brackets() {
+                let (lbr, rbr) = if context.config.spaces_within_parens_and_brackets() {
                     ("[ ", " ]")
                 } else {
                     ("[", "]")
@@ -255,31 +259,21 @@ pub fn rewrite_macro(
                     trailing_comma = false;
                 }
                 // Convert `MacroArg` into `ast::Expr`, as `rewrite_array` only accepts the latter.
-                let expr_vec: Vec<_> = arg_vec
-                    .iter()
-                    .filter_map(|e| match *e {
-                        MacroArg::Expr(ref e) => Some(e.clone()),
-                        _ => None,
-                    })
-                    .collect();
-                if expr_vec.len() != arg_vec.len() {
-                    return Some(context.snippet(mac.span));
-                }
                 let sp = mk_sp(
                     context
                         .codemap
                         .span_after(mac.span, original_style.opener()),
                     mac.span.hi() - BytePos(1),
                 );
-                let rewrite =
-                    rewrite_array(expr_vec.iter(), sp, context, mac_shape, trailing_comma)?;
+                let arg_vec = &arg_vec.iter().map(|e| &*e).collect::<Vec<_>>()[..];
+                let rewrite = rewrite_array(arg_vec, sp, context, mac_shape, trailing_comma)?;
 
                 Some(format!("{}{}", macro_name, rewrite))
             }
         }
         MacroStyle::Braces => {
             // Skip macro invocations with braces, for now.
-            indent_macro_snippet(context, &context.snippet(mac.span), shape.indent)
+            indent_macro_snippet(context, context.snippet(mac.span), shape.indent)
         }
     }
 }