From 58ae36325b940c430461f5bd993dfe7c50a8c56c Mon Sep 17 00:00:00 2001 From: Maciej Walaszczyk Date: Wed, 7 Sep 2022 11:01:00 +0200 Subject: [PATCH 1/3] support import bindings in no-unnecessary-waiting rule --- lib/rules/no-unnecessary-waiting.js | 7 +++++++ tests/lib/rules/no-unnecessary-waiting.js | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/rules/no-unnecessary-waiting.js b/lib/rules/no-unnecessary-waiting.js index 8d206d70..a5925ead 100644 --- a/lib/rules/no-unnecessary-waiting.js +++ b/lib/rules/no-unnecessary-waiting.js @@ -60,6 +60,7 @@ function isIdentifierNumberConstArgument (node, scope) { const resolvedIdentifier = scope.references.find((ref) => ref.identifier === identifier).resolved const definition = resolvedIdentifier.defs[0] const isVariable = definition.type === 'Variable' + const isImportBinding = definition.type === 'ImportBinding' // const amount = 1000 or const amount = '@alias' // cy.wait(amount) @@ -69,6 +70,12 @@ function isIdentifierNumberConstArgument (node, scope) { return typeof definition.node.init.value === 'number' } + // import { WAIT_TIME } from './constants' + // cy.wait(WAIT_TIME) + if (isImportBinding) { + return false + } + const param = definition.node.params[definition.index] // function wait (amount) { cy.wait(amount) } diff --git a/tests/lib/rules/no-unnecessary-waiting.js b/tests/lib/rules/no-unnecessary-waiting.js index da43606e..a788b2b5 100644 --- a/tests/lib/rules/no-unnecessary-waiting.js +++ b/tests/lib/rules/no-unnecessary-waiting.js @@ -6,7 +6,7 @@ const RuleTester = require('eslint').RuleTester const ruleTester = new RuleTester() const errors = [{ messageId: 'unexpected' }] -const parserOptions = { ecmaVersion: 6 } +const parserOptions = { ecmaVersion: 6, sourceType: 'module' } ruleTester.run('no-unnecessary-waiting', rule, { valid: [ @@ -27,6 +27,11 @@ ruleTester.run('no-unnecessary-waiting', rule, { { code: 'function customWait (ms) { cy.wait(ms) }', parserOptions, errors }, { code: 'const customWait = (ms) => { cy.wait(ms) }', parserOptions, errors }, + { code: 'import BAR_BAZ from "bar-baz"; cy.wait(BAR_BAZ)', parserOptions }, + { code: 'import { FOO_BAR } from "foo-bar"; cy.wait(FOO_BAR)', parserOptions }, + { code: 'import * as wildcard from "wildcard"; cy.wait(wildcard.value)', parserOptions }, + { code: 'import { NAME as OTHER_NAME } from "rename"; cy.wait(OTHER_NAME)', parserOptions }, + // disable the eslint rule { code: ` From 3997499329b614390a69fab72ea0ee26fb4ff524 Mon Sep 17 00:00:00 2001 From: Maciej Walaszczyk Date: Tue, 11 Apr 2023 09:47:13 +0200 Subject: [PATCH 2/3] explain import bindings case in code comment --- lib/rules/no-unnecessary-waiting.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/rules/no-unnecessary-waiting.js b/lib/rules/no-unnecessary-waiting.js index a5925ead..860262a6 100644 --- a/lib/rules/no-unnecessary-waiting.js +++ b/lib/rules/no-unnecessary-waiting.js @@ -70,8 +70,9 @@ function isIdentifierNumberConstArgument (node, scope) { return typeof definition.node.init.value === 'number' } - // import { WAIT_TIME } from './constants' - // cy.wait(WAIT_TIME) + // import { WAIT } from './constants' + // cy.wait(WAIT) + // we don't know if WAIT is a number or alias '@someRequest', so don't fail if (isImportBinding) { return false } From ad396fb25f3988a417f4acf83fc3e9ae457aea43 Mon Sep 17 00:00:00 2001 From: Matt Schile Date: Fri, 28 Apr 2023 09:10:48 -0600 Subject: [PATCH 3/3] Apply suggestions from code review --- lib/rules/no-unnecessary-waiting.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/rules/no-unnecessary-waiting.js b/lib/rules/no-unnecessary-waiting.js index 860262a6..53a8606f 100644 --- a/lib/rules/no-unnecessary-waiting.js +++ b/lib/rules/no-unnecessary-waiting.js @@ -60,7 +60,6 @@ function isIdentifierNumberConstArgument (node, scope) { const resolvedIdentifier = scope.references.find((ref) => ref.identifier === identifier).resolved const definition = resolvedIdentifier.defs[0] const isVariable = definition.type === 'Variable' - const isImportBinding = definition.type === 'ImportBinding' // const amount = 1000 or const amount = '@alias' // cy.wait(amount) @@ -73,9 +72,7 @@ function isIdentifierNumberConstArgument (node, scope) { // import { WAIT } from './constants' // cy.wait(WAIT) // we don't know if WAIT is a number or alias '@someRequest', so don't fail - if (isImportBinding) { - return false - } + if (definition.type === 'ImportBinding') return false const param = definition.node.params[definition.index]