diff --git a/.eslintrc.js b/.eslintrc.js index 6ab4510cb37c..1aab4a114103 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,14 +1,41 @@ "use strict"; -const internalFiles = [ - "**/cli-engine/**/*", - "**/init/**/*", - "**/linter/**/*", - "**/rule-tester/**/*", - "**/rules/**/*", - "**/source-code/**/*" +const path = require("path"); + +const INTERNAL_FILES = [ + "lib/cli-engine/**/*", + "lib/init/**/*", + "lib/linter/**/*", + "lib/rule-tester/**/*", + "lib/rules/**/*", + "lib/source-code/**/*" ]; +/** + * Resolve an absolute path or glob pattern. + * @param {string} pathOrPattern the path or glob pattern. + * @returns {string} The resolved path or glob pattern. + */ +function resolveAbsPath(pathOrPattern) { + return path.resolve(__dirname, pathOrPattern); +} + +/** + * Create an array of `no-restricted-require` entries for ESLint's core files. + * @param {string} [pattern] The glob pattern to create the entries for. + * @returns {Object[]} The array of `no-restricted-require` entries. + */ +function createInternalFilesPatterns(pattern = null) { + return INTERNAL_FILES + .filter(p => p !== pattern) + .map(p => ({ + name: [ + resolveAbsPath(p), + `!${resolveAbsPath(p.replace(/\*\*\/\*$/u, "index.js"))}` + ] + })); +} + module.exports = { root: true, plugins: [ @@ -84,106 +111,68 @@ module.exports = { { files: ["lib/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns() + ]] } }, { files: ["lib/cli-engine/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "**/init" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/cli-engine/**/*") + ]] } }, { files: ["lib/init/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "**/rule-tester" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/init/**/*") + ]] } }, { files: ["lib/linter/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "fs", - "**/cli-engine", - "**/init", - "**/rule-tester" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/linter/**/*"), + "fs" + ]] } }, { files: ["lib/rules/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "fs", - "**/cli-engine", - "**/init", - "**/linter", - "**/rule-tester", - "**/source-code" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/rules/**/*"), + "fs" + ]] } }, { files: ["lib/shared/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "**/cli-engine", - "**/init", - "**/linter", - "**/rule-tester", - "**/source-code" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/shared/**/*") + ]] } }, { files: ["lib/source-code/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "fs", - "**/cli-engine", - "**/init", - "**/linter", - "**/rule-tester", - "**/rules" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/source-code/**/*"), + "fs" + ]] } }, { files: ["lib/rule-tester/**/*"], rules: { - "no-restricted-modules": ["error", { - patterns: [ - ...internalFiles, - "**/cli-engine", - "**/init" - ] - }] + "node/no-restricted-require": ["error", [ + ...createInternalFilesPatterns("lib/rule-tester/**/*") + ]] } } ] diff --git a/lib/init/source-code-utils.js b/lib/init/source-code-utils.js index c95f64f69d3c..dca6541d1ed3 100644 --- a/lib/init/source-code-utils.js +++ b/lib/init/source-code-utils.js @@ -23,7 +23,7 @@ const { CLIEngine } = require("../cli-engine"); * TODO1: Expose the API that enumerates target files. * TODO2: Extract the creation logic of `SourceCode` from `Linter` class. */ -const { getCLIEngineInternalSlots } = require("../cli-engine/cli-engine"); // eslint-disable-line no-restricted-modules +const { getCLIEngineInternalSlots } = require("../cli-engine/cli-engine"); // eslint-disable-line node/no-restricted-require const debug = require("debug")("eslint:source-code-utils");