@@ -124,16 +124,17 @@ fn test_valid_shebang() {
124124 assert_eq ! ( strip_shebang( input) , None ) ;
125125}
126126
127- fn check_lexing ( src : & str , expect : Expect ) {
127+ fn check_lexing ( src : & str , frontmatter_allowed : FrontmatterAllowed , expect : Expect ) {
128128 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 ( ) ;
130130 expect. assert_eq ( & actual)
131131}
132132
133133#[ test]
134134fn smoke_test ( ) {
135135 check_lexing (
136136 "/* my source file */ fn main() { println!(\" zebra\" ); }\n " ,
137+ FrontmatterAllowed :: No ,
137138 expect ! [ [ r#"
138139 Token { kind: BlockComment { doc_style: None, terminated: true }, len: 20 }
139140 Token { kind: Whitespace, len: 1 }
@@ -172,6 +173,7 @@ fn comment_flavors() {
172173/** outer doc block */
173174/*! inner doc block */
174175" ,
176+ FrontmatterAllowed :: No ,
175177 expect ! [ [ r#"
176178 Token { kind: Whitespace, len: 1 }
177179 Token { kind: LineComment { doc_style: None }, len: 7 }
@@ -200,6 +202,7 @@ fn comment_flavors() {
200202fn nested_block_comments ( ) {
201203 check_lexing (
202204 "/* /* */ */'a'" ,
205+ FrontmatterAllowed :: No ,
203206 expect ! [ [ r#"
204207 Token { kind: BlockComment { doc_style: None, terminated: true }, len: 11 }
205208 Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -211,6 +214,7 @@ fn nested_block_comments() {
211214fn characters ( ) {
212215 check_lexing (
213216 "'a' ' ' '\\ n'" ,
217+ FrontmatterAllowed :: No ,
214218 expect ! [ [ r#"
215219 Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
216220 Token { kind: Whitespace, len: 1 }
@@ -225,6 +229,7 @@ fn characters() {
225229fn lifetime ( ) {
226230 check_lexing (
227231 "'abc" ,
232+ FrontmatterAllowed :: No ,
228233 expect ! [ [ r#"
229234 Token { kind: Lifetime { starts_with_number: false }, len: 4 }
230235 "# ] ] ,
@@ -235,6 +240,7 @@ fn lifetime() {
235240fn raw_string ( ) {
236241 check_lexing (
237242 "r###\" \" #a\\ b\x00 c\" \" ###" ,
243+ FrontmatterAllowed :: No ,
238244 expect ! [ [ r#"
239245 Token { kind: Literal { kind: RawStr { n_hashes: Some(3) }, suffix_start: 17 }, len: 17 }
240246 "# ] ] ,
258264r###"raw"###suffix
259265br###"raw"###suffix
260266"#### ,
267+ FrontmatterAllowed :: No ,
261268 expect ! [ [ r#"
262269 Token { kind: Whitespace, len: 1 }
263270 Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -287,3 +294,78 @@ br###"raw"###suffix
287294 "# ] ] ,
288295 )
289296}
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