* 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>
1.1 KiB
1.1 KiB
Method chain breaking (#6685 by @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, #4765, #1565 and #4125 for context and examples.
// 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();