Skip to content

Commit dd5e24e

Browse files
kovsufisker
authored andcommitted
Preserve quotes for TSMethodSignature nodes named new (#19621)
1 parent c03ab4e commit dd5e24e

4 files changed

Lines changed: 122 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#### Preserve quotes for methods named `new` (#19621 by @kovsu)
2+
3+
<!-- prettier-ignore -->
4+
```tsx
5+
// Input
6+
interface Container {
7+
"new"(id: string): number;
8+
}
9+
10+
// Prettier stable
11+
interface Container {
12+
new(id: string): number;
13+
}
14+
15+
// Prettier main
16+
interface Container {
17+
"new"(id: string): number;
18+
}
19+
```

src/language-js/print/key.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ function isKeySafeToUnquote(node, options) {
9999
return false;
100100
}
101101

102+
if (node.type === "TSMethodSignature" && value === "new") {
103+
return false;
104+
}
105+
102106
// Safe to unquote as identifier
103107
if (
104108
// With `--strictPropertyInitialization`, TS treats properties with quoted names differently than unquoted ones.

tests/format/typescript/quote-props/__snapshots__/format.test.js.snap

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,96 @@ interface I2 {
240240
================================================================================
241241
`;
242242

243+
exports[`issue-19618.ts - {"quoteProps":"as-needed"} format 1`] = `
244+
====================================options=====================================
245+
parsers: ["typescript"]
246+
quoteProps: "as-needed"
247+
printWidth: 80 (default) |
248+
=====================================input======================================
249+
interface Container {
250+
"new"(id: string): number;
251+
"method"(): void;
252+
}
253+
254+
type ContainerType = {
255+
'new'(id: string): number;
256+
'method'(): void;
257+
};
258+
259+
=====================================output=====================================
260+
interface Container {
261+
"new"(id: string): number;
262+
method(): void;
263+
}
264+
265+
type ContainerType = {
266+
"new"(id: string): number;
267+
method(): void;
268+
};
269+
270+
================================================================================
271+
`;
272+
273+
exports[`issue-19618.ts - {"quoteProps":"consistent"} format 1`] = `
274+
====================================options=====================================
275+
parsers: ["typescript"]
276+
quoteProps: "consistent"
277+
printWidth: 80 (default) |
278+
=====================================input======================================
279+
interface Container {
280+
"new"(id: string): number;
281+
"method"(): void;
282+
}
283+
284+
type ContainerType = {
285+
'new'(id: string): number;
286+
'method'(): void;
287+
};
288+
289+
=====================================output=====================================
290+
interface Container {
291+
"new"(id: string): number;
292+
"method"(): void;
293+
}
294+
295+
type ContainerType = {
296+
"new"(id: string): number;
297+
"method"(): void;
298+
};
299+
300+
================================================================================
301+
`;
302+
303+
exports[`issue-19618.ts - {"quoteProps":"preserve"} format 1`] = `
304+
====================================options=====================================
305+
parsers: ["typescript"]
306+
quoteProps: "preserve"
307+
printWidth: 80 (default) |
308+
=====================================input======================================
309+
interface Container {
310+
"new"(id: string): number;
311+
"method"(): void;
312+
}
313+
314+
type ContainerType = {
315+
'new'(id: string): number;
316+
'method'(): void;
317+
};
318+
319+
=====================================output=====================================
320+
interface Container {
321+
"new"(id: string): number;
322+
"method"(): void;
323+
}
324+
325+
type ContainerType = {
326+
"new"(id: string): number;
327+
"method"(): void;
328+
};
329+
330+
================================================================================
331+
`;
332+
243333
exports[`type-literal.ts - {"quoteProps":"as-needed"} format 1`] = `
244334
====================================options=====================================
245335
parsers: ["typescript"]
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
interface Container {
2+
"new"(id: string): number;
3+
"method"(): void;
4+
}
5+
6+
type ContainerType = {
7+
'new'(id: string): number;
8+
'method'(): void;
9+
};

0 commit comments

Comments
 (0)