From 082c03de5dd1f6efe27e2f6dd9fd111f1434ce61 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Mon, 24 Jun 2019 17:18:38 +0800 Subject: [PATCH] fix: remove eslint internal `traverser` (#910) --- lib/rules/order-in-components.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index a63b477e5..5702c22e5 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -5,7 +5,7 @@ 'use strict' const utils = require('../utils') -const Traverser = require('eslint/lib/util/traverser') +const traverseNodes = require('vue-eslint-parser').AST.traverseNodes const defaultOrder = [ 'el', @@ -93,9 +93,14 @@ const LOGICAL_OPERATORS = ['&&', '||'] */ function isNotSideEffectsNode (node, visitorKeys) { let result = true - new Traverser().traverse(node, { + const noSideEffectsNodes = new Set() + traverseNodes(node, { visitorKeys, - enter (node, parent) { + enterNode (node, parent) { + if (!result || noSideEffectsNodes.has(node)) { + return + } + if ( node.type === 'FunctionExpression' || node.type === 'Identifier' || @@ -105,7 +110,14 @@ function isNotSideEffectsNode (node, visitorKeys) { node.type === 'TemplateElement' ) { // no side effects node - this.skip() + noSideEffectsNodes.add(node) + traverseNodes(node, { + visitorKeys, + enterNode (node) { + noSideEffectsNodes.add(node) + }, + leaveNode () {} + }) } else if ( node.type !== 'Property' && node.type !== 'ObjectExpression' && @@ -121,9 +133,9 @@ function isNotSideEffectsNode (node, visitorKeys) { ) { // Can not be sure that a node has no side effects result = false - this.break() } - } + }, + leaveNode () {} }) return result }