From c8cdd77a0a3d7004b3137af789a5a7e9baefaae9 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Fri, 27 Dec 2019 15:18:56 +0900 Subject: [PATCH] Fixed wrong indentation (#1015) --- lib/utils/indent-common.js | 15 ++++- package.json | 1 + .../html-indent/logical-expression-01.vue | 64 +++++++++++++++++++ .../script-indent/logical-expression-01.vue | 16 +++++ .../script-indent/logical-expression-02.vue | 12 ++++ .../script-indent/logical-expression-03.vue | 9 +++ 6 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/html-indent/logical-expression-01.vue create mode 100644 tests/fixtures/script-indent/logical-expression-01.vue create mode 100644 tests/fixtures/script-indent/logical-expression-02.vue create mode 100644 tests/fixtures/script-indent/logical-expression-03.vue diff --git a/lib/utils/indent-common.js b/lib/utils/indent-common.js index 227e85adc..826e1b8c9 100644 --- a/lib/utils/indent-common.js +++ b/lib/utils/indent-common.js @@ -509,6 +509,11 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti function getChainHeadToken (node) { const type = node.type while (node.parent.type === type) { + const prevToken = tokenStore.getTokenBefore(node) + if (isLeftParen(prevToken)) { + // The chaining is broken by parentheses. + break + } node = node.parent } return tokenStore.getFirstToken(node) @@ -537,7 +542,15 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti return parent.range[0] === token.range[0] } if (t === 'VExpressionContainer') { - return node.range[0] === token.range[0] + if (node.range[0] !== token.range[0]) { + return false + } + const prevToken = tokenStore.getTokenBefore(belongingNode) + if (isLeftParen(prevToken)) { + // It is not the first token because it is enclosed in parentheses. + return false + } + return true } if (t === 'CallExpression' || t === 'NewExpression') { const openParen = tokenStore.getTokenAfter(parent.callee, isNotRightParen) diff --git a/package.json b/package.json index 1474b777e..0affa217a 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "start": "npm run test:base -- --watch --growl", "test:base": "mocha \"tests/lib/**/*.js\" --reporter dot", "test": "nyc npm run test:base -- \"tests/integrations/*.js\" --timeout 60000", + "debug": "mocha --inspect-brk \"tests/lib/**/*.js\" --reporter dot --timeout 60000", "lint": "eslint . --rulesdir eslint-internal-rules", "pretest": "npm run lint", "preversion": "npm test && npm run update && git add .", diff --git a/tests/fixtures/html-indent/logical-expression-01.vue b/tests/fixtures/html-indent/logical-expression-01.vue new file mode 100644 index 000000000..a1f575d4d --- /dev/null +++ b/tests/fixtures/html-indent/logical-expression-01.vue @@ -0,0 +1,64 @@ + + diff --git a/tests/fixtures/script-indent/logical-expression-01.vue b/tests/fixtures/script-indent/logical-expression-01.vue new file mode 100644 index 000000000..087e00753 --- /dev/null +++ b/tests/fixtures/script-indent/logical-expression-01.vue @@ -0,0 +1,16 @@ + + diff --git a/tests/fixtures/script-indent/logical-expression-02.vue b/tests/fixtures/script-indent/logical-expression-02.vue new file mode 100644 index 000000000..ccba0b7c0 --- /dev/null +++ b/tests/fixtures/script-indent/logical-expression-02.vue @@ -0,0 +1,12 @@ + + diff --git a/tests/fixtures/script-indent/logical-expression-03.vue b/tests/fixtures/script-indent/logical-expression-03.vue new file mode 100644 index 000000000..9b5ccb8ca --- /dev/null +++ b/tests/fixtures/script-indent/logical-expression-03.vue @@ -0,0 +1,9 @@ + +