method chain breaking heuristic (#6685)
* examples from various issues about method chaining this commit includes no prettier functionality changes, so that diffs will be easily visible. specifically: * https://github.com/prettier/prettier/issues/4125 * https://github.com/prettier/prettier/pull/4765 * https://github.com/prettier/prettier/issues/1565 * https://github.com/prettier/prettier/issues/3107 * add heuristic for breaking method chains * fix: remove unnecessary escape characters * initial non-regex isSimple implementation * handle babel literal types properly found here: https://github.com/babel/babel/blob/fe258dec047f473fb5a35172b2ff8cb172051dec/packages/babel-parser/ast/spec.md * template literal + test * use !every instead of some(!) * fix: some test cases * fix: object expressions and some more simple node types * some test cases showing need for depth check * depth check * update test to test thing it's supposed to test * optional expressions * test case for missing isSimple depth * fix isSimple depth bug * fix: comment check * test for ts non-null operator * make object properties behave similarly to arrays * isSimple -> isSimpleCallArgument; move to utils; add unaries * add Import to the list of simple things * only short regexps to be considered simple (<= 5 chars) * add changelog entry in the new format * update snapshots Co-authored-by: Georgii Dolzhykov <thorn.mailbox@gmail.com>
This commit is contained in:
1 parent
26272bfc32
commit
911fe7776e
10 files changed
+620
-74
No files matched your search
@@ -0,0 +1,22 @@
|
||||
#### Method chain breaking ([#6685](https://github.com/prettier/prettier/pull/6685) by [@mmkal](https://github.com/mmkal))
|
||||
|
||||
Previously, any chained method calls of length three or longer would be automatically broken. This uses a heuristic for the complexity of the arguments in the chain, rather than just the chain length. Now, if chained method calls have arguments which aren't easy to understand at a glance (e.g. functions or deeply-nested objects), the chain is broken. Otherwise, they're allowed to remain on one line. See prior issues [#3197](https://github.com/prettier/prettier/issues/3107), [#4765](https://github.com/prettier/prettier/pull/4765), [#1565](https://github.com/prettier/prettier/issues/1565) and [#4125](https://github.com/prettier/prettier/pull/4125) for context and examples.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```javascript
|
||||
// Input
|
||||
foo.one().two().three() === bar.four().five().six();
|
||||
|
||||
// Output (Prettier stable)
|
||||
foo
|
||||
.one()
|
||||
.two()
|
||||
.three() ===
|
||||
bar
|
||||
.four()
|
||||
.five()
|
||||
.six();
|
||||
|
||||
// Output (Prettier master)
|
||||
foo.one().two().three() === bar.four().five().six();
|
||||
```
|
||||
Reference in new issue
Block a user