| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 | /** * @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 directives * @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 {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"        };    }    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"                    : "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 directives"            },            {                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"            },            {                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)    });};
 |