commit d70a9ea5d759fd5e61c8cd7404343c34280fe87e (tree)
parent 23db3090436c6f8391474342cda6e73ed3c2b3d4
Author: Kendall Condon <goon.pri.low@gmail.com>
Date: Sun, 22 Mar 2026 17:26:40 -0400
zig fmt: properly revert nested asm indentation
Diffstat:
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/lib/std/zig/Ast/Render.zig b/lib/std/zig/Ast/Render.zig
@@ -2775,6 +2775,8 @@ fn renderAsm(
ais.forceLastIndent(); // Might have been dedented by a multiline string literal
assert(ais.current_line_empty);
+ const prev_indent_delta = ais.indent_delta; // May be part of another asm expression
+ // so indent_delta can't be unconditionally used
ais.setIndentDelta(asm_indent_delta);
const colon1 = tree.lastToken(asm_node.ast.template) + 1;
@@ -2856,7 +2858,7 @@ fn renderAsm(
const clobbers = asm_node.ast.clobbers.unwrap().?;
try renderExpression(r, clobbers, .none);
ais.forceLastIndent(); // Might have been dedented by a multiline string literal
- ais.setIndentDelta(indent_delta);
+ ais.setIndentDelta(prev_indent_delta);
ais.popIndent();
return renderToken(r, asm_node.ast.rparen, space); // rparen
}
diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig
@@ -6859,6 +6859,18 @@ test "zig fmt: array init of labeled block" {
);
}
+test "zig fmt: nested asm indentation" {
+ try testCanonical(
+ \\const A = asm (""
+ \\ : [_] "" (_),
+ \\ :
+ \\ : asm (""
+ \\ : [_] "" (_),
+ \\ ));
+ \\
+ );
+}
+
test "recovery: top level" {
try testError(
\\test "" {inline}