From f01ed6f507849a699c5ff3f3370264e3f234c734 Mon Sep 17 00:00:00 2001 From: Kevin Yeh Date: Fri, 22 Jan 2016 13:40:26 -0600 Subject: [PATCH 1/2] Format item macros --- src/macros.rs | 34 +++++++++++++++++----------------- src/visitor.rs | 8 ++------ tests/source/macros.rs | 2 +- tests/target/macros.rs | 2 +- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 8739d234fd2..84a7e18bd85 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -33,7 +33,7 @@ use utils::{wrap_str, span_after}; static FORCED_BRACKET_MACROS: &'static [&'static str] = &["vec!"]; // FIXME: use the enum from libsyntax? -#[derive(Clone, Copy)] +#[derive(Clone, Copy, PartialEq, Eq)] enum MacroStyle { Parens, Brackets, @@ -63,9 +63,7 @@ pub fn rewrite_macro(mac: &ast::Mac, original_style }; - if let MacroStyle::Braces = style { - return None; - } else if mac.node.tts.is_empty() { + if mac.node.tts.is_empty() { return if let MacroStyle::Parens = style { Some(format!("{}()", macro_name)) } else { @@ -76,22 +74,24 @@ pub fn rewrite_macro(mac: &ast::Mac, let mut parser = tts_to_parser(context.parse_session, mac.node.tts.clone(), Vec::new()); let mut expr_vec = Vec::new(); - loop { - expr_vec.push(match parser.parse_expr() { - Ok(expr) => expr, - Err(..) => return None, - }); + if MacroStyle::Braces != style { + loop { + expr_vec.push(match parser.parse_expr() { + Ok(expr) => expr, + Err(..) => return None, + }); - match parser.token { - Token::Eof => break, - Token::Comma => (), - _ => return None, - } + match parser.token { + Token::Eof => break, + Token::Comma => (), + _ => return None, + } - let _ = parser.bump(); + let _ = parser.bump(); - if parser.token == Token::Eof { - return None; + if parser.token == Token::Eof { + return None; + } } } diff --git a/src/visitor.rs b/src/visitor.rs index 1f7de66f91c..569bacc1300 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -253,13 +253,9 @@ impl<'a> FmtVisitor<'a> { self.format_missing_with_indent(item.span.lo); self.format_mod(module, item.vis, item.span, item.ident); } - ast::Item_::ItemMac(..) => { + ast::Item_::ItemMac(ref mac) => { self.format_missing_with_indent(item.span.lo); - let snippet = self.snippet(item.span); - self.buffer.push_str(&snippet); - self.last_pos = item.span.hi; - // FIXME: we cannot format these yet, because of a bad span. - // See rust lang issue #28424. + self.visit_mac(mac); } ast::Item_::ItemForeignMod(ref foreign_mod) => { self.format_missing_with_indent(item.span.lo); diff --git a/tests/source/macros.rs b/tests/source/macros.rs index 5b07596fdf9..a16038ccabb 100644 --- a/tests/source/macros.rs +++ b/tests/source/macros.rs @@ -1,4 +1,4 @@ -itemmacro!(this, is.not() .formatted(yet)); +itemmacro!(this, is.now() .formatted(yay)); fn main() { foo! ( ); diff --git a/tests/target/macros.rs b/tests/target/macros.rs index 2bcc6f9a339..9307c8720cd 100644 --- a/tests/target/macros.rs +++ b/tests/target/macros.rs @@ -1,4 +1,4 @@ -itemmacro!(this, is.not() .formatted(yet)); +itemmacro!(this, is.now().formatted(yay)); fn main() { foo!(); From 7fc70a1753e31a0c1369636ad6715b8874232557 Mon Sep 17 00:00:00 2001 From: Kevin Yeh Date: Sun, 24 Jan 2016 13:11:18 -0600 Subject: [PATCH 2/2] Add item macro tests --- tests/source/macros.rs | 4 ++++ tests/target/macros.rs | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/tests/source/macros.rs b/tests/source/macros.rs index a16038ccabb..261f02e756f 100644 --- a/tests/source/macros.rs +++ b/tests/source/macros.rs @@ -1,5 +1,9 @@ itemmacro!(this, is.now() .formatted(yay)); +itemmacro!(really, long.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb() .is.formatted()); + +itemmacro!{this, is.bracket().formatted()} + fn main() { foo! ( ); diff --git a/tests/target/macros.rs b/tests/target/macros.rs index 9307c8720cd..4d99ede9f50 100644 --- a/tests/target/macros.rs +++ b/tests/target/macros.rs @@ -1,5 +1,12 @@ itemmacro!(this, is.now().formatted(yay)); +itemmacro!(really, + long.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb() + .is + .formatted()); + +itemmacro!{this, is.bracket().formatted()} + fn main() { foo!();