Merge branch 'v3.8.x'

# Conflicts:
#	package.json
#	src/language-js/print/function-parameters.js
#	tests/format/angular/control-flow/__snapshots__/format.test.js.snap
#	yarn.lock
This commit is contained in:
fisker committed 2026-04-10 10:42:45 +08:00
commit 4d42f87154
8 files changed
+73 -68

No files matched your search

+1 -1
View File
@@ -26,7 +26,7 @@ Don't fill the form below manually! Let a program create a report for you:
--> -->
**Prettier 3.8.1** **Prettier 3.8.2**
[Playground link](https://prettier.io/playground/#.....) [Playground link](https://prettier.io/playground/#.....)
```sh ```sh
+1 -1
View File
@@ -20,7 +20,7 @@ BEFORE SUBMITTING AN ISSUE:
**Environments:** **Environments:**
- Prettier Version: 3.8.1 - Prettier Version: 3.8.2
- Running Prettier via: <!-- CLI, Node.js API, Browser API, etc. --> - Running Prettier via: <!-- CLI, Node.js API, Browser API, etc. -->
- Runtime: <!-- Node.js v14, Chrome v83, etc. --> - Runtime: <!-- Node.js v14, Chrome v83, etc. -->
- Operating System: <!-- Windows, Linux, macOS, etc. --> - Operating System: <!-- Windows, Linux, macOS, etc. -->
+46
View File
@@ -1,3 +1,49 @@
# 3.8.2
[diff](https://github.com/prettier/prettier/compare/3.8.1...3.8.2)
#### Angular: Support Angular v21.2 ([#18722](https://github.com/prettier/prettier/pull/18722), [#19034](https://github.com/prettier/prettier/pull/19034) by [@fisker](https://github.com/fisker))
Exhaustive typechecking with `@default never;`
<!-- prettier-ignore -->
```html
<!-- Input -->
@switch (foo) {
@case (1) {}
@default never;
}
<!-- Prettier 3.8.1 -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)
<!-- Prettier 3.8.2 -->
@switch (foo) {
@case (1) {}
@default never;
}
```
`arrow function` and `instanceof` expressions.
<!-- prettier-ignore -->
```html
<!-- Input -->
@let fn = (a) => a? 1:2;
{{ fn ( a instanceof b)}}
<!-- Prettier 3.8.1 -->
@let fn = (a) => a? 1:2;
{{ fn ( a instanceof b)}}
<!-- Prettier 3.8.2 -->
@let fn = (a) => (a ? 1 : 2);
{{ fn(a instanceof b) }}
```
# 3.8.1 # 3.8.1
[diff](https://github.com/prettier/prettier/compare/3.8.0...3.8.1) [diff](https://github.com/prettier/prettier/compare/3.8.0...3.8.1)
-41
View File
@@ -1,41 +0,0 @@
#### Support Angular v21.2 (#18722, #19034 by @fisker)
Exhaustive typechecking with `@default never;`
<!-- prettier-ignore -->
```html
<!-- Input -->
@switch (foo) {
@case (1) {}
@default never;
}
<!-- Prettier stable -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)
<!-- Prettier main -->
@switch (foo) {
@case (1) {}
@default never;
}
```
`arrow function` and `instanceof` expressions.
<!-- prettier-ignore -->
```html
<!-- Input -->
@let fn = (a) => a? 1:2;
{{ fn ( a instanceof b)}}
<!-- Prettier stable -->
@let fn = (a) => a? 1:2;
{{ fn ( a instanceof b)}}
<!-- Prettier main -->
@let fn = (a) => (a ? 1 : 2);
{{ fn(a instanceof b) }}
```
+1 -1
View File
@@ -179,7 +179,7 @@
"node-style-text": "2.1.2", "node-style-text": "2.1.2",
"npm-run-all2": "8.0.4", "npm-run-all2": "8.0.4",
"open-editor": "6.0.0", "open-editor": "6.0.0",
"prettier": "3.8.1", "prettier": "3.8.2",
"pretty-bytes": "7.1.0", "pretty-bytes": "7.1.0",
"pretty-ms": "9.3.0", "pretty-ms": "9.3.0",
"puppeteer": "24.40.0", "puppeteer": "24.40.0",
+1 -1
View File
@@ -331,7 +331,7 @@ function UsersSection() {
<div> <div>
<p> <p>
More than{" "} More than{" "}
<strong data-placeholder="dependent-github">9.9 million</strong>{" "} <strong data-placeholder="dependent-github">10 million</strong>{" "}
dependent repositories on GitHub dependent repositories on GitHub
</p> </p>
<Link <Link
@@ -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. - **[`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.1/plugins](https://unpkg.com/browse/prettier@3.8.1/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.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.
You need to load the ones that you’re going to use and pass them to `prettier.format` using the `plugins` option. 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 ### Global
```html ```html
<script src="https://unpkg.com/prettier@3.8.1/standalone.js"></script> <script src="https://unpkg.com/prettier@3.8.2/standalone.js"></script>
<script src="https://unpkg.com/prettier@3.8.1/plugins/graphql.js"></script> <script src="https://unpkg.com/prettier@3.8.2/plugins/graphql.js"></script>
<script> <script>
(async () => { (async () => {
const formatted = await prettier.format("type Query { hello: String }", { const formatted = await prettier.format("type Query { hello: String }", {
@@ -50,8 +50,8 @@ Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `pack
```html ```html
<script type="module"> <script type="module">
import * as prettier from "https://unpkg.com/prettier@3.8.1/standalone.mjs"; import * as prettier from "https://unpkg.com/prettier@3.8.2/standalone.mjs";
import * as prettierPluginGraphql from "https://unpkg.com/prettier@3.8.1/plugins/graphql.mjs"; import * as prettierPluginGraphql from "https://unpkg.com/prettier@3.8.2/plugins/graphql.mjs";
const formatted = await prettier.format("type Query { hello: String }", { const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql", parser: "graphql",
@@ -64,8 +64,8 @@ Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `pack
```js ```js
define([ define([
"https://unpkg.com/prettier@3.8.1/standalone.js", "https://unpkg.com/prettier@3.8.2/standalone.js",
"https://unpkg.com/prettier@3.8.1/plugins/graphql.js", "https://unpkg.com/prettier@3.8.2/plugins/graphql.js",
], async (prettier, ...plugins) => { ], async (prettier, ...plugins) => {
const formatted = await prettier.format("type Query { hello: String }", { const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql", parser: "graphql",
@@ -96,8 +96,8 @@ This syntax doesn’t necessarily work in the browser, but it can be used when b
<TabItem value="module" label="Module worker"> <TabItem value="module" label="Module worker">
```js ```js
import * as prettier from "https://unpkg.com/prettier@3.8.1/standalone.mjs"; import * as prettier from "https://unpkg.com/prettier@3.8.2/standalone.mjs";
import * as prettierPluginGraphql from "https://unpkg.com/prettier@3.8.11/plugins/graphql.mjs"; import * as prettierPluginGraphql from "https://unpkg.com/prettier@3.8.21/plugins/graphql.mjs";
const formatted = await prettier.format("type Query { hello: String }", { const formatted = await prettier.format("type Query { hello: String }", {
parser: "graphql", parser: "graphql",
@@ -110,8 +110,8 @@ const formatted = await prettier.format("type Query { hello: String }", {
```js ```js
importScripts( importScripts(
"https://unpkg.com/prettier@3.8.1/standalone.js", "https://unpkg.com/prettier@3.8.2/standalone.js",
"https://unpkg.com/prettier@3.8.1/plugins/graphql.js", "https://unpkg.com/prettier@3.8.2/plugins/graphql.js",
); );
(async () => { (async () => {
@@ -131,9 +131,9 @@ If you want to format [embedded code](options.md#embedded-language-formatting),
```html ```html
<script type="module"> <script type="module">
import * as prettier from "https://unpkg.com/prettier@3.8.1/standalone.mjs"; import * as prettier from "https://unpkg.com/prettier@3.8.2/standalone.mjs";
import * as prettierPluginBabel from "https://unpkg.com/prettier@3.8.1/plugins/babel.mjs"; import * as prettierPluginBabel from "https://unpkg.com/prettier@3.8.2/plugins/babel.mjs";
import * as prettierPluginEstree from "https://unpkg.com/prettier@3.8.1/plugins/estree.mjs"; import * as prettierPluginEstree from "https://unpkg.com/prettier@3.8.2/plugins/estree.mjs";
console.log( console.log(
await prettier.format("const html=/* HTML */ `<DIV> </DIV>`", { await prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
@@ -149,10 +149,10 @@ The HTML code embedded in JavaScript stays unformatted because the `html` parser
```html ```html
<script type="module"> <script type="module">
import * as prettier from "https://unpkg.com/prettier@3.8.1/standalone.mjs"; import * as prettier from "https://unpkg.com/prettier@3.8.2/standalone.mjs";
import * as prettierPluginBabel from "https://unpkg.com/prettier@3.8.1/plugins/babel.mjs"; import * as prettierPluginBabel from "https://unpkg.com/prettier@3.8.2/plugins/babel.mjs";
import * as prettierPluginEstree from "https://unpkg.com/prettier@3.8.1/plugins/estree.mjs"; import * as prettierPluginEstree from "https://unpkg.com/prettier@3.8.2/plugins/estree.mjs";
import * as prettierPluginHtml from "https://unpkg.com/prettier@3.8.1/plugins/html.mjs"; import * as prettierPluginHtml from "https://unpkg.com/prettier@3.8.2/plugins/html.mjs";
console.log( console.log(
await prettier.format("const html=/* HTML */ `<DIV> </DIV>`", { await prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
+5 -5
View File
@@ -8566,12 +8566,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"prettier@npm:3.8.1": "prettier@npm:3.8.2":
version: 3.8.1 version: 3.8.2
resolution: "prettier@npm:3.8.1" resolution: "prettier@npm:3.8.2"
bin: bin:
prettier: bin/prettier.cjs prettier: bin/prettier.cjs
checksum: 10/3da1cf8c1ef9bea828aa618553696c312e951f810bee368f6887109b203f18ee869fe88f66e65f9cf60b7cb1f2eae859892c860a300c062ff8ec69c381fc8dbd checksum: 10/fd784175bc600c07eb2c44d7ec4ee7133f95f26492adad61b6a15c06f438b858181faf096ab74163d7f49500ad80cff4479c6abb084e161a2e85a9df5974ecd1
languageName: node languageName: node
linkType: hard linkType: hard
@@ -8696,7 +8696,7 @@ __metadata:
postcss-scss: "npm:4.0.9" postcss-scss: "npm:4.0.9"
postcss-selector-parser: "npm:2.2.3" postcss-selector-parser: "npm:2.2.3"
postcss-values-parser: "npm:2.0.1" postcss-values-parser: "npm:2.0.1"
prettier: "npm:3.8.1" prettier: "npm:3.8.2"
pretty-bytes: "npm:7.1.0" pretty-bytes: "npm:7.1.0"
pretty-ms: "npm:9.3.0" pretty-ms: "npm:9.3.0"
puppeteer: "npm:24.40.0" puppeteer: "npm:24.40.0"