diff --git a/src/language-js/utils/index.js b/src/language-js/utils/index.js index 5e99afd3a..1a11a0b0b 100644 --- a/src/language-js/utils/index.js +++ b/src/language-js/utils/index.js @@ -883,9 +883,26 @@ function isSimpleCallArgument(node, depth) { ); } + const targetUnaryExpressionOperators = { + "!": true, + "-": true, + "+": true, + "~": true, + }; if ( node.type === "UnaryExpression" && - (node.operator === "!" || node.operator === "-") + targetUnaryExpressionOperators[node.operator] + ) { + return isSimpleCallArgument(node.argument, depth); + } + + const targetUpdateExpressionOperators = { + "++": true, + "--": true, + }; + if ( + node.type === "UpdateExpression" && + targetUpdateExpressionOperators[node.operator] ) { return isSimpleCallArgument(node.argument, depth); } diff --git a/tests/format/js/method-chain/13018.js b/tests/format/js/method-chain/13018.js new file mode 100644 index 000000000..a0a4dc5eb --- /dev/null +++ b/tests/format/js/method-chain/13018.js @@ -0,0 +1,8 @@ +foo(_a).bar().leet(); +foo(-a).bar().leet(); +foo(+a).bar().leet(); +foo(~a).bar().leet(); +foo(++a).bar().leet(); +foo(--a).bar().leet(); +foo(a++).bar().leet(); +foo(a--).bar().leet(); diff --git a/tests/format/js/method-chain/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/method-chain/__snapshots__/jsfmt.spec.js.snap index 7beed1a04..d62714180 100644 --- a/tests/format/js/method-chain/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/method-chain/__snapshots__/jsfmt.spec.js.snap @@ -1,5 +1,33 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`13018.js format 1`] = ` +====================================options===================================== +parsers: ["babel", "flow", "typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +foo(_a).bar().leet(); +foo(-a).bar().leet(); +foo(+a).bar().leet(); +foo(~a).bar().leet(); +foo(++a).bar().leet(); +foo(--a).bar().leet(); +foo(a++).bar().leet(); +foo(a--).bar().leet(); + +=====================================output===================================== +foo(_a).bar().leet(); +foo(-a).bar().leet(); +foo(+a).bar().leet(); +foo(~a).bar().leet(); +foo(++a).bar().leet(); +foo(--a).bar().leet(); +foo(a++).bar().leet(); +foo(a--).bar().leet(); + +================================================================================ +`; + exports[`bracket_0.js format 1`] = ` ====================================options===================================== parsers: ["babel", "flow", "typescript"]