From 139da38b8bcac5aa8ce97fb0c36196dd8691eb3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:42:27 +0000 Subject: [PATCH 1/2] build(deps-dev): bump eslint-plugin-unicorn from 40.1.0 to 43.0.2 Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 40.1.0 to 43.0.2. - [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases) - [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v40.1.0...v43.0.2) --- updated-dependencies: - dependency-name: eslint-plugin-unicorn dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 795d5b69..11a2102b 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "eslint-plugin-markdown": "^3.0.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-unicorn": "^40.1.0", + "eslint-plugin-unicorn": "^43.0.2", "eslint-scope": "^7.1.1", "espree": "^9.4.0", "husky": "^8.0.1", From 73e8645fb47c33cfa2c2c55cf52772c3c4198447 Mon Sep 17 00:00:00 2001 From: Bryan Mishkin <698306+bmish@users.noreply.github.com> Date: Mon, 12 Sep 2022 12:55:28 -0400 Subject: [PATCH 2/2] chore: autofix eslint-plugin-unicorn lint violations --- build/generate-readme-table.js | 4 +- lib/index.js | 5 +- lib/rules/require-meta-docs-url.js | 2 +- lib/utils.js | 226 +++++++++++++-------------- tests/build/generate-readme-table.js | 4 +- tests/lib/rule-setup.js | 4 +- tests/lib/utils.js | 2 +- 7 files changed, 120 insertions(+), 127 deletions(-) diff --git a/build/generate-readme-table.js b/build/generate-readme-table.js index 2c390037..e4e126e5 100644 --- a/build/generate-readme-table.js +++ b/build/generate-readme-table.js @@ -1,7 +1,7 @@ 'use strict'; -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const rules = require('..').rules; const README_LOCATION = path.resolve(__dirname, '..', 'README.md'); diff --git a/lib/index.js b/lib/index.js index e0a81cee..6f74218b 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,8 +9,8 @@ // Requirements // ------------------------------------------------------------------------------ -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const packageMetadata = require('../package'); const PLUGIN_NAME = packageMetadata.name.replace(/^eslint-plugin-/, ''); @@ -43,7 +43,6 @@ const allRules = Object.fromEntries( module.exports.rules = allRules; -// eslint-disable-next-line unicorn/prefer-object-from-entries -- this is fine for now module.exports.configs = Object.keys(configFilters).reduce( (configs, configName) => { return Object.assign(configs, { diff --git a/lib/rules/require-meta-docs-url.js b/lib/rules/require-meta-docs-url.js index 4ef85063..11115013 100644 --- a/lib/rules/require-meta-docs-url.js +++ b/lib/rules/require-meta-docs-url.js @@ -8,7 +8,7 @@ // Requirements // ----------------------------------------------------------------------------- -const path = require('path'); +const path = require('node:path'); const util = require('../utils'); const { getStaticValue } = require('eslint-utils'); diff --git a/lib/utils.js b/lib/utils.js index 3129903d..19f6b7fd 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -41,7 +41,6 @@ const INTERESTING_RULE_KEYS = new Set(['create', 'meta']); * @returns Object */ function collectInterestingProperties(properties, interestingKeys) { - // eslint-disable-next-line unicorn/prefer-object-from-entries -- this is fine for now return properties.reduce((parsedProps, prop) => { const keyValue = module.exports.getKeyName(prop); if (interestingKeys.has(keyValue)) { @@ -119,136 +118,132 @@ function isTypeScriptRuleHelper(node) { * Helper for `getRuleInfo`. Handles ESM and TypeScript rules. */ function getRuleExportsESM(ast, scopeManager) { - return ( - ast.body - .filter((statement) => - [ - 'ExportDefaultDeclaration', // export default rule; - 'TSExportAssignment', // export = rule; - ].includes(statement.type) - ) - .map((statement) => statement.declaration || statement.expression) - // eslint-disable-next-line unicorn/prefer-object-from-entries -- this is fine for now - .reduce((currentExports, node) => { - if (node.type === 'ObjectExpression') { - // Check `export default { create() {}, meta: {} }` - return collectInterestingProperties( - node.properties, - INTERESTING_RULE_KEYS - ); - } else if (isFunctionRule(node)) { - // Check `export default function(context) { return { ... }; }` - return { create: node, meta: null, isNewStyle: false }; - } else if (isTypeScriptRuleHelper(node)) { - // Check `export default someTypeScriptHelper({ create() {}, meta: {} }); + return ast.body + .filter((statement) => + [ + 'ExportDefaultDeclaration', // export default rule; + 'TSExportAssignment', // export = rule; + ].includes(statement.type) + ) + .map((statement) => statement.declaration || statement.expression) + + .reduce((currentExports, node) => { + if (node.type === 'ObjectExpression') { + // Check `export default { create() {}, meta: {} }` + return collectInterestingProperties( + node.properties, + INTERESTING_RULE_KEYS + ); + } else if (isFunctionRule(node)) { + // Check `export default function(context) { return { ... }; }` + return { create: node, meta: null, isNewStyle: false }; + } else if (isTypeScriptRuleHelper(node)) { + // Check `export default someTypeScriptHelper({ create() {}, meta: {} }); + return collectInterestingProperties( + node.arguments[0].properties, + INTERESTING_RULE_KEYS + ); + } else if (node.type === 'Identifier') { + // Rule could be stored in a variable before being exported. + const possibleRule = findVariableValue(node, scopeManager); + if (possibleRule) { + if (possibleRule.type === 'ObjectExpression') { + // Check `const possibleRule = { ... }; export default possibleRule; + return collectInterestingProperties( + possibleRule.properties, + INTERESTING_RULE_KEYS + ); + } else if (isFunctionRule(possibleRule)) { + // Check `const possibleRule = function(context) { return { ... } }; export default possibleRule;` + return { create: possibleRule, meta: null, isNewStyle: false }; + } else if (isTypeScriptRuleHelper(possibleRule)) { + // Check `const possibleRule = someTypeScriptHelper({ ... }); export default possibleRule; + return collectInterestingProperties( + possibleRule.arguments[0].properties, + INTERESTING_RULE_KEYS + ); + } + } + } + return currentExports; + }, {}); +} + +/** + * Helper for `getRuleInfo`. Handles CJS rules. + */ +function getRuleExportsCJS(ast, scopeManager) { + let exportsVarOverridden = false; + let exportsIsFunction = false; + return ast.body + .filter((statement) => statement.type === 'ExpressionStatement') + .map((statement) => statement.expression) + .filter((expression) => expression.type === 'AssignmentExpression') + .filter((expression) => expression.left.type === 'MemberExpression') + + .reduce((currentExports, node) => { + if ( + node.left.object.type === 'Identifier' && + node.left.object.name === 'module' && + node.left.property.type === 'Identifier' && + node.left.property.name === 'exports' + ) { + exportsVarOverridden = true; + if (isFunctionRule(node.right)) { + // Check `module.exports = function (context) { return { ... }; }` + + exportsIsFunction = true; + return { create: node.right, meta: null, isNewStyle: false }; + } else if (node.right.type === 'ObjectExpression') { + // Check `module.exports = { create: function () {}, meta: {} }` + return collectInterestingProperties( - node.arguments[0].properties, + node.right.properties, INTERESTING_RULE_KEYS ); - } else if (node.type === 'Identifier') { + } else if (node.right.type === 'Identifier') { // Rule could be stored in a variable before being exported. - const possibleRule = findVariableValue(node, scopeManager); + const possibleRule = findVariableValue(node.right, scopeManager); if (possibleRule) { if (possibleRule.type === 'ObjectExpression') { - // Check `const possibleRule = { ... }; export default possibleRule; + // Check `const possibleRule = { ... }; module.exports = possibleRule; return collectInterestingProperties( possibleRule.properties, INTERESTING_RULE_KEYS ); } else if (isFunctionRule(possibleRule)) { - // Check `const possibleRule = function(context) { return { ... } }; export default possibleRule;` + // Check `const possibleRule = function(context) { return { ... } }; module.exports = possibleRule;` return { create: possibleRule, meta: null, isNewStyle: false }; - } else if (isTypeScriptRuleHelper(possibleRule)) { - // Check `const possibleRule = someTypeScriptHelper({ ... }); export default possibleRule; - return collectInterestingProperties( - possibleRule.arguments[0].properties, - INTERESTING_RULE_KEYS - ); } } } - return currentExports; - }, {}) - ); -} - -/** - * Helper for `getRuleInfo`. Handles CJS rules. - */ -function getRuleExportsCJS(ast, scopeManager) { - let exportsVarOverridden = false; - let exportsIsFunction = false; - return ( - ast.body - .filter((statement) => statement.type === 'ExpressionStatement') - .map((statement) => statement.expression) - .filter((expression) => expression.type === 'AssignmentExpression') - .filter((expression) => expression.left.type === 'MemberExpression') - // eslint-disable-next-line unicorn/prefer-object-from-entries -- this is fine for now - .reduce((currentExports, node) => { - if ( - node.left.object.type === 'Identifier' && - node.left.object.name === 'module' && - node.left.property.type === 'Identifier' && - node.left.property.name === 'exports' - ) { - exportsVarOverridden = true; - if (isFunctionRule(node.right)) { - // Check `module.exports = function (context) { return { ... }; }` - - exportsIsFunction = true; - return { create: node.right, meta: null, isNewStyle: false }; - } else if (node.right.type === 'ObjectExpression') { - // Check `module.exports = { create: function () {}, meta: {} }` + return {}; + } else if ( + !exportsIsFunction && + node.left.object.type === 'MemberExpression' && + node.left.object.object.type === 'Identifier' && + node.left.object.object.name === 'module' && + node.left.object.property.type === 'Identifier' && + node.left.object.property.name === 'exports' && + node.left.property.type === 'Identifier' && + INTERESTING_RULE_KEYS.has(node.left.property.name) + ) { + // Check `module.exports.create = () => {}` + + currentExports[node.left.property.name] = node.right; + } else if ( + !exportsVarOverridden && + node.left.object.type === 'Identifier' && + node.left.object.name === 'exports' && + node.left.property.type === 'Identifier' && + INTERESTING_RULE_KEYS.has(node.left.property.name) + ) { + // Check `exports.create = () => {}` - return collectInterestingProperties( - node.right.properties, - INTERESTING_RULE_KEYS - ); - } else if (node.right.type === 'Identifier') { - // Rule could be stored in a variable before being exported. - const possibleRule = findVariableValue(node.right, scopeManager); - if (possibleRule) { - if (possibleRule.type === 'ObjectExpression') { - // Check `const possibleRule = { ... }; module.exports = possibleRule; - return collectInterestingProperties( - possibleRule.properties, - INTERESTING_RULE_KEYS - ); - } else if (isFunctionRule(possibleRule)) { - // Check `const possibleRule = function(context) { return { ... } }; module.exports = possibleRule;` - return { create: possibleRule, meta: null, isNewStyle: false }; - } - } - } - return {}; - } else if ( - !exportsIsFunction && - node.left.object.type === 'MemberExpression' && - node.left.object.object.type === 'Identifier' && - node.left.object.object.name === 'module' && - node.left.object.property.type === 'Identifier' && - node.left.object.property.name === 'exports' && - node.left.property.type === 'Identifier' && - INTERESTING_RULE_KEYS.has(node.left.property.name) - ) { - // Check `module.exports.create = () => {}` - - currentExports[node.left.property.name] = node.right; - } else if ( - !exportsVarOverridden && - node.left.object.type === 'Identifier' && - node.left.object.name === 'exports' && - node.left.property.type === 'Identifier' && - INTERESTING_RULE_KEYS.has(node.left.property.name) - ) { - // Check `exports.create = () => {}` - - currentExports[node.left.property.name] = node.right; - } - return currentExports; - }, {}) - ); + currentExports[node.left.property.name] = node.right; + } + return currentExports; + }, {}); } /** @@ -600,7 +595,6 @@ module.exports = { if (reportArgs.length === 1) { if (reportArgs[0].type === 'ObjectExpression') { - // eslint-disable-next-line unicorn/prefer-object-from-entries -- this is fine for now return reportArgs[0].properties.reduce((reportInfo, property) => { const propName = module.exports.getKeyName(property); diff --git a/tests/build/generate-readme-table.js b/tests/build/generate-readme-table.js index ea09cfe7..5211921a 100644 --- a/tests/build/generate-readme-table.js +++ b/tests/build/generate-readme-table.js @@ -1,7 +1,7 @@ 'use strict'; -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const assert = require('chai').assert; describe('table in README.md', () => { diff --git a/tests/lib/rule-setup.js b/tests/lib/rule-setup.js index f0d2d2ee..8a08c67d 100644 --- a/tests/lib/rule-setup.js +++ b/tests/lib/rule-setup.js @@ -1,7 +1,7 @@ 'use strict'; -const { readdirSync, readFileSync } = require('fs'); -const path = require('path'); +const { readdirSync, readFileSync } = require('node:fs'); +const path = require('node:path'); const assert = require('chai').assert; const plugin = require('../..'); diff --git a/tests/lib/utils.js b/tests/lib/utils.js index ebebacca..5b7afd54 100644 --- a/tests/lib/utils.js +++ b/tests/lib/utils.js @@ -1,6 +1,6 @@ 'use strict'; -const { inspect } = require('util'); +const { inspect } = require('node:util'); const lodash = require('lodash'); const espree = require('espree'); const eslintScope = require('eslint-scope');