Fix formatting for multiline asm expressions

This commit is contained in:
LemonBoy 2019-05-13 11:22:42 +02:00 committed by Andrew Kelley
parent 66d86eccbe
commit 08d41da916
3 changed files with 51 additions and 3 deletions

View File

@ -2129,6 +2129,47 @@ test "zig fmt: comptime block in container" {
);
}
test "zig fmt: inline asm parameter alignment" {
try testCanonical(
\\pub fn main() void {
\\ asm volatile (
\\ \\ foo
\\ \\ bar
\\ );
\\ asm volatile (
\\ \\ foo
\\ \\ bar
\\ : [_] "" (-> usize),
\\ [_] "" (-> usize)
\\ );
\\ asm volatile (
\\ \\ foo
\\ \\ bar
\\ :
\\ : [_] "" (0),
\\ [_] "" (0)
\\ );
\\ asm volatile (
\\ \\ foo
\\ \\ bar
\\ :
\\ :
\\ : "", ""
\\ );
\\ asm volatile (
\\ \\ foo
\\ \\ bar
\\ : [_] "" (-> usize),
\\ [_] "" (-> usize)
\\ : [_] "" (0),
\\ [_] "" (0)
\\ : "", ""
\\ );
\\}
\\
);
}
const std = @import("std");
const mem = std.mem;
const warn = std.debug.warn;

View File

@ -1549,7 +1549,14 @@ fn renderExpression(
try renderExpression(allocator, stream, tree, indent, start_col, asm_node.template, Space.Newline);
const indent_once = indent + indent_delta;
if (asm_node.template.id == ast.Node.Id.MultilineStringLiteral) {
// After rendering a multiline string literal the cursor is
// already offset by indent
try stream.writeByteNTimes(' ', indent_delta);
} else {
try stream.writeByteNTimes(' ', indent_once);
}
const colon1 = tree.nextToken(asm_node.template.lastToken());
const indent_extra = indent_once + 2;