Skip to content

Commit 2188b46

Browse files
committed
Format macro call with item arguments
1 parent eaab592 commit 2188b46

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

src/expr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3051,6 +3051,7 @@ impl<'a> ToExpr for MacroArg {
30513051
MacroArg::Expr(ref expr) => can_be_overflowed_expr(context, expr, len),
30523052
MacroArg::Ty(ref ty) => can_be_overflowed_type(context, ty, len),
30533053
MacroArg::Pat(..) => false,
3054+
MacroArg::Item(..) => len == 1,
30543055
}
30553056
}
30563057
}

src/macros.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
use std::collections::HashMap;
2323

2424
use config::lists::*;
25-
use syntax::ast;
25+
use syntax::{ast, ptr};
2626
use syntax::codemap::{BytePos, Span};
2727
use syntax::parse::new_parser_from_tts;
2828
use syntax::parse::parser::Parser;
@@ -38,6 +38,7 @@ use expr::{rewrite_array, rewrite_call_inner};
3838
use lists::{itemize_list, write_list, ListFormatting};
3939
use rewrite::{Rewrite, RewriteContext};
4040
use shape::{Indent, Shape};
41+
use spanned::Spanned;
4142
use utils::{format_visibility, mk_sp, wrap_str};
4243

4344
const FORCED_BRACKET_MACROS: &[&str] = &["vec!"];
@@ -70,9 +71,21 @@ impl MacroStyle {
7071

7172
#[derive(Debug)]
7273
pub enum MacroArg {
73-
Expr(ast::Expr),
74-
Ty(ast::Ty),
75-
Pat(ast::Pat),
74+
Expr(ptr::P<ast::Expr>),
75+
Ty(ptr::P<ast::Ty>),
76+
Pat(ptr::P<ast::Pat>),
77+
// `parse_item` returns `Option<ptr::P<ast::Item>>`.
78+
Item(Option<ptr::P<ast::Item>>),
79+
}
80+
81+
impl Rewrite for ast::Item {
82+
fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> {
83+
let mut visitor = ::visitor::FmtVisitor::from_context(context);
84+
visitor.block_indent = shape.indent;
85+
visitor.last_pos = self.span().lo();
86+
visitor.visit_item(self);
87+
Some(visitor.buffer)
88+
}
7689
}
7790

7891
impl Rewrite for MacroArg {
@@ -81,6 +94,7 @@ impl Rewrite for MacroArg {
8194
MacroArg::Expr(ref expr) => expr.rewrite(context, shape),
8295
MacroArg::Ty(ref ty) => ty.rewrite(context, shape),
8396
MacroArg::Pat(ref pat) => pat.rewrite(context, shape),
97+
MacroArg::Item(ref item) => item.as_ref().and_then(|item| item.rewrite(context, shape)),
8498
}
8599
}
86100
}
@@ -96,7 +110,7 @@ fn parse_macro_arg(parser: &mut Parser) -> Option<MacroArg> {
96110
} else {
97111
// Parsing succeeded.
98112
*parser = cloned_parser;
99-
return Some(MacroArg::$macro_arg((*x).clone()));
113+
return Some(MacroArg::$macro_arg(x.clone()));
100114
}
101115
}
102116
Err(mut e) => {
@@ -110,6 +124,7 @@ fn parse_macro_arg(parser: &mut Parser) -> Option<MacroArg> {
110124
parse_macro_arg!(Expr, parse_expr);
111125
parse_macro_arg!(Ty, parse_ty);
112126
parse_macro_arg!(Pat, parse_pat);
127+
parse_macro_arg!(Item, parse_item);
113128

114129
None
115130
}

src/spanned.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ impl Spanned for MacroArg {
187187
MacroArg::Expr(ref expr) => expr.span(),
188188
MacroArg::Ty(ref ty) => ty.span(),
189189
MacroArg::Pat(ref pat) => pat.span(),
190+
MacroArg::Item(ref item) => item.as_ref().unwrap().span(),
190191
}
191192
}
192193
}

0 commit comments

Comments
 (0)