@@ -1423,13 +1423,35 @@ impl<'a> Parser<'a> {
1423
1423
if self . is_keyword_ahead ( 1 , & [ kw:: Crate ] )
1424
1424
&& self . look_ahead ( 2 , |t| t != & token:: ModSep ) // account for `pub(crate::foo)`
1425
1425
{
1426
- return self . parse_vis_pub_crate ( lo) ;
1426
+ // Parse `pub(crate)`.
1427
+ self . bump ( ) ; // `(`
1428
+ self . bump ( ) ; // `crate`
1429
+ self . expect ( & token:: CloseDelim ( token:: Paren ) ) ?; // `)`
1430
+ let vis = VisibilityKind :: Crate ( CrateSugar :: PubCrate ) ;
1431
+ return Ok ( respan ( lo. to ( self . prev_span ) , vis) ) ;
1427
1432
} else if self . is_keyword_ahead ( 1 , & [ kw:: In ] ) {
1428
- return self . parse_vis_pub_in ( lo) ;
1433
+ // Parse `pub(in path)`.
1434
+ self . bump ( ) ; // `(`
1435
+ self . bump ( ) ; // `in`
1436
+ let path = self . parse_path ( PathStyle :: Mod ) ?; // `path`
1437
+ self . expect ( & token:: CloseDelim ( token:: Paren ) ) ?; // `)`
1438
+ let vis = VisibilityKind :: Restricted {
1439
+ path : P ( path) ,
1440
+ id : ast:: DUMMY_NODE_ID ,
1441
+ } ;
1442
+ return Ok ( respan ( lo. to ( self . prev_span ) , vis) ) ;
1429
1443
} else if self . look_ahead ( 2 , |t| t == & token:: CloseDelim ( token:: Paren ) )
1430
1444
&& self . is_keyword_ahead ( 1 , & [ kw:: Super , kw:: SelfLower ] )
1431
1445
{
1432
- return self . parse_vis_self_super ( lo) ;
1446
+ // Parse `pub(self)` or `pub(super)`.
1447
+ self . bump ( ) ; // `(`
1448
+ let path = self . parse_path ( PathStyle :: Mod ) ?; // `super`/`self`
1449
+ self . expect ( & token:: CloseDelim ( token:: Paren ) ) ?; // `)`
1450
+ let vis = VisibilityKind :: Restricted {
1451
+ path : P ( path) ,
1452
+ id : ast:: DUMMY_NODE_ID ,
1453
+ } ;
1454
+ return Ok ( respan ( lo. to ( self . prev_span ) , vis) ) ;
1433
1455
} else if !can_take_tuple { // Provide this diagnostic if this is not a tuple struct.
1434
1456
self . recover_incorrect_vis_restriction ( ) ?;
1435
1457
// Emit diagnostic, but continue with public visibility.
@@ -1439,40 +1461,6 @@ impl<'a> Parser<'a> {
1439
1461
Ok ( respan ( lo, VisibilityKind :: Public ) )
1440
1462
}
1441
1463
1442
- /// Parse `pub(crate)`.
1443
- fn parse_vis_pub_crate ( & mut self , lo : Span ) -> PResult < ' a , Visibility > {
1444
- self . bump ( ) ; // `(`
1445
- self . bump ( ) ; // `crate`
1446
- self . expect ( & token:: CloseDelim ( token:: Paren ) ) ?; // `)`
1447
- Ok ( respan (
1448
- lo. to ( self . prev_span ) ,
1449
- VisibilityKind :: Crate ( CrateSugar :: PubCrate ) ,
1450
- ) )
1451
- }
1452
-
1453
- /// Parse `pub(in path)`.
1454
- fn parse_vis_pub_in ( & mut self , lo : Span ) -> PResult < ' a , Visibility > {
1455
- self . bump ( ) ; // `(`
1456
- self . bump ( ) ; // `in`
1457
- let path = self . parse_path ( PathStyle :: Mod ) ?; // `path`
1458
- self . expect ( & token:: CloseDelim ( token:: Paren ) ) ?; // `)`
1459
- Ok ( respan ( lo. to ( self . prev_span ) , VisibilityKind :: Restricted {
1460
- path : P ( path) ,
1461
- id : ast:: DUMMY_NODE_ID ,
1462
- } ) )
1463
- }
1464
-
1465
- /// Parse `pub(self)` or `pub(super)`.
1466
- fn parse_vis_self_super ( & mut self , lo : Span ) -> PResult < ' a , Visibility > {
1467
- self . bump ( ) ; // `(`
1468
- let path = self . parse_path ( PathStyle :: Mod ) ?; // `super`/`self`
1469
- self . expect ( & token:: CloseDelim ( token:: Paren ) ) ?; // `)`
1470
- Ok ( respan ( lo. to ( self . prev_span ) , VisibilityKind :: Restricted {
1471
- path : P ( path) ,
1472
- id : ast:: DUMMY_NODE_ID ,
1473
- } ) )
1474
- }
1475
-
1476
1464
/// Recovery for e.g. `pub(something) fn ...` or `struct X { pub(something) y: Z }`
1477
1465
fn recover_incorrect_vis_restriction ( & mut self ) -> PResult < ' a , ( ) > {
1478
1466
self . bump ( ) ; // `(`
0 commit comments