From 7fe561d88328d21325c18d52fea15c4022e3ae95 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 Apr 2021 16:55:22 +0800 Subject: [PATCH 1/6] Add failed test --- tests/lib/rules/require-meta-schema.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/lib/rules/require-meta-schema.js b/tests/lib/rules/require-meta-schema.js index db79efba..91b3d78c 100644 --- a/tests/lib/rules/require-meta-schema.js +++ b/tests/lib/rules/require-meta-schema.js @@ -32,6 +32,13 @@ ruleTester.run('require-meta-schema', rule, { create(context) {} }; `, + ` + const schema = []; + module.exports = { + meta: { schema }, + create(context) {} + }; + `, ], invalid: [ From e34140cb11e2649095f80c7d0630b19069947ff1 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 Apr 2021 17:15:17 +0800 Subject: [PATCH 2/6] Fix test --- lib/rules/require-meta-schema.js | 27 ++++++++++++++++++++++++-- package.json | 4 +++- tests/lib/rules/require-meta-schema.js | 26 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/rules/require-meta-schema.js b/lib/rules/require-meta-schema.js index 01510520..83ed2f13 100644 --- a/lib/rules/require-meta-schema.js +++ b/lib/rules/require-meta-schema.js @@ -1,5 +1,6 @@ 'use strict'; +const { findVariable } = require('eslint-utils'); const utils = require('../utils'); // ------------------------------------------------------------------------------ @@ -34,7 +35,8 @@ module.exports = { create (context) { const sourceCode = context.getSourceCode(); - const info = utils.getRuleInfo(sourceCode.ast, sourceCode.scopeManager); + const { ast, scopeManager } = sourceCode; + const info = utils.getRuleInfo(ast, scopeManager); return { Program () { @@ -56,7 +58,28 @@ module.exports = { return utils.insertProperty(fixer, metaNode, 'schema: []', sourceCode); }, }); - } else if (!['ArrayExpression', 'ObjectExpression'].includes(schemaNode.value.type)) { + return; + } + let { value } = schemaNode; + if (value.type === 'Identifier') { + const variable = findVariable(scopeManager.acquire(value) || scopeManager.globalScope, value); + + // If we can't find the declarator, we have to assume it's in correct type + if ( + !variable || + !variable.defs || + !variable.defs[0] || + !variable.defs[0].node || + variable.defs[0].node.type !== 'VariableDeclarator' || + !variable.defs[0].node.init + ) { + return; + } + + value = variable.defs[0].node.init; + } + + if (!['ArrayExpression', 'ObjectExpression'].includes(value.type)) { context.report({ node: schemaNode.value, messageId: 'wrongType' }); } }, diff --git a/package.json b/package.json index 4eb7dda3..4e5bb07c 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,9 @@ "url": "https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/issues" }, "homepage": "https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin#readme", - "dependencies": {}, + "dependencies": { + "eslint-utils": "2.1.0" + }, "devDependencies": { "@not-an-aardvark/node-release-script": "^0.1.0", "chai": "^4.1.0", diff --git a/tests/lib/rules/require-meta-schema.js b/tests/lib/rules/require-meta-schema.js index 91b3d78c..2ce4fe12 100644 --- a/tests/lib/rules/require-meta-schema.js +++ b/tests/lib/rules/require-meta-schema.js @@ -39,6 +39,21 @@ ruleTester.run('require-meta-schema', rule, { create(context) {} }; `, + ` + const foo = {}; + module.exports = { + meta: { schema: foo }, + create(context) {} + }; + `, + ` + let schema; + schema = foo ? [] : {}; + module.exports = { + meta: { schema }, + create(context) {} + }; + `, ], invalid: [ @@ -85,5 +100,16 @@ schema: [] }, output: null, errors: [{ messageId: 'wrongType', type: 'Literal' }], }, + { + code: ` + const schema = null; + module.exports = { + meta: { schema }, + create(context) {} + }; + `, + output: null, + errors: [{ messageId: 'wrongType', type: 'Identifier' }], + }, ], }); From 007fe43ed51856076fee8c6fb04702db86da9676 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 Apr 2021 17:18:49 +0800 Subject: [PATCH 3/6] Style --- lib/rules/require-meta-schema.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/rules/require-meta-schema.js b/lib/rules/require-meta-schema.js index 83ed2f13..f46b0392 100644 --- a/lib/rules/require-meta-schema.js +++ b/lib/rules/require-meta-schema.js @@ -60,9 +60,13 @@ module.exports = { }); return; } + let { value } = schemaNode; if (value.type === 'Identifier') { - const variable = findVariable(scopeManager.acquire(value) || scopeManager.globalScope, value); + const variable = findVariable( + scopeManager.acquire(value) || scopeManager.globalScope, + value + ); // If we can't find the declarator, we have to assume it's in correct type if ( @@ -80,7 +84,7 @@ module.exports = { } if (!['ArrayExpression', 'ObjectExpression'].includes(value.type)) { - context.report({ node: schemaNode.value, messageId: 'wrongType' }); + context.report({ node: value, messageId: 'wrongType' }); } }, }; From 732b494596544429675569aec692d9d6f610bf66 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 Apr 2021 17:21:06 +0800 Subject: [PATCH 4/6] Fix --- tests/lib/rules/require-meta-schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/rules/require-meta-schema.js b/tests/lib/rules/require-meta-schema.js index 2ce4fe12..40b0e551 100644 --- a/tests/lib/rules/require-meta-schema.js +++ b/tests/lib/rules/require-meta-schema.js @@ -109,7 +109,7 @@ schema: [] }, }; `, output: null, - errors: [{ messageId: 'wrongType', type: 'Identifier' }], + errors: [{ messageId: 'wrongType', type: 'Literal' }], }, ], }); From 03f3d27d26fa0250c9ab8d2ec2466e6477133561 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 Apr 2021 17:22:25 +0800 Subject: [PATCH 5/6] One more test --- tests/lib/rules/require-meta-schema.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/lib/rules/require-meta-schema.js b/tests/lib/rules/require-meta-schema.js index 40b0e551..25621162 100644 --- a/tests/lib/rules/require-meta-schema.js +++ b/tests/lib/rules/require-meta-schema.js @@ -54,6 +54,14 @@ ruleTester.run('require-meta-schema', rule, { create(context) {} }; `, + ` + const schema = [], + created = (context) => {}; + module.exports = { + meta: { schema }, + create + }; + `, ], invalid: [ From dae8d4358682d882e6269041c8a7e8ccd5c2365c Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 Apr 2021 17:23:49 +0800 Subject: [PATCH 6/6] Unpin version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e5bb07c..a95bb19f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin#readme", "dependencies": { - "eslint-utils": "2.1.0" + "eslint-utils": "^2.1.0" }, "devDependencies": { "@not-an-aardvark/node-release-script": "^0.1.0",