From 96405970eb87f41dc2e3c6fa7fa247fd671e159a Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 24 Jun 2019 19:09:31 +0800 Subject: [PATCH 1/3] pref: improve traverse --- lib/rules/order-in-components.js | 84 +++++++++++++++----------------- 1 file changed, 39 insertions(+), 45 deletions(-) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index 5702c22e5..ca4d314e4 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -92,52 +92,46 @@ const LOGICAL_OPERATORS = ['&&', '||'] * @returns {Boolean} no side effects */ function isNotSideEffectsNode (node, visitorKeys) { - let result = true const noSideEffectsNodes = new Set() - traverseNodes(node, { - visitorKeys, - enterNode (node, parent) { - if (!result || noSideEffectsNodes.has(node)) { - return - } - - if ( - node.type === 'FunctionExpression' || - node.type === 'Identifier' || - node.type === 'Literal' || - // es2015 - node.type === 'ArrowFunctionExpression' || - node.type === 'TemplateElement' - ) { - // no side effects node - noSideEffectsNodes.add(node) - traverseNodes(node, { - visitorKeys, - enterNode (node) { - noSideEffectsNodes.add(node) - }, - leaveNode () {} - }) - } else if ( - node.type !== 'Property' && - node.type !== 'ObjectExpression' && - node.type !== 'ArrayExpression' && - (node.type !== 'UnaryExpression' || ['!', '~', '+', '-', 'typeof'].indexOf(node.operator) < 0) && - (node.type !== 'BinaryExpression' || ALL_BINARY_OPERATORS.indexOf(node.operator) < 0) && - (node.type !== 'LogicalExpression' || LOGICAL_OPERATORS.indexOf(node.operator) < 0) && - node.type !== 'MemberExpression' && - node.type !== 'ConditionalExpression' && - // es2015 - node.type !== 'SpreadElement' && - node.type !== 'TemplateLiteral' - ) { - // Can not be sure that a node has no side effects - result = false - } - }, - leaveNode () {} - }) - return result + try { + traverseNodes(node, { + visitorKeys, + enterNode (node, parent) { + if ( + // parent has no side effects + noSideEffectsNodes.has(parent) || + // no side effects node + node.type === 'FunctionExpression' || + node.type === 'Identifier' || + node.type === 'Literal' || + // es2015 + node.type === 'ArrowFunctionExpression' || + node.type === 'TemplateElement' + ) { + noSideEffectsNodes.add(node) + } else if ( + node.type !== 'Property' && + node.type !== 'ObjectExpression' && + node.type !== 'ArrayExpression' && + (node.type !== 'UnaryExpression' || ['!', '~', '+', '-', 'typeof'].indexOf(node.operator) < 0) && + (node.type !== 'BinaryExpression' || ALL_BINARY_OPERATORS.indexOf(node.operator) < 0) && + (node.type !== 'LogicalExpression' || LOGICAL_OPERATORS.indexOf(node.operator) < 0) && + node.type !== 'MemberExpression' && + node.type !== 'ConditionalExpression' && + // es2015 + node.type !== 'SpreadElement' && + node.type !== 'TemplateLiteral' + ) { + // Can not be sure that a node has no side effects + throw new Error('maybe side effects') + } + }, + leaveNode () {} + }) + } catch (error) { + return false + } + return true } // ------------------------------------------------------------------------------ From df314d8485a5bb3a093b2bcbf3faa365b000d1ab Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 25 Jun 2019 17:08:10 +0800 Subject: [PATCH 2/3] ci: trigger build From f5d4df7334a272a117dc3d535540d25935d91bed Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 13 Aug 2019 18:00:06 +0800 Subject: [PATCH 3/3] Remove throw trick --- lib/rules/order-in-components.js | 80 ++++++++++++++++---------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index ca4d314e4..db057143b 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -92,46 +92,48 @@ const LOGICAL_OPERATORS = ['&&', '||'] * @returns {Boolean} no side effects */ function isNotSideEffectsNode (node, visitorKeys) { + let result = true const noSideEffectsNodes = new Set() - try { - traverseNodes(node, { - visitorKeys, - enterNode (node, parent) { - if ( - // parent has no side effects - noSideEffectsNodes.has(parent) || - // no side effects node - node.type === 'FunctionExpression' || - node.type === 'Identifier' || - node.type === 'Literal' || - // es2015 - node.type === 'ArrowFunctionExpression' || - node.type === 'TemplateElement' - ) { - noSideEffectsNodes.add(node) - } else if ( - node.type !== 'Property' && - node.type !== 'ObjectExpression' && - node.type !== 'ArrayExpression' && - (node.type !== 'UnaryExpression' || ['!', '~', '+', '-', 'typeof'].indexOf(node.operator) < 0) && - (node.type !== 'BinaryExpression' || ALL_BINARY_OPERATORS.indexOf(node.operator) < 0) && - (node.type !== 'LogicalExpression' || LOGICAL_OPERATORS.indexOf(node.operator) < 0) && - node.type !== 'MemberExpression' && - node.type !== 'ConditionalExpression' && - // es2015 - node.type !== 'SpreadElement' && - node.type !== 'TemplateLiteral' - ) { - // Can not be sure that a node has no side effects - throw new Error('maybe side effects') - } - }, - leaveNode () {} - }) - } catch (error) { - return false - } - return true + traverseNodes(node, { + visitorKeys, + enterNode (node, parent) { + if (!result) { + return + } + + if ( + // parent has no side effects + noSideEffectsNodes.has(parent) || + // no side effects node + node.type === 'FunctionExpression' || + node.type === 'Identifier' || + node.type === 'Literal' || + // es2015 + node.type === 'ArrowFunctionExpression' || + node.type === 'TemplateElement' + ) { + noSideEffectsNodes.add(node) + } else if ( + node.type !== 'Property' && + node.type !== 'ObjectExpression' && + node.type !== 'ArrayExpression' && + (node.type !== 'UnaryExpression' || ['!', '~', '+', '-', 'typeof'].indexOf(node.operator) < 0) && + (node.type !== 'BinaryExpression' || ALL_BINARY_OPERATORS.indexOf(node.operator) < 0) && + (node.type !== 'LogicalExpression' || LOGICAL_OPERATORS.indexOf(node.operator) < 0) && + node.type !== 'MemberExpression' && + node.type !== 'ConditionalExpression' && + // es2015 + node.type !== 'SpreadElement' && + node.type !== 'TemplateLiteral' + ) { + // Can not be sure that a node has no side effects + result = false + } + }, + leaveNode () {} + }) + + return result } // ------------------------------------------------------------------------------