From 3c4d0f37081ba2f59b9642697136de94d0a02a1d Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Sat, 1 Dec 2018 19:54:19 +0900 Subject: [PATCH] Chore: update vue-eslint-parser to v4 This update fixes some bugs: - fixes #687 - fixes no-unused-vars that filter names don't use varaibles And add the new node support to indent rules. --- lib/utils/indent-common.js | 39 ++++++++++++++++++- package.json | 2 +- .../v-filter-sequence-expression-01.vue | 8 ++++ .../v-filter-sequence-expression-02.vue | 9 +++++ .../v-filter-sequence-expression-03.vue | 9 +++++ .../v-filter-sequence-expression-04.vue | 9 +++++ .../v-filter-sequence-expression-05.vue | 6 +++ tests/lib/rules/no-unused-vars.js | 7 ++++ 8 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/html-indent/v-filter-sequence-expression-01.vue create mode 100644 tests/fixtures/html-indent/v-filter-sequence-expression-02.vue create mode 100644 tests/fixtures/html-indent/v-filter-sequence-expression-03.vue create mode 100644 tests/fixtures/html-indent/v-filter-sequence-expression-04.vue create mode 100644 tests/fixtures/html-indent/v-filter-sequence-expression-05.vue diff --git a/lib/utils/indent-common.js b/lib/utils/indent-common.js index 893335569..c86460dac 100644 --- a/lib/utils/indent-common.js +++ b/lib/utils/indent-common.js @@ -14,7 +14,7 @@ const assert = require('assert') // Helpers // ------------------------------------------------------------------------------ -const KNOWN_NODES = new Set(['ArrayExpression', 'ArrayPattern', 'ArrowFunctionExpression', 'AssignmentExpression', 'AssignmentPattern', 'AwaitExpression', 'BinaryExpression', 'BlockStatement', 'BreakStatement', 'CallExpression', 'CatchClause', 'ClassBody', 'ClassDeclaration', 'ClassExpression', 'ConditionalExpression', 'ContinueStatement', 'DebuggerStatement', 'DoWhileStatement', 'EmptyStatement', 'ExperimentalRestProperty', 'ExperimentalSpreadProperty', 'ExportAllDeclaration', 'ExportDefaultDeclaration', 'ExportNamedDeclaration', 'ExportSpecifier', 'ExpressionStatement', 'ForInStatement', 'ForOfStatement', 'ForStatement', 'FunctionDeclaration', 'FunctionExpression', 'Identifier', 'IfStatement', 'ImportDeclaration', 'ImportDefaultSpecifier', 'ImportNamespaceSpecifier', 'ImportSpecifier', 'LabeledStatement', 'Literal', 'LogicalExpression', 'MemberExpression', 'MetaProperty', 'MethodDefinition', 'NewExpression', 'ObjectExpression', 'ObjectPattern', 'Program', 'Property', 'RestElement', 'ReturnStatement', 'SequenceExpression', 'SpreadElement', 'Super', 'SwitchCase', 'SwitchStatement', 'TaggedTemplateExpression', 'TemplateElement', 'TemplateLiteral', 'ThisExpression', 'ThrowStatement', 'TryStatement', 'UnaryExpression', 'UpdateExpression', 'VariableDeclaration', 'VariableDeclarator', 'WhileStatement', 'WithStatement', 'YieldExpression', 'VAttribute', 'VDirectiveKey', 'VDocumentFragment', 'VElement', 'VEndTag', 'VExpressionContainer', 'VForExpression', 'VIdentifier', 'VLiteral', 'VOnExpression', 'VSlotScopeExpression', 'VStartTag', 'VText']) +const KNOWN_NODES = new Set(['ArrayExpression', 'ArrayPattern', 'ArrowFunctionExpression', 'AssignmentExpression', 'AssignmentPattern', 'AwaitExpression', 'BinaryExpression', 'BlockStatement', 'BreakStatement', 'CallExpression', 'CatchClause', 'ClassBody', 'ClassDeclaration', 'ClassExpression', 'ConditionalExpression', 'ContinueStatement', 'DebuggerStatement', 'DoWhileStatement', 'EmptyStatement', 'ExperimentalRestProperty', 'ExperimentalSpreadProperty', 'ExportAllDeclaration', 'ExportDefaultDeclaration', 'ExportNamedDeclaration', 'ExportSpecifier', 'ExpressionStatement', 'ForInStatement', 'ForOfStatement', 'ForStatement', 'FunctionDeclaration', 'FunctionExpression', 'Identifier', 'IfStatement', 'ImportDeclaration', 'ImportDefaultSpecifier', 'ImportNamespaceSpecifier', 'ImportSpecifier', 'LabeledStatement', 'Literal', 'LogicalExpression', 'MemberExpression', 'MetaProperty', 'MethodDefinition', 'NewExpression', 'ObjectExpression', 'ObjectPattern', 'Program', 'Property', 'RestElement', 'ReturnStatement', 'SequenceExpression', 'SpreadElement', 'Super', 'SwitchCase', 'SwitchStatement', 'TaggedTemplateExpression', 'TemplateElement', 'TemplateLiteral', 'ThisExpression', 'ThrowStatement', 'TryStatement', 'UnaryExpression', 'UpdateExpression', 'VariableDeclaration', 'VariableDeclarator', 'WhileStatement', 'WithStatement', 'YieldExpression', 'VAttribute', 'VDirectiveKey', 'VDocumentFragment', 'VElement', 'VEndTag', 'VExpressionContainer', 'VFilter', 'VFilterSequenceExpression', 'VForExpression', 'VIdentifier', 'VLiteral', 'VOnExpression', 'VSlotScopeExpression', 'VStartTag', 'VText']) const LT_CHAR = /[\r\n\u2028\u2029]/ const LINES = /[^\r\n\u2028\u2029]+(?:$|\r\n|[\r\n\u2028\u2029])/g const BLOCK_COMMENT_PREFIX = /^\s*\*/ @@ -205,6 +205,15 @@ function isNotEmptyTextNode (node) { return !(node.type === 'VText' && node.value.trim() === '') } +/** + * Check whether the given token is a pipe operator. + * @param {Token} token The token to check. + * @returns {boolean} `true` if the token is a pipe operator. + */ +function isPipeOperator (token) { + return token != null && token.type === 'Punctuator' && token.value === '|' +} + /** * Get the last element. * @param {Array} xs The array to get the last element. @@ -915,6 +924,34 @@ module.exports.defineVisitor = function create (context, tokenStore, defaultOpti } }, + VFilter (node) { + const idToken = tokenStore.getFirstToken(node) + const lastToken = tokenStore.getLastToken(node) + if (isRightParen(lastToken)) { + const leftParenToken = tokenStore.getTokenAfter(node.callee) + setOffset(leftParenToken, 1, idToken) + processNodeList(node.arguments, leftParenToken, lastToken, 1) + } + }, + + VFilterSequenceExpression (node) { + if (node.filters.length === 0) { + return + } + + const firstToken = tokenStore.getFirstToken(node) + const tokens = [] + + for (const filter of node.filters) { + tokens.push( + tokenStore.getTokenBefore(filter, isPipeOperator), + tokenStore.getFirstToken(filter) + ) + } + + setOffset(tokens, 1, firstToken) + }, + VForExpression (node) { const firstToken = tokenStore.getFirstToken(node) const lastOfLeft = last(node.left) || firstToken diff --git a/package.json b/package.json index 5f93170b7..de9fc9a1a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "eslint": "^5.0.0" }, "dependencies": { - "vue-eslint-parser": "^3.2.1" + "vue-eslint-parser": "^4.0.2" }, "devDependencies": { "@types/node": "^4.2.16", diff --git a/tests/fixtures/html-indent/v-filter-sequence-expression-01.vue b/tests/fixtures/html-indent/v-filter-sequence-expression-01.vue new file mode 100644 index 000000000..cd3639e35 --- /dev/null +++ b/tests/fixtures/html-indent/v-filter-sequence-expression-01.vue @@ -0,0 +1,8 @@ + + diff --git a/tests/fixtures/html-indent/v-filter-sequence-expression-02.vue b/tests/fixtures/html-indent/v-filter-sequence-expression-02.vue new file mode 100644 index 000000000..ade7ab38b --- /dev/null +++ b/tests/fixtures/html-indent/v-filter-sequence-expression-02.vue @@ -0,0 +1,9 @@ + + diff --git a/tests/fixtures/html-indent/v-filter-sequence-expression-03.vue b/tests/fixtures/html-indent/v-filter-sequence-expression-03.vue new file mode 100644 index 000000000..7f7f3b81b --- /dev/null +++ b/tests/fixtures/html-indent/v-filter-sequence-expression-03.vue @@ -0,0 +1,9 @@ + + diff --git a/tests/fixtures/html-indent/v-filter-sequence-expression-04.vue b/tests/fixtures/html-indent/v-filter-sequence-expression-04.vue new file mode 100644 index 000000000..ac3daadd2 --- /dev/null +++ b/tests/fixtures/html-indent/v-filter-sequence-expression-04.vue @@ -0,0 +1,9 @@ + + diff --git a/tests/fixtures/html-indent/v-filter-sequence-expression-05.vue b/tests/fixtures/html-indent/v-filter-sequence-expression-05.vue new file mode 100644 index 000000000..f69483696 --- /dev/null +++ b/tests/fixtures/html-indent/v-filter-sequence-expression-05.vue @@ -0,0 +1,6 @@ + + diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index db67041e1..e033d4871 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -46,6 +46,9 @@ tester.run('no-unused-vars', rule, { }, { code: '' + }, + { + code: '' } ], invalid: [ @@ -80,6 +83,10 @@ tester.run('no-unused-vars', rule, { { code: '', errors: ["'key' is defined but never used."] + }, + { + code: '', + errors: ["'x' is defined but never used."] } ] })