From 887a35c5b86f4202bcb8cc8568c66dce4c12dd4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Fontcuberta?= Date: Fri, 1 Nov 2019 20:03:45 +0100 Subject: [PATCH 1/3] fix(prefer-explicit-assert): avoid raising error on destructuring --- lib/rules/prefer-explicit-assert.js | 6 ++++++ tests/lib/rules/prefer-explicit-assert.js | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/lib/rules/prefer-explicit-assert.js b/lib/rules/prefer-explicit-assert.js index 60331c67..4231f96d 100644 --- a/lib/rules/prefer-explicit-assert.js +++ b/lib/rules/prefer-explicit-assert.js @@ -24,6 +24,11 @@ const isDeclared = node => node.parent.type === 'VariableDeclarator'; const isReturnedByReturnStatement = node => node.parent.type === 'ReturnStatement'; +const isInDestructuringStatement = node => + (node.parent.type === 'Property' && + node.parent.parent.type === 'ObjectPattern') || + node.parent.type === 'ArrayPattern'; + module.exports = { meta: { type: 'suggestion', @@ -63,6 +68,7 @@ module.exports = { if ( isValidQuery(node, customQueryNames) && + !isInDestructuringStatement(node) && !isDirectlyCalledByFunction(callExpressionNode) && !isReturnedByArrowFunctionExpression(callExpressionNode) && !isDeclared(callExpressionNode) && diff --git a/tests/lib/rules/prefer-explicit-assert.js b/tests/lib/rules/prefer-explicit-assert.js index 9ca26f79..57e1d4b1 100644 --- a/tests/lib/rules/prefer-explicit-assert.js +++ b/tests/lib/rules/prefer-explicit-assert.js @@ -50,6 +50,15 @@ ruleTester.run('prefer-explicit-assert', rule, { { code: `getByIcon('foo')`, // custom `getBy` query not extended through options }, + { + code: `const { getByText } = render()`, + }, + { + code: `it('test', () => { const { getByText } = render() })`, + }, + { + code: `it('test', () => { const [ getByText ] = render() })`, + }, ], invalid: [ From 6f8bfc422c37b864ff309bfa3b9dad3239c19a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Fontcuberta?= Date: Mon, 4 Nov 2019 19:18:48 +0100 Subject: [PATCH 2/3] fix(prefer-explicit-assert): avoid raising error on array statements --- lib/rules/prefer-explicit-assert.js | 4 ++++ tests/lib/rules/prefer-explicit-assert.js | 3 +++ 2 files changed, 7 insertions(+) diff --git a/lib/rules/prefer-explicit-assert.js b/lib/rules/prefer-explicit-assert.js index 4231f96d..de7853d9 100644 --- a/lib/rules/prefer-explicit-assert.js +++ b/lib/rules/prefer-explicit-assert.js @@ -24,6 +24,9 @@ const isDeclared = node => node.parent.type === 'VariableDeclarator'; const isReturnedByReturnStatement = node => node.parent.type === 'ReturnStatement'; +const isInsideArrayDeclaration = node => + node.parent.parent.type === 'ArrayExpression'; + const isInDestructuringStatement = node => (node.parent.type === 'Property' && node.parent.parent.type === 'ObjectPattern') || @@ -69,6 +72,7 @@ module.exports = { if ( isValidQuery(node, customQueryNames) && !isInDestructuringStatement(node) && + !isInsideArrayDeclaration(node) && !isDirectlyCalledByFunction(callExpressionNode) && !isReturnedByArrowFunctionExpression(callExpressionNode) && !isDeclared(callExpressionNode) && diff --git a/tests/lib/rules/prefer-explicit-assert.js b/tests/lib/rules/prefer-explicit-assert.js index 57e1d4b1..441c4273 100644 --- a/tests/lib/rules/prefer-explicit-assert.js +++ b/tests/lib/rules/prefer-explicit-assert.js @@ -59,6 +59,9 @@ ruleTester.run('prefer-explicit-assert', rule, { { code: `it('test', () => { const [ getByText ] = render() })`, }, + { + code: `const a = [ getByText('foo') ]`, + }, ], invalid: [ From 0119d729cd25be1d23cf84ef4b847da98d6edc70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Fontcuberta?= Date: Tue, 5 Nov 2019 20:41:50 +0100 Subject: [PATCH 3/3] fix(prefer-explicit-assert): allow object declarations --- lib/rules/prefer-explicit-assert.js | 11 ++++------- lib/utils.js | 11 +++++++++++ tests/lib/rules/prefer-explicit-assert.js | 3 +++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/rules/prefer-explicit-assert.js b/lib/rules/prefer-explicit-assert.js index de7853d9..71451556 100644 --- a/lib/rules/prefer-explicit-assert.js +++ b/lib/rules/prefer-explicit-assert.js @@ -1,13 +1,13 @@ 'use strict'; -const { getDocsUrl, ALL_QUERIES_METHODS } = require('../utils'); +const { findParent, getDocsUrl, ALL_QUERIES_METHODS } = require('../utils'); const ALL_GET_BY_QUERIES = ALL_QUERIES_METHODS.map( queryMethod => `get${queryMethod}` ); const findCallExpressionParent = node => - node.type === 'CallExpression' ? node : findCallExpressionParent(node.parent); + findParent(node, node => node.type === 'CallExpression'); const isValidQuery = (node, customQueryNames = []) => ALL_GET_BY_QUERIES.includes(node.name) || @@ -19,14 +19,12 @@ const isDirectlyCalledByFunction = node => const isReturnedByArrowFunctionExpression = node => node.parent.type === 'ArrowFunctionExpression'; -const isDeclared = node => node.parent.type === 'VariableDeclarator'; +const isDeclared = node => + !!findParent(node, node => node.type === 'VariableDeclarator'); const isReturnedByReturnStatement = node => node.parent.type === 'ReturnStatement'; -const isInsideArrayDeclaration = node => - node.parent.parent.type === 'ArrayExpression'; - const isInDestructuringStatement = node => (node.parent.type === 'Property' && node.parent.parent.type === 'ObjectPattern') || @@ -72,7 +70,6 @@ module.exports = { if ( isValidQuery(node, customQueryNames) && !isInDestructuringStatement(node) && - !isInsideArrayDeclaration(node) && !isDirectlyCalledByFunction(callExpressionNode) && !isReturnedByArrowFunctionExpression(callExpressionNode) && !isDeclared(callExpressionNode) && diff --git a/lib/utils.js b/lib/utils.js index bf8c2d17..0be515f8 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -48,7 +48,18 @@ const ALL_QUERIES_COMBINATIONS = [ ASYNC_QUERIES_COMBINATIONS, ]; +const findParent = (node, cb) => { + if (cb(node)) { + return node; + } else if (node.parent) { + return findParent(node.parent, cb); + } + + return null; +}; + module.exports = { + findParent, getDocsUrl, SYNC_QUERIES_VARIANTS, ASYNC_QUERIES_VARIANTS, diff --git a/tests/lib/rules/prefer-explicit-assert.js b/tests/lib/rules/prefer-explicit-assert.js index 441c4273..e523f0da 100644 --- a/tests/lib/rules/prefer-explicit-assert.js +++ b/tests/lib/rules/prefer-explicit-assert.js @@ -62,6 +62,9 @@ ruleTester.run('prefer-explicit-assert', rule, { { code: `const a = [ getByText('foo') ]`, }, + { + code: `const a = { foo: getByText('bar') }`, + }, ], invalid: [