@@ -124,15 +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 ) {
128
- let actual: String = tokenize ( src) . map ( |token| format ! ( "{:?}\n " , token) ) . collect ( ) ;
127
+ fn check_lexing ( src : & str , frontmatter_allowed : FrontmatterAllowed , expect : Expect ) {
128
+ let actual: String =
129
+ tokenize ( src, frontmatter_allowed) . map ( |token| format ! ( "{:?}\n " , token) ) . collect ( ) ;
129
130
expect. assert_eq ( & actual)
130
131
}
131
132
132
133
#[ test]
133
134
fn smoke_test ( ) {
134
135
check_lexing (
135
136
"/* my source file */ fn main() { println!(\" zebra\" ); }\n " ,
137
+ FrontmatterAllowed :: No ,
136
138
expect ! [ [ r#"
137
139
Token { kind: BlockComment { doc_style: None, terminated: true }, len: 20 }
138
140
Token { kind: Whitespace, len: 1 }
@@ -171,6 +173,7 @@ fn comment_flavors() {
171
173
/** outer doc block */
172
174
/*! inner doc block */
173
175
" ,
176
+ FrontmatterAllowed :: No ,
174
177
expect ! [ [ r#"
175
178
Token { kind: Whitespace, len: 1 }
176
179
Token { kind: LineComment { doc_style: None }, len: 7 }
@@ -199,6 +202,7 @@ fn comment_flavors() {
199
202
fn nested_block_comments ( ) {
200
203
check_lexing (
201
204
"/* /* */ */'a'" ,
205
+ FrontmatterAllowed :: No ,
202
206
expect ! [ [ r#"
203
207
Token { kind: BlockComment { doc_style: None, terminated: true }, len: 11 }
204
208
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -210,6 +214,7 @@ fn nested_block_comments() {
210
214
fn characters ( ) {
211
215
check_lexing (
212
216
"'a' ' ' '\\ n'" ,
217
+ FrontmatterAllowed :: No ,
213
218
expect ! [ [ r#"
214
219
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
215
220
Token { kind: Whitespace, len: 1 }
@@ -224,6 +229,7 @@ fn characters() {
224
229
fn lifetime ( ) {
225
230
check_lexing (
226
231
"'abc" ,
232
+ FrontmatterAllowed :: No ,
227
233
expect ! [ [ r#"
228
234
Token { kind: Lifetime { starts_with_number: false }, len: 4 }
229
235
"# ] ] ,
@@ -234,6 +240,7 @@ fn lifetime() {
234
240
fn raw_string ( ) {
235
241
check_lexing (
236
242
"r###\" \" #a\\ b\x00 c\" \" ###" ,
243
+ FrontmatterAllowed :: No ,
237
244
expect ! [ [ r#"
238
245
Token { kind: Literal { kind: RawStr { n_hashes: Some(3) }, suffix_start: 17 }, len: 17 }
239
246
"# ] ] ,
257
264
r###"raw"###suffix
258
265
br###"raw"###suffix
259
266
"#### ,
267
+ FrontmatterAllowed :: No ,
260
268
expect ! [ [ r#"
261
269
Token { kind: Whitespace, len: 1 }
262
270
Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -286,3 +294,78 @@ br###"raw"###suffix
286
294
"# ] ] ,
287
295
)
288
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