summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/cli-engine/config-array-factory.js')
-rw-r--r--tools/node_modules/eslint/lib/cli-engine/config-array-factory.js114
1 files changed, 113 insertions, 1 deletions
diff --git a/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js b/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js
index cf529b6ee6..c444031bcb 100644
--- a/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js
+++ b/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js
@@ -17,6 +17,12 @@
* Create a `ConfigArray` instance from a config file which is on a given
* directory. This tries to load `.eslintrc.*` or `package.json`. If not
* found, returns an empty `ConfigArray`.
+ * - `loadESLintIgnore(filePath)`
+ * Create a `ConfigArray` instance from a config file that is `.eslintignore`
+ * format. This is to handle `--ignore-path` option.
+ * - `loadDefaultESLintIgnore()`
+ * Create a `ConfigArray` instance from `.eslintignore` or `package.json` in
+ * the current working directory.
*
* `ConfigArrayFactory` class has the responsibility that loads configuration
* files, including loading `extends`, `parser`, and `plugins`. The created
@@ -40,7 +46,12 @@ const stripComments = require("strip-json-comments");
const { validateConfigSchema } = require("../shared/config-validator");
const naming = require("../shared/naming");
const ModuleResolver = require("../shared/relative-module-resolver");
-const { ConfigArray, ConfigDependency, OverrideTester } = require("./config-array");
+const {
+ ConfigArray,
+ ConfigDependency,
+ IgnorePattern,
+ OverrideTester
+} = require("./config-array");
const debug = require("debug")("eslint:config-array-factory");
//------------------------------------------------------------------------------
@@ -222,6 +233,26 @@ function loadPackageJSONConfigFile(filePath) {
}
/**
+ * Loads a `.eslintignore` from a file.
+ * @param {string} filePath The filename to load.
+ * @returns {string[]} The ignore patterns from the file.
+ * @private
+ */
+function loadESLintIgnoreFile(filePath) {
+ debug(`Loading .eslintignore file: ${filePath}`);
+
+ try {
+ return readFile(filePath)
+ .split(/\r?\n/gu)
+ .filter(line => line.trim() !== "" && !line.startsWith("#"));
+ } catch (e) {
+ debug(`Error reading .eslintignore file: ${filePath}`);
+ e.message = `Cannot read .eslintignore file: ${filePath}\nError: ${e.message}`;
+ throw e;
+ }
+}
+
+/**
* Creates an error to notify about a missing config to extend from.
* @param {string} configName The name of the missing config.
* @param {string} importerName The name of the config that imported the missing config
@@ -404,6 +435,54 @@ class ConfigArrayFactory {
}
/**
+ * Load `.eslintignore` file.
+ * @param {string} filePath The path to a `.eslintignore` file to load.
+ * @returns {ConfigArray} Loaded config. An empty `ConfigArray` if any config doesn't exist.
+ */
+ loadESLintIgnore(filePath) {
+ const { cwd } = internalSlotsMap.get(this);
+ const absolutePath = path.resolve(cwd, filePath);
+ const name = path.relative(cwd, absolutePath);
+ const ignorePatterns = loadESLintIgnoreFile(absolutePath);
+
+ return createConfigArray(
+ this._normalizeESLintIgnoreData(ignorePatterns, absolutePath, name)
+ );
+ }
+
+ /**
+ * Load `.eslintignore` file in the current working directory.
+ * @returns {ConfigArray} Loaded config. An empty `ConfigArray` if any config doesn't exist.
+ */
+ loadDefaultESLintIgnore() {
+ const { cwd } = internalSlotsMap.get(this);
+ const eslintIgnorePath = path.resolve(cwd, ".eslintignore");
+ const packageJsonPath = path.resolve(cwd, "package.json");
+
+ if (fs.existsSync(eslintIgnorePath)) {
+ return this.loadESLintIgnore(eslintIgnorePath);
+ }
+ if (fs.existsSync(packageJsonPath)) {
+ const data = loadJSONConfigFile(packageJsonPath);
+
+ if (Object.hasOwnProperty.call(data, "eslintIgnore")) {
+ if (!Array.isArray(data.eslintIgnore)) {
+ throw new Error("Package.json eslintIgnore property requires an array of paths");
+ }
+ return createConfigArray(
+ this._normalizeESLintIgnoreData(
+ data.eslintIgnore,
+ packageJsonPath,
+ "eslintIgnore in package.json"
+ )
+ );
+ }
+ }
+
+ return new ConfigArray();
+ }
+
+ /**
* Load a given config file.
* @param {string} filePath The path to a config file.
* @param {string} name The config name.
@@ -452,6 +531,30 @@ class ConfigArrayFactory {
}
/**
+ * Normalize a given `.eslintignore` data to config array elements.
+ * @param {string[]} ignorePatterns The patterns to ignore files.
+ * @param {string|undefined} filePath The file path of this config.
+ * @param {string|undefined} name The name of this config.
+ * @returns {IterableIterator<ConfigArrayElement>} The normalized config.
+ * @private
+ */
+ *_normalizeESLintIgnoreData(ignorePatterns, filePath, name) {
+ const elements = this._normalizeObjectConfigData(
+ { ignorePatterns },
+ filePath,
+ name
+ );
+
+ // Set `ignorePattern.loose` flag for backward compatibility.
+ for (const element of elements) {
+ if (element.ignorePattern) {
+ element.ignorePattern.loose = true;
+ }
+ yield element;
+ }
+ }
+
+ /**
* Normalize a given config to an array.
* @param {ConfigData} configData The config data to normalize.
* @param {string|undefined} providedFilePath The file path of this config.
@@ -494,6 +597,9 @@ class ConfigArrayFactory {
if (element.criteria) {
element.criteria.basePath = basePath;
}
+ if (element.ignorePattern) {
+ element.ignorePattern.basePath = basePath;
+ }
/*
* Merge the criteria; this is for only file extension processors in
@@ -526,6 +632,7 @@ class ConfigArrayFactory {
env,
extends: extend,
globals,
+ ignorePatterns,
noInlineConfig,
parser: parserName,
parserOptions,
@@ -541,6 +648,10 @@ class ConfigArrayFactory {
name
) {
const extendList = Array.isArray(extend) ? extend : [extend];
+ const ignorePattern = ignorePatterns && new IgnorePattern(
+ Array.isArray(ignorePatterns) ? ignorePatterns : [ignorePatterns],
+ filePath ? path.dirname(filePath) : internalSlotsMap.get(this).cwd
+ );
// Flatten `extends`.
for (const extendName of extendList.filter(Boolean)) {
@@ -569,6 +680,7 @@ class ConfigArrayFactory {
criteria: null,
env,
globals,
+ ignorePattern,
noInlineConfig,
parser,
parserOptions,