Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates prettier config to 120 and trailing commas #23

Merged
merged 3 commits into from
Dec 19, 2018
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"printWidth": 80
"printWidth": 120,
"trailingComma": "es5"
}
12 changes: 4 additions & 8 deletions packages/cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ export default function run() {
y
.option("verbose", {
count: true,
type: "boolean"
type: "boolean",
})
.option("fix", {
type: "boolean"
type: "boolean",
}),
handler: handleCheck
handler: handleCheck,
})
.demandCommand(1, "At least one command required")
.help()
Expand All @@ -47,11 +47,7 @@ interface Args {
function handleCheck(args: Args) {
const configPath = path.resolve(process.cwd(), "monorepo-lint.config.ts");
const config = Config.check(require(configPath));
const resolvedConfig = resolveConfig(
config,
args,
findWorkspaceDir(process.cwd())!
);
const resolvedConfig = resolveConfig(config, args, findWorkspaceDir(process.cwd())!);

if (!check(resolvedConfig, process.cwd())) {
// tslint:disable-next-line:no-console
Expand Down
14 changes: 5 additions & 9 deletions packages/core/src/Config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,20 @@ export const RuleEntry = r.Partial({
options: r.Unknown,
excludePackages: r.Array(r.String),
includePackages: r.Array(r.String),
includeWorkspaceRoot: r.Boolean
includeWorkspaceRoot: r.Boolean,
});
export type RuleEntry = r.Static<typeof RuleEntry>;

export const Config = r.Record({
rules: r.Dictionary(RuleEntry)
rules: r.Dictionary(RuleEntry),
});
export type Config = r.Static<typeof Config>;

export const RuleModule = r.Record({
check: r.Function,
optionsRuntype: r.Unknown
optionsRuntype: r.Unknown,
});
export interface RuleModule<T extends Runtype = Runtype>
extends r.Static<typeof RuleModule> {
export interface RuleModule<T extends Runtype = Runtype> extends r.Static<typeof RuleModule> {
check: Checker<T>;
optionsRuntype: T;
}
Expand All @@ -37,10 +36,7 @@ export interface Options {
fix: boolean;
}

export type Checker<T extends Runtype> = (
context: Context,
args: r.Static<T>
) => void;
export type Checker<T extends Runtype> = (context: Context, args: r.Static<T>) => void;
export type ResolvedRule = RuleModule & RuleEntry;
export interface ResolvedConfig extends Options {
readonly rules: ReadonlyArray<ResolvedRule>;
Expand Down
8 changes: 2 additions & 6 deletions packages/core/src/PackageContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,10 @@ export class PackageContext implements Context {

if (this.resolvedConfig.fix && fixer) {
fixer();
this.print(
`${chalk.green("Fixed!")} ${chalk.magenta(shortFile)}: ${message}`
);
this.print(`${chalk.green("Fixed!")} ${chalk.magenta(shortFile)}: ${message}`);
} else {
this.setFailed();
this.print(
`${chalk.red("Error!")} ${chalk.magenta(shortFile)}: ${message}`
);
this.print(`${chalk.red("Error!")} ${chalk.magenta(shortFile)}: ${message}`);

if (this.resolvedConfig.verbose && longMessage) {
for (let i = 0; i <= this.depth + 1; i++) {
Expand Down
14 changes: 3 additions & 11 deletions packages/core/src/check.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@ import { ResolvedConfig } from "./Config";
import { Context } from "./Context";
import { WorkspaceContext } from "./WorkspaceContext";

export function check(
resolvedConfig: ResolvedConfig,
cwd = process.cwd()
): boolean {
export function check(resolvedConfig: ResolvedConfig, cwd = process.cwd()): boolean {
const workspaceDir = findWorkspaceDir(cwd);
if (workspaceDir === undefined) {
throw new Error(`Unable to find a workspace from ${cwd}`);
Expand All @@ -40,18 +37,13 @@ function checkPackage(context: Context) {
console.log(`Starting check against ${context.getName()}`);
}
for (const ruleConfig of context.resolvedConfig.rules) {
const exclude = (ruleConfig.excludePackages || []).some(a =>
minimatch(context.getName(), a)
);
const exclude = (ruleConfig.excludePackages || []).some(a => minimatch(context.getName(), a));
const include =
ruleConfig.includePackages === undefined
? true
: ruleConfig.includePackages.some(a => minimatch(context.getName(), a));

if (
context.getWorkspaceContext() === context &&
!ruleConfig.includeWorkspaceRoot
) {
if (context.getWorkspaceContext() === context && !ruleConfig.includeWorkspaceRoot) {
continue;
}

Expand Down
10 changes: 1 addition & 9 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,7 @@
*/

export { Context, Failure } from "./Context";
export {
Config,
RuleModule,
Checker,
Options,
ResolvedConfig,
ResolvedRule,
RuleEntry
} from "./Config";
export { Config, RuleModule, Checker, Options, ResolvedConfig, ResolvedRule, RuleEntry } from "./Config";
export { check } from "./check";
export { PackageContext } from "./PackageContext";
export { WorkspaceContext } from "./WorkspaceContext";
Expand Down
37 changes: 8 additions & 29 deletions packages/core/src/resolveConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,63 +7,42 @@

import * as path from "path";
import { ValidationError } from "runtypes";
import {
Config,
Options,
ResolvedConfig,
ResolvedRule,
RuleEntry,
RuleModule
} from "./Config";
import { Config, Options, ResolvedConfig, ResolvedRule, RuleEntry, RuleModule } from "./Config";

export function resolveConfig(
config: Config,
options: Options,
workspaceRootDir: string
): ResolvedConfig {
export function resolveConfig(config: Config, options: Options, workspaceRootDir: string): ResolvedConfig {
try {
return {
...options,
rules: Object.entries(config.rules).map(([type, ruleEntry]) => ({
...ruleEntry,
...resolveRule(type, workspaceRootDir, ruleEntry)
}))
...resolveRule(type, workspaceRootDir, ruleEntry),
})),
};
} catch (err) {
if (err instanceof ValidationError) {
// tslint:disable-next-line:no-console
console.error(
`Failed to parse config for key '${err.key}':`,
err.message,
err
);
console.error(`Failed to parse config for key '${err.key}':`, err.message, err);
}
return process.exit(10);
}
}

function resolveRule(
type: string,
workspaceRootDir: string,
ruleEntry: RuleEntry
): ResolvedRule {
function resolveRule(type: string, workspaceRootDir: string, ruleEntry: RuleEntry): ResolvedRule {
const ruleModule = loadRuleModule(type, workspaceRootDir);

try {
ruleModule.optionsRuntype.check(ruleEntry.options);

const ret: ResolvedRule = {
...ruleModule,
...ruleEntry
...ruleEntry,
};

return ret;
} catch (err) {
if (err instanceof ValidationError) {
// tslint:disable:no-console
console.error(
`Failed to validate the configuration for the rule '${type}'`
);
console.error(`Failed to validate the configuration for the rule '${type}'`);
console.group();
console.error("Recieved:", ruleEntry.options);
console.error("Error Message:", err.message);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,10 @@ export default {
checkAlpha(context, "devDependencies");
checkAlpha(context, "peerDependencies");
},
optionsRuntype: Options
optionsRuntype: Options,
} as RuleModule<typeof Options>;

function checkAlpha(
context: Context,
block: "dependencies" | "devDependencies" | "peerDependencies"
) {
function checkAlpha(context: Context, block: "dependencies" | "devDependencies" | "peerDependencies") {
const packageJson = context.getPackageJson();
const packagePath = context.getPackageJsonPath();

Expand Down Expand Up @@ -52,7 +49,7 @@ function checkAlpha(
const newPackageJson = { ...packageJson };
newPackageJson[block] = expectedDependencies;
writeJson(packagePath, newPackageJson);
}
},
});
}
}
Expand Down
16 changes: 5 additions & 11 deletions packages/rule-banned-dependencies/src/bannedDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,18 @@ import diff from "jest-diff";
import * as r from "runtypes";

export const Options = r.Record({
bannedDependencies: r.Array(r.String)
bannedDependencies: r.Array(r.String),
});
export type Options = r.Static<typeof Options>;
const ruleModule: RuleModule<typeof Options> = {
check: function expectAlphabeticalDependencies(
context: Context,
opts: Options
) {
check: function expectAlphabeticalDependencies(context: Context, opts: Options) {
const { bannedDependencies } = opts;

checkBanned(context, bannedDependencies, "dependencies");
checkBanned(context, bannedDependencies, "devDependencies");
checkBanned(context, bannedDependencies, "peerDependencies");
},
optionsRuntype: Options
optionsRuntype: Options,
};
export default ruleModule;

Expand All @@ -51,10 +48,7 @@ function checkBanned(
}
}

if (
Object.keys(expectedDependencies).length !==
Object.keys(dependencies).length
) {
if (Object.keys(expectedDependencies).length !== Object.keys(dependencies).length) {
context.addError({
file: packagePath,
message: `Banned depdendencies in ${block} in package.json`,
Expand All @@ -63,7 +57,7 @@ function checkBanned(
const newPackageJson = { ...packageJson };
newPackageJson[block] = expectedDependencies;
writeJson(packagePath, newPackageJson);
}
},
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,10 @@ export default {
checkDeps(context, "devDependencies");
// we don't check peer deps since they can be more lenient
},
optionsRuntype: Options
optionsRuntype: Options,
} as RuleModule<typeof Options>;

function checkDeps(
context: Context,
block: "dependencies" | "devDependencies" | "peerDependencies"
) {
function checkDeps(context: Context, block: "dependencies" | "devDependencies" | "peerDependencies") {
const packageJson = context.getPackageJson();
const packagePath = context.getPackageJsonPath();
const dependencies = packageJson[block];
Expand All @@ -39,7 +36,7 @@ function checkDeps(

const expectedDependencies = {
...dependencies,
...filterKeys(workspaceDependencies, dependencies)
...filterKeys(workspaceDependencies, dependencies),
};

if (JSON.stringify(dependencies) !== JSON.stringify(expectedDependencies)) {
Expand All @@ -51,15 +48,12 @@ function checkDeps(
const newPackageJson = { ...packageJson };
newPackageJson[block] = expectedDependencies;
writeJson(packagePath, newPackageJson);
}
},
});
}
}

function filterKeys(
ob: Record<string, string>,
filterOb: Record<string, string>
) {
function filterKeys(ob: Record<string, string>, filterOb: Record<string, string>) {
const newOb: Record<string, any> = {};

for (const key of Object.keys(filterOb)) {
Expand Down
14 changes: 6 additions & 8 deletions packages/rule-file-contents/src/fileContents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,21 @@ const Options = r.Union(
file: r.String,
generator: r.Function,
template: r.Undefined,
templateFile: r.Undefined
templateFile: r.Undefined,
}),

r.Record({
file: r.String,
generator: r.Undefined,
template: r.String,
templateFile: r.Undefined
templateFile: r.Undefined,
}),

r.Record({
file: r.String,
generator: r.Undefined,
template: r.Undefined,
templateFile: r.String
templateFile: r.String,
})
);

Expand All @@ -43,9 +43,7 @@ export default {
const generator = getGenerator(context, opts);
const expectedContent = generator(context);

const actualContent = fs.existsSync(fullPath)
? fs.readFileSync(fullPath, "utf-8")
: undefined;
const actualContent = fs.existsSync(fullPath) ? fs.readFileSync(fullPath, "utf-8") : undefined;

if (actualContent !== expectedContent) {
context.addError({
Expand All @@ -58,11 +56,11 @@ export default {
} else {
fs.writeFileSync(fullPath, expectedContent);
}
}
},
});
}
},
optionsRuntype: Options
optionsRuntype: Options,
} as RuleModule<typeof Options>;

function getGenerator(context: Context, opts: Options) {
Expand Down
Loading