Saltar al contenido principal

Prettier 3.3: Nuevas características de Flow y múltiples correcciones de errores

· 7 min de lectura
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Esta versión incluye soporte para nuevas características de Flow como declaraciones de componentes y hooks. Todas estas funcionalidades fueron implementadas por los ingenieros del equipo de Flow, gracias.

Si aprecias Prettier y deseas apoyar nuestro trabajo, considera patrocinarnos directamente a través de nuestro OpenCollective o patrocinando los proyectos de los que dependemos, como typescript-eslint, remark y Babel. ¡Gracias por tu continuo apoyo!

Destacados

Flow

Soporte para impresión de declare namespace (#16066 por @SamChou19815)

// Input
declare namespace foo {
declare var bar: string;
}

// Prettier 3.2
// does not parse

// Prettier 3.3
declare namespace foo {
declare var bar: string;
}

Soporte para impresión de sintaxis de componentes (#16191 por @SamChou19815)

// Input
component MyComponent(a: string, b: number) renders SomeComponent {
return <OtherComponent />;
}
hook useMyHook(a: string) {
return useState(a);
}

// Prettier 3.2
// does not parse

// Prettier 3.3
component MyComponent(a: string, b: number) renders SomeComponent {
return <OtherComponent />;
}
hook useMyHook(a: string) {
return useState(a);
}

Soporte para Enums con big int (#16268 por @gkz)

Añade soporte para Flow Enums con big int.

// Input
enum E {
A = 0n,
B = 1n,
}

// Prettier 3.2
// error

// Prettier 3.3
enum E {
A = 0n,
B = 1n,
}

Soporte para tipos de tuplas inexactas (#16271 por @gkz)

Añade soporte para tipos de tuplas inexactas de Flow.

// Input
type T = [number, ...];

// Prettier 3.2
type T = [number];

// Prettier 3.3
type T = [number, ...];

Soporte para la variante de guardia de tipos 'implies' (#16272 por @gkz)

Añade soporte para la variante de guardia de tipos implies de Flow. También actualiza la dependencia de flow-parser.

// Input
declare function f(x: mixed): implies x is T;

// Prettier 3.2
// error

// Prettier 3.3
declare function f(x: mixed): implies x is T;

Otros cambios

JavaScript

Eliminar comillas en claves de atributos de importación (#15888 por @sosukesuzuki)

// Input
import json from "./mod.json" with { "type": "json" };

// Prettier 3.2
import json from "./mod.json" with { "type": "json" };

// Prettier 3.3
import json from "./mod.json" with { type: "json" };

Corregir impresión inestable de objetos (#16058 por @fisker)

// Input
a = {"\a": 1, "b": 2}

// Prettier 3.2 (--quote-props consistent)
a = { "a": 1, "b": 2 };

// Prettier 3.2 (--quote-props as-needed)
a = { "a": 1, b: 2 };

// Prettier 3.3
a = { a: 1, b: 2 };

Formatear GQL embebido en sentencias de literales de plantilla (#16064 por @keithlayne)

// Input
/* GraphQL */ `
query foo { id }
`;

// Prettier 3.2
/* GraphQL */ `
query foo { id }
`;

// Prettier 3.3
/* GraphQL */ `
query foo {
id
}
`;

Mejorar formato del hook React useImperativeHandle (#16070 por @Jaswanth-Sriram-Veturi)

// Input
useImperativeHandle(ref, () => {
/* Function body */
}, []);

// Prettier 3.2
useImperativeHandle(
ref,
() => {
/* Function body */
},
[],
);

// Prettier 3.3
useImperativeHandle(ref, () => {
/* Function body */
}, []);

Permitir saltos de línea en expresiones de miembros en interpolaciones de plantillas (#16116 por @bakkot)

Cuando ya existe un salto de línea en una interpolación de plantilla, permite que permanezca incluso si es una expresión de miembro. Nota que (desde #15209) Prettier no insertará un salto de línea dentro de una interpolación cuando no haya uno presente.

// Input
`template with ${
very.very.very.very.very.very.very.very.very.very.very.long.chain
}`;

// Prettier 3.2
`template with ${very.very.very.very.very.very.very.very.very.very.very.long.chain}`;

// Prettier 3.3
`template with ${
very.very.very.very.very.very.very.very.very.very.very.long.chain
}`;

Corregir importación dinámica cuando el origen del módulo es un string de plantilla (#16267 por @fisker)

// Input
const module = await import(`data:text/javascript,
console.log("RUN");
`);

// Prettier 3.2
const module = await (`data:text/javascript,
console.log("RUN");
`);

// Prettier 3.3
const module = await import(`data:text/javascript,
console.log("RUN");
`);

TypeScript

Agregar paréntesis faltantes a TSInferType (#16031 por @fisker)

// Input
type Foo<T> = T extends (infer U extends number) | { a: infer U extends number }
? U
: never;

// Prettier 3.2
type Foo<T> = T extends infer U extends number | { a: infer U extends number }
? U
: never;

// Prettier 3.3
type Foo<T> = T extends (infer U extends number) | { a: infer U extends number }
? U
: never;

Lanzar errores por modificadores de accesibilidad duplicados (#16040 por @fisker, @auvred)

// Input
class Foo {
public public bar() {};
}

// Prettier 3.2
class Foo {
public bar() {}
}

// Prettier 3.3
SyntaxError: Accessibility modifier already seen. (2:10)
1 | class Foo {
> 2 | public public bar() {};
| ^^^^^^
3 | }

Respetar --no-semi para campos de clase readonly (#16133 por @sxzz)

// Input
class A {
field
readonly [expr] = true
}

// Prettier 3.2
class A {
field;
readonly [expr] = true
}

// Prettier 3.3
class A {
field
readonly [expr] = true
}

Agregar paréntesis necesarios a expresiones yield (#16194 por @kirkwaiblinger)

Agregar paréntesis alrededor de expresiones yield si el elemento padre es una aserción de tipo con ángulos.

// Input
function* g() {
const y = <T>(yield x);
}

// Prettier 3.2
function* g() {
const y = <T>yield x;
}

// Prettier 3.3
function* g() {
const y = <T>(yield x);
}

Markdown

Mejorar ajuste para bloques de código en markdown y JSX en MDX (#15993 por @seiyab)

<!-- Input -->
```css
img {
filter: drop-shadow(2px 2px 0 hsl(300deg 100% 50%)) drop-shadow(
-2px -2px 0 hsl(210deg 100% 50%)
)
drop-shadow(2px 2px 0 hsl(120deg 100% 50%)) drop-shadow(
-2px -2px 0 hsl(30deg 100% 50%)
);
}
```

<!-- Prettier 3.2 -->
```css
img {
filter: drop-shadow(2px 2px 0 hsl(300deg 100% 50%)) drop-shadow(
-2px -2px 0 hsl(210deg 100% 50%)
)
drop-shadow(2px 2px 0 hsl(120deg 100% 50%)) drop-shadow(
-2px -2px 0 hsl(30deg 100% 50%)
);
}
```

<!-- Prettier 3.3 -->
```css
img {
filter: drop-shadow(2px 2px 0 hsl(300deg 100% 50%))
drop-shadow(-2px -2px 0 hsl(210deg 100% 50%))
drop-shadow(2px 2px 0 hsl(120deg 100% 50%))
drop-shadow(-2px -2px 0 hsl(30deg 100% 50%));
}
```
<!-- Input -->
<ExternalLink href="http://example.com">Prettier</ExternalLink> is an opinionated-code-formatter-that-support-many-languages-and-integrate-with-most-editors

<!-- Prettier 3.2 -->
<ExternalLink href="http://example.com">Prettier</ExternalLink> is an opinionated-code-formatter-that-support-many-languages-and-integrate-with-most-editors

<!-- Prettier 3.3 -->
<ExternalLink href="http://example.com">Prettier</ExternalLink> is an
opinionated-code-formatter-that-support-many-languages-and-integrate-with-most-editors

Agregar nueva línea entre definiciones de notas al pie en markdown (#16063 por @Atema)

<!-- Input -->
[^a]: Footnote A

[^b]: Footnote B

<!-- Prettier 3.2 -->
[^a]: Footnote A
[^b]: Footnote B

<!-- Prettier 3.3 -->
[^a]: Footnote A

[^b]: Footnote B

Mejorar ajuste para markdown / MDX (#16158 por @seiyab)

{ "proseWrap": "always" }
<!-- Input -->
\
word very-very-very-very-very-very-very-very-very-very-long-word very-very-very-very-very-very-very-very-very-very-long-word

<!-- Prettier 3.2 -->
\
word very-very-very-very-very-very-very-very-very-very-long-word very-very-very-very-very-very-very-very-very-very-long-word

<!-- Prettier 3.3 -->
\
word very-very-very-very-very-very-very-very-very-very-long-word
very-very-very-very-very-very-very-very-very-very-long-word

API

Agregar soporte para configuración en package.yaml (#16157 por @danielbayley)

Habilitar soporte para leer configuración de prettier desde package.yaml.

# package.yaml
prettier:
semi: false
singleQuote: true