From b8fd70beb1169fd7aa969f638b05b5e11a1a331c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Z=C3=BCnd?= Date: Fri, 5 Mar 2021 09:45:59 +0100 Subject: [PATCH] Speed up AST utils --- lib/rules/no-exclusive-tests.js | 8 +++++--- lib/rules/no-pending-tests.js | 3 ++- lib/util/ast.js | 20 +++++++++++++++----- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/rules/no-exclusive-tests.js b/lib/rules/no-exclusive-tests.js index 862bb05..8fc25cc 100644 --- a/lib/rules/no-exclusive-tests.js +++ b/lib/rules/no-exclusive-tests.js @@ -12,11 +12,13 @@ module.exports = { create(context) { const astUtils = createAstUtils(context.settings); + const options = { modifiers: [ 'only' ], modifiersOnly: true }; + const isDescribe = astUtils.buildIsDescribeAnswerer(options); + const isTestCase = astUtils.buildIsTestCaseAnswerer(options); + return { CallExpression(node) { - const options = { modifiers: [ 'only' ], modifiersOnly: true }; - - if (astUtils.isDescribe(node, options) || astUtils.isTestCase(node, options)) { + if (isDescribe(node) || isTestCase(node)) { const callee = node.callee; context.report({ diff --git a/lib/rules/no-pending-tests.js b/lib/rules/no-pending-tests.js index e9c182e..db97e4f 100644 --- a/lib/rules/no-pending-tests.js +++ b/lib/rules/no-pending-tests.js @@ -11,9 +11,10 @@ module.exports = { }, create(context) { const astUtils = createAstUtils(context.settings); + const isTestCase = astUtils.buildIsTestCaseAnswerer(); function isPendingMochaTest(node) { - return astUtils.isTestCase(node) && + return isTestCase(node) && node.arguments.length === 1 && node.arguments[0].type === 'Literal'; } diff --git a/lib/util/ast.js b/lib/util/ast.js index d2e2bba..87b2025 100644 --- a/lib/util/ast.js +++ b/lib/util/ast.js @@ -66,18 +66,26 @@ function isFunctionCallWithName(node, names) { function createAstUtils(settings) { const additionalCustomNames = getAddtionalNames(settings); - function isDescribe(node, options = {}) { + function buildIsDescribeAnswerer(options) { const { modifiers = [ 'skip', 'only' ], modifiersOnly = false } = options; const describeAliases = getSuiteNames({ modifiersOnly, modifiers, additionalCustomNames }); - return isFunctionCallWithName(node, describeAliases); + return (node) => isFunctionCallWithName(node, describeAliases); } - function isTestCase(node, options = {}) { + function isDescribe(node, options = {}) { + return (buildIsDescribeAnswerer(options))(node); + } + + function buildIsTestCaseAnswerer(options = {}) { const { modifiers = [ 'skip', 'only' ], modifiersOnly = false } = options; const testCaseNames = getTestCaseNames({ modifiersOnly, modifiers, additionalCustomNames }); - return isFunctionCallWithName(node, testCaseNames); + return (node) => isFunctionCallWithName(node, testCaseNames); + } + + function isTestCase(node, options = {}) { + return (buildIsTestCaseAnswerer(options))(node); } function isSuiteConfigExpression(node) { @@ -132,7 +140,9 @@ function createAstUtils(settings) { isSuiteConfigCall, hasParentMochaFunctionCall, findReturnStatement, - isReturnOfUndefined + isReturnOfUndefined, + buildIsDescribeAnswerer, + buildIsTestCaseAnswerer, }; }