1
- use rustc_ast:: token:: { Delimiter , TokenKind } ;
1
+ use rustc_ast:: token:: TokenKind ;
2
2
use rustc_ast:: tokenstream:: TokenStream ;
3
3
use rustc_ast:: { ast, ptr} ;
4
4
use rustc_parse:: parser:: { ForceCollect , Parser } ;
@@ -69,6 +69,7 @@ fn parse_macro_arg<'a, 'b: 'a>(parser: &'a mut Parser<'b>) -> Option<MacroArg> {
69
69
None
70
70
}
71
71
72
+ #[ derive( Default ) ]
72
73
pub ( crate ) struct ParsedMacroArgs {
73
74
pub ( crate ) vec_with_semi : bool ,
74
75
pub ( crate ) trailing_comma : bool ,
@@ -95,59 +96,56 @@ fn check_keyword<'a, 'b: 'a>(parser: &'a mut Parser<'b>) -> Option<MacroArg> {
95
96
pub ( crate ) fn parse_macro_args (
96
97
context : & RewriteContext < ' _ > ,
97
98
tokens : TokenStream ,
98
- style : Delimiter ,
99
99
forced_bracket : bool ,
100
100
) -> Option < ParsedMacroArgs > {
101
101
let mut parser = build_parser ( context, tokens) ;
102
102
let mut args = Vec :: new ( ) ;
103
103
let mut vec_with_semi = false ;
104
104
let mut trailing_comma = false ;
105
105
106
- if Delimiter :: Brace != style {
107
- loop {
108
- if let Some ( arg) = check_keyword ( & mut parser) {
109
- args. push ( arg) ;
110
- } else if let Some ( arg) = parse_macro_arg ( & mut parser) {
111
- args. push ( arg) ;
112
- } else {
113
- return None ;
114
- }
106
+ loop {
107
+ if let Some ( arg) = check_keyword ( & mut parser) {
108
+ args. push ( arg) ;
109
+ } else if let Some ( arg) = parse_macro_arg ( & mut parser) {
110
+ args. push ( arg) ;
111
+ } else {
112
+ return None ;
113
+ }
115
114
116
- match parser. token . kind {
117
- TokenKind :: Eof => break ,
118
- TokenKind :: Comma => ( ) ,
119
- TokenKind :: Semi => {
120
- // Try to parse `vec![expr; expr]`
121
- if forced_bracket {
122
- parser. bump ( ) ;
123
- if parser. token . kind != TokenKind :: Eof {
124
- match parse_macro_arg ( & mut parser) {
125
- Some ( arg) => {
126
- args. push ( arg) ;
127
- parser. bump ( ) ;
128
- if parser. token . kind == TokenKind :: Eof && args. len ( ) == 2 {
129
- vec_with_semi = true ;
130
- break ;
131
- }
132
- }
133
- None => {
134
- return None ;
115
+ match parser. token . kind {
116
+ TokenKind :: Eof => break ,
117
+ TokenKind :: Comma => ( ) ,
118
+ TokenKind :: Semi => {
119
+ // Try to parse `vec![expr; expr]`
120
+ if forced_bracket {
121
+ parser. bump ( ) ;
122
+ if parser. token . kind != TokenKind :: Eof {
123
+ match parse_macro_arg ( & mut parser) {
124
+ Some ( arg) => {
125
+ args. push ( arg) ;
126
+ parser. bump ( ) ;
127
+ if parser. token . kind == TokenKind :: Eof && args. len ( ) == 2 {
128
+ vec_with_semi = true ;
129
+ break ;
135
130
}
136
131
}
132
+ None => {
133
+ return None ;
134
+ }
137
135
}
138
136
}
139
- return None ;
140
137
}
141
- _ if args. last ( ) . map_or ( false , MacroArg :: is_item) => continue ,
142
- _ => return None ,
138
+ return None ;
143
139
}
140
+ _ if args. last ( ) . map_or ( false , MacroArg :: is_item) => continue ,
141
+ _ => return None ,
142
+ }
144
143
145
- parser. bump ( ) ;
144
+ parser. bump ( ) ;
146
145
147
- if parser. token . kind == TokenKind :: Eof {
148
- trailing_comma = true ;
149
- break ;
150
- }
146
+ if parser. token . kind == TokenKind :: Eof {
147
+ trailing_comma = true ;
148
+ break ;
151
149
}
152
150
}
153
151
0 commit comments