@@ -124,15 +124,17 @@ fn test_valid_shebang() {
124124 assert_eq ! ( strip_shebang( input) , None ) ;
125125}
126126
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 ( ) ;
129130 expect. assert_eq ( & actual)
130131}
131132
132133#[ test]
133134fn smoke_test ( ) {
134135 check_lexing (
135136 "/* my source file */ fn main() { println!(\" zebra\" ); }\n " ,
137+ FrontmatterAllowed :: No ,
136138 expect ! [ [ r#"
137139 Token { kind: BlockComment { doc_style: None, terminated: true }, len: 20 }
138140 Token { kind: Whitespace, len: 1 }
@@ -171,6 +173,7 @@ fn comment_flavors() {
171173/** outer doc block */
172174/*! inner doc block */
173175" ,
176+ FrontmatterAllowed :: No ,
174177 expect ! [ [ r#"
175178 Token { kind: Whitespace, len: 1 }
176179 Token { kind: LineComment { doc_style: None }, len: 7 }
@@ -199,6 +202,7 @@ fn comment_flavors() {
199202fn nested_block_comments ( ) {
200203 check_lexing (
201204 "/* /* */ */'a'" ,
205+ FrontmatterAllowed :: No ,
202206 expect ! [ [ r#"
203207 Token { kind: BlockComment { doc_style: None, terminated: true }, len: 11 }
204208 Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -210,6 +214,7 @@ fn nested_block_comments() {
210214fn characters ( ) {
211215 check_lexing (
212216 "'a' ' ' '\\ n'" ,
217+ FrontmatterAllowed :: No ,
213218 expect ! [ [ r#"
214219 Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
215220 Token { kind: Whitespace, len: 1 }
@@ -224,6 +229,7 @@ fn characters() {
224229fn lifetime ( ) {
225230 check_lexing (
226231 "'abc" ,
232+ FrontmatterAllowed :: No ,
227233 expect ! [ [ r#"
228234 Token { kind: Lifetime { starts_with_number: false }, len: 4 }
229235 "# ] ] ,
@@ -234,6 +240,7 @@ fn lifetime() {
234240fn raw_string ( ) {
235241 check_lexing (
236242 "r###\" \" #a\\ b\x00 c\" \" ###" ,
243+ FrontmatterAllowed :: No ,
237244 expect ! [ [ r#"
238245 Token { kind: Literal { kind: RawStr { n_hashes: Some(3) }, suffix_start: 17 }, len: 17 }
239246 "# ] ] ,
257264r###"raw"###suffix
258265br###"raw"###suffix
259266"#### ,
267+ FrontmatterAllowed :: No ,
260268 expect ! [ [ r#"
261269 Token { kind: Whitespace, len: 1 }
262270 Token { kind: Literal { kind: Char { terminated: true }, suffix_start: 3 }, len: 3 }
@@ -286,3 +294,78 @@ br###"raw"###suffix
286294 "# ] ] ,
287295 )
288296}
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