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.
|
|
/** * @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>
*/ "use strict";
const { IgnorePattern } = require("./ignore-pattern");
// 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; } }
module.exports = { ExtractedConfig };
|