@@ -124,16 +124,17 @@ fn test_valid_shebang() {
124
124
assert_eq ! ( strip_shebang( input) , None ) ;
125
125
}
126
126
127
- fn check_lexing ( src : & str , expect : Expect ) {
127
+ fn check_lexing ( src : & str , frontmatter_allowed : FrontmatterAllowed , expect : Expect ) {
128
128
let actual: String =
129
- tokenize ( src, FrontmatterAllowed :: No ) . map ( |token| format ! ( "{:?}\n " , token) ) . collect ( ) ;
129
+ tokenize ( src, frontmatter_allowed ) . map ( |token| format ! ( "{:?}\n " , token) ) . collect ( ) ;
130
130
expect. assert_eq ( & actual)
131
131
}
132
132
133
133
#[ test]
134
134
fn smoke_test ( ) {
135
135
check_lexing (
136
136
"/* my source file */ fn main() { println!(\" zebra\" ); }\n " ,
137
+ FrontmatterAllowed :: No ,
137
138
expect ! [ [ r#"
138
139
Token { kind: BlockComment { doc_style: None, terminated: true }, len: 20 }
139
140
Token { kind: Whitespace, len: 1 }
@@ -172,6 +173,7 @@ fn comment_flavors() {
172
173
/** outer doc block */
173
174
/*! inner doc block */
174
175
" ,
176
+ FrontmatterAllowed :: No ,
175
177
expect ! [ [ r#"
176
178
Token { kind: Whitespace, len: 1 }
177
179
Token { kind: LineComment { doc_style: None }, len: 7 }
@@ -200,6 +202,7 @@ fn comment_flavors() {
200
202
fn nested_block_comments ( ) {
201
203
check_lexing (
202
204
"/* /* */ */'a'" ,
205
+ FrontmatterAllowed :: No ,
203
206
expect ! [ [ r#"
204
207
Token { kind: BlockComment { doc_style: None, terminated: true }, len: 11 }
205
208
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -211,6 +214,7 @@ fn nested_block_comments() {
211
214
fn characters ( ) {
212
215
check_lexing (
213
216
"'a' ' ' '\\ n'" ,
217
+ FrontmatterAllowed :: No ,
214
218
expect ! [ [ r#"
215
219
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
216
220
Token { kind: Whitespace, len: 1 }
@@ -225,6 +229,7 @@ fn characters() {
225
229
fn lifetime ( ) {
226
230
check_lexing (
227
231
"'abc" ,
232
+ FrontmatterAllowed :: No ,
228
233
expect ! [ [ r#"
229
234
Token { kind: Lifetime { starts_with_number: false }, len: 4 }
230
235
"# ] ] ,
@@ -235,6 +240,7 @@ fn lifetime() {
235
240
fn raw_string ( ) {
236
241
check_lexing (
237
242
"r###\" \" #a\\ b\x00 c\" \" ###" ,
243
+ FrontmatterAllowed :: No ,
238
244
expect ! [ [ r#"
239
245
Token { kind: Literal { kind: RawStr { n_hashes: Some(3) }, suffix_start: 17 }, len: 17 }
240
246
"# ] ] ,
258
264
r###"raw"###suffix
259
265
br###"raw"###suffix
260
266
"#### ,
267
+ FrontmatterAllowed :: No ,
261
268
expect ! [ [ r#"
262
269
Token { kind: Whitespace, len: 1 }
263
270
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -287,3 +294,78 @@ br###"raw"###suffix
287
294
"# ] ] ,
288
295
)
289
296
}
297
+
298
+ #[ test]
299
+ fn frontmatter_allowed ( ) {
300
+ check_lexing (
301
+ r#"
302
+ ---cargo
303
+ [dependencies]
304
+ clap = "4"
305
+ ---
306
+
307
+ fn main() {}
308
+ "# ,
309
+ FrontmatterAllowed :: Yes ,
310
+ expect ! [ [ r#"
311
+ Token { kind: Whitespace, len: 1 }
312
+ Token { kind: Frontmatter { has_invalid_preceding_whitespace: false, invalid_infostring: false }, len: 38 }
313
+ Token { kind: Whitespace, len: 2 }
314
+ Token { kind: Ident, len: 2 }
315
+ Token { kind: Whitespace, len: 1 }
316
+ Token { kind: Ident, len: 4 }
317
+ Token { kind: OpenParen, len: 1 }
318
+ Token { kind: CloseParen, len: 1 }
319
+ Token { kind: Whitespace, len: 1 }
320
+ Token { kind: OpenBrace, len: 1 }
321
+ Token { kind: CloseBrace, len: 1 }
322
+ Token { kind: Whitespace, len: 1 }
323
+ "# ] ] ,
324
+ )
325
+ }
326
+
327
+ #[ test]
328
+ fn frontmatter_disallowed ( ) {
329
+ check_lexing (
330
+ r#"
331
+ ---cargo
332
+ [dependencies]
333
+ clap = "4"
334
+ ---
335
+
336
+ fn main() {}
337
+ "# ,
338
+ FrontmatterAllowed :: No ,
339
+ expect ! [ [ r#"
340
+ Token { kind: Whitespace, len: 1 }
341
+ Token { kind: Minus, len: 1 }
342
+ Token { kind: Minus, len: 1 }
343
+ Token { kind: Minus, len: 1 }
344
+ Token { kind: Ident, len: 5 }
345
+ Token { kind: Whitespace, len: 1 }
346
+ Token { kind: OpenBracket, len: 1 }
347
+ Token { kind: Ident, len: 12 }
348
+ Token { kind: CloseBracket, len: 1 }
349
+ Token { kind: Whitespace, len: 1 }
350
+ Token { kind: Ident, len: 4 }
351
+ Token { kind: Whitespace, len: 1 }
352
+ Token { kind: Eq, len: 1 }
353
+ Token { kind: Whitespace, len: 1 }
354
+ Token { kind: Literal { kind: Str { terminated: true }, suffix_start: 3 }, len: 3 }
355
+ Token { kind: Whitespace, len: 1 }
356
+ Token { kind: Minus, len: 1 }
357
+ Token { kind: Minus, len: 1 }
358
+ Token { kind: Minus, len: 1 }
359
+ Token { kind: Whitespace, len: 2 }
360
+ Token { kind: Ident, len: 2 }
361
+ Token { kind: Whitespace, len: 1 }
362
+ Token { kind: Ident, len: 4 }
363
+ Token { kind: OpenParen, len: 1 }
364
+ Token { kind: CloseParen, len: 1 }
365
+ Token { kind: Whitespace, len: 1 }
366
+ Token { kind: OpenBrace, len: 1 }
367
+ Token { kind: CloseBrace, len: 1 }
368
+ Token { kind: Whitespace, len: 1 }
369
+ "# ] ] ,
370
+ )
371
+ }
0 commit comments