@@ -20,6 +20,7 @@ use rustc_ast::tokenstream::TokenStream;
20
20
use rustc_ast:: { AttrItem , Attribute , MetaItemInner , token} ;
21
21
use rustc_ast_pretty:: pprust;
22
22
use rustc_errors:: { Diag , EmissionGuarantee , FatalError , PResult , pluralize} ;
23
+ use rustc_lexer:: FrontmatterAllowed ;
23
24
use rustc_session:: parse:: ParseSess ;
24
25
use rustc_span:: source_map:: SourceMap ;
25
26
use rustc_span:: { FileName , SourceFile , Span } ;
@@ -146,7 +147,7 @@ fn new_parser_from_source_file(
146
147
source_file : Arc < SourceFile > ,
147
148
) -> Result < Parser < ' _ > , Vec < Diag < ' _ > > > {
148
149
let end_pos = source_file. end_position ( ) ;
149
- let stream = source_file_to_stream ( psess, source_file, None ) ?;
150
+ let stream = source_file_to_stream ( psess, source_file, None , FrontmatterAllowed :: Yes ) ?;
150
151
let mut parser = Parser :: new ( psess, stream, None ) ;
151
152
if parser. token == token:: Eof {
152
153
parser. token . span = Span :: new ( end_pos, end_pos, parser. token . span . ctxt ( ) , None ) ;
@@ -161,7 +162,9 @@ pub fn source_str_to_stream(
161
162
override_span : Option < Span > ,
162
163
) -> Result < TokenStream , Vec < Diag < ' _ > > > {
163
164
let source_file = psess. source_map ( ) . new_source_file ( name, source) ;
164
- source_file_to_stream ( psess, source_file, override_span)
165
+ // used mainly for `proc_macro` and the likes, not for our parsing purposes, so don't parse
166
+ // frontmatters as frontmatters.
167
+ source_file_to_stream ( psess, source_file, override_span, FrontmatterAllowed :: No )
165
168
}
166
169
167
170
/// Given a source file, produces a sequence of token trees. Returns any buffered errors from
@@ -170,6 +173,7 @@ fn source_file_to_stream<'psess>(
170
173
psess : & ' psess ParseSess ,
171
174
source_file : Arc < SourceFile > ,
172
175
override_span : Option < Span > ,
176
+ frontmatter_allowed : FrontmatterAllowed ,
173
177
) -> Result < TokenStream , Vec < Diag < ' psess > > > {
174
178
let src = source_file. src . as_ref ( ) . unwrap_or_else ( || {
175
179
psess. dcx ( ) . bug ( format ! (
@@ -178,7 +182,13 @@ fn source_file_to_stream<'psess>(
178
182
) ) ;
179
183
} ) ;
180
184
181
- lexer:: lex_token_trees ( psess, src. as_str ( ) , source_file. start_pos , override_span)
185
+ lexer:: lex_token_trees (
186
+ psess,
187
+ src. as_str ( ) ,
188
+ source_file. start_pos ,
189
+ override_span,
190
+ frontmatter_allowed,
191
+ )
182
192
}
183
193
184
194
/// Runs the given subparser `f` on the tokens of the given `attr`'s item.
0 commit comments