Restructure cli files (#11974)

This commit is contained in:
fisker Cheung authored and GitHub committed 2021-12-16 09:21:15 +08:00
1 parent db0604eddd
commit 326f23cd35
16 files changed
+178 -161

No files matched your search

+13 -2
View File
@@ -191,12 +191,23 @@ module.exports = {
},
},
{
files: ["src/cli/**/*.js"],
files: ["src/cli/*.js"],
rules: {
"no-restricted-modules": [
"error",
{
patterns: [".."],
patterns: ["../"],
},
],
},
},
{
files: ["src/cli/*/*.js"],
rules: {
"no-restricted-modules": [
"error",
{
patterns: ["../../"],
},
],
},
+5 -72
View File
@@ -1,20 +1,10 @@
"use strict";
const pick = require("lodash/pick");
// eslint-disable-next-line no-restricted-modules
const prettier = require("../index.js");
const getContextOptions = require("./options/get-context-options.js");
const {
optionsModule,
optionsNormalizer: { normalizeCliOptions },
utils: { arrayify },
} = require("./prettier-internal.js");
const minimist = require("./minimist.js");
const constant = require("./constant.js");
const {
createDetailedOptionMap,
normalizeDetailedOptionMap,
} = require("./option-map.js");
const createMinimistOptions = require("./create-minimist-options.js");
parseArgv,
parseArgvWithoutPlugins,
} = require("./options/parse-cli-arguments.js");
/**
* @typedef {Object} Context
@@ -74,61 +64,4 @@ class Context {
}
}
function getContextOptions(plugins, pluginSearchDirs) {
const { options: supportOptions, languages } = prettier.getSupportInfo({
showDeprecated: true,
showUnreleased: true,
showInternal: true,
plugins,
pluginSearchDirs,
});
const detailedOptionMap = normalizeDetailedOptionMap({
...createDetailedOptionMap(supportOptions),
...constant.options,
});
const detailedOptions = arrayify(detailedOptionMap, "name");
const apiDefaultOptions = {
...optionsModule.hiddenDefaults,
...Object.fromEntries(
supportOptions
.filter(({ deprecated }) => !deprecated)
.map((option) => [option.name, option.default])
),
};
return {
supportOptions,
detailedOptions,
detailedOptionMap,
apiDefaultOptions,
languages,
};
}
function parseArgv(rawArguments, detailedOptions, logger, keys) {
const minimistOptions = createMinimistOptions(detailedOptions);
let argv = minimist(rawArguments, minimistOptions);
if (keys) {
detailedOptions = detailedOptions.filter((option) =>
keys.includes(option.name)
);
argv = pick(argv, keys);
}
return normalizeCliOptions(argv, detailedOptions, { logger });
}
const detailedOptionsWithoutPlugins = getContextOptions().detailedOptions;
function parseArgvWithoutPlugins(rawArguments, logger, keys) {
return parseArgv(
rawArguments,
detailedOptionsWithoutPlugins,
logger,
typeof keys === "string" ? [keys] : keys
);
}
module.exports = { Context, parseArgvWithoutPlugins };
module.exports = Context;
-59
View File
@@ -1,59 +0,0 @@
"use strict";
const path = require("path");
const stringify = require("fast-json-stable-stringify");
// eslint-disable-next-line no-restricted-modules
const prettier = require("../index.js");
const { format, formatStdin, formatFiles } = require("./format.js");
const { Context, parseArgvWithoutPlugins } = require("./context.js");
const {
normalizeDetailedOptionMap,
createDetailedOptionMap,
} = require("./option-map.js");
const { createDetailedUsage, createUsage } = require("./usage.js");
const { createLogger } = require("./logger.js");
async function logResolvedConfigPathOrDie(context) {
const file = context.argv["find-config-path"];
const configFile = await prettier.resolveConfigFile(file);
if (configFile) {
context.logger.log(path.relative(process.cwd(), configFile));
} else {
throw new Error(`Can not find configure file for "${file}"`);
}
}
async function logFileInfoOrDie(context) {
const options = {
ignorePath: context.argv["ignore-path"],
withNodeModules: context.argv["with-node-modules"],
plugins: context.argv.plugin,
pluginSearchDirs: context.argv["plugin-search-dir"],
resolveConfig: context.argv.config !== false,
};
context.logger.log(
prettier.format(
stringify(await prettier.getFileInfo(context.argv["file-info"], options)),
{ parser: "json" }
)
);
}
module.exports = {
Context,
createDetailedOptionMap,
createDetailedUsage,
createUsage,
format,
formatFiles,
formatStdin,
logResolvedConfigPathOrDie,
logFileInfoOrDie,
normalizeDetailedOptionMap,
parseArgvWithoutPlugins,
createLogger,
};
+24
View File
@@ -0,0 +1,24 @@
"use strict";
const stringify = require("fast-json-stable-stringify");
// eslint-disable-next-line no-restricted-modules
const prettier = require("../index.js");
async function logFileInfoOrDie(context) {
const options = {
ignorePath: context.argv["ignore-path"],
withNodeModules: context.argv["with-node-modules"],
plugins: context.argv.plugin,
pluginSearchDirs: context.argv["plugin-search-dir"],
resolveConfig: context.argv.config !== false,
};
context.logger.log(
prettier.format(
stringify(await prettier.getFileInfo(context.argv["file-info"], options)),
{ parser: "json" }
)
);
}
module.exports = logFileInfoOrDie;
+18
View File
@@ -0,0 +1,18 @@
"use strict";
const path = require("path");
// eslint-disable-next-line no-restricted-modules
const prettier = require("../index.js");
async function logResolvedConfigPathOrDie(context) {
const file = context.argv["find-config-path"];
const configFile = await prettier.resolveConfigFile(file);
if (configFile) {
context.logger.log(path.relative(process.cwd(), configFile));
} else {
throw new Error(`Can not find configure file for "${file}"`);
}
}
module.exports = logResolvedConfigPathOrDie;
+2 -2
View File
@@ -12,7 +12,7 @@ const { getStdin } = require("../common/third-party.js");
const { createIgnorer, errors } = require("./prettier-internal.js");
const { expandPatterns, fixWindowsSlashes } = require("./expand-patterns.js");
const { getOptionsForFile } = require("./option.js");
const getOptionsForFile = require("./options/get-options-for-file.js");
const isTTY = require("./is-tty.js");
function diff(a, b) {
@@ -439,4 +439,4 @@ async function formatFiles(context) {
}
}
module.exports = { format, formatStdin, formatFiles };
module.exports = { formatStdin, formatFiles };
+18 -12
View File
@@ -8,20 +8,26 @@ require("please-upgrade-node")(packageJson);
const stringify = require("fast-json-stable-stringify");
// eslint-disable-next-line no-restricted-modules
const prettier = require("../index.js");
const core = require("./core.js");
const createLogger = require("./logger.js");
const Context = require("./context.js");
const { parseArgvWithoutPlugins } = require("./options/parse-cli-arguments.js");
const { createDetailedUsage, createUsage } = require("./usage.js");
const { formatStdin, formatFiles } = require("./format.js");
const logFileInfoOrDie = require("./file-info.js");
const logResolvedConfigPathOrDie = require("./find-config-path.js");
async function run(rawArguments) {
// Create a default level logger, so we can log errors during `logLevel` parsing
let logger = core.createLogger();
let logger = createLogger();
try {
const logLevel = core.parseArgvWithoutPlugins(
const logLevel = parseArgvWithoutPlugins(
rawArguments,
logger,
"loglevel"
).loglevel;
if (logLevel !== logger.logLevel) {
logger = core.createLogger(logLevel);
logger = createLogger(logLevel);
}
await main(rawArguments, logger);
@@ -32,7 +38,7 @@ async function run(rawArguments) {
}
async function main(rawArguments, logger) {
const context = new core.Context({ rawArguments, logger });
const context = new Context({ rawArguments, logger });
logger.debug(`normalized argv: ${JSON.stringify(context.argv)}`);
@@ -60,8 +66,8 @@ async function main(rawArguments, logger) {
if (context.argv.help !== undefined) {
logger.log(
typeof context.argv.help === "string" && context.argv.help !== ""
? core.createDetailedUsage(context, context.argv.help)
: core.createUsage(context)
? createDetailedUsage(context, context.argv.help)
: createUsage(context)
);
return;
}
@@ -81,15 +87,15 @@ async function main(rawArguments, logger) {
(!process.stdin.isTTY || context.argv["stdin-filepath"]);
if (context.argv["find-config-path"]) {
await core.logResolvedConfigPathOrDie(context);
await logResolvedConfigPathOrDie(context);
} else if (context.argv["file-info"]) {
await core.logFileInfoOrDie(context);
await logFileInfoOrDie(context);
} else if (useStdin) {
await core.formatStdin(context);
await formatStdin(context);
} else if (hasFilePatterns) {
await core.formatFiles(context);
await formatFiles(context);
} else {
logger.log(core.createUsage(context));
logger.log(createUsage(context));
process.exitCode = 1;
}
}
+1 -1
View File
@@ -87,4 +87,4 @@ function createLogger(logLevel = "log") {
}
}
module.exports = { createLogger };
module.exports = createLogger;
+47
View File
@@ -0,0 +1,47 @@
"use strict";
// eslint-disable-next-line no-restricted-modules
const prettier = require("../../index.js");
const {
optionsModule,
utils: { arrayify },
} = require("../prettier-internal.js");
const constant = require("../constant.js");
const {
normalizeDetailedOptionMap,
createDetailedOptionMap,
} = require("./option-map.js");
function getContextOptions(plugins, pluginSearchDirs) {
const { options: supportOptions, languages } = prettier.getSupportInfo({
showDeprecated: true,
showUnreleased: true,
showInternal: true,
plugins,
pluginSearchDirs,
});
const detailedOptionMap = normalizeDetailedOptionMap({
...createDetailedOptionMap(supportOptions),
...constant.options,
});
const detailedOptions = arrayify(detailedOptionMap, "name");
const apiDefaultOptions = {
...optionsModule.hiddenDefaults,
...Object.fromEntries(
supportOptions
.filter(({ deprecated }) => !deprecated)
.map((option) => [option.name, option.default])
),
};
return {
supportOptions,
detailedOptions,
detailedOptionMap,
apiDefaultOptions,
languages,
};
}
module.exports = getContextOptions;
@@ -2,9 +2,9 @@
const dashify = require("dashify");
// eslint-disable-next-line no-restricted-modules
const prettier = require("../index.js");
const prettier = require("../../index.js");
const { optionsNormalizer } = require("../prettier-internal.js");
const minimist = require("./minimist.js");
const { optionsNormalizer } = require("./prettier-internal.js");
const createMinimistOptions = require("./create-minimist-options.js");
function getOptions(argv, detailedOptions) {
@@ -135,7 +135,4 @@ async function getOptionsForFile(context, filepath) {
return appliedOptions;
}
module.exports = {
getOptionsForFile,
createMinimistOptions,
};
module.exports = getOptionsForFile;
File renamed without changes.
@@ -1,7 +1,7 @@
"use strict";
const dashify = require("dashify");
const { coreOptions } = require("./prettier-internal.js");
const { coreOptions } = require("../prettier-internal.js");
function normalizeDetailedOption(name, option) {
return {
+34
View File
@@ -0,0 +1,34 @@
"use strict";
const pick = require("lodash/pick");
const {
optionsNormalizer: { normalizeCliOptions },
} = require("../prettier-internal.js");
const getContextOptions = require("./get-context-options.js");
const minimist = require("./minimist.js");
const createMinimistOptions = require("./create-minimist-options.js");
function parseArgv(rawArguments, detailedOptions, logger, keys) {
const minimistOptions = createMinimistOptions(detailedOptions);
let argv = minimist(rawArguments, minimistOptions);
if (keys) {
detailedOptions = detailedOptions.filter((option) =>
keys.includes(option.name)
);
argv = pick(argv, keys);
}
return normalizeCliOptions(argv, detailedOptions, { logger });
}
const detailedOptionsWithoutPlugins = getContextOptions().detailedOptions;
function parseArgvWithoutPlugins(rawArguments, logger, keys) {
return parseArgv(
rawArguments,
detailedOptionsWithoutPlugins,
logger,
typeof keys === "string" ? [keys] : keys
);
}
module.exports = { parseArgv, parseArgvWithoutPlugins };
+6 -3
View File
@@ -3,19 +3,22 @@
const prettier = require("prettier-local");
const runPrettier = require("../runPrettier.js");
const constant = require("../../../src/cli/constant.js");
const core = require("../../../src/cli/core.js");
const {
createDetailedOptionMap,
normalizeDetailedOptionMap,
} = require("../../../src/cli/options/option-map.js");
const arrayify = require("../../../src/utils/arrayify.js");
for (const option of arrayify(
{
...core.createDetailedOptionMap(
...createDetailedOptionMap(
prettier.getSupportInfo({
showDeprecated: true,
showUnreleased: true,
showInternal: true,
}).options
),
...core.normalizeDetailedOptionMap(constant.options),
...normalizeDetailedOptionMap(constant.options),
},
"name"
)) {
+6 -3
View File
@@ -24,11 +24,14 @@
"src/main/options.js",
"src/cli/index.js",
"src/cli/expand-patterns.js",
"src/cli/core.js",
"src/cli/file-info.js",
"src/cli/find-config-path.js",
"src/cli/context.js",
"src/cli/format.js",
"src/cli/option-map.js",
"src/cli/option.js",
"src/cli/options/get-context-options.js",
"src/cli/options/get-options-for-file.js",
"src/cli/options/option-map.js",
"src/cli/options/parse-cli-arguments.js",
"src/cli/usage.js",
"src/cli/constant.js",
"src/cli/prettier-internal.js",