Make ESLint catch category typos

master
Simon Lydell 2017-09-12 17:08:03 +02:00 committed by Ika
parent f53eab9b8d
commit c2847d90cd
2 changed files with 38 additions and 29 deletions

View File

@ -1,5 +1,10 @@
"use strict";
const CATEGORY_COMMAND = "Command";
const CATEGORY_CONFIG = "Config";
const CATEGORY_FORMAT = "Format";
const CATEGORY_OTHER = "Other";
/**
* {
* [name]: {
@ -45,7 +50,7 @@
const detailOptions = normalizeDetailOptions({
"bracket-spacing": {
type: "boolean",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
oppositeDescription: "Do not print spaces between brackets."
},
@ -60,14 +65,14 @@ const detailOptions = normalizeDetailOptions({
},
config: {
type: "path",
category: "config",
category: CATEGORY_CONFIG,
description:
"Path to a prettier configuration file (.prettierrc, package.json, prettier.config.js).",
oppositeDescription: "Do not look for a configuration file."
},
"config-precedence": {
type: "choice",
category: "config",
category: CATEGORY_CONFIG,
default: "cli-override",
choices: ["cli-override", "file-override", "prefer-file"],
description: dedent(`
@ -96,25 +101,25 @@ const detailOptions = normalizeDetailOptions({
},
"find-config-path": {
type: "path",
category: "command",
category: CATEGORY_COMMAND,
description:
"Finds and prints the path to a configuration file for a given input file."
},
"flow-parser": {
// Deprecated in 0.0.10
type: "boolean",
category: "format",
category: CATEGORY_FORMAT,
deprecated: "Use `--parser flow` instead."
},
help: {
type: "boolean",
category: "command",
category: CATEGORY_COMMAND,
alias: "h",
description: "Show help."
},
"ignore-path": {
type: "path",
category: "config",
category: CATEGORY_CONFIG,
default: ".prettierignore",
description: dedent(`
Path to a file containing patterns that describe files to ignore.
@ -123,20 +128,20 @@ const detailOptions = normalizeDetailOptions({
},
"jsx-bracket-same-line": {
type: "boolean",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
description: "Put > on the last line instead of at a new line."
},
"list-different": {
type: "boolean",
category: "command",
category: CATEGORY_COMMAND,
alias: "l",
description:
"Print filenames of files that are different from Prettier formatting."
},
parser: {
type: "choice",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
exception: value => typeof value === "string", // allow path to a parser module
choices: ["flow", "babylon", "typescript", "postcss", "json", "graphql"],
@ -145,14 +150,14 @@ const detailOptions = normalizeDetailOptions({
},
"print-width": {
type: "int",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
description:
"Specify the length of line that the printer will wrap on. Defaults to 80."
},
"range-end": {
type: "int",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
exception: Infinity,
description: dedent(`
@ -164,7 +169,7 @@ const detailOptions = normalizeDetailOptions({
},
"range-start": {
type: "int",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
description: dedent(`
Format code starting at a given character offset.
@ -175,14 +180,14 @@ const detailOptions = normalizeDetailOptions({
},
semi: {
type: "boolean",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
oppositeDescription:
"Do not print semicolons, except at the beginning of lines which may need them."
},
"single-quote": {
type: "boolean",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
description: "Use single quotes instead of double quotes."
},
@ -197,14 +202,14 @@ const detailOptions = normalizeDetailOptions({
},
"tab-width": {
type: "int",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
description:
"Specify the number of spaces per indentation-level. Defaults to 2."
},
"trailing-comma": {
type: "choice",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
choices: [
"none",
@ -217,24 +222,24 @@ const detailOptions = normalizeDetailOptions({
},
"use-tabs": {
type: "boolean",
category: "format",
category: CATEGORY_FORMAT,
forwardToApi: true,
description: "Indent lines with tabs instead of spaces."
},
version: {
type: "boolean",
category: "command",
category: CATEGORY_COMMAND,
alias: "v",
description: "Print Prettier version."
},
"with-node-modules": {
type: "boolean",
category: "config",
category: CATEGORY_CONFIG,
description: "Process files inside 'node_modules' directory."
},
write: {
type: "boolean",
category: "command",
category: CATEGORY_COMMAND,
description: "Edit the file in-place. (Beware!)"
}
});
@ -284,7 +289,7 @@ function normalizeDetailOptions(rawDetailOptions) {
const option = rawDetailOptions[name];
return Object.assign({}, option, {
name,
category: option.category || "other",
category: option.category || CATEGORY_OTHER,
forwardToApi:
option.forwardToApi &&
(typeof option.forwardToApi === "string"
@ -308,6 +313,10 @@ const detailOptionMap = detailOptions.reduce(
);
module.exports = {
CATEGORY_COMMAND,
CATEGORY_CONFIG,
CATEGORY_FORMAT,
CATEGORY_OTHER,
minimistOptions,
detailOptions,
detailOptionMap

View File

@ -343,7 +343,7 @@ function createUsage() {
.filter(Boolean);
const groupedOptions = flattenedOptions.reduce((current, option) => {
const category = capitalize(option.category);
const category = option.category;
const group = (current[category] = current[category] || []);
group.push(option);
return current;
@ -351,8 +351,12 @@ function createUsage() {
const usageSummary = "Usage: prettier [opts] [filename ...]";
const firstCategories = ["Command", "Format", "Config"];
const lastCategories = ["Other"];
const firstCategories = [
constant.CATEGORY_COMMAND,
constant.CATEGORY_FORMAT,
constant.CATEGORY_CONFIG
];
const lastCategories = [constant.CATEGORY_OTHER];
const allCategories = firstCategories.concat(
Object.keys(groupedOptions).filter(
category =>
@ -405,10 +409,6 @@ function createOptionUsage(option, threshold) {
);
}
function capitalize(str) {
return str.replace(/^[a-z]/, char => char.toUpperCase());
}
function indent(str, spaces) {
return str.replace(/^/gm, " ".repeat(spaces));
}