From dc1f7fcc508d116cbf1644d69a1f0eb93e40d4a4 Mon Sep 17 00:00:00 2001 From: fisker Date: Fri, 10 Apr 2026 10:31:12 +0800 Subject: [PATCH 1/8] Update dependents count --- website/src/pages/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/index.jsx b/website/src/pages/index.jsx index bc52848a7d3b..006fc28fa4ba 100644 --- a/website/src/pages/index.jsx +++ b/website/src/pages/index.jsx @@ -331,7 +331,7 @@ function UsersSection() {

More than{" "} - 9.9 million{" "} + 10 million{" "} dependent repositories on GitHub

Date: Fri, 10 Apr 2026 10:31:18 +0800 Subject: [PATCH 2/8] Clean changelog_unreleased --- changelog_unreleased/angular/18722.md | 41 --------------------------- 1 file changed, 41 deletions(-) delete mode 100644 changelog_unreleased/angular/18722.md diff --git a/changelog_unreleased/angular/18722.md b/changelog_unreleased/angular/18722.md deleted file mode 100644 index 61e69535e885..000000000000 --- a/changelog_unreleased/angular/18722.md +++ /dev/null @@ -1,41 +0,0 @@ -#### Support Angular v21.2 (#18722, #19034 by @fisker) - -Exhaustive typechecking with `@default never;` - - -```html - -@switch (foo) { - @case (1) {} - @default never; -} - - -SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "@" HTML entity instead. (3:3) - - -@switch (foo) { - @case (1) {} - @default never; -} -``` - -`arrow function` and `instanceof` expressions. - - -```html - -@let fn = (a) => a? 1:2; - -{{ fn ( a instanceof b)}} - - -@let fn = (a) => a? 1:2; - -{{ fn ( a instanceof b)}} - - -@let fn = (a) => (a ? 1 : 2); - -{{ fn(a instanceof b) }} -``` From 053fd418e180b12fa2014260212fae831f5fc5ec Mon Sep 17 00:00:00 2001 From: fisker Date: Fri, 10 Apr 2026 10:32:29 +0800 Subject: [PATCH 3/8] Bump Prettier dependency to 3.8.2 --- package.json | 4 ++-- yarn.lock | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 8529cd77f001..5335f6b1b9a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prettier", - "version": "3.8.2", + "version": "3.9.0-dev", "description": "Prettier is an opinionated code formatter", "bin": "./bin/prettier.cjs", "repository": "prettier/prettier", @@ -165,7 +165,7 @@ "node-style-text": "2.1.2", "npm-run-all2": "8.0.4", "open-editor": "6.0.0", - "prettier": "3.8.1", + "prettier": "3.8.2", "pretty-bytes": "7.1.0", "pretty-ms": "9.3.0", "rollup-plugin-license": "3.6.0", diff --git a/yarn.lock b/yarn.lock index 1f8257b82837..974336d66ae2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7483,12 +7483,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.8.1": - version: 3.8.1 - resolution: "prettier@npm:3.8.1" +"prettier@npm:3.8.2": + version: 3.8.2 + resolution: "prettier@npm:3.8.2" bin: prettier: bin/prettier.cjs - checksum: 10/3da1cf8c1ef9bea828aa618553696c312e951f810bee368f6887109b203f18ee869fe88f66e65f9cf60b7cb1f2eae859892c860a300c062ff8ec69c381fc8dbd + checksum: 10/fd784175bc600c07eb2c44d7ec4ee7133f95f26492adad61b6a15c06f438b858181faf096ab74163d7f49500ad80cff4479c6abb084e161a2e85a9df5974ecd1 languageName: node linkType: hard @@ -7599,7 +7599,7 @@ __metadata: postcss-scss: "npm:4.0.9" postcss-selector-parser: "npm:2.2.3" postcss-values-parser: "npm:2.0.1" - prettier: "npm:3.8.1" + prettier: "npm:3.8.2" pretty-bytes: "npm:7.1.0" pretty-ms: "npm:9.3.0" regexp-util: "npm:2.0.3" From 752157c78eca6f0a30e5d5cb513b682c5ecfa01e Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 15 Apr 2026 08:36:48 +0800 Subject: [PATCH 4/8] Fix tests --- .../angular/expression/__snapshots__/format.test.js.snap | 6 ++++-- .../__snapshots__/format.test.js.snap | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/format/angular/expression/__snapshots__/format.test.js.snap b/tests/format/angular/expression/__snapshots__/format.test.js.snap index 4dabdf06424d..ec6f2d953a6b 100644 --- a/tests/format/angular/expression/__snapshots__/format.test.js.snap +++ b/tests/format/angular/expression/__snapshots__/format.test.js.snap @@ -3,7 +3,8 @@ exports[`arrow-function.html format 1`] = ` ====================================options===================================== parsers: ["angular"] - printWidth: 80 (default) | +printWidth: 80 + | printWidth =====================================input====================================== @let fn = (a, b) => componentValue + a + b; One: {{fn(0, 1)}} @@ -94,7 +95,8 @@ printWidth: 80 exports[`instanceof-operator.html format 1`] = ` ====================================options===================================== parsers: ["angular"] - printWidth: 80 (default) | +printWidth: 80 + | printWidth =====================================input====================================== {{ diff --git a/tests/format/angular/expression/arrow-function-options/__snapshots__/format.test.js.snap b/tests/format/angular/expression/arrow-function-options/__snapshots__/format.test.js.snap index 71cf5f605c0d..62bf880b8721 100644 --- a/tests/format/angular/expression/arrow-function-options/__snapshots__/format.test.js.snap +++ b/tests/format/angular/expression/arrow-function-options/__snapshots__/format.test.js.snap @@ -4,7 +4,8 @@ exports[`snippet: #0 - {"arrowParens":"avoid"} format 1`] = ` ====================================options===================================== arrowParens: "avoid" parsers: ["angular"] - printWidth: 80 (default) | +printWidth: 80 + | printWidth =====================================input====================================== @let fn = ( oneArgument) => 1; =====================================output===================================== @@ -18,7 +19,7 @@ exports[`snippet: #0 - {"printWidth":1,"trailingComma":"all"} format 1`] = ` parsers: ["angular"] printWidth: 1 trailingComma: "all" - | printWidth: 1 + | printWidth =====================================input====================================== @let fn = ( should, not, print,trailing, comma) => 1; =====================================output===================================== @@ -39,7 +40,8 @@ exports[`snippet: #1 - {"arrowParens":"avoid"} format 1`] = ` ====================================options===================================== arrowParens: "avoid" parsers: ["angular"] - printWidth: 80 (default) | +printWidth: 80 + | printWidth =====================================input====================================== @let fn = oneArgument => 1; =====================================output===================================== From a8700e245038cd8cc0cf28ef06ffedbcb3fc2dfc Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 15 Apr 2026 08:39:08 +0800 Subject: [PATCH 5/8] Update oxc-parser to v0.125.0 Fixes #19048 --- package.json | 2 +- yarn.lock | 235 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 145 insertions(+), 92 deletions(-) diff --git a/package.json b/package.json index 5335f6b1b9a5..83522fc7bd01 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "minimist": "1.2.8", "n-readlines": "1.0.1", "outdent": "0.8.0", - "oxc-parser": "0.99.0", + "oxc-parser": "0.125.0", "parse-json": "8.3.0", "picocolors": "1.1.1", "please-upgrade-node": "3.2.0", diff --git a/yarn.lock b/yarn.lock index 974336d66ae2..3a3bbeb2b092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1059,31 +1059,31 @@ __metadata: languageName: node linkType: hard -"@emnapi/core@npm:^1.4.3, @emnapi/core@npm:^1.5.0": - version: 1.7.1 - resolution: "@emnapi/core@npm:1.7.1" +"@emnapi/core@npm:1.9.2, @emnapi/core@npm:^1.4.3": + version: 1.9.2 + resolution: "@emnapi/core@npm:1.9.2" dependencies: - "@emnapi/wasi-threads": "npm:1.1.0" + "@emnapi/wasi-threads": "npm:1.2.1" tslib: "npm:^2.4.0" - checksum: 10/260841f6dd2a7823a964d9de6da3a5e6f565dac8d21a5bd8f6215b87c45c22a4dc371b9ad877961579ee3cca8a76e55e3dd033ae29cba1998999cda6d794bdab + checksum: 10/32084861f306b405f10f3ae13d1a49fa75650bdaaa40704892c397856815fe5d3781670d2662806d39c2d8a19bb62826dd7b870a79858f7be77500d9d0d3d91a languageName: node linkType: hard -"@emnapi/runtime@npm:^1.4.3, @emnapi/runtime@npm:^1.5.0": - version: 1.7.1 - resolution: "@emnapi/runtime@npm:1.7.1" +"@emnapi/runtime@npm:1.9.2, @emnapi/runtime@npm:^1.4.3": + version: 1.9.2 + resolution: "@emnapi/runtime@npm:1.9.2" dependencies: tslib: "npm:^2.4.0" - checksum: 10/6fc83f938e3c70e32e84c1fbe5cab6cb9340b8107cee4048384ad5b8f2998a06502b4bed342acaf6e44f473f2c14c4ab1e3fd5083bd7823fc63abfca9eff0175 + checksum: 10/de123d6b7acdbe34bf997523be761e5ae6d8f9b3967b72e8e50ff7dd1791a2a0d2b9fb0d7d92230b0738502980ea6f947189b7c1f47814ff666515a55c6fff48 languageName: node linkType: hard -"@emnapi/wasi-threads@npm:1.1.0": - version: 1.1.0 - resolution: "@emnapi/wasi-threads@npm:1.1.0" +"@emnapi/wasi-threads@npm:1.2.1": + version: 1.2.1 + resolution: "@emnapi/wasi-threads@npm:1.2.1" dependencies: tslib: "npm:^2.4.0" - checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e + checksum: 10/57cd4292be81c05d26aa886d68a9e4c449ff666e8503fed6463dfc6b64a4e4213f03c152d53296b7cda32840271e38cd33347332070658f01befeb9bf4e59f36 languageName: node linkType: hard @@ -1947,14 +1947,15 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.0.7": - version: 1.0.7 - resolution: "@napi-rs/wasm-runtime@npm:1.0.7" +"@napi-rs/wasm-runtime@npm:^1.0.7, @napi-rs/wasm-runtime@npm:^1.1.3": + version: 1.1.3 + resolution: "@napi-rs/wasm-runtime@npm:1.1.3" dependencies: - "@emnapi/core": "npm:^1.5.0" - "@emnapi/runtime": "npm:^1.5.0" "@tybys/wasm-util": "npm:^0.10.1" - checksum: 10/6bc32d32d486d07b83220a9b7b2b715e39acacbacef0011ebca05c00b41d80a0535123da10fea7a7d6d7e206712bb50dc50ac3cf88b770754d44378570fb5c05 + peerDependencies: + "@emnapi/core": ^1.7.1 + "@emnapi/runtime": ^1.7.1 + checksum: 10/a09f53dea7f5d11cbf4b4e3f10f726dd488b4a715f14f197dd619920d733e657261bb87d399628689dbe2b23b4353ddc122303d0583c4ef6cc4a5245367dfb2a languageName: node linkType: hard @@ -2007,117 +2008,154 @@ __metadata: languageName: node linkType: hard -"@oxc-parser/binding-android-arm64@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-android-arm64@npm:0.99.0" +"@oxc-parser/binding-android-arm-eabi@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-android-arm-eabi@npm:0.125.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxc-parser/binding-android-arm64@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-android-arm64@npm:0.125.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-darwin-arm64@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-darwin-arm64@npm:0.99.0" +"@oxc-parser/binding-darwin-arm64@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-darwin-arm64@npm:0.125.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-darwin-x64@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-darwin-x64@npm:0.99.0" +"@oxc-parser/binding-darwin-x64@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-darwin-x64@npm:0.125.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxc-parser/binding-freebsd-x64@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-freebsd-x64@npm:0.99.0" +"@oxc-parser/binding-freebsd-x64@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-freebsd-x64@npm:0.125.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.99.0" +"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.125.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-linux-arm-musleabihf@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.99.0" +"@oxc-parser/binding-linux-arm-musleabihf@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.125.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-linux-arm64-gnu@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.99.0" +"@oxc-parser/binding-linux-arm64-gnu@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.125.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-arm64-musl@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.99.0" +"@oxc-parser/binding-linux-arm64-musl@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.125.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-linux-riscv64-gnu@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.99.0" +"@oxc-parser/binding-linux-ppc64-gnu@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-ppc64-gnu@npm:0.125.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-riscv64-gnu@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.125.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-s390x-gnu@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.99.0" +"@oxc-parser/binding-linux-riscv64-musl@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-riscv64-musl@npm:0.125.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxc-parser/binding-linux-s390x-gnu@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.125.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-x64-gnu@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.99.0" +"@oxc-parser/binding-linux-x64-gnu@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.125.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-x64-musl@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.99.0" +"@oxc-parser/binding-linux-x64-musl@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.125.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-wasm32-wasi@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.99.0" +"@oxc-parser/binding-openharmony-arm64@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-openharmony-arm64@npm:0.125.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-parser/binding-wasm32-wasi@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.125.0" dependencies: - "@napi-rs/wasm-runtime": "npm:^1.0.7" + "@emnapi/core": "npm:1.9.2" + "@emnapi/runtime": "npm:1.9.2" + "@napi-rs/wasm-runtime": "npm:^1.1.3" conditions: cpu=wasm32 languageName: node linkType: hard -"@oxc-parser/binding-win32-arm64-msvc@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.99.0" +"@oxc-parser/binding-win32-arm64-msvc@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.125.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-win32-x64-msvc@npm:0.99.0": - version: 0.99.0 - resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.99.0" +"@oxc-parser/binding-win32-ia32-msvc@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-win32-ia32-msvc@npm:0.125.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxc-parser/binding-win32-x64-msvc@npm:0.125.0": + version: 0.125.0 + resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.125.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@oxc-project/types@npm:^0.99.0": - version: 0.99.0 - resolution: "@oxc-project/types@npm:0.99.0" - checksum: 10/c247d204d7663b8ca62e0b2c2ec15c0a82f31762fb9e5a7e8c8820cf8090ceb3e675d3afe96a92c8246421202b663ce2c190cfb3c43ea9180b932709d7aaccb2 +"@oxc-project/types@npm:^0.125.0": + version: 0.125.0 + resolution: "@oxc-project/types@npm:0.125.0" + checksum: 10/2a992ac11c1e87d6b7439740702684a9d13d00503d4174b62cf6cfa762085765ebcc936c7f12c1eed72270702eb022391fde61233b94603a86bf68b17c71aeea languageName: node linkType: hard @@ -7026,27 +7064,34 @@ __metadata: languageName: node linkType: hard -"oxc-parser@npm:0.99.0": - version: 0.99.0 - resolution: "oxc-parser@npm:0.99.0" - dependencies: - "@oxc-parser/binding-android-arm64": "npm:0.99.0" - "@oxc-parser/binding-darwin-arm64": "npm:0.99.0" - "@oxc-parser/binding-darwin-x64": "npm:0.99.0" - "@oxc-parser/binding-freebsd-x64": "npm:0.99.0" - "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.99.0" - "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.99.0" - "@oxc-parser/binding-linux-arm64-gnu": "npm:0.99.0" - "@oxc-parser/binding-linux-arm64-musl": "npm:0.99.0" - "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.99.0" - "@oxc-parser/binding-linux-s390x-gnu": "npm:0.99.0" - "@oxc-parser/binding-linux-x64-gnu": "npm:0.99.0" - "@oxc-parser/binding-linux-x64-musl": "npm:0.99.0" - "@oxc-parser/binding-wasm32-wasi": "npm:0.99.0" - "@oxc-parser/binding-win32-arm64-msvc": "npm:0.99.0" - "@oxc-parser/binding-win32-x64-msvc": "npm:0.99.0" - "@oxc-project/types": "npm:^0.99.0" +"oxc-parser@npm:0.125.0": + version: 0.125.0 + resolution: "oxc-parser@npm:0.125.0" + dependencies: + "@oxc-parser/binding-android-arm-eabi": "npm:0.125.0" + "@oxc-parser/binding-android-arm64": "npm:0.125.0" + "@oxc-parser/binding-darwin-arm64": "npm:0.125.0" + "@oxc-parser/binding-darwin-x64": "npm:0.125.0" + "@oxc-parser/binding-freebsd-x64": "npm:0.125.0" + "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.125.0" + "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.125.0" + "@oxc-parser/binding-linux-arm64-gnu": "npm:0.125.0" + "@oxc-parser/binding-linux-arm64-musl": "npm:0.125.0" + "@oxc-parser/binding-linux-ppc64-gnu": "npm:0.125.0" + "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.125.0" + "@oxc-parser/binding-linux-riscv64-musl": "npm:0.125.0" + "@oxc-parser/binding-linux-s390x-gnu": "npm:0.125.0" + "@oxc-parser/binding-linux-x64-gnu": "npm:0.125.0" + "@oxc-parser/binding-linux-x64-musl": "npm:0.125.0" + "@oxc-parser/binding-openharmony-arm64": "npm:0.125.0" + "@oxc-parser/binding-wasm32-wasi": "npm:0.125.0" + "@oxc-parser/binding-win32-arm64-msvc": "npm:0.125.0" + "@oxc-parser/binding-win32-ia32-msvc": "npm:0.125.0" + "@oxc-parser/binding-win32-x64-msvc": "npm:0.125.0" + "@oxc-project/types": "npm:^0.125.0" dependenciesMeta: + "@oxc-parser/binding-android-arm-eabi": + optional: true "@oxc-parser/binding-android-arm64": optional: true "@oxc-parser/binding-darwin-arm64": @@ -7063,21 +7108,29 @@ __metadata: optional: true "@oxc-parser/binding-linux-arm64-musl": optional: true + "@oxc-parser/binding-linux-ppc64-gnu": + optional: true "@oxc-parser/binding-linux-riscv64-gnu": optional: true + "@oxc-parser/binding-linux-riscv64-musl": + optional: true "@oxc-parser/binding-linux-s390x-gnu": optional: true "@oxc-parser/binding-linux-x64-gnu": optional: true "@oxc-parser/binding-linux-x64-musl": optional: true + "@oxc-parser/binding-openharmony-arm64": + optional: true "@oxc-parser/binding-wasm32-wasi": optional: true "@oxc-parser/binding-win32-arm64-msvc": optional: true + "@oxc-parser/binding-win32-ia32-msvc": + optional: true "@oxc-parser/binding-win32-x64-msvc": optional: true - checksum: 10/a8d2f411fdbdeb92ceea26c5ee490ddf0d6c1e7860b5ee78039ec8bb6b4c7e2c06006f6ea20a51c0d08bba3adb082b8a6f483d94e162eb13398920a43776f6e3 + checksum: 10/74136f79c22e616ab036d70d686451dfe23891a44f49f521548fd21e8fc47263dde4900b3f13e26cfcbc71a8839d63070791fecfa416217c30bc55d62706f3c3 languageName: node linkType: hard @@ -7589,7 +7642,7 @@ __metadata: npm-run-all2: "npm:8.0.4" open-editor: "npm:6.0.0" outdent: "npm:0.8.0" - oxc-parser: "npm:0.99.0" + oxc-parser: "npm:0.125.0" parse-json: "npm:8.3.0" picocolors: "npm:1.1.1" please-upgrade-node: "npm:3.2.0" From 1cd40668c3d6f2f4cf9d87bbc9096d92361b2606 Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 15 Apr 2026 08:41:51 +0800 Subject: [PATCH 6/8] Release @prettier/plugin-oxc@0.1.4 --- packages/plugin-oxc/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-oxc/package.json b/packages/plugin-oxc/package.json index fa754d4b50f2..9f437f38376e 100644 --- a/packages/plugin-oxc/package.json +++ b/packages/plugin-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@prettier/plugin-oxc", - "version": "0.1.3", + "version": "0.1.4", "description": "Prettier Oxc plugin.", "type": "module", "exports": { From 177f90898170d363ef64fde663e4d13170688bfe Mon Sep 17 00:00:00 2001 From: Konv Suu <2583695112@qq.com> Date: Tue, 16 Dec 2025 08:37:18 +0800 Subject: [PATCH 7/8] Prevent trailing comma in SCSS `if()` function (#18471) Co-authored-by: fisker Cheung --- changelog_unreleased/scss/18471.md | 15 ++++++++++ src/language-css/utilities/index.js | 12 ++++++++ tests/format/scss/function/18465.scss | 1 + .../__snapshots__/format.test.js.snap | 30 +++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 changelog_unreleased/scss/18471.md create mode 100644 tests/format/scss/function/18465.scss diff --git a/changelog_unreleased/scss/18471.md b/changelog_unreleased/scss/18471.md new file mode 100644 index 000000000000..f4ff3d42c9d5 --- /dev/null +++ b/changelog_unreleased/scss/18471.md @@ -0,0 +1,15 @@ +#### Prevent trailing comma in `if()` function (#18471 by @kovsu) + + +```scss +// Input +$value: if(sass(false): 1; else: -1); + +// Prettier stable +$value: if( + sass(false): 1; else: -1, +); + +// Prettier main +$value: if(sass(false): 1; else: -1); +``` diff --git a/src/language-css/utilities/index.js b/src/language-css/utilities/index.js index b2354bdca6fb..6477cb24a3b9 100644 --- a/src/language-css/utilities/index.js +++ b/src/language-css/utilities/index.js @@ -261,6 +261,18 @@ function isSCSSMapItemNode(path, options) { return false; } + const parentNode = path.parent; + + // Don't treat SCSS if function arguments as maps (`if(sass(condition): value; else: value)`) + // https://sass-lang.com/documentation/breaking-changes/if-function/ + if ( + parentNode && + parentNode.type === "value-func" && + parentNode.value === "if" + ) { + return false; + } + const parentParentNode = path.grandparent; // Check open parens contain key/value pair (i.e. `(key: value)` and `(key: (value, other-value)`) diff --git a/tests/format/scss/function/18465.scss b/tests/format/scss/function/18465.scss new file mode 100644 index 000000000000..426305a74e31 --- /dev/null +++ b/tests/format/scss/function/18465.scss @@ -0,0 +1 @@ +$value: if(sass(false): 1; else: -1); diff --git a/tests/format/scss/function/__snapshots__/format.test.js.snap b/tests/format/scss/function/__snapshots__/format.test.js.snap index 78c6b2c6b074..381e9685f0fe 100644 --- a/tests/format/scss/function/__snapshots__/format.test.js.snap +++ b/tests/format/scss/function/__snapshots__/format.test.js.snap @@ -210,6 +210,36 @@ div { ================================================================================ `; +exports[`18465.scss - {"trailingComma":"es5"} format 1`] = ` +====================================options===================================== +parsers: ["scss"] +printWidth: 80 +trailingComma: "es5" + | printWidth +=====================================input====================================== +$value: if(sass(false): 1; else: -1); + +=====================================output===================================== +$value: if(sass(false): 1; else: -1); + +================================================================================ +`; + +exports[`18465.scss - {"trailingComma":"none"} format 1`] = ` +====================================options===================================== +parsers: ["scss"] +printWidth: 80 +trailingComma: "none" + | printWidth +=====================================input====================================== +$value: if(sass(false): 1; else: -1); + +=====================================output===================================== +$value: if(sass(false): 1; else: -1); + +================================================================================ +`; + exports[`arbitrary-arguments.scss - {"trailingComma":"es5"} format 1`] = ` ====================================options===================================== parsers: ["scss"] From d7108a79ec745c04292aabf22c4c1adbd690b191 Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 15 Apr 2026 08:53:50 +0800 Subject: [PATCH 8/8] Release 3.8.3 --- .github/ISSUE_TEMPLATE/formatting.md | 2 +- .github/ISSUE_TEMPLATE/integration.md | 2 +- CHANGELOG.md | 20 +++++++++++ package.json | 2 +- .../versioned_docs/version-stable/browser.md | 36 +++++++++---------- 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/formatting.md b/.github/ISSUE_TEMPLATE/formatting.md index eeb25ffd0a28..1c493aa7ce92 100644 --- a/.github/ISSUE_TEMPLATE/formatting.md +++ b/.github/ISSUE_TEMPLATE/formatting.md @@ -26,7 +26,7 @@ Don't fill the form below manually! Let a program create a report for you: --> -**Prettier 3.8.2** +**Prettier 3.8.3** [Playground link](https://prettier.io/playground/#.....) ```sh diff --git a/.github/ISSUE_TEMPLATE/integration.md b/.github/ISSUE_TEMPLATE/integration.md index 84a3febc525d..85dd18b63e99 100644 --- a/.github/ISSUE_TEMPLATE/integration.md +++ b/.github/ISSUE_TEMPLATE/integration.md @@ -20,7 +20,7 @@ BEFORE SUBMITTING AN ISSUE: **Environments:** -- Prettier Version: 3.8.2 +- Prettier Version: 3.8.3 - Running Prettier via: - Runtime: - Operating System: diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ccd6026fa68..f73d9d1fa2ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +# 3.8.3 + +[diff](https://github.com/prettier/prettier/compare/3.8.2...3.8.3) + +#### SCSS: Prevent trailing comma in `if()` function ([#18471](https://github.com/prettier/prettier/pull/18471) by [@kovsu](https://github.com/kovsu)) + + +```scss +// Input +$value: if(sass(false): 1; else: -1); + +// Prettier 3.8.2 +$value: if( + sass(false): 1; else: -1, +); + +// Prettier 3.8.3 +$value: if(sass(false): 1; else: -1); +``` + # 3.8.2 [diff](https://github.com/prettier/prettier/compare/3.8.1...3.8.2) diff --git a/package.json b/package.json index 83522fc7bd01..77598680199e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prettier", - "version": "3.9.0-dev", + "version": "3.8.3", "description": "Prettier is an opinionated code formatter", "bin": "./bin/prettier.cjs", "repository": "prettier/prettier", diff --git a/website/versioned_docs/version-stable/browser.md b/website/versioned_docs/version-stable/browser.md index 614d523b828c..6d2fc8a4eb64 100644 --- a/website/versioned_docs/version-stable/browser.md +++ b/website/versioned_docs/version-stable/browser.md @@ -21,7 +21,7 @@ Required options: - **[`parser`](options.md#parser) (or [`filepath`](options.md#file-path))**: One of these options has to be specified for Prettier to know which parser to use. -- **`plugins`**: Unlike the `format` function from the [Node.js-based API](api.md#prettierformatsource-options), this function doesn’t load plugins automatically. The `plugins` option is required because all the parsers included in the Prettier package come as plugins (for reasons of file size). These plugins are files in [https://unpkg.com/browse/prettier@3.8.2/plugins](https://unpkg.com/browse/prettier@3.8.2/plugins). Note that `estree` plugin should be loaded when printing JavaScript, TypeScript, Flow, or JSON. +- **`plugins`**: Unlike the `format` function from the [Node.js-based API](api.md#prettierformatsource-options), this function doesn’t load plugins automatically. The `plugins` option is required because all the parsers included in the Prettier package come as plugins (for reasons of file size). These plugins are files in [https://unpkg.com/browse/prettier@3.8.3/plugins](https://unpkg.com/browse/prettier@3.8.3/plugins). Note that `estree` plugin should be loaded when printing JavaScript, TypeScript, Flow, or JSON. You need to load the ones that you’re going to use and pass them to `prettier.format` using the `plugins` option. @@ -32,8 +32,8 @@ See below for examples. ### Global ```html - - + +