Commit 2b7334c3a9

r00ster91 <r00ster91@proton.me>
2023-04-18 00:57:13
zig fmt: omit extra whitespace after last comment before EOF
1 parent d2a799c
Changed files (2)
lib/std/zig/parser_test.zig
@@ -18,6 +18,19 @@ test "zig fmt: transform old for loop syntax to new" {
     );
 }
 
+test "zig fmt: remove extra whitespace at start and end of file with comment between" {
+    try testTransform(
+        \\
+        \\
+        \\// hello
+        \\
+        \\
+    ,
+        \\// hello
+        \\
+    );
+}
+
 test "zig fmt: tuple struct" {
     try testCanonical(
         \\const T = struct {
@@ -527,17 +540,6 @@ test "zig fmt: allow empty line before commment at start of block" {
     );
 }
 
-test "zig fmt: allow empty line before commment at start of block" {
-    try testCanonical(
-        \\test {
-        \\
-        \\    // foo
-        \\    const x = 42;
-        \\}
-        \\
-    );
-}
-
 test "zig fmt: trailing comma in fn parameter list" {
     try testCanonical(
         \\pub fn f(
lib/std/zig/render.zig
@@ -2512,7 +2512,7 @@ const Space = enum {
     /// In either case, a newline will be inserted afterwards.
     semicolon,
     /// Skip rendering whitespace and comments. If this is used, the caller
-    /// *must* handle handle whitespace and comments manually.
+    /// *must* handle whitespace and comments manually.
     skip,
 };
 
@@ -2702,7 +2702,7 @@ fn renderIdentifierContents(writer: anytype, bytes: []const u8) !void {
                 }
             },
             0x00...('\\' - 1), ('\\' + 1)...0x7f => {
-                const buf = [1]u8{@intCast(u8, byte)};
+                const buf = [1]u8{byte};
                 try std.fmt.format(writer, "{}", .{std.zig.fmtEscapes(&buf)});
                 pos += 1;
             },
@@ -2782,7 +2782,7 @@ fn renderComments(ais: *Ais, tree: Ast, start: usize, end: usize) Error!bool {
         const comment_content = mem.trimLeft(u8, trimmed_comment["//".len..], &std.ascii.whitespace);
         if (ais.disabled_offset != null and mem.eql(u8, comment_content, "zig fmt: on")) {
             // Write the source for which formatting was disabled directly
-            // to the underlying writer, fixing up invaild whitespace.
+            // to the underlying writer, fixing up invalid whitespace.
             const disabled_source = tree.source[ais.disabled_offset.?..comment_start];
             try writeFixingWhitespace(ais.underlying_writer, disabled_source);
             // Write with the canonical single space.
@@ -2799,7 +2799,10 @@ fn renderComments(ais: *Ais, tree: Ast, start: usize, end: usize) Error!bool {
     }
 
     if (index != start and mem.containsAtLeast(u8, tree.source[index - 1 .. end], 2, "\n")) {
-        try ais.insertNewline();
+        // Don't leave any whitespace at the end of the file
+        if (end != tree.source.len) {
+            try ais.insertNewline();
+        }
     }
 
     return index != start;