Fix to add parentheses for TSTypeQuery in some case#14042
Fix to add parentheses for TSTypeQuery in some case#14042sosukesuzuki merged 13 commits intoprettier:mainfrom
Conversation
| @@ -0,0 +1,4 @@ | |||
| // https://github.com/typescript-eslint/typescript-eslint/pull/4382 | |||
|
Please add a changelog entry. See https://github.com/prettier/prettier/blob/main/CONTRIBUTING.md#other |
| parent.type === "TSArrayType" | ||
| ) { | ||
| return true; | ||
| } |
There was a problem hiding this comment.
We need check the property name here, in this case name === "objectType".
Prettier pr-14042
Playground link
--parser typescriptInput:
a as (typeof node.children)[number]
a as (number)[typeof node.children]Output:
a as (typeof node.children)[number];
a as number[(typeof node.children)];There was a problem hiding this comment.
a as (typeof node.children)[]this property name was elementType
May I add a case like the code below?
return (
name === "objectType" || name === "elementType" &&
(parent.type === "TSIndexedAccessType" || parent.type === "TSArrayType")
)There was a problem hiding this comment.
No, should be
return (
(name === "objectType" && parent.type === "TSIndexedAccessType") ||
(name === "elementType" && parent.type === "TSArrayType")
)| ) { | ||
| return true; | ||
| } | ||
| // fallthrough |
There was a problem hiding this comment.
I don't think TSTypeQuery(TypeScript node type) can be a child of NullableTypeAnnotation(flow node type). This should not fallthrough.
sosukesuzuki
left a comment
There was a problem hiding this comment.
LGTM except for the review comments that remain now.
|
There should be other cases need add parens, for example: a as (typeof node.children)!if you are interested thoses types in this branch may give you the idea to improve. And don't send PRs from your |
Specifically, parentheses around typeof statements. See https://github.com/prettier/prettier/blob/main/CHANGELOG.md#add-parentheses-for-tstypequery-to-improve-readability-14042-by-onishi-kohei and prettier/prettier#14042.
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | patch | [`2.8.1` -> `2.8.2`](https://renovatebot.com/diffs/npm/prettier/2.8.1/2.8.2) | --- ### Release Notes <details> <summary>prettier/prettier</summary> ### [`v2.8.2`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#​282) [Compare Source](prettier/prettier@2.8.1...2.8.2) [diff](prettier/prettier@2.8.1...2.8.2) ##### Don't lowercase link references ([#​13155](prettier/prettier#13155) by [@​DerekNonGeneric](https://github.com/DerekNonGeneric) & [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```markdown <!-- Input --> We now don't strictly follow the release notes format suggested by [Keep a Changelog]. [Keep a Changelog]: https://example.com/ <!-- Prettier 2.8.1 --> We now don't strictly follow the release notes format suggested by [Keep a Changelog]. [keep a changelog]: https://example.com/ <!-- ^^^^^^^^^^^^^^^^^^ lowercased --> <!-- Prettier 2.8.2 --> <Same as input> ``` ##### Preserve self-closing tags ([#​13691](prettier/prettier#13691) by [@​dcyriller](https://github.com/dcyriller)) <!-- prettier-ignore --> ```hbs {{! Input }} <div /> <div></div> <custom-component /> <custom-component></custom-component> <i /> <i></i> <Component /> <Component></Component> {{! Prettier 2.8.1 }} <div></div> <div></div> <custom-component></custom-component> <custom-component></custom-component> <i></i> <i></i> <Component /> <Component /> {{! Prettier 2.8.2 }} <div /> <div></div> <custom-component /> <custom-component></custom-component> <i /> <i></i> <Component /> <Component /> ``` ##### Allow custom "else if"-like blocks with block params ([#​13930](prettier/prettier#13930) by [@​jamescdavis](https://github.com/jamescdavis)) [#​13507](prettier/prettier#13507) added support for custom block keywords used with `else`, but failed to allow block params. This updates printer-glimmer to allow block params with custom "else if"-like blocks. <!-- prettier-ignore --> ```hbs {{! Input }} {{#when isAtWork as |work|}} Ship that {{work}}! {{else when isReading as |book|}} You can finish {{book}} eventually... {{else}} Go to bed! {{/when}} {{! Prettier 2.8.1 }} {{#when isAtWork as |work|}} Ship that {{work}}! {{else when isReading}} You can finish {{book}} eventually... {{else}} Go to bed! {{/when}} {{! Prettier 2.8.2 }} {{#when isAtWork as |work|}} Ship that {{work}}! {{else when isReading as |book|}} You can finish {{book}} eventually... {{else}} Go to bed! {{/when}} ``` ##### Preserve empty lines between nested SCSS maps ([#​13931](prettier/prettier#13931) by [@​jneander](https://github.com/jneander)) <!-- prettier-ignore --> ```scss /* Input */ $map: ( 'one': ( 'key': 'value', ), 'two': ( 'key': 'value', ), ) /* Prettier 2.8.1 */ $map: ( 'one': ( 'key': 'value', ), 'two': ( 'key': 'value', ), ) /* Prettier 2.8.2 */ $map: ( 'one': ( 'key': 'value', ), 'two': ( 'key': 'value', ), ) ``` ##### Fix missing parentheses when an expression statement starts with `let[` ([#​14000](prettier/prettier#14000), [#​14044](prettier/prettier#14044) by [@​fisker](https://github.com/fisker), [@​thorn0](https://github.com/thorn0)) <!-- prettier-ignore --> ```jsx // Input (let[0] = 2); // Prettier 2.8.1 let[0] = 2; // Prettier 2.8.1 (second format) SyntaxError: Unexpected token (1:5) > 1 | let[0] = 2; | ^ 2 | // Prettier 2.8.2 (let)[0] = 2; ``` ##### Fix semicolon duplicated at the end of LESS file ([#​14007](prettier/prettier#14007) by [@​mvorisek](https://github.com/mvorisek)) <!-- prettier-ignore --> ```less // Input @​variable: { field: something; }; // Prettier 2.8.1 @​variable: { field: something; }; ; // Prettier 2.8.2 @​variable: { field: something; }; ``` ##### Fix no space after unary minus when followed by opening parenthesis in LESS ([#​14008](prettier/prettier#14008) by [@​mvorisek](https://github.com/mvorisek)) <!-- prettier-ignore --> ```less // Input .unary_minus_single { margin: -(@​a); } .unary_minus_multi { margin: 0 -(@​a); } .binary_minus { margin: 0 - (@​a); } // Prettier 2.8.1 .unary_minus_single { margin: - (@​a); } .unary_minus_multi { margin: 0 - (@​a); } .binary_minus { margin: 0 - (@​a); } // Prettier 2.8.2 .unary_minus_single { margin: -(@​a); } .unary_minus_multi { margin: 0 -(@​a); } .binary_minus { margin: 0 - (@​a); } ``` ##### Do not change case of property name if inside a variable declaration in LESS ([#​14034](prettier/prettier#14034) by [@​mvorisek](https://github.com/mvorisek)) <!-- prettier-ignore --> ```less // Input @​var: { preserveCase: 0; }; // Prettier 2.8.1 @​var: { preservecase: 0; }; // Prettier 2.8.2 @​var: { preserveCase: 0; }; ``` ##### Fix formatting for auto-accessors with comments ([#​14038](prettier/prettier#14038) by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```jsx // Input class A { @​dec() // comment accessor b; } // Prettier 2.8.1 class A { @​dec() accessor // comment b; } // Prettier 2.8.1 (second format) class A { @​dec() accessor; // comment b; } // Prettier 2.8.2 class A { @​dec() // comment accessor b; } ``` ##### Add parentheses for TSTypeQuery to improve readability ([#​14042](prettier/prettier#14042) by [@​onishi-kohei](https://github.com/onishi-kohei)) <!-- prettier-ignore --> ```tsx // Input a as (typeof node.children)[number] a as (typeof node.children)[] a as ((typeof node.children)[number])[] // Prettier 2.8.1 a as typeof node.children[number]; a as typeof node.children[]; a as typeof node.children[number][]; // Prettier 2.8.2 a as (typeof node.children)[number]; a as (typeof node.children)[]; a as (typeof node.children)[number][]; ``` ##### Fix displacing of comments in default switch case ([#​14047](prettier/prettier#14047) by [@​thorn0](https://github.com/thorn0)) It was a regression in Prettier 2.6.0. <!-- prettier-ignore --> ```jsx // Input switch (state) { default: result = state; // no change break; } // Prettier 2.8.1 switch (state) { default: // no change result = state; break; } // Prettier 2.8.2 switch (state) { default: result = state; // no change break; } ``` ##### Support type annotations on auto accessors via `babel-ts` ([#​14049](prettier/prettier#14049) by [@​sosukesuzuki](https://github.com/sosukesuzuki)) [The bug that `@babel/parser` cannot parse auto accessors with type annotations](babel/babel#15205) has been fixed. So we now support it via `babel-ts` parser. <!-- prettier-ignore --> ```tsx class Foo { accessor prop: number; } ``` ##### Fix formatting of empty type parameters ([#​14073](prettier/prettier#14073) by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```jsx // Input const foo: bar</* comment */> = () => baz; // Prettier 2.8.1 Error: Comment "comment" was not printed. Please report this error! // Prettier 2.8.2 const foo: bar</* comment */> = () => baz; ``` ##### Add parentheses to head of `ExpressionStatement` instead of the whole statement ([#​14077](prettier/prettier#14077) by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```jsx // Input ({}).toString.call(foo) === "[object Array]" ? foo.forEach(iterateArray) : iterateObject(foo); // Prettier 2.8.1 ({}.toString.call(foo) === "[object Array]" ? foo.forEach(iterateArray) : iterateObject(foo)); // Prettier 2.8.2 ({}).toString.call(foo.forEach) === "[object Array]" ? foo.forEach(iterateArray) : iterateObject(foo); ``` ##### Fix comments after directive ([#​14081](prettier/prettier#14081) by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```jsx // Input "use strict" /* comment */; // Prettier 2.8.1 (with other js parsers except `babel`) Error: Comment "comment" was not printed. Please report this error! // Prettier 2.8.2 <Same as input> ``` ##### Fix formatting for comments inside JSX attribute ([#​14082](prettier/prettier#14082) with by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```jsx // Input function MyFunctionComponent() { <button label=/*old*/"new">button</button> } // Prettier 2.8.1 Error: Comment "old" was not printed. Please report this error! // Prettier 2.8.2 function MyFunctionComponent() { <button label=/*old*/ "new">button</button>; } ``` ##### Quote numeric keys for json-stringify parser ([#​14083](prettier/prettier#14083) by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```jsx // Input {0: 'value'} // Prettier 2.8.1 { 0: "value" } // Prettier 2.8.2 { "0": "value" } ``` ##### Fix removing commas from function arguments in maps ([#​14089](prettier/prettier#14089) by [@​sosukesuzuki](https://github.com/sosukesuzuki)) <!-- prettier-ignore --> ```scss /* Input */ $foo: map-fn( ( "#{prop}": inner-fn($first, $second), ) ); /* Prettier 2.8.1 */ $foo: map-fn(("#{prop}": inner-fn($first $second))); /* Prettier 2.8.2 */ $foo: map-fn( ( "#{prop}": inner-fn($first, $second), ) ); ``` ##### Do not insert space in LESS property access ([#​14103](prettier/prettier#14103) by [@​fisker](https://github.com/fisker)) <!-- prettier-ignore --> ```less // Input a { color: @​colors[@​white]; } // Prettier 2.8.1 a { color: @​colors[ @​white]; } // Prettier 2.8.2 <Same as input> ``` </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC45MC4wIiwidXBkYXRlZEluVmVyIjoiMzQuOTcuNSJ9--> Co-authored-by: cabr2-bot <[email protected]> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1708 Reviewed-by: Epsilon_02 <[email protected]> Co-authored-by: Calciumdibromid Bot <[email protected]> Co-committed-by: Calciumdibromid Bot <[email protected]>
|
@onishi-kohei Does this interact cleanly with {
// ...
accept: typeof MIME_TYPES[keyof typeof MIME_TYPES][];
}
The type is ugly but is tied to a third-party library. Parentheses that are added by hand are stripped by prettier automatically. |
|
@SamuelMS // Input
export type A = {
a?: {
[
x: string
]: typeof SomeLongLongLongTypeName[keyof typeof SomeLongLongLongTypeName];
} | null;
}; |
|
@SamuelMS Make sure you don't have a caret ( |
|
Can we disable this option? |
|
@onishi-kohei You're right, this was an environment issue – IDEA silently persisted a cached version of an older version of prettier around. |
Description
Fix to add parentheses for TSTypeQuery in some case (#13546)
I added an if statement with the parent type the example sentence had.
Checklist
docs/directory).changelog_unreleased/*/XXXX.mdfile followingchangelog_unreleased/TEMPLATE.md.✨Try the playground for this PR✨