You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.1 KiB
145 lines
4.1 KiB
/** |
|
* @fileoverview `ExtractedConfig` class. |
|
* |
|
* `ExtractedConfig` class expresses a final configuration for a specific file. |
|
* |
|
* It provides one method. |
|
* |
|
* - `toCompatibleObjectAsConfigFileContent()` |
|
* Convert this configuration to the compatible object as the content of |
|
* config files. It converts the loaded parser and plugins to strings. |
|
* `CLIEngine#getConfigForFile(filePath)` method uses this method. |
|
* |
|
* `ConfigArray#extractConfig(filePath)` creates a `ExtractedConfig` instance. |
|
* |
|
* @author Toru Nagashima <https://github.com/mysticatea> |
|
*/ |
|
|
|
import { IgnorePattern } from "./ignore-pattern.js"; |
|
|
|
// For VSCode intellisense |
|
/** @typedef {import("../../shared/types").ConfigData} ConfigData */ |
|
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */ |
|
/** @typedef {import("../../shared/types").SeverityConf} SeverityConf */ |
|
/** @typedef {import("./config-dependency").DependentParser} DependentParser */ |
|
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */ |
|
|
|
/** |
|
* Check if `xs` starts with `ys`. |
|
* @template T |
|
* @param {T[]} xs The array to check. |
|
* @param {T[]} ys The array that may be the first part of `xs`. |
|
* @returns {boolean} `true` if `xs` starts with `ys`. |
|
*/ |
|
function startsWith(xs, ys) { |
|
return xs.length >= ys.length && ys.every((y, i) => y === xs[i]); |
|
} |
|
|
|
/** |
|
* The class for extracted config data. |
|
*/ |
|
class ExtractedConfig { |
|
constructor() { |
|
|
|
/** |
|
* The config name what `noInlineConfig` setting came from. |
|
* @type {string} |
|
*/ |
|
this.configNameOfNoInlineConfig = ""; |
|
|
|
/** |
|
* Environments. |
|
* @type {Record<string, boolean>} |
|
*/ |
|
this.env = {}; |
|
|
|
/** |
|
* Global variables. |
|
* @type {Record<string, GlobalConf>} |
|
*/ |
|
this.globals = {}; |
|
|
|
/** |
|
* The glob patterns that ignore to lint. |
|
* @type {(((filePath:string, dot?:boolean) => boolean) & { basePath:string; patterns:string[] }) | undefined} |
|
*/ |
|
this.ignores = void 0; |
|
|
|
/** |
|
* The flag that disables directive comments. |
|
* @type {boolean|undefined} |
|
*/ |
|
this.noInlineConfig = void 0; |
|
|
|
/** |
|
* Parser definition. |
|
* @type {DependentParser|null} |
|
*/ |
|
this.parser = null; |
|
|
|
/** |
|
* Options for the parser. |
|
* @type {Object} |
|
*/ |
|
this.parserOptions = {}; |
|
|
|
/** |
|
* Plugin definitions. |
|
* @type {Record<string, DependentPlugin>} |
|
*/ |
|
this.plugins = {}; |
|
|
|
/** |
|
* Processor ID. |
|
* @type {string|null} |
|
*/ |
|
this.processor = null; |
|
|
|
/** |
|
* The flag that reports unused `eslint-disable` directive comments. |
|
* @type {boolean|undefined} |
|
*/ |
|
this.reportUnusedDisableDirectives = void 0; |
|
|
|
/** |
|
* Rule settings. |
|
* @type {Record<string, [SeverityConf, ...any[]]>} |
|
*/ |
|
this.rules = {}; |
|
|
|
/** |
|
* Shared settings. |
|
* @type {Object} |
|
*/ |
|
this.settings = {}; |
|
} |
|
|
|
/** |
|
* Convert this config to the compatible object as a config file content. |
|
* @returns {ConfigData} The converted object. |
|
*/ |
|
toCompatibleObjectAsConfigFileContent() { |
|
const { |
|
/* eslint-disable no-unused-vars */ |
|
configNameOfNoInlineConfig: _ignore1, |
|
processor: _ignore2, |
|
/* eslint-enable no-unused-vars */ |
|
ignores, |
|
...config |
|
} = this; |
|
|
|
config.parser = config.parser && config.parser.filePath; |
|
config.plugins = Object.keys(config.plugins).filter(Boolean).reverse(); |
|
config.ignorePatterns = ignores ? ignores.patterns : []; |
|
|
|
// Strip the default patterns from `ignorePatterns`. |
|
if (startsWith(config.ignorePatterns, IgnorePattern.DefaultPatterns)) { |
|
config.ignorePatterns = |
|
config.ignorePatterns.slice(IgnorePattern.DefaultPatterns.length); |
|
} |
|
|
|
return config; |
|
} |
|
} |
|
|
|
export { ExtractedConfig };
|
|
|