diff --git a/nac3parser/src/parser.rs b/nac3parser/src/parser.rs index 3df481b2e..825a14c77 100644 --- a/nac3parser/src/parser.rs +++ b/nac3parser/src/parser.rs @@ -164,4 +164,67 @@ class Foo(A, B): let parse_ast = parse_expression(&source).unwrap(); insta::assert_debug_snapshot!(parse_ast); } + + #[test] + fn test_more_comment() { + let source = "\ +a: int # nac3: sf1 +# nac3: sdf4 +for i in (1, '12'): # nac3: sf2 + a: int +# nac3: 3 +# nac3: 5 +while i < 2: # nac3: 4 + # nac3: real pass + pass + # nac3: expr1 + # nac3: expr3 + 1 + 2 # nac3: expr2 + # nac3: if3 + # nac3: if1 + if 1: # nac3: if2 + 3"; + insta::assert_debug_snapshot!(parse_program(&source).unwrap()); + } + + #[test] + fn test_sample_comment() { + let source = "\ +# nac3: while1 +# nac3: while2 +# normal comment +while test: # nac3: while3 + # nac3: simple assign0 + a = 3 # nac3: simple assign1 +"; + insta::assert_debug_snapshot!(parse_program(&source).unwrap()); + } + + #[test] + fn test_comment_ambiguity() { + let source = "\ +if a: d; # nac3: for d +if b: c # nac3: for c +if d: # nac3: for if d + b; b + 3; # nac3: for b + 3 +a = 3; a + 3; b = a; # nac3: notif +# nac3: smallsingle1 +# nac3: smallsingle3 +aa = 3 # nac3: smallsingle2 +if a: # nac3: small2 + a +for i in a: # nac3: for1 + pass +"; + insta::assert_debug_snapshot!(parse_program(&source).unwrap()); + } + + #[test] + fn test_comment_should_fail() { + let source = "\ +if a: # nac3: something +a = 3 +"; + assert!(parse_program(&source).is_err()); + } } diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__comment_ambiguity.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__comment_ambiguity.snap new file mode 100644 index 000000000..e46deac7b --- /dev/null +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__comment_ambiguity.snap @@ -0,0 +1,448 @@ +--- +source: nac3parser/src/parser.rs +expression: parse_program(&source).unwrap() + +--- +[ + Located { + location: Location { + row: 1, + column: 1, + }, + custom: (), + node: If { + test: Located { + location: Location { + row: 1, + column: 4, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 1, + column: 7, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 1, + column: 7, + }, + custom: (), + node: Name { + id: "d", + ctx: Load, + }, + }, + config_comment: [ + "for d", + ], + }, + }, + ], + orelse: [], + config_comment: [], + }, + }, + Located { + location: Location { + row: 2, + column: 1, + }, + custom: (), + node: If { + test: Located { + location: Location { + row: 2, + column: 4, + }, + custom: (), + node: Name { + id: "b", + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 2, + column: 7, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 2, + column: 7, + }, + custom: (), + node: Name { + id: "c", + ctx: Load, + }, + }, + config_comment: [ + "for c", + ], + }, + }, + ], + orelse: [], + config_comment: [], + }, + }, + Located { + location: Location { + row: 3, + column: 1, + }, + custom: (), + node: If { + test: Located { + location: Location { + row: 3, + column: 4, + }, + custom: (), + node: Name { + id: "d", + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 4, + column: 5, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 4, + column: 5, + }, + custom: (), + node: Name { + id: "b", + ctx: Load, + }, + }, + config_comment: [], + }, + }, + Located { + location: Location { + row: 4, + column: 8, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 4, + column: 10, + }, + custom: (), + node: BinOp { + left: Located { + location: Location { + row: 4, + column: 8, + }, + custom: (), + node: Name { + id: "b", + ctx: Load, + }, + }, + op: Add, + right: Located { + location: Location { + row: 4, + column: 12, + }, + custom: (), + node: Constant { + value: Int( + 3, + ), + kind: None, + }, + }, + }, + }, + config_comment: [ + "for b + 3", + ], + }, + }, + ], + orelse: [], + config_comment: [ + "for if d", + ], + }, + }, + Located { + location: Location { + row: 5, + column: 1, + }, + custom: (), + node: Assign { + targets: [ + Located { + location: Location { + row: 5, + column: 1, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + ], + value: Located { + location: Location { + row: 5, + column: 5, + }, + custom: (), + node: Constant { + value: Int( + 3, + ), + kind: None, + }, + }, + type_comment: None, + config_comment: [], + }, + }, + Located { + location: Location { + row: 5, + column: 8, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 5, + column: 10, + }, + custom: (), + node: BinOp { + left: Located { + location: Location { + row: 5, + column: 8, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + op: Add, + right: Located { + location: Location { + row: 5, + column: 12, + }, + custom: (), + node: Constant { + value: Int( + 3, + ), + kind: None, + }, + }, + }, + }, + config_comment: [], + }, + }, + Located { + location: Location { + row: 5, + column: 15, + }, + custom: (), + node: Assign { + targets: [ + Located { + location: Location { + row: 5, + column: 15, + }, + custom: (), + node: Name { + id: "b", + ctx: Load, + }, + }, + ], + value: Located { + location: Location { + row: 5, + column: 19, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + type_comment: None, + config_comment: [ + "notif", + ], + }, + }, + Located { + location: Location { + row: 8, + column: 1, + }, + custom: (), + node: Assign { + targets: [ + Located { + location: Location { + row: 8, + column: 1, + }, + custom: (), + node: Name { + id: "aa", + ctx: Load, + }, + }, + ], + value: Located { + location: Location { + row: 8, + column: 6, + }, + custom: (), + node: Constant { + value: Int( + 3, + ), + kind: None, + }, + }, + type_comment: None, + config_comment: [ + "smallsingle1", + "smallsingle3", + "smallsingle2", + ], + }, + }, + Located { + location: Location { + row: 9, + column: 1, + }, + custom: (), + node: If { + test: Located { + location: Location { + row: 9, + column: 4, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 10, + column: 5, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 10, + column: 5, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + config_comment: [], + }, + }, + ], + orelse: [], + config_comment: [ + "small2", + ], + }, + }, + Located { + location: Location { + row: 11, + column: 1, + }, + custom: (), + node: For { + target: Located { + location: Location { + row: 11, + column: 5, + }, + custom: (), + node: Name { + id: "i", + ctx: Load, + }, + }, + iter: Located { + location: Location { + row: 11, + column: 10, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 12, + column: 5, + }, + custom: (), + node: Pass { + config_comment: [], + }, + }, + ], + orelse: [], + type_comment: None, + config_comment: [ + "for1", + ], + }, + }, +] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__more_comment.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__more_comment.snap new file mode 100644 index 000000000..790bb7f35 --- /dev/null +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__more_comment.snap @@ -0,0 +1,313 @@ +--- +source: nac3parser/src/parser.rs +expression: parse_program(&source).unwrap() + +--- +[ + Located { + location: Location { + row: 1, + column: 1, + }, + custom: (), + node: AnnAssign { + target: Located { + location: Location { + row: 1, + column: 1, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + annotation: Located { + location: Location { + row: 1, + column: 4, + }, + custom: (), + node: Name { + id: "int", + ctx: Load, + }, + }, + value: None, + simple: true, + config_comment: [ + "sf1", + ], + }, + }, + Located { + location: Location { + row: 2, + column: 1, + }, + custom: (), + node: For { + target: Located { + location: Location { + row: 3, + column: 5, + }, + custom: (), + node: Name { + id: "i", + ctx: Load, + }, + }, + iter: Located { + location: Location { + row: 3, + column: 11, + }, + custom: (), + node: Tuple { + elts: [ + Located { + location: Location { + row: 3, + column: 11, + }, + custom: (), + node: Constant { + value: Int( + 1, + ), + kind: None, + }, + }, + Located { + location: Location { + row: 3, + column: 15, + }, + custom: (), + node: Constant { + value: Str( + "12", + ), + kind: None, + }, + }, + ], + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 4, + column: 5, + }, + custom: (), + node: AnnAssign { + target: Located { + location: Location { + row: 4, + column: 5, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + annotation: Located { + location: Location { + row: 4, + column: 8, + }, + custom: (), + node: Name { + id: "int", + ctx: Load, + }, + }, + value: None, + simple: true, + config_comment: [], + }, + }, + ], + orelse: [], + type_comment: None, + config_comment: [ + "sdf4", + "sf2", + ], + }, + }, + Located { + location: Location { + row: 5, + column: 1, + }, + custom: (), + node: While { + test: Located { + location: Location { + row: 7, + column: 9, + }, + custom: (), + node: Compare { + left: Located { + location: Location { + row: 7, + column: 7, + }, + custom: (), + node: Name { + id: "i", + ctx: Load, + }, + }, + ops: [ + Lt, + ], + comparators: [ + Located { + location: Location { + row: 7, + column: 11, + }, + custom: (), + node: Constant { + value: Int( + 2, + ), + kind: None, + }, + }, + ], + }, + }, + body: [ + Located { + location: Location { + row: 9, + column: 5, + }, + custom: (), + node: Pass { + config_comment: [ + "real pass", + ], + }, + }, + Located { + location: Location { + row: 12, + column: 5, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 12, + column: 7, + }, + custom: (), + node: BinOp { + left: Located { + location: Location { + row: 12, + column: 5, + }, + custom: (), + node: Constant { + value: Int( + 1, + ), + kind: None, + }, + }, + op: Add, + right: Located { + location: Location { + row: 12, + column: 9, + }, + custom: (), + node: Constant { + value: Int( + 2, + ), + kind: None, + }, + }, + }, + }, + config_comment: [ + "expr1", + "expr3", + "expr2", + ], + }, + }, + Located { + location: Location { + row: 13, + column: 5, + }, + custom: (), + node: If { + test: Located { + location: Location { + row: 15, + column: 8, + }, + custom: (), + node: Constant { + value: Int( + 1, + ), + kind: None, + }, + }, + body: [ + Located { + location: Location { + row: 16, + column: 9, + }, + custom: (), + node: Expr { + value: Located { + location: Location { + row: 16, + column: 9, + }, + custom: (), + node: Constant { + value: Int( + 3, + ), + kind: None, + }, + }, + config_comment: [], + }, + }, + ], + orelse: [], + config_comment: [ + "if3", + "if1", + "if2", + ], + }, + }, + ], + orelse: [], + config_comment: [ + "3", + "5", + "4", + ], + }, + }, +] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_class.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_class.snap index 869669e9a..46501f0cb 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_class.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_class.snap @@ -1,6 +1,7 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_program(&source).unwrap() + --- [ Located { @@ -74,12 +75,15 @@ expression: parse_program(&source).unwrap() column: 3, }, custom: (), - node: Pass, + node: Pass { + config_comment: [], + }, }, ], decorator_list: [], returns: None, type_comment: None, + config_comment: [], }, }, Located { @@ -145,16 +149,20 @@ expression: parse_program(&source).unwrap() column: 3, }, custom: (), - node: Pass, + node: Pass { + config_comment: [], + }, }, ], decorator_list: [], returns: None, type_comment: None, + config_comment: [], }, }, ], decorator_list: [], + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_if_elif_else.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_if_elif_else.snap index 4b34c0e42..13f0bca8a 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_if_elif_else.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_if_elif_else.snap @@ -1,5 +1,5 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_ast --- @@ -45,6 +45,7 @@ expression: parse_ast kind: None, }, }, + config_comment: [], }, }, ], @@ -90,6 +91,7 @@ expression: parse_ast kind: None, }, }, + config_comment: [], }, }, ], @@ -114,12 +116,15 @@ expression: parse_ast kind: None, }, }, + config_comment: [], }, }, ], + config_comment: [], }, }, ], + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_kwargs.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_kwargs.snap index d31a3921a..6dd94aaee 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_kwargs.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_kwargs.snap @@ -1,5 +1,5 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_ast --- @@ -73,6 +73,7 @@ expression: parse_ast ], }, }, + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_lambda.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_lambda.snap index 2f70292d6..a9aca7e92 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_lambda.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_lambda.snap @@ -1,6 +1,7 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_ast + --- [ Located { @@ -85,6 +86,7 @@ expression: parse_ast }, }, }, + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_2.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_2.snap index 6fe4cad36..92e1c9491 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_2.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_2.snap @@ -1,5 +1,5 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_ast --- @@ -60,6 +60,7 @@ expression: parse_ast keywords: [], }, }, + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_hello.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_hello.snap index b4e78d8d0..7c9a72ca7 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_hello.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_print_hello.snap @@ -1,6 +1,7 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_ast + --- [ Located { @@ -46,6 +47,7 @@ expression: parse_ast keywords: [], }, }, + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_tuples.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_tuples.snap index 26243f562..66f2fdd64 100644 --- a/nac3parser/src/snapshots/nac3parser__parser__tests__parse_tuples.snap +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__parse_tuples.snap @@ -1,5 +1,5 @@ --- -source: parser/src/parser.rs +source: nac3parser/src/parser.rs expression: parse_program(&source).unwrap() --- @@ -86,6 +86,7 @@ expression: parse_program(&source).unwrap() }, }, type_comment: None, + config_comment: [], }, }, ] diff --git a/nac3parser/src/snapshots/nac3parser__parser__tests__sample_comment.snap b/nac3parser/src/snapshots/nac3parser__parser__tests__sample_comment.snap new file mode 100644 index 000000000..8e34a64f4 --- /dev/null +++ b/nac3parser/src/snapshots/nac3parser__parser__tests__sample_comment.snap @@ -0,0 +1,75 @@ +--- +source: nac3parser/src/parser.rs +expression: parse_program(&source).unwrap() + +--- +[ + Located { + location: Location { + row: 1, + column: 1, + }, + custom: (), + node: While { + test: Located { + location: Location { + row: 4, + column: 7, + }, + custom: (), + node: Name { + id: "test", + ctx: Load, + }, + }, + body: [ + Located { + location: Location { + row: 6, + column: 5, + }, + custom: (), + node: Assign { + targets: [ + Located { + location: Location { + row: 6, + column: 5, + }, + custom: (), + node: Name { + id: "a", + ctx: Load, + }, + }, + ], + value: Located { + location: Location { + row: 6, + column: 9, + }, + custom: (), + node: Constant { + value: Int( + 3, + ), + kind: None, + }, + }, + type_comment: None, + config_comment: [ + "simple assign0", + "simple assign1", + ], + }, + }, + ], + orelse: [], + config_comment: [ + "while1", + "while2", + "while3", + ], + }, + }, +]