@@ -90,7 +90,10 @@ pub enum MetaVarKind {
90
90
Ident ,
91
91
Lifetime ,
92
92
Literal ,
93
- Meta ,
93
+ Meta {
94
+ /// Will `AttrItem::meta` succeed on this, if reparsed?
95
+ has_meta_form : bool ,
96
+ } ,
94
97
Path ,
95
98
Vis ,
96
99
TT ,
@@ -110,7 +113,7 @@ impl fmt::Display for MetaVarKind {
110
113
MetaVarKind :: Ident => sym:: ident,
111
114
MetaVarKind :: Lifetime => sym:: lifetime,
112
115
MetaVarKind :: Literal => sym:: literal,
113
- MetaVarKind :: Meta => sym:: meta,
116
+ MetaVarKind :: Meta { .. } => sym:: meta,
114
117
MetaVarKind :: Path => sym:: path,
115
118
MetaVarKind :: Vis => sym:: vis,
116
119
MetaVarKind :: TT => sym:: tt,
@@ -621,8 +624,7 @@ impl Token {
621
624
matches ! ( & * * nt,
622
625
NtBlock ( ..) |
623
626
NtExpr ( ..) |
624
- NtLiteral ( ..) |
625
- NtPath ( ..)
627
+ NtLiteral ( ..)
626
628
) ,
627
629
OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
628
630
MetaVarKind :: Block |
@@ -658,14 +660,11 @@ impl Token {
658
660
matches ! ( & * * nt,
659
661
| NtExpr ( ..)
660
662
| NtLiteral ( ..)
661
- | NtMeta ( ..)
662
- | NtPat ( ..)
663
- | NtPath ( ..)
664
663
) ,
665
664
OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
666
665
MetaVarKind :: Expr { .. } |
667
666
MetaVarKind :: Literal |
668
- MetaVarKind :: Meta |
667
+ MetaVarKind :: Meta { .. } |
669
668
MetaVarKind :: Pat ( _) |
670
669
MetaVarKind :: Path |
671
670
MetaVarKind :: Ty { .. }
@@ -689,7 +688,6 @@ impl Token {
689
688
Lifetime ( ..) | // lifetime bound in trait object
690
689
Lt | BinOp ( Shl ) | // associated path
691
690
PathSep => true , // global path
692
- Interpolated ( ref nt) => matches ! ( & * * nt, NtPath ( ..) ) ,
693
691
OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
694
692
MetaVarKind :: Ty { .. } |
695
693
MetaVarKind :: Path
@@ -848,27 +846,17 @@ impl Token {
848
846
self . ident ( ) . is_some_and ( |( ident, _) | ident. name == name)
849
847
}
850
848
851
- /// Returns `true` if the token is an interpolated path.
852
- fn is_whole_path ( & self ) -> bool {
853
- if let Interpolated ( nt) = & self . kind
854
- && let NtPath ( ..) = & * * nt
855
- {
856
- return true ;
857
- }
858
-
859
- false
860
- }
861
-
862
849
/// Is this a pre-parsed expression dropped into the token stream
863
850
/// (which happens while parsing the result of macro expansion)?
864
851
pub fn is_whole_expr ( & self ) -> bool {
852
+ #[ allow( irrefutable_let_patterns) ] // FIXME: temporary
865
853
if let Interpolated ( nt) = & self . kind
866
- && let NtExpr ( _) | NtLiteral ( _) | NtPath ( _ ) | NtBlock ( _) = & * * nt
854
+ && let NtExpr ( _) | NtLiteral ( _) | NtBlock ( _) = & * * nt
867
855
{
868
- return true ;
856
+ true
857
+ } else {
858
+ matches ! ( self . is_metavar_seq( ) , Some ( MetaVarKind :: Path ) )
869
859
}
870
-
871
- false
872
860
}
873
861
874
862
/// Is the token an interpolated block (`$b:block`)?
@@ -894,7 +882,7 @@ impl Token {
894
882
pub fn is_path_start ( & self ) -> bool {
895
883
self == & PathSep
896
884
|| self . is_qpath_start ( )
897
- || self . is_whole_path ( )
885
+ || matches ! ( self . is_metavar_seq ( ) , Some ( MetaVarKind :: Path ) )
898
886
|| self . is_path_segment_keyword ( )
899
887
|| self . is_ident ( ) && !self . is_reserved_ident ( )
900
888
}
@@ -1075,12 +1063,8 @@ pub enum Nonterminal {
1075
1063
NtItem ( P < ast:: Item > ) ,
1076
1064
NtBlock ( P < ast:: Block > ) ,
1077
1065
NtStmt ( P < ast:: Stmt > ) ,
1078
- NtPat ( P < ast:: Pat > ) ,
1079
1066
NtExpr ( P < ast:: Expr > ) ,
1080
1067
NtLiteral ( P < ast:: Expr > ) ,
1081
- /// Stuff inside brackets for attributes
1082
- NtMeta ( P < ast:: AttrItem > ) ,
1083
- NtPath ( P < ast:: Path > ) ,
1084
1068
}
1085
1069
1086
1070
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Encodable , Decodable , Hash , HashStable_Generic ) ]
@@ -1172,10 +1156,7 @@ impl Nonterminal {
1172
1156
NtItem ( item) => item. span ,
1173
1157
NtBlock ( block) => block. span ,
1174
1158
NtStmt ( stmt) => stmt. span ,
1175
- NtPat ( pat) => pat. span ,
1176
1159
NtExpr ( expr) | NtLiteral ( expr) => expr. span ,
1177
- NtMeta ( attr_item) => attr_item. span ( ) ,
1178
- NtPath ( path) => path. span ,
1179
1160
}
1180
1161
}
1181
1162
@@ -1184,11 +1165,8 @@ impl Nonterminal {
1184
1165
NtItem ( ..) => "item" ,
1185
1166
NtBlock ( ..) => "block" ,
1186
1167
NtStmt ( ..) => "statement" ,
1187
- NtPat ( ..) => "pattern" ,
1188
1168
NtExpr ( ..) => "expression" ,
1189
1169
NtLiteral ( ..) => "literal" ,
1190
- NtMeta ( ..) => "attribute" ,
1191
- NtPath ( ..) => "path" ,
1192
1170
}
1193
1171
}
1194
1172
}
@@ -1209,11 +1187,8 @@ impl fmt::Debug for Nonterminal {
1209
1187
NtItem ( ..) => f. pad ( "NtItem(..)" ) ,
1210
1188
NtBlock ( ..) => f. pad ( "NtBlock(..)" ) ,
1211
1189
NtStmt ( ..) => f. pad ( "NtStmt(..)" ) ,
1212
- NtPat ( ..) => f. pad ( "NtPat(..)" ) ,
1213
1190
NtExpr ( ..) => f. pad ( "NtExpr(..)" ) ,
1214
1191
NtLiteral ( ..) => f. pad ( "NtLiteral(..)" ) ,
1215
- NtMeta ( ..) => f. pad ( "NtMeta(..)" ) ,
1216
- NtPath ( ..) => f. pad ( "NtPath(..)" ) ,
1217
1192
}
1218
1193
}
1219
1194
}
0 commit comments