From 1f3265559e68126488499bde40c84a259f3016ae Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 22 Jun 2019 14:55:46 +0800 Subject: [PATCH 1/4] fix `traverser.js` location for eslint@6 --- lib/rules/order-in-components.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index a63b477e5..eee16b1ad 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -5,7 +5,12 @@ 'use strict' const utils = require('../utils') -const Traverser = require('eslint/lib/util/traverser') +let Traverser +try { + Traverser = require('eslint/lib/shared/traverser') +} catch (_) { + Traverser = require('eslint/lib/util/traverser') +} const defaultOrder = [ 'el', From 2451c8e3b855c08dcdef2ad16ebb04dccf749a6d Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 22 Jun 2019 16:08:09 +0800 Subject: [PATCH 2/4] chore: add comment --- lib/rules/order-in-components.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index eee16b1ad..6722d7977 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -7,8 +7,10 @@ const utils = require('../utils') let Traverser try { + // eslint 6 Traverser = require('eslint/lib/shared/traverser') } catch (_) { + // eslint < 6 Traverser = require('eslint/lib/util/traverser') } From 2e5b90e109aa0773f5ddb0862d16495a636dfab5 Mon Sep 17 00:00:00 2001 From: fisker Date: Sun, 23 Jun 2019 10:14:12 +0800 Subject: [PATCH 3/4] [WIP] switch to vue-eslint-parser `traverseNodes` --- lib/rules/order-in-components.js | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index 6722d7977..e0ad0a3d5 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -5,14 +5,7 @@ 'use strict' const utils = require('../utils') -let Traverser -try { - // eslint 6 - Traverser = require('eslint/lib/shared/traverser') -} catch (_) { - // eslint < 6 - Traverser = require('eslint/lib/util/traverser') -} +const traverseNodes = require('vue-eslint-parser').AST.traverseNodes const defaultOrder = [ 'el', @@ -100,9 +93,10 @@ const LOGICAL_OPERATORS = ['&&', '||'] */ function isNotSideEffectsNode (node, visitorKeys) { let result = true - new Traverser().traverse(node, { + const notSideEffectsNodes = [] + traverseNodes(node, { visitorKeys, - enter (node, parent) { + enterNode (node, parent) { if ( node.type === 'FunctionExpression' || node.type === 'Identifier' || @@ -112,7 +106,7 @@ function isNotSideEffectsNode (node, visitorKeys) { node.type === 'TemplateElement' ) { // no side effects node - this.skip() + notSideEffectsNodes.push(node) } else if ( node.type !== 'Property' && node.type !== 'ObjectExpression' && @@ -127,10 +121,12 @@ function isNotSideEffectsNode (node, visitorKeys) { node.type !== 'TemplateLiteral' ) { // Can not be sure that a node has no side effects - result = false - this.break() + if (!parent || notSideEffectsNodes.includes(parent)) { + result = false + } } - } + }, + leaveNode () {} }) return result } From f99dab42937ee03f2f7c93490f918aae95fb004e Mon Sep 17 00:00:00 2001 From: fisker Date: Sun, 23 Jun 2019 18:08:00 +0800 Subject: [PATCH 4/4] fix: fix broken tests --- lib/rules/order-in-components.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index e0ad0a3d5..5702c22e5 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -93,10 +93,14 @@ const LOGICAL_OPERATORS = ['&&', '||'] */ function isNotSideEffectsNode (node, visitorKeys) { let result = true - const notSideEffectsNodes = [] + const noSideEffectsNodes = new Set() traverseNodes(node, { visitorKeys, enterNode (node, parent) { + if (!result || noSideEffectsNodes.has(node)) { + return + } + if ( node.type === 'FunctionExpression' || node.type === 'Identifier' || @@ -106,7 +110,14 @@ function isNotSideEffectsNode (node, visitorKeys) { node.type === 'TemplateElement' ) { // no side effects node - notSideEffectsNodes.push(node) + noSideEffectsNodes.add(node) + traverseNodes(node, { + visitorKeys, + enterNode (node) { + noSideEffectsNodes.add(node) + }, + leaveNode () {} + }) } else if ( node.type !== 'Property' && node.type !== 'ObjectExpression' && @@ -121,9 +132,7 @@ function isNotSideEffectsNode (node, visitorKeys) { node.type !== 'TemplateLiteral' ) { // Can not be sure that a node has no side effects - if (!parent || notSideEffectsNodes.includes(parent)) { - result = false - } + result = false } }, leaveNode () {}