Visitar URL original
Fix formatting error on member chain (#15915) · prettier/prettier@7e862bb · GitHub
Skip to content

Commit 7e862bb

Browse files
authored
Fix formatting error on member chain (#15915)
1 parent 12f91dd commit 7e862bb

4 files changed

Lines changed: 43 additions & 0 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#### Fix formatting error on member chain (#15915 by @sosukesuzuki)
2+
3+
<!-- prettier-ignore -->
4+
```jsx
5+
// Input
6+
test().test2().test2(thing?.something);
7+
8+
// Prettier stable
9+
TypeError: Cannot read properties of undefined (reading 'type')
10+
11+
// Prettier main
12+
test().test2().test2(thing?.something);
13+
14+
```

‎src/language-js/utils/index.js‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,16 @@ function isTestCall(node, parent) {
405405
/** @return {(node: Node) => boolean} */
406406
const skipChainExpression = (fn) => (node) => {
407407
if (node?.type === "ChainExpression") {
408+
// @ts-expect-error
409+
if (!node.object) {
410+
// @ts-expect-error
411+
node.object = node.expression.object;
412+
}
413+
// @ts-expect-error
414+
if (!node.property) {
415+
// @ts-expect-error
416+
node.property = node.expression.property;
417+
}
408418
node = node.expression;
409419
}
410420

‎tests/format/js/chain-expression/__snapshots__/jsfmt.spec.js.snap‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,22 @@ logger.log(
8181
================================================================================
8282
`;
8383
84+
exports[`issue-15912.js format 1`] = `
85+
====================================options=====================================
86+
parsers: ["babel", "typescript", "flow"]
87+
printWidth: 80
88+
| printWidth
89+
=====================================input======================================
90+
test()
91+
.test2()
92+
.test2(thing?.something);
93+
94+
=====================================output=====================================
95+
test().test2().test2(thing?.something);
96+
97+
================================================================================
98+
`;
99+
84100
exports[`test.js format 1`] = `
85101
====================================options=====================================
86102
parsers: ["babel", "typescript", "flow"]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
test()
2+
.test2()
3+
.test2(thing?.something);

0 commit comments

Comments
 (0)