TypeScript: Keep parentheses around a function called with non-null assertion. (#6136)
parent
4c64f13ef4
commit
3b3c411642
|
@ -276,6 +276,25 @@ type G = keyof T[];
|
||||||
type G = (keyof T)[];
|
type G = (keyof T)[];
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### TypeScript: Keep parentheses around a function called with non-null assertion. ([6136] by [@sosukesuzuki])
|
||||||
|
|
||||||
|
Previously, Prettier removes necessary parentheses around a call expression with non-null assertion. It happens when it's return value is called as function.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```ts
|
||||||
|
// Input
|
||||||
|
const a = (b()!)();
|
||||||
|
const b = new (c()!)();
|
||||||
|
|
||||||
|
// Output (Prettier stable)
|
||||||
|
const a = b()!();
|
||||||
|
const b = new c()!();
|
||||||
|
|
||||||
|
// Output (prettier master)
|
||||||
|
const a = (b()!)();
|
||||||
|
const b = new (c()!)();
|
||||||
|
```
|
||||||
|
|
||||||
[#5979]: https://github.com/prettier/prettier/pull/5979
|
[#5979]: https://github.com/prettier/prettier/pull/5979
|
||||||
[#6086]: https://github.com/prettier/prettier/pull/6086
|
[#6086]: https://github.com/prettier/prettier/pull/6086
|
||||||
[#6088]: https://github.com/prettier/prettier/pull/6088
|
[#6088]: https://github.com/prettier/prettier/pull/6088
|
||||||
|
@ -288,6 +307,7 @@ type G = (keyof T)[];
|
||||||
[#6129]: https://github.com/prettier/prettier/pull/6129
|
[#6129]: https://github.com/prettier/prettier/pull/6129
|
||||||
[#6130]: https://github.com/prettier/prettier/pull/6130
|
[#6130]: https://github.com/prettier/prettier/pull/6130
|
||||||
[#6131]: https://github.com/prettier/prettier/pull/6131
|
[#6131]: https://github.com/prettier/prettier/pull/6131
|
||||||
|
[#6136]: https://github.com/prettier/prettier/pull/6136
|
||||||
[@belochub]: https://github.com/belochub
|
[@belochub]: https://github.com/belochub
|
||||||
[@brainkim]: https://github.com/brainkim
|
[@brainkim]: https://github.com/brainkim
|
||||||
[@duailibe]: https://github.com/duailibe
|
[@duailibe]: https://github.com/duailibe
|
||||||
|
|
|
@ -717,6 +717,15 @@ function needsParens(path, options) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
case "TSNonNullExpression": {
|
||||||
|
if (
|
||||||
|
node.expression.type !== "Identifier" &&
|
||||||
|
(parent.type === "CallExpression" || parent.type === "NewExpression")
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -56,6 +56,10 @@ function* g() {
|
||||||
return (yield * foo())!;
|
return (yield * foo())!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const a = (b()!)();
|
||||||
|
const b = c!();
|
||||||
|
const c = new (d()!)();
|
||||||
|
|
||||||
=====================================output=====================================
|
=====================================output=====================================
|
||||||
(a ? b : c)![tokenKey];
|
(a ? b : c)![tokenKey];
|
||||||
(a || b)![tokenKey];
|
(a || b)![tokenKey];
|
||||||
|
@ -69,5 +73,9 @@ function* g() {
|
||||||
return (yield* foo())!;
|
return (yield* foo())!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const a = (b()!)();
|
||||||
|
const b = c!();
|
||||||
|
const c = new (d()!)();
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
`;
|
`;
|
||||||
|
|
|
@ -9,3 +9,7 @@ async function f() {
|
||||||
function* g() {
|
function* g() {
|
||||||
return (yield * foo())!;
|
return (yield * foo())!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const a = (b()!)();
|
||||||
|
const b = c!();
|
||||||
|
const c = new (d()!)();
|
||||||
|
|
Loading…
Reference in New Issue