diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 829ad2acbe..269586f8b1 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -2558,7 +2558,7 @@ fn parsePtrTypeStart(arena: *Allocator, it: *TokenIterator, tree: *Tree) !?*Node _ = try expectToken(it, tree, .RBracket); const node = try arena.create(Node.PrefixOp); node.* = .{ - .op_token = ident, + .op_token = lbracket, .op = .{ .PtrType = .{} }, .rhs = undefined, // set by caller }; diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 4e20d16354..616cf8a75a 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -1,3 +1,10 @@ +test "zig fmt: c pointer type" { + try testCanonical( + \\pub extern fn repro() [*c]const u8; + \\ + ); +} + test "zig fmt: asm expression with comptime content" { try testCanonical( \\comptime { @@ -21,6 +28,7 @@ test "zig fmt: asm expression with comptime content" { \\ ); } + test "zig fmt: var struct field" { try testCanonical( \\pub const Pointer = struct { diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 1b6aaf7102..0d1044f44e 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -421,8 +421,10 @@ fn renderExpression( const op_tok_id = tree.tokens.at(prefix_op_node.op_token).id; switch (op_tok_id) { .Asterisk, .AsteriskAsterisk => try stream.writeByte('*'), - .Identifier => try stream.write("[*c]"), - .LBracket => try stream.write("[*"), + .LBracket => if (tree.tokens.at(prefix_op_node.op_token + 2).id == .Identifier) + try stream.write("[*c") + else + try stream.write("[*"), else => unreachable, } if (ptr_info.sentinel) |sentinel| { @@ -435,7 +437,7 @@ fn renderExpression( try renderExpression(allocator, stream, tree, indent, start_col, sentinel, sentinel_space); } switch (op_tok_id) { - .Asterisk, .AsteriskAsterisk, .Identifier => {}, + .Asterisk, .AsteriskAsterisk => {}, .LBracket => try stream.writeByte(']'), else => unreachable, }