399 lines
14 KiB
JavaScript
399 lines
14 KiB
JavaScript
|
/**
|
||
|
* @fileoverview Options configuration for optionator.
|
||
|
* @author George Zahariev
|
||
|
*/
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Requirements
|
||
|
//------------------------------------------------------------------------------
|
||
|
|
||
|
const optionator = require("optionator");
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Typedefs
|
||
|
//------------------------------------------------------------------------------
|
||
|
|
||
|
/**
|
||
|
* The options object parsed by Optionator.
|
||
|
* @typedef {Object} ParsedCLIOptions
|
||
|
* @property {boolean} cache Only check changed files
|
||
|
* @property {string} cacheFile Path to the cache file. Deprecated: use --cache-location
|
||
|
* @property {string} [cacheLocation] Path to the cache file or directory
|
||
|
* @property {"metadata" | "content"} cacheStrategy Strategy to use for detecting changed files in the cache
|
||
|
* @property {boolean} [color] Force enabling/disabling of color
|
||
|
* @property {string} [config] Use this configuration, overriding .eslintrc.* config options if present
|
||
|
* @property {boolean} debug Output debugging information
|
||
|
* @property {string[]} [env] Specify environments
|
||
|
* @property {boolean} envInfo Output execution environment information
|
||
|
* @property {boolean} errorOnUnmatchedPattern Prevent errors when pattern is unmatched
|
||
|
* @property {boolean} eslintrc Disable use of configuration from .eslintrc.*
|
||
|
* @property {string[]} [ext] Specify JavaScript file extensions
|
||
|
* @property {boolean} fix Automatically fix problems
|
||
|
* @property {boolean} fixDryRun Automatically fix problems without saving the changes to the file system
|
||
|
* @property {("directive" | "problem" | "suggestion" | "layout")[]} [fixType] Specify the types of fixes to apply (directive, problem, suggestion, layout)
|
||
|
* @property {string} format Use a specific output format
|
||
|
* @property {string[]} [global] Define global variables
|
||
|
* @property {boolean} [help] Show help
|
||
|
* @property {boolean} ignore Disable use of ignore files and patterns
|
||
|
* @property {string} [ignorePath] Specify path of ignore file
|
||
|
* @property {string[]} [ignorePattern] Pattern of files to ignore (in addition to those in .eslintignore)
|
||
|
* @property {boolean} init Run config initialization wizard
|
||
|
* @property {boolean} inlineConfig Prevent comments from changing config or rules
|
||
|
* @property {number} maxWarnings Number of warnings to trigger nonzero exit code
|
||
|
* @property {string} [outputFile] Specify file to write report to
|
||
|
* @property {string} [parser] Specify the parser to be used
|
||
|
* @property {Object} [parserOptions] Specify parser options
|
||
|
* @property {string[]} [plugin] Specify plugins
|
||
|
* @property {string} [printConfig] Print the configuration for the given file
|
||
|
* @property {boolean | undefined} reportUnusedDisableDirectives Adds reported errors for unused eslint-disable and eslint-enable directives
|
||
|
* @property {string | undefined} reportUnusedDisableDirectivesSeverity A severity string indicating if and how unused disable and enable directives should be tracked and reported.
|
||
|
* @property {string} [resolvePluginsRelativeTo] A folder where plugins should be resolved from, CWD by default
|
||
|
* @property {Object} [rule] Specify rules
|
||
|
* @property {string[]} [rulesdir] Load additional rules from this directory. Deprecated: Use rules from plugins
|
||
|
* @property {boolean} stdin Lint code provided on <STDIN>
|
||
|
* @property {string} [stdinFilename] Specify filename to process STDIN as
|
||
|
* @property {boolean} quiet Report errors only
|
||
|
* @property {boolean} [version] Output the version number
|
||
|
* @property {boolean} warnIgnored Show warnings when the file list includes ignored files
|
||
|
* @property {string[]} _ Positional filenames or patterns
|
||
|
*/
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Initialization and Public Interface
|
||
|
//------------------------------------------------------------------------------
|
||
|
|
||
|
// exports "parse(args)", "generateHelp()", and "generateHelpForOption(optionName)"
|
||
|
|
||
|
/**
|
||
|
* Creates the CLI options for ESLint.
|
||
|
* @param {boolean} usingFlatConfig Indicates if flat config is being used.
|
||
|
* @returns {Object} The optionator instance.
|
||
|
*/
|
||
|
module.exports = function(usingFlatConfig) {
|
||
|
|
||
|
let lookupFlag;
|
||
|
|
||
|
if (usingFlatConfig) {
|
||
|
lookupFlag = {
|
||
|
option: "config-lookup",
|
||
|
type: "Boolean",
|
||
|
default: "true",
|
||
|
description: "Disable look up for eslint.config.js"
|
||
|
};
|
||
|
} else {
|
||
|
lookupFlag = {
|
||
|
option: "eslintrc",
|
||
|
type: "Boolean",
|
||
|
default: "true",
|
||
|
description: "Disable use of configuration from .eslintrc.*"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
let envFlag;
|
||
|
|
||
|
if (!usingFlatConfig) {
|
||
|
envFlag = {
|
||
|
option: "env",
|
||
|
type: "[String]",
|
||
|
description: "Specify environments"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
let extFlag;
|
||
|
|
||
|
if (!usingFlatConfig) {
|
||
|
extFlag = {
|
||
|
option: "ext",
|
||
|
type: "[String]",
|
||
|
description: "Specify JavaScript file extensions"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
let resolvePluginsFlag;
|
||
|
|
||
|
if (!usingFlatConfig) {
|
||
|
resolvePluginsFlag = {
|
||
|
option: "resolve-plugins-relative-to",
|
||
|
type: "path::String",
|
||
|
description: "A folder where plugins should be resolved from, CWD by default"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
let rulesDirFlag;
|
||
|
|
||
|
if (!usingFlatConfig) {
|
||
|
rulesDirFlag = {
|
||
|
option: "rulesdir",
|
||
|
type: "[path::String]",
|
||
|
description: "Load additional rules from this directory. Deprecated: Use rules from plugins"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
let ignorePathFlag;
|
||
|
|
||
|
if (!usingFlatConfig) {
|
||
|
ignorePathFlag = {
|
||
|
option: "ignore-path",
|
||
|
type: "path::String",
|
||
|
description: "Specify path of ignore file"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
let warnIgnoredFlag;
|
||
|
|
||
|
if (usingFlatConfig) {
|
||
|
warnIgnoredFlag = {
|
||
|
option: "warn-ignored",
|
||
|
type: "Boolean",
|
||
|
default: "true",
|
||
|
description: "Suppress warnings when the file list includes ignored files"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
return optionator({
|
||
|
prepend: "eslint [options] file.js [file.js] [dir]",
|
||
|
defaults: {
|
||
|
concatRepeatedArrays: true,
|
||
|
mergeRepeatedObjects: true
|
||
|
},
|
||
|
options: [
|
||
|
{
|
||
|
heading: "Basic configuration"
|
||
|
},
|
||
|
lookupFlag,
|
||
|
{
|
||
|
option: "config",
|
||
|
alias: "c",
|
||
|
type: "path::String",
|
||
|
description: usingFlatConfig
|
||
|
? "Use this configuration instead of eslint.config.js, eslint.config.mjs, or eslint.config.cjs"
|
||
|
: "Use this configuration, overriding .eslintrc.* config options if present"
|
||
|
},
|
||
|
envFlag,
|
||
|
extFlag,
|
||
|
{
|
||
|
option: "global",
|
||
|
type: "[String]",
|
||
|
description: "Define global variables"
|
||
|
},
|
||
|
{
|
||
|
option: "parser",
|
||
|
type: "String",
|
||
|
description: "Specify the parser to be used"
|
||
|
},
|
||
|
{
|
||
|
option: "parser-options",
|
||
|
type: "Object",
|
||
|
description: "Specify parser options"
|
||
|
},
|
||
|
resolvePluginsFlag,
|
||
|
{
|
||
|
heading: "Specify Rules and Plugins"
|
||
|
},
|
||
|
{
|
||
|
option: "plugin",
|
||
|
type: "[String]",
|
||
|
description: "Specify plugins"
|
||
|
},
|
||
|
{
|
||
|
option: "rule",
|
||
|
type: "Object",
|
||
|
description: "Specify rules"
|
||
|
},
|
||
|
rulesDirFlag,
|
||
|
{
|
||
|
heading: "Fix Problems"
|
||
|
},
|
||
|
{
|
||
|
option: "fix",
|
||
|
type: "Boolean",
|
||
|
default: false,
|
||
|
description: "Automatically fix problems"
|
||
|
},
|
||
|
{
|
||
|
option: "fix-dry-run",
|
||
|
type: "Boolean",
|
||
|
default: false,
|
||
|
description: "Automatically fix problems without saving the changes to the file system"
|
||
|
},
|
||
|
{
|
||
|
option: "fix-type",
|
||
|
type: "Array",
|
||
|
description: "Specify the types of fixes to apply (directive, problem, suggestion, layout)"
|
||
|
},
|
||
|
{
|
||
|
heading: "Ignore Files"
|
||
|
},
|
||
|
ignorePathFlag,
|
||
|
{
|
||
|
option: "ignore",
|
||
|
type: "Boolean",
|
||
|
default: "true",
|
||
|
description: "Disable use of ignore files and patterns"
|
||
|
},
|
||
|
{
|
||
|
option: "ignore-pattern",
|
||
|
type: "[String]",
|
||
|
description: "Pattern of files to ignore (in addition to those in .eslintignore)",
|
||
|
concatRepeatedArrays: [true, {
|
||
|
oneValuePerFlag: true
|
||
|
}]
|
||
|
},
|
||
|
{
|
||
|
heading: "Use stdin"
|
||
|
},
|
||
|
{
|
||
|
option: "stdin",
|
||
|
type: "Boolean",
|
||
|
default: "false",
|
||
|
description: "Lint code provided on <STDIN>"
|
||
|
},
|
||
|
{
|
||
|
option: "stdin-filename",
|
||
|
type: "String",
|
||
|
description: "Specify filename to process STDIN as"
|
||
|
},
|
||
|
{
|
||
|
heading: "Handle Warnings"
|
||
|
},
|
||
|
{
|
||
|
option: "quiet",
|
||
|
type: "Boolean",
|
||
|
default: "false",
|
||
|
description: "Report errors only"
|
||
|
},
|
||
|
{
|
||
|
option: "max-warnings",
|
||
|
type: "Int",
|
||
|
default: "-1",
|
||
|
description: "Number of warnings to trigger nonzero exit code"
|
||
|
},
|
||
|
{
|
||
|
heading: "Output"
|
||
|
},
|
||
|
{
|
||
|
option: "output-file",
|
||
|
alias: "o",
|
||
|
type: "path::String",
|
||
|
description: "Specify file to write report to"
|
||
|
},
|
||
|
{
|
||
|
option: "format",
|
||
|
alias: "f",
|
||
|
type: "String",
|
||
|
default: "stylish",
|
||
|
description: "Use a specific output format"
|
||
|
},
|
||
|
{
|
||
|
option: "color",
|
||
|
type: "Boolean",
|
||
|
alias: "no-color",
|
||
|
description: "Force enabling/disabling of color"
|
||
|
},
|
||
|
{
|
||
|
heading: "Inline configuration comments"
|
||
|
},
|
||
|
{
|
||
|
option: "inline-config",
|
||
|
type: "Boolean",
|
||
|
default: "true",
|
||
|
description: "Prevent comments from changing config or rules"
|
||
|
},
|
||
|
{
|
||
|
option: "report-unused-disable-directives",
|
||
|
type: "Boolean",
|
||
|
default: void 0,
|
||
|
description: "Adds reported errors for unused eslint-disable and eslint-enable directives"
|
||
|
},
|
||
|
{
|
||
|
option: "report-unused-disable-directives-severity",
|
||
|
type: "String",
|
||
|
default: void 0,
|
||
|
description: "Chooses severity level for reporting unused eslint-disable and eslint-enable directives",
|
||
|
enum: ["off", "warn", "error", "0", "1", "2"]
|
||
|
},
|
||
|
{
|
||
|
heading: "Caching"
|
||
|
},
|
||
|
{
|
||
|
option: "cache",
|
||
|
type: "Boolean",
|
||
|
default: "false",
|
||
|
description: "Only check changed files"
|
||
|
},
|
||
|
{
|
||
|
option: "cache-file",
|
||
|
type: "path::String",
|
||
|
default: ".eslintcache",
|
||
|
description: "Path to the cache file. Deprecated: use --cache-location"
|
||
|
},
|
||
|
{
|
||
|
option: "cache-location",
|
||
|
type: "path::String",
|
||
|
description: "Path to the cache file or directory"
|
||
|
},
|
||
|
{
|
||
|
option: "cache-strategy",
|
||
|
dependsOn: ["cache"],
|
||
|
type: "String",
|
||
|
default: "metadata",
|
||
|
enum: ["metadata", "content"],
|
||
|
description: "Strategy to use for detecting changed files in the cache"
|
||
|
},
|
||
|
{
|
||
|
heading: "Miscellaneous"
|
||
|
},
|
||
|
{
|
||
|
option: "init",
|
||
|
type: "Boolean",
|
||
|
default: "false",
|
||
|
description: "Run config initialization wizard"
|
||
|
},
|
||
|
{
|
||
|
option: "env-info",
|
||
|
type: "Boolean",
|
||
|
default: "false",
|
||
|
description: "Output execution environment information"
|
||
|
},
|
||
|
{
|
||
|
option: "error-on-unmatched-pattern",
|
||
|
type: "Boolean",
|
||
|
default: "true",
|
||
|
description: "Prevent errors when pattern is unmatched"
|
||
|
},
|
||
|
{
|
||
|
option: "exit-on-fatal-error",
|
||
|
type: "Boolean",
|
||
|
default: "false",
|
||
|
description: "Exit with exit code 2 in case of fatal error"
|
||
|
},
|
||
|
warnIgnoredFlag,
|
||
|
{
|
||
|
option: "debug",
|
||
|
type: "Boolean",
|
||
|
default: false,
|
||
|
description: "Output debugging information"
|
||
|
},
|
||
|
{
|
||
|
option: "help",
|
||
|
alias: "h",
|
||
|
type: "Boolean",
|
||
|
description: "Show help"
|
||
|
},
|
||
|
{
|
||
|
option: "version",
|
||
|
alias: "v",
|
||
|
type: "Boolean",
|
||
|
description: "Output the version number"
|
||
|
},
|
||
|
{
|
||
|
option: "print-config",
|
||
|
type: "path::String",
|
||
|
description: "Print the configuration for the given file"
|
||
|
}
|
||
|
].filter(value => !!value)
|
||
|
});
|
||
|
};
|