@@ -98,23 +98,22 @@ impl<'a> Parser<'a> {
9898
9999 let lo = self . token . span ;
100100
101- let visibility = self . parse_visibility ( false ) ?;
101+ let vis = self . parse_visibility ( false ) ?;
102102
103103 if self . eat_keyword ( kw:: Use ) {
104104 // USE ITEM
105105 let item_ = ItemKind :: Use ( P ( self . parse_use_tree ( ) ?) ) ;
106106 self . expect ( & token:: Semi ) ?;
107107
108108 let span = lo. to ( self . prev_span ) ;
109- let item =
110- self . mk_item ( span, Ident :: invalid ( ) , item_, visibility, attrs) ;
109+ let item = self . mk_item ( span, Ident :: invalid ( ) , item_, vis, attrs) ;
111110 return Ok ( Some ( item) ) ;
112111 }
113112
114113 if self . eat_keyword ( kw:: Extern ) {
115114 let extern_sp = self . prev_span ;
116115 if self . eat_keyword ( kw:: Crate ) {
117- return Ok ( Some ( self . parse_item_extern_crate ( lo, visibility , attrs) ?) ) ;
116+ return Ok ( Some ( self . parse_item_extern_crate ( lo, vis , attrs) ?) ) ;
118117 }
119118
120119 let opt_abi = self . parse_opt_abi ( ) ?;
@@ -128,10 +127,10 @@ impl<'a> Parser<'a> {
128127 constness : respan ( fn_span, Constness :: NotConst ) ,
129128 abi : opt_abi. unwrap_or ( Abi :: C ) ,
130129 } ;
131- return self . parse_item_fn ( lo, visibility , attrs, header) ;
130+ return self . parse_item_fn ( lo, vis , attrs, header) ;
132131 } else if self . check ( & token:: OpenDelim ( token:: Brace ) ) {
133132 return Ok ( Some (
134- self . parse_item_foreign_mod ( lo, opt_abi, visibility , attrs, extern_sp) ?,
133+ self . parse_item_foreign_mod ( lo, opt_abi, vis , attrs, extern_sp) ?,
135134 ) ) ;
136135 }
137136
@@ -142,10 +141,8 @@ impl<'a> Parser<'a> {
142141 self . bump ( ) ;
143142 // STATIC ITEM
144143 let m = self . parse_mutability ( ) ;
145- let ( ident, item_, extra_attrs) = self . parse_item_const ( Some ( m) ) ?;
146- let span = lo. to ( self . prev_span ) ;
147- let attrs = maybe_append ( attrs, extra_attrs) ;
148- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
144+ let info = self . parse_item_const ( Some ( m) ) ;
145+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
149146 }
150147 if self . eat_keyword ( kw:: Const ) {
151148 let const_span = self . prev_span ;
@@ -168,7 +165,7 @@ impl<'a> Parser<'a> {
168165 constness : respan ( const_span, Constness :: Const ) ,
169166 abi,
170167 } ;
171- return self . parse_item_fn ( lo, visibility , attrs, header) ;
168+ return self . parse_item_fn ( lo, vis , attrs, header) ;
172169 }
173170
174171 // CONST ITEM
@@ -184,10 +181,8 @@ impl<'a> Parser<'a> {
184181 )
185182 . emit ( ) ;
186183 }
187- let ( ident, item_, extra_attrs) = self . parse_item_const ( None ) ?;
188- let span = lo. to ( self . prev_span ) ;
189- let attrs = maybe_append ( attrs, extra_attrs) ;
190- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
184+ let info = self . parse_item_const ( None ) ;
185+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
191186 }
192187
193188 // Parses `async unsafe? fn`.
@@ -212,7 +207,7 @@ impl<'a> Parser<'a> {
212207 constness : respan ( fn_span, Constness :: NotConst ) ,
213208 abi : Abi :: Rust ,
214209 } ;
215- return self . parse_item_fn ( lo, visibility , attrs, header) ;
210+ return self . parse_item_fn ( lo, vis , attrs, header) ;
216211 }
217212 }
218213 if self . check_keyword ( kw:: Unsafe ) &&
@@ -227,10 +222,8 @@ impl<'a> Parser<'a> {
227222 self . expect_keyword ( kw:: Trait ) ?;
228223 IsAuto :: Yes
229224 } ;
230- let ( ident, item_, extra_attrs) = self . parse_item_trait ( is_auto, Unsafety :: Unsafe ) ?;
231- let span = lo. to ( self . prev_span ) ;
232- let attrs = maybe_append ( attrs, extra_attrs) ;
233- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
225+ let info = self . parse_item_trait ( is_auto, Unsafety :: Unsafe ) ;
226+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
234227 }
235228 if self . check_keyword ( kw:: Impl ) ||
236229 self . check_keyword ( kw:: Unsafe ) &&
@@ -241,10 +234,8 @@ impl<'a> Parser<'a> {
241234 let defaultness = self . parse_defaultness ( ) ;
242235 let unsafety = self . parse_unsafety ( ) ;
243236 self . expect_keyword ( kw:: Impl ) ?;
244- let ( ident, item_, extra_attrs) = self . parse_item_impl ( unsafety, defaultness) ?;
245- let span = lo. to ( self . prev_span ) ;
246- let attrs = maybe_append ( attrs, extra_attrs) ;
247- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
237+ let info = self . parse_item_impl ( unsafety, defaultness) ;
238+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
248239 }
249240 if self . check_keyword ( kw:: Fn ) {
250241 // FUNCTION ITEM
@@ -256,7 +247,7 @@ impl<'a> Parser<'a> {
256247 constness : respan ( fn_span, Constness :: NotConst ) ,
257248 abi : Abi :: Rust ,
258249 } ;
259- return self . parse_item_fn ( lo, visibility , attrs, header) ;
250+ return self . parse_item_fn ( lo, vis , attrs, header) ;
260251 }
261252 if self . check_keyword ( kw:: Unsafe )
262253 && self . look_ahead ( 1 , |t| * t != token:: OpenDelim ( token:: Brace ) ) {
@@ -273,14 +264,12 @@ impl<'a> Parser<'a> {
273264 constness : respan ( fn_span, Constness :: NotConst ) ,
274265 abi,
275266 } ;
276- return self . parse_item_fn ( lo, visibility , attrs, header) ;
267+ return self . parse_item_fn ( lo, vis , attrs, header) ;
277268 }
278269 if self . eat_keyword ( kw:: Mod ) {
279270 // MODULE ITEM
280- let ( ident, item_, extra_attrs) = self . parse_item_mod ( & attrs[ ..] ) ?;
281- let span = lo. to ( self . prev_span ) ;
282- let attrs = maybe_append ( attrs, extra_attrs) ;
283- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
271+ let info = self . parse_item_mod ( & attrs[ ..] ) ;
272+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
284273 }
285274 if let Some ( type_) = self . eat_type ( ) {
286275 let ( ident, alias, generics) = type_?;
@@ -290,14 +279,12 @@ impl<'a> Parser<'a> {
290279 AliasKind :: OpaqueTy ( bounds) => ItemKind :: OpaqueTy ( bounds, generics) ,
291280 } ;
292281 let span = lo. to ( self . prev_span ) ;
293- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility , attrs) ) ) ;
282+ return Ok ( Some ( self . mk_item ( span, ident, item_, vis , attrs) ) ) ;
294283 }
295284 if self . eat_keyword ( kw:: Enum ) {
296285 // ENUM ITEM
297- let ( ident, item_, extra_attrs) = self . parse_item_enum ( ) ?;
298- let span = lo. to ( self . prev_span ) ;
299- let attrs = maybe_append ( attrs, extra_attrs) ;
300- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
286+ let info = self . parse_item_enum ( ) ;
287+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
301288 }
302289 if self . check_keyword ( kw:: Trait )
303290 || ( self . check_keyword ( kw:: Auto )
@@ -311,33 +298,27 @@ impl<'a> Parser<'a> {
311298 IsAuto :: Yes
312299 } ;
313300 // TRAIT ITEM
314- let ( ident, item_, extra_attrs) = self . parse_item_trait ( is_auto, Unsafety :: Normal ) ?;
315- let span = lo. to ( self . prev_span ) ;
316- let attrs = maybe_append ( attrs, extra_attrs) ;
317- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
301+ let info = self . parse_item_trait ( is_auto, Unsafety :: Normal ) ;
302+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
318303 }
319304 if self . eat_keyword ( kw:: Struct ) {
320305 // STRUCT ITEM
321- let ( ident, item_, extra_attrs) = self . parse_item_struct ( ) ?;
322- let span = lo. to ( self . prev_span ) ;
323- let attrs = maybe_append ( attrs, extra_attrs) ;
324- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
306+ let info = self . parse_item_struct ( ) ;
307+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
325308 }
326309 if self . is_union_item ( ) {
327310 // UNION ITEM
328311 self . bump ( ) ;
329- let ( ident, item_, extra_attrs) = self . parse_item_union ( ) ?;
330- let span = lo. to ( self . prev_span ) ;
331- let attrs = maybe_append ( attrs, extra_attrs) ;
332- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
312+ let info = self . parse_item_union ( ) ;
313+ return self . mk_item_with_info ( attrs, lo, vis, info) ;
333314 }
334- if let Some ( macro_def) = self . eat_macro_def ( & attrs, & visibility , lo) ? {
315+ if let Some ( macro_def) = self . eat_macro_def ( & attrs, & vis , lo) ? {
335316 return Ok ( Some ( macro_def) ) ;
336317 }
337318
338319 // Verify whether we have encountered a struct or method definition where the user forgot to
339320 // add the `struct` or `fn` keyword after writing `pub`: `pub S {}`
340- if visibility . node . is_pub ( ) &&
321+ if vis . node . is_pub ( ) &&
341322 self . check_ident ( ) &&
342323 self . look_ahead ( 1 , |t| * t != token:: Not )
343324 {
@@ -428,7 +409,20 @@ impl<'a> Parser<'a> {
428409 return Err ( err) ;
429410 }
430411 }
431- self . parse_macro_use_or_failure ( attrs, macros_allowed, attributes_allowed, lo, visibility)
412+ self . parse_macro_use_or_failure ( attrs, macros_allowed, attributes_allowed, lo, vis)
413+ }
414+
415+ fn mk_item_with_info (
416+ & self ,
417+ attrs : Vec < Attribute > ,
418+ lo : Span ,
419+ vis : Visibility ,
420+ info : PResult < ' a , ItemInfo > ,
421+ ) -> PResult < ' a , Option < P < Item > > > {
422+ let ( ident, item, extra_attrs) = info?;
423+ let span = lo. to ( self . prev_span ) ;
424+ let attrs = maybe_append ( attrs, extra_attrs) ;
425+ Ok ( Some ( self . mk_item ( span, ident, item, vis, attrs) ) )
432426 }
433427
434428 fn recover_first_param ( & mut self ) -> & ' static str {
0 commit comments