parser: add zig fmt on/off and slice operator tests
Port tests from upstream parser_test.zig: - "comment to disable/enable zig fmt" - "line comment following 'zig fmt: off'" - "doc comment following 'zig fmt: off'" - "alternating 'zig fmt: off' and 'zig fmt: on'" - "spaces around slice operator" Fix parsePrimaryTypeExpr: don't reject identifier followed by colon; the colon may be part of slice sentinel syntax, not a label. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
6
parser.c
6
parser.c
@@ -509,12 +509,6 @@ static AstNodeIndex parsePrimaryTypeExpr(Parser* p) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
case TOKEN_IDENTIFIER:
|
case TOKEN_IDENTIFIER:
|
||||||
if (p->token_tags[p->tok_i + 1] == TOKEN_COLON) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"parsePrimaryTypeExpr does not support identifier followed by "
|
|
||||||
"colon\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return addNode(&p->nodes,
|
return addNode(&p->nodes,
|
||||||
(AstNodeItem) {
|
(AstNodeItem) {
|
||||||
.tag = AST_NODE_IDENTIFIER,
|
.tag = AST_NODE_IDENTIFIER,
|
||||||
|
|||||||
@@ -1432,3 +1432,67 @@ test "zig fmt: builtin call with trailing comma" {
|
|||||||
\\
|
\\
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "zig fmt: comment to disable/enable zig fmt" {
|
||||||
|
try testTransform(
|
||||||
|
\\const a = b;
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\const c = d;
|
||||||
|
\\// zig fmt: on
|
||||||
|
\\const e = f;
|
||||||
|
,
|
||||||
|
\\const a = b;
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\const c = d;
|
||||||
|
\\// zig fmt: on
|
||||||
|
\\const e = f;
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "zig fmt: line comment following 'zig fmt: off'" {
|
||||||
|
try testCanonical(
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\// Test
|
||||||
|
\\const e = f;
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "zig fmt: doc comment following 'zig fmt: off'" {
|
||||||
|
try testCanonical(
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\/// test
|
||||||
|
\\const e = f;
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "zig fmt: alternating 'zig fmt: off' and 'zig fmt: on'" {
|
||||||
|
try testCanonical(
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\// zig fmt: on
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\const e = f;
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\// zig fmt: on
|
||||||
|
\\// zig fmt: off
|
||||||
|
\\const a = b;
|
||||||
|
\\// zig fmt: on
|
||||||
|
\\const c = d;
|
||||||
|
\\// zig fmt: on
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "zig fmt: spaces around slice operator" {
|
||||||
|
try testCanonical(
|
||||||
|
\\var a = b[c..d];
|
||||||
|
\\var a = b[c..d :0];
|
||||||
|
\\var a = b[c + 1 .. d];
|
||||||
|
\\var a = b[c + 1 ..];
|
||||||
|
\\var a = b[c .. d + 1];
|
||||||
|
\\var a = b[c .. d + 1 :0];
|
||||||
|
\\var a = b[c.a..d.e];
|
||||||
|
\\var a = b[c.a..d.e :0];
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user