From f4ff69710183f5ebc044ddc106443bd1eba8612d Mon Sep 17 00:00:00 2001 From: Igor <86978055+Poliklot@users.noreply.github.com> Date: Thu, 28 May 2026 00:28:45 +0300 Subject: [PATCH] Remove spaces in for statement heads (#19188) Co-authored-by: fisker Cheung --- changelog_unreleased/javascript/19188.md | 16 +++++ src/language-js/print/for-statement.js | 10 +--- .../binding/__snapshots__/format.test.js.snap | 4 +- .../init/__snapshots__/format.test.js.snap | 6 +- .../locals/__snapshots__/format.test.js.snap | 2 +- .../__snapshots__/format.test.js.snap | 2 +- .../__snapshots__/format.test.js.snap | 6 +- .../js/for/__snapshots__/format.test.js.snap | 58 ++++++++++--------- tests/format/js/for/for.js | 2 + .../__snapshots__/format.test.js.snap | 4 +- 10 files changed, 63 insertions(+), 47 deletions(-) create mode 100644 changelog_unreleased/javascript/19188.md diff --git a/changelog_unreleased/javascript/19188.md b/changelog_unreleased/javascript/19188.md new file mode 100644 index 000000000..c848caa54 --- /dev/null +++ b/changelog_unreleased/javascript/19188.md @@ -0,0 +1,16 @@ +#### Remove space in `for` statement without "update" expression (#19188 by @Poliklot) + + +```jsx +// Input +for (initialize;;) {} +for (; condition;) {} + +// Prettier stable +for (initialize; ; ) {} +for (; condition; ) {} + +// Prettier main +for (initialize; ;) {} +for (; condition;) {} +``` diff --git a/src/language-js/print/for-statement.js b/src/language-js/print/for-statement.js index 0e2c9620f..b5ca28509 100644 --- a/src/language-js/print/for-statement.js +++ b/src/language-js/print/for-statement.js @@ -1,10 +1,4 @@ -import { - group, - ifBreak, - indent, - line, - softline, -} from "../../document/index.js"; +import { group, indent, line, softline } from "../../document/index.js"; import { printDanglingComments } from "../../main/comments/print.js"; import { printForXStatementBody } from "./clause.js"; @@ -34,7 +28,7 @@ function printForStatement(path, options, print) { line, print("test"), ";", - node.update ? [line, print("update")] : ifBreak("", line), + node.update ? [line, print("update")] : "", ]), softline, ]), diff --git a/tests/format/flow/flow-repo/binding/__snapshots__/format.test.js.snap b/tests/format/flow/flow-repo/binding/__snapshots__/format.test.js.snap index 1f0ed9f87..f378984e2 100644 --- a/tests/format/flow/flow-repo/binding/__snapshots__/format.test.js.snap +++ b/tests/format/flow/flow-repo/binding/__snapshots__/format.test.js.snap @@ -677,12 +677,12 @@ function try_scope() { function for_scope_let() { let a: number = 0; - for (let a = "" /* ok: local to init */; ; ) {} + for (let a = "" /* ok: local to init */; ;) {} } function for_scope_var() { var a: number = 0; - for (var a = "" /* error: string ~> number */; ; ) {} + for (var a = "" /* error: string ~> number */; ;) {} } function for_in_scope_let(o: Object) { diff --git a/tests/format/flow/flow-repo/init/__snapshots__/format.test.js.snap b/tests/format/flow/flow-repo/init/__snapshots__/format.test.js.snap index a3250137b..21d99c630 100644 --- a/tests/format/flow/flow-repo/init/__snapshots__/format.test.js.snap +++ b/tests/format/flow/flow-repo/init/__snapshots__/format.test.js.snap @@ -577,7 +577,7 @@ function do_while_post_init(b) { // local use of annotated var in for is ok function for_scoped_init(b) { - for (; b; ) { + for (; b;) { var x: number = 0; var y: number = x; } @@ -586,14 +586,14 @@ function for_scoped_init(b) { // ...but use before for gives undefined function for_pre_init(b) { var y: number = x; // error - for (; b; ) { + for (; b;) { var x: number = 0; } } // ...and after function for_post_init(b) { - for (; b; ) { + for (; b;) { var x: number = 0; } var y: number = x; // error diff --git a/tests/format/flow/flow-repo/locals/__snapshots__/format.test.js.snap b/tests/format/flow/flow-repo/locals/__snapshots__/format.test.js.snap index 29bb698ac..7a9f22bf3 100644 --- a/tests/format/flow/flow-repo/locals/__snapshots__/format.test.js.snap +++ b/tests/format/flow/flow-repo/locals/__snapshots__/format.test.js.snap @@ -98,7 +98,7 @@ function try_scope_finally() { function for_scope() { let a = ""; let b = ""; - for (let a; ; ) { + for (let a; ;) { a = 0; // doesn't add lower bound to outer a b = 0; } diff --git a/tests/format/flow/flow-repo/refinements/__snapshots__/format.test.js.snap b/tests/format/flow/flow-repo/refinements/__snapshots__/format.test.js.snap index 388e13353..d13fda6d1 100644 --- a/tests/format/flow/flow-repo/refinements/__snapshots__/format.test.js.snap +++ b/tests/format/flow/flow-repo/refinements/__snapshots__/format.test.js.snap @@ -744,7 +744,7 @@ function def_assign_within_try(b: boolean, obj: Obj) { } function def_assign_within_for(b: boolean, obj: Obj) { - for (; b; ) { + for (; b;) { obj.p = 10; // (obj.p : number) var x: number = obj.p; // ok by def assign } diff --git a/tests/format/js/explicit-resource-management/__snapshots__/format.test.js.snap b/tests/format/js/explicit-resource-management/__snapshots__/format.test.js.snap index 96c9cd2e8..b6509d831 100644 --- a/tests/format/js/explicit-resource-management/__snapshots__/format.test.js.snap +++ b/tests/format/js/explicit-resource-management/__snapshots__/format.test.js.snap @@ -170,7 +170,7 @@ for(using /* 1 */ foo of bar()); /* 2 */ b = foo(); } -for (using /* 1 */ a = foo(), /* 2 */ b = foo(); ; ); +for (using /* 1 */ a = foo(), /* 2 */ b = foo(); ;); for (using /* 1 */ foo of bar()); @@ -638,7 +638,7 @@ async function f() { =====================================output===================================== async function f() { - for (await using basic = reader(); ; ); + for (await using basic = reader(); ;); } ================================================================================ @@ -964,7 +964,7 @@ for ( reader = getReader();); =====================================output===================================== -for (using; (reader = getReader()); ); +for (using; (reader = getReader());); ================================================================================ `; diff --git a/tests/format/js/for/__snapshots__/format.test.js.snap b/tests/format/js/for/__snapshots__/format.test.js.snap index c1538ee2c..e3634cc34 100644 --- a/tests/format/js/for/__snapshots__/format.test.js.snap +++ b/tests/format/js/for/__snapshots__/format.test.js.snap @@ -833,6 +833,8 @@ parsers: ["babel", "flow", "typescript"] printWidth: 80 (default) | =====================================input====================================== for (;;) {} +for (initialize;;) {} +for (; condition;) {} for (var i = 0; i < 10; ++i) {} for (;;) 0; @@ -840,6 +842,8 @@ for (var i = 0; i < 10; ++i) 0; =====================================output===================================== for (;;) {} +for (initialize; ;) {} +for (; condition;) {} for (var i = 0; i < 10; ++i) {} for (;;) 0; @@ -931,16 +935,16 @@ async function f() { for (a in b) 0; =====================================output===================================== -for ((x in a); ; ) {} -for (a = (a in b); ; ) {} -for (let a = (b in c); ; ); -for (a && (b in c); ; ); -for ((a) => (b in c); ; ); +for ((x in a); ;) {} +for (a = (a in b); ;) {} +for (let a = (b in c); ;); +for (a && (b in c); ;); +for ((a) => (b in c); ;); function* g() { - for (yield (a in b); ; ); + for (yield (a in b); ;); } async function f() { - for (await (a in b); ; ); + for (await (a in b); ;); } for (a in b) 0; @@ -1009,22 +1013,22 @@ for (;a = function (x = b in c) {};); =====================================output===================================== // https://github.com/babel/babel/blob/HEAD/packages/babel-generator/test/fixtures/parentheses/in-inside-for/input.js -for (var a = (b in c); ; ); -for (var a = 1 || (b in c); ; ); -for (var a = 1 + (2 || (b in c)); ; ); -for (var a = () => (b in c); ; ); -for (var a = 1 || (() => (b in c)); ; ); +for (var a = (b in c); ;); +for (var a = 1 || (b in c); ;); +for (var a = 1 + (2 || (b in c)); ;); +for (var a = () => (b in c); ;); +for (var a = 1 || (() => (b in c)); ;); for ( var a = () => { (b in c); }; ; ); -for (var a = [(b in c)]; ; ); -for (var a = { b: (b in c) }; ; ); -for (var a = (x = (b in c)) => {}; ; ); -for (var a = class extends (b in c) {}; ; ); -for (var a = function (x = (b in c)) {}; ; ); +for (var a = [(b in c)]; ;); +for (var a = { b: (b in c) }; ;); +for (var a = (x = (b in c)) => {}; ;); +for (var a = class extends (b in c) {}; ;); +for (var a = function (x = (b in c)) {}; ;); for (var a in b in c); for (var a in 1 || b in c); @@ -1040,22 +1044,22 @@ for (var a in (x = b in c) => {}); for (var a in class extends (b in c) {}); for (var a in function (x = b in c) {}); -for (; (a = b in c); ); -for (; (a = 1 || b in c); ); -for (; (a = 1 + (2 || b in c)); ); -for (; (a = () => b in c); ); -for (; (a = 1 || (() => b in c)); ); +for (; (a = b in c);); +for (; (a = 1 || b in c);); +for (; (a = 1 + (2 || b in c));); +for (; (a = () => b in c);); +for (; (a = 1 || (() => b in c));); for ( ; (a = () => { b in c; }); ); -for (; (a = [b in c]); ); -for (; (a = { b: b in c }); ); -for (; (a = (x = b in c) => {}); ); -for (; (a = class extends (b in c) {}); ); -for (; (a = function (x = b in c) {}); ); +for (; (a = [b in c]);); +for (; (a = { b: b in c });); +for (; (a = (x = b in c) => {});); +for (; (a = class extends (b in c) {});); +for (; (a = function (x = b in c) {});); ================================================================================ `; diff --git a/tests/format/js/for/for.js b/tests/format/js/for/for.js index dc347fba5..2fb769341 100644 --- a/tests/format/js/for/for.js +++ b/tests/format/js/for/for.js @@ -1,4 +1,6 @@ for (;;) {} +for (initialize;;) {} +for (; condition;) {} for (var i = 0; i < 10; ++i) {} for (;;) 0; diff --git a/tests/format/js/identifier/parentheses/__snapshots__/format.test.js.snap b/tests/format/js/identifier/parentheses/__snapshots__/format.test.js.snap index 0030bd3c5..b20bf4868 100644 --- a/tests/format/js/identifier/parentheses/__snapshots__/format.test.js.snap +++ b/tests/format/js/identifier/parentheses/__snapshots__/format.test.js.snap @@ -226,7 +226,7 @@ throw (let[0] = 1) ;[(let[0] = 1)] -for ((let)[0] = 1; ; ); +for ((let)[0] = 1; ;); for ((let)[0] in {}); for ((let)[0] of []); @@ -450,7 +450,7 @@ throw (let[0] = 1); [(let[0] = 1)]; -for ((let)[0] = 1; ; ); +for ((let)[0] = 1; ;); for ((let)[0] in {}); for ((let)[0] of []);