@shivaedev/quality 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +36 -39
- package/biome/declarations.json +55 -0
- package/biome/preset.json +29 -13
- package/dist/baseline/legacy.d.ts +0 -1
- package/dist/baseline/legacy.d.ts.map +1 -1
- package/dist/baseline/legacy.js +0 -1
- package/dist/baseline/legacy.js.map +1 -1
- package/dist/cli/args.d.ts +1 -6
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +7 -14
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/fix.d.ts +8 -2
- package/dist/cli/fix.d.ts.map +1 -1
- package/dist/cli/fix.js +55 -9
- package/dist/cli/fix.js.map +1 -1
- package/dist/cli.js +1 -4
- package/dist/cli.js.map +1 -1
- package/dist/config/decode.d.ts +0 -1
- package/dist/config/decode.d.ts.map +1 -1
- package/dist/config/decode.js +0 -1
- package/dist/config/decode.js.map +1 -1
- package/dist/config/load.d.ts +0 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +0 -1
- package/dist/config/load.js.map +1 -1
- package/dist/config/resolve.d.ts +1 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +0 -3
- package/dist/config/resolve.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/git/base.d.ts.map +1 -1
- package/dist/git/base.js +4 -27
- package/dist/git/base.js.map +1 -1
- package/dist/git/command.d.ts +1 -1
- package/dist/git/command.d.ts.map +1 -1
- package/dist/git/command.js +2 -2
- package/dist/git/command.js.map +1 -1
- package/dist/git/history.d.ts +0 -1
- package/dist/git/history.d.ts.map +1 -1
- package/dist/git/history.js +1 -6
- package/dist/git/history.js.map +1 -1
- package/dist/imports/departures.d.ts +9 -0
- package/dist/imports/departures.d.ts.map +1 -0
- package/dist/imports/departures.js +49 -0
- package/dist/imports/departures.js.map +1 -0
- package/dist/imports/specifiers.d.ts +9 -0
- package/dist/imports/specifiers.d.ts.map +1 -0
- package/dist/imports/specifiers.js +71 -0
- package/dist/imports/specifiers.js.map +1 -0
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +11 -0
- package/dist/report/render.js.map +1 -1
- package/dist/rule.d.ts +2 -1
- package/dist/rule.d.ts.map +1 -1
- package/dist/rule.js.map +1 -1
- package/dist/rules/biome.js +1 -1
- package/dist/rules/biome.js.map +1 -1
- package/dist/rules/built-in.d.ts +1 -1
- package/dist/rules/built-in.d.ts.map +1 -1
- package/dist/rules/built-in.js +2 -0
- package/dist/rules/built-in.js.map +1 -1
- package/dist/rules/imports/aliased.d.ts +2 -0
- package/dist/rules/imports/aliased.d.ts.map +1 -0
- package/dist/rules/imports/aliased.js +23 -0
- package/dist/rules/imports/aliased.js.map +1 -0
- package/package.json +3 -2
- package/src/baseline/legacy.ts +0 -2
- package/src/cli/args.ts +8 -16
- package/src/cli/fix.ts +72 -10
- package/src/cli.ts +1 -4
- package/src/config/decode.ts +0 -1
- package/src/config/load.ts +0 -2
- package/src/config/resolve.ts +1 -3
- package/src/config.ts +0 -3
- package/src/git/base.ts +4 -31
- package/src/git/command.ts +2 -2
- package/src/git/history.ts +1 -8
- package/src/imports/departures.ts +72 -0
- package/src/imports/specifiers.ts +94 -0
- package/src/report/render.ts +12 -0
- package/src/rule.ts +3 -2
- package/src/rules/biome.ts +1 -1
- package/src/rules/built-in.ts +2 -0
- package/src/rules/imports/aliased.ts +26 -0
- package/dist/baseline/guard.d.ts +0 -23
- package/dist/baseline/guard.d.ts.map +0 -1
- package/dist/baseline/guard.js +0 -32
- package/dist/baseline/guard.js.map +0 -1
- package/dist/cli/check.d.ts +0 -5
- package/dist/cli/check.d.ts.map +0 -1
- package/dist/cli/check.js +0 -39
- package/dist/cli/check.js.map +0 -1
- package/dist/report/guard.d.ts +0 -9
- package/dist/report/guard.d.ts.map +0 -1
- package/dist/report/guard.js +0 -34
- package/dist/report/guard.js.map +0 -1
- package/src/baseline/guard.ts +0 -48
- package/src/cli/check.ts +0 -51
- package/src/report/guard.ts +0 -46
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
const MOCKS = new Set(["doMock", "doUnmock", "importActual", "importMock", "mock", "unmock"]);
|
|
3
|
+
const MAY_CALL = /\b(?:import|require)\s*\(|\bvi\s*\.\s*(?:doMock|doUnmock|importActual|importMock|mock|unmock)\b/u;
|
|
4
|
+
function declared(node) {
|
|
5
|
+
if (ts.isImportDeclaration(node)) {
|
|
6
|
+
return { node: node.moduleSpecifier, type: node.importClause?.isTypeOnly === true };
|
|
7
|
+
}
|
|
8
|
+
if (ts.isExportDeclaration(node)) {
|
|
9
|
+
return { node: node.moduleSpecifier, type: node.isTypeOnly };
|
|
10
|
+
}
|
|
11
|
+
if (ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)) {
|
|
12
|
+
return { node: node.moduleReference.expression, type: node.isTypeOnly };
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
function isMock(callee) {
|
|
17
|
+
return (ts.isPropertyAccessExpression(callee) && ts.isIdentifier(callee.expression) && callee.expression.text === "vi" && MOCKS.has(callee.name.text));
|
|
18
|
+
}
|
|
19
|
+
function called(node) {
|
|
20
|
+
if (ts.isImportTypeNode(node) && ts.isLiteralTypeNode(node.argument)) {
|
|
21
|
+
return { node: node.argument.literal, type: true };
|
|
22
|
+
}
|
|
23
|
+
if (!ts.isCallExpression(node)) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const callee = node.expression;
|
|
27
|
+
const loads = callee.kind === ts.SyntaxKind.ImportKeyword || (ts.isIdentifier(callee) && callee.text === "require") || isMock(callee);
|
|
28
|
+
return loads ? { node: node.arguments[0], type: false } : undefined;
|
|
29
|
+
}
|
|
30
|
+
function siteOf(source, found) {
|
|
31
|
+
const literal = found?.node;
|
|
32
|
+
if (found === undefined || literal === undefined || !ts.isStringLiteralLike(literal)) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const start = literal.getStart(source);
|
|
36
|
+
return [{ line: source.getLineAndCharacterOfPosition(start).line + 1, specifier: literal.text, start, type: found.type }];
|
|
37
|
+
}
|
|
38
|
+
const JSDOC_IMPORT = /^[ \t]*(?:\/\*\*|\*)?[ \t]*@import\b[^"'`]*?\bfrom\s*(?<quote>["'])(?<path>[^"'\r\n]*)\k<quote>/gmu;
|
|
39
|
+
function siteAt(source, start, specifier) {
|
|
40
|
+
return { line: source.getLineAndCharacterOfPosition(start).line + 1, specifier, start, type: true };
|
|
41
|
+
}
|
|
42
|
+
// A node keeps only its last JSDoc block, so @import tags are read from every comment before it.
|
|
43
|
+
function jsDocImports(source, node, seen) {
|
|
44
|
+
return (ts.getLeadingCommentRanges(source.text, node.pos) ?? []).flatMap((range) => {
|
|
45
|
+
const comment = source.text.slice(range.pos, range.end);
|
|
46
|
+
if (seen.has(range.pos) || !comment.startsWith("/**")) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
seen.add(range.pos);
|
|
50
|
+
return [...comment.matchAll(JSDOC_IMPORT)].map((match) => {
|
|
51
|
+
const path = match.groups?.path ?? "";
|
|
52
|
+
return siteAt(source, range.pos + match.index + match[0].length - path.length - 1, path);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export function specifierSites(source) {
|
|
57
|
+
const sites = [];
|
|
58
|
+
const nested = MAY_CALL.test(source.text);
|
|
59
|
+
const documented = source.text.includes("@import");
|
|
60
|
+
const comments = new Set();
|
|
61
|
+
function visit(node) {
|
|
62
|
+
sites.push(...siteOf(source, declared(node) ?? (nested ? called(node) : undefined)));
|
|
63
|
+
if (documented) {
|
|
64
|
+
sites.push(...jsDocImports(source, node, comments));
|
|
65
|
+
}
|
|
66
|
+
ts.forEachChild(node, visit);
|
|
67
|
+
}
|
|
68
|
+
visit(source);
|
|
69
|
+
return [...new Map(sites.map((site) => [site.start, site])).values()].sort((left, right) => left.start - right.start);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=specifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specifiers.js","sourceRoot":"","sources":["../../src/imports/specifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,uBAAuB,CAAC;AAK7D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,uBAAuB,CAAC;AAK7D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CACjC;AAwED,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,EAAE,SAAS,aAAa,KAAG,MAUjE,CAAC"}
|
package/dist/report/render.js
CHANGED
|
@@ -41,6 +41,16 @@ const summary = (outcome, context) => {
|
|
|
41
41
|
const suppressed = hidden.length === 0 ? "" : `; ${hidden.join(" and ")} ${outcome.baselined + outcome.registered === 1 ? "violation" : "violations"} not shown`;
|
|
42
42
|
return `${verdict}${warnings}. ${plural(context.checked, "source file")} checked${suppressed}.`;
|
|
43
43
|
};
|
|
44
|
+
function rerecord(outcome) {
|
|
45
|
+
const rules = [...new Set(outcome.errors.map((violation) => violation.rule))].sort((left, right) => left.localeCompare(right));
|
|
46
|
+
if (rules.length === 0) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const command = ["quality baseline write", ...rules.map((rule) => `--rule ${rule}`)].join(" ");
|
|
50
|
+
return [
|
|
51
|
+
`If the baseline should keep these findings, such as the debt of a moved or renamed file, record them again with \`${command}\` and call out the baseline growth in the pull request description.`,
|
|
52
|
+
];
|
|
53
|
+
}
|
|
44
54
|
export const render = (outcome, context) => {
|
|
45
55
|
const regressions = new Map(outcome.regressions.map((regression) => [keyOf(regression.entry.rule, regression.entry.file), regression]));
|
|
46
56
|
const warningBody = context.warnings === "all" ? (inRule) => detailed(inRule, regressions) : summarized;
|
|
@@ -49,6 +59,7 @@ export const render = (outcome, context) => {
|
|
|
49
59
|
...ruleSections("warn", outcome.warnings, context, warningBody),
|
|
50
60
|
...staleSections(outcome, context),
|
|
51
61
|
summary(outcome, context),
|
|
62
|
+
...rerecord(outcome),
|
|
52
63
|
].join("\n\n");
|
|
53
64
|
};
|
|
54
65
|
//# sourceMappingURL=render.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/report/render.ts"],"names":[],"mappings":"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"}
|
package/dist/rule.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Bivariant } from "@shivaedev/types";
|
|
1
2
|
import { type StandardSchemaV1 } from "./standard-schema.ts";
|
|
2
3
|
export interface Finding {
|
|
3
4
|
readonly count?: number | undefined;
|
|
@@ -30,7 +31,7 @@ export type Configured = {
|
|
|
30
31
|
readonly check: (inputs: RuleInputs) => Promise<Findings>;
|
|
31
32
|
};
|
|
32
33
|
export interface Rule<Id extends string = string, Input = unknown> {
|
|
33
|
-
configure(options: Input | undefined)
|
|
34
|
+
configure: Bivariant<(options: Input | undefined) => Promise<Configured>>;
|
|
34
35
|
readonly description: string;
|
|
35
36
|
readonly family?: boolean;
|
|
36
37
|
readonly id: Id;
|
package/dist/rule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,CAAC;AAE1C,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,WAAW,CAAC,OAAO,CAAE,SAAQ,UAAU;IACvD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,IAAI,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,OAAO;IAEhE,SAAS,CAAC,OAAO,EAAE,KAAK,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"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"}
|
package/dist/rule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AA0D5E,MAAM,SAAS,GAA2C;IACzD,WAAW,EAAE;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,EAAE,CAAC;QAC3H,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,CAAC;KACV;CACD,CAAC;AAEF,MAAM,aAAa,GAClB,CAAiB,MAAwC,EAAE,KAA+C,EAAE,MAAe,EAAE,EAAE,CAC/H,KAAK,EAAE,OAAgB,EAAuB,EAAE;IAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU,CACzB,UAA4F;IAE5F,MAAM,SAAS,GACd,UAAU,CAAC,OAAO,KAAK,SAAS;QAC/B,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;QACvD,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;AAC3H,CAAC"}
|
package/dist/rules/biome.js
CHANGED
|
@@ -32,7 +32,7 @@ const bridge = defineRule({
|
|
|
32
32
|
const [preset, report] = await Promise.all([presetFinding(readText), biomeReport(root, ["check"])]);
|
|
33
33
|
return [...preset, ...report.diagnostics.filter((diagnostic) => FAILING.has(diagnostic.severity)).map(findingOf)];
|
|
34
34
|
},
|
|
35
|
-
description: "Biome's lint, format and assist findings under the shared preset. `quality fix` applies
|
|
35
|
+
description: "Biome's lint, format and assist findings under the shared preset. `quality fix` applies Biome's lint fixes, unsafe ones included, its assist actions and formatting.",
|
|
36
36
|
id: "biome",
|
|
37
37
|
registrable: false,
|
|
38
38
|
});
|
package/dist/rules/biome.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biome.js","sourceRoot":"","sources":["../../src/rules/biome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,UAAU,EAA4C,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEnF,MAAM,CAAC,MAAM,MAAM,GAAG,0BAA0B,CAAC;AAEjD,MAAM,YAAY,GAAsB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEtE,MAAM,OAAO,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjE,SAAS,SAAS,CAAC,UAAsB;IACxC,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;QACvG,CAAC,CAAC,sCAAsC;QACxC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,UAAsB;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;IAClD,OAAO;QACN,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG;QACrC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACjC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC;QAC9B,OAAO,EAAE,UAAU,CAAC,QAAQ,IAAI,UAAU;KAC1C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgC;IAC5D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtG,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,YAAY,EAAE,OAAO,EAAE,WAAW,MAAM,+BAA+B,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC;IACzB,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACnH,CAAC;IACD,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"biome.js","sourceRoot":"","sources":["../../src/rules/biome.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/built-in.d.ts
CHANGED
|
@@ -17,5 +17,5 @@ export declare const builtInRules: readonly [import("../rule.ts").Rule<"structur
|
|
|
17
17
|
readonly fences?: readonly import("../index.ts").Fence[];
|
|
18
18
|
}>, import("../rule.ts").Rule<"imports/resolvable", {
|
|
19
19
|
readonly generated?: readonly string[];
|
|
20
|
-
}>, import("../rule.ts").Rule<"manifests/sorted", undefined>];
|
|
20
|
+
}>, import("../rule.ts").Rule<"imports/aliased", undefined>, import("../rule.ts").Rule<"manifests/sorted", undefined>];
|
|
21
21
|
//# sourceMappingURL=built-in.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;sHAkBf,CAAC"}
|
package/dist/rules/built-in.js
CHANGED
|
@@ -6,6 +6,7 @@ import { noJsdoc } from "./comments/no-jsdoc.js";
|
|
|
6
6
|
import { noLineReference } from "./comments/no-line-reference.js";
|
|
7
7
|
import { noPrReference } from "./comments/no-pr-reference.js";
|
|
8
8
|
import { noTodo } from "./comments/no-todo.js";
|
|
9
|
+
import { importsAliased } from "./imports/aliased.js";
|
|
9
10
|
import { importCycles } from "./imports/cycles.js";
|
|
10
11
|
import { importFences } from "./imports/fences.js";
|
|
11
12
|
import { importsResolvable } from "./imports/resolvable.js";
|
|
@@ -30,6 +31,7 @@ export const builtInRules = [
|
|
|
30
31
|
importCycles,
|
|
31
32
|
importFences,
|
|
32
33
|
importsResolvable,
|
|
34
|
+
importsAliased,
|
|
33
35
|
manifestsSorted,
|
|
34
36
|
];
|
|
35
37
|
//# sourceMappingURL=built-in.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,eAAe;CACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,eAAe;CACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aliased.d.ts","sourceRoot":"","sources":["../../../src/rules/imports/aliased.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc,4DAWzB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { departures } from "../../imports/departures.js";
|
|
2
|
+
import { defineRule } from "../../rule.js";
|
|
3
|
+
function messageOf({ installed, specifier, workspace }) {
|
|
4
|
+
const leaves = `"${specifier}" leaves its folder.`;
|
|
5
|
+
if (installed !== undefined) {
|
|
6
|
+
return `${leaves} It reaches into the installed package ${installed}; import that package by its name.`;
|
|
7
|
+
}
|
|
8
|
+
if (workspace !== undefined) {
|
|
9
|
+
return `${leaves} It reaches into the workspace package ${workspace}; import it by that name, through a path its package.json "exports" lists.`;
|
|
10
|
+
}
|
|
11
|
+
return `${leaves} Import it through a "#…" alias from the "imports" of its package.json, and declare one there if none fits.`;
|
|
12
|
+
}
|
|
13
|
+
export const importsAliased = defineRule({
|
|
14
|
+
check: async (inputs) => (await departures(inputs)).map((departure) => ({
|
|
15
|
+
file: departure.file,
|
|
16
|
+
line: departure.line,
|
|
17
|
+
message: messageOf(departure),
|
|
18
|
+
subject: departure.specifier,
|
|
19
|
+
})),
|
|
20
|
+
description: "A relative import names only a file in its own folder. Every other import goes through an alias: the package.json `imports` of its package or another workspace package's name.",
|
|
21
|
+
id: "imports/aliased",
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=aliased.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aliased.js","sourceRoot":"","sources":["../../../src/rules/imports/aliased.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAa;IAChE,MAAM,MAAM,GAAG,IAAI,SAAS,sBAAsB,CAAC;IACnD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,MAAM,0CAA0C,SAAS,oCAAoC,CAAC;IACzG,CAAC;IACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,MAAM,0CAA0C,SAAS,4EAA4E,CAAC;IACjJ,CAAC;IACD,OAAO,GAAG,MAAM,6GAA6G,CAAC;AAC/H,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACxC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CACvB,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC;QAC7B,OAAO,EAAE,SAAS,CAAC,SAAS;KAC5B,CAAC,CAAC;IACJ,WAAW,EACV,iLAAiL;IAClL,EAAE,EAAE,iBAAiB;CACrB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/quality",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Repository quality gate with typed rules, a
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "Repository quality gate with typed rules, a baseline of existing debt and a registry of reasoned exceptions",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/quality#readme",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/ShivaeDev/platform/issues"
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@biomejs/biome": "2.5.14",
|
|
48
|
+
"@shivaedev/types": "0.1.0",
|
|
48
49
|
"ignore": "7.0.6",
|
|
49
50
|
"sort-package-json": "4.0.0",
|
|
50
51
|
"typescript": "npm:@typescript/typescript6@6.0.2"
|
package/src/baseline/legacy.ts
CHANGED
|
@@ -30,8 +30,6 @@ export const decodeLegacyBaseline = async (raw: string): Promise<Decoded<readonl
|
|
|
30
30
|
return { _tag: "Valid", value: entries };
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
export const measured = (legacy: readonly LegacyEntry[]): boolean => legacy.some((entry) => entry.measure !== undefined);
|
|
34
|
-
|
|
35
33
|
export const convertLegacy = (legacy: readonly LegacyEntry[], violations: readonly Violation[]): readonly BaselineEntry[] => {
|
|
36
34
|
const current = groupBy(violations, (violation) => keyOf(violation.rule, violation.file));
|
|
37
35
|
return legacy.flatMap(({ count, file, measure, rule }) => {
|
package/src/cli/args.ts
CHANGED
|
@@ -4,10 +4,9 @@ import type { WarningDetail } from "../report/render.ts";
|
|
|
4
4
|
|
|
5
5
|
export type Command =
|
|
6
6
|
| { readonly _tag: "Lint"; readonly config: string | undefined; readonly warnings: WarningDetail }
|
|
7
|
-
| { readonly _tag: "Fix"; readonly config: string | undefined
|
|
7
|
+
| { readonly _tag: "Fix"; readonly config: string | undefined }
|
|
8
8
|
| { readonly _tag: "BaselineWrite"; readonly config: string | undefined; readonly rules: readonly string[] }
|
|
9
9
|
| { readonly _tag: "BaselinePrune"; readonly config: string | undefined; readonly against: string | undefined }
|
|
10
|
-
| { readonly _tag: "BaselineCheck"; readonly config: string | undefined; readonly against: string | undefined }
|
|
11
10
|
| { readonly _tag: "BaselineTighten"; readonly config: string | undefined; readonly staged: boolean }
|
|
12
11
|
| { readonly _tag: "BaselineMigrate"; readonly config: string | undefined; readonly from: string | undefined }
|
|
13
12
|
| { readonly _tag: "Help" };
|
|
@@ -16,25 +15,22 @@ export type Parsed = { readonly _tag: "Parsed"; readonly command: Command } | {
|
|
|
16
15
|
|
|
17
16
|
export const USAGE = `Usage:
|
|
18
17
|
quality lint [--config <file>] [--warnings summary|all]
|
|
19
|
-
quality fix [--config <file>]
|
|
18
|
+
quality fix [--config <file>]
|
|
20
19
|
quality baseline write [--config <file>] [--rule <id>]...
|
|
21
20
|
quality baseline prune [--config <file>] [--against <ref>]
|
|
22
21
|
quality baseline tighten [--config <file>] [--staged]
|
|
23
|
-
quality baseline check [--config <file>] [--against <ref>]
|
|
24
22
|
quality baseline migrate [--config <file>] [--from <file>]
|
|
25
23
|
|
|
26
24
|
lint Run every rule. Exits 1 on an error-level violation, a file over its baseline, a stale registry entry
|
|
27
25
|
or a baseline entry for a rule that is off or unknown.
|
|
28
|
-
fix Sort every package.json
|
|
29
|
-
With --lint, also apply Biome's safe lint fixes, which can change behavior.
|
|
26
|
+
fix Sort every package.json, apply Biome's lint fixes, unsafe ones included, its assist actions and formatting, then format again.
|
|
30
27
|
baseline write Record current error-level violations. Creates the baseline, or records the named rules again, replacing their entries.
|
|
31
28
|
baseline prune Drop fixed debt, lower entries to what is left and carry entries to files git saw move. Never adds or raises an entry.
|
|
32
29
|
baseline tighten Prune only the entries of files changed since HEAD, or with --staged, in the index.
|
|
33
|
-
baseline check Compare the baseline with its version at the merge base. Exits 1 when it gained an entry or a higher count.
|
|
34
30
|
baseline migrate Move a baseline from the earlier JSON format (--from, quality/baseline.json by default) to the configured file.
|
|
35
31
|
|
|
36
32
|
--config <file> Config file; its directory is the repository root. Defaults to ./quality.config.ts.
|
|
37
|
-
--against <ref> The branch the work merges into. Defaults to origin/HEAD, then origin/main, then origin/master.
|
|
33
|
+
--against <ref> The branch the work merges into, whose merge base prune follows moves from. Defaults to origin/HEAD, then origin/main, then origin/master.
|
|
38
34
|
Exit codes: 0 passed, 1 failed the gate, 2 could not run.`;
|
|
39
35
|
|
|
40
36
|
const OPTIONS = {
|
|
@@ -42,7 +38,6 @@ const OPTIONS = {
|
|
|
42
38
|
config: { type: "string" },
|
|
43
39
|
from: { type: "string" },
|
|
44
40
|
help: { short: "h", type: "boolean" },
|
|
45
|
-
lint: { type: "boolean" },
|
|
46
41
|
rule: { multiple: true, type: "string" },
|
|
47
42
|
staged: { type: "boolean" },
|
|
48
43
|
warnings: { type: "string" },
|
|
@@ -56,15 +51,14 @@ type Values = ReturnType<typeof parseArgs<{ options: typeof OPTIONS; allowPositi
|
|
|
56
51
|
|
|
57
52
|
type Option = Exclude<keyof Values, "config" | "help">;
|
|
58
53
|
|
|
59
|
-
const COMMAND_OPTIONS: readonly Option[] = ["against", "from", "
|
|
54
|
+
const COMMAND_OPTIONS: readonly Option[] = ["against", "from", "rule", "staged", "warnings"];
|
|
60
55
|
|
|
61
56
|
const ACCEPTS: Readonly<Record<string, readonly Option[]>> = {
|
|
62
|
-
"baseline check": ["against"],
|
|
63
57
|
"baseline migrate": ["from"],
|
|
64
58
|
"baseline prune": ["against"],
|
|
65
59
|
"baseline tighten": ["staged"],
|
|
66
60
|
"baseline write": ["rule"],
|
|
67
|
-
fix: [
|
|
61
|
+
fix: [],
|
|
68
62
|
lint: ["warnings"],
|
|
69
63
|
};
|
|
70
64
|
|
|
@@ -87,13 +81,11 @@ const commandFor = (name: string, values: Values): Parsed => {
|
|
|
87
81
|
: usage(`--warnings takes summary or all, not "${warnings}".`);
|
|
88
82
|
}
|
|
89
83
|
case "fix":
|
|
90
|
-
return parsed({ _tag: "Fix", config
|
|
84
|
+
return parsed({ _tag: "Fix", config });
|
|
91
85
|
case "baseline write":
|
|
92
86
|
return parsed({ _tag: "BaselineWrite", config, rules: values.rule ?? [] });
|
|
93
87
|
case "baseline prune":
|
|
94
88
|
return ref(values.against, { _tag: "BaselinePrune", against: values.against, config });
|
|
95
|
-
case "baseline check":
|
|
96
|
-
return ref(values.against, { _tag: "BaselineCheck", against: values.against, config });
|
|
97
89
|
case "baseline tighten":
|
|
98
90
|
return parsed({ _tag: "BaselineTighten", config, staged: values.staged === true });
|
|
99
91
|
default:
|
|
@@ -116,7 +108,7 @@ export const parseCommand = (args: readonly string[]): Parsed => {
|
|
|
116
108
|
}
|
|
117
109
|
const name = [command, ...rest].join(" ");
|
|
118
110
|
if (ACCEPTS[name] === undefined) {
|
|
119
|
-
return usage(command === "baseline" && rest.length < 2 ? "baseline takes write, prune, tighten
|
|
111
|
+
return usage(command === "baseline" && rest.length < 2 ? "baseline takes write, prune, tighten or migrate." : `unknown command: ${name}`);
|
|
120
112
|
}
|
|
121
113
|
const problem = misplaced(name, values);
|
|
122
114
|
return problem === undefined ? commandFor(name, values) : usage(problem);
|
package/src/cli/fix.ts
CHANGED
|
@@ -1,23 +1,85 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { relative } from "node:path";
|
|
2
|
+
import { Console, Effect, FileSystem } from "effect";
|
|
3
|
+
import { biomeReport, type Report } from "../biome/report.ts";
|
|
3
4
|
import { loadConfig } from "../config/load.ts";
|
|
4
5
|
import { SetupFailure } from "../failure.ts";
|
|
6
|
+
import { posix } from "../inventory/ignore-scope.ts";
|
|
7
|
+
import { walk } from "../inventory/walk.ts";
|
|
5
8
|
import { sortManifests } from "../manifests/sorted.ts";
|
|
6
9
|
import { plural } from "../report/plural.ts";
|
|
7
10
|
|
|
8
|
-
const
|
|
11
|
+
export const MAX_FIX_ROUNDS = 5;
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
function biome(root: string, args: readonly string[]): Effect.Effect<Report, SetupFailure> {
|
|
14
|
+
return Effect.tryPromise({
|
|
15
|
+
catch: (cause) => new SetupFailure({ message: cause instanceof Error ? cause.message : String(cause) }),
|
|
16
|
+
try: () => biomeReport(root, args),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function snapshotOf(root: string): Effect.Effect<ReadonlyMap<string, string>, SetupFailure, FileSystem.FileSystem> {
|
|
21
|
+
return Effect.gen(function* () {
|
|
22
|
+
const fs = yield* FileSystem.FileSystem;
|
|
23
|
+
const paths = yield* walk(root);
|
|
24
|
+
const contents = yield* Effect.forEach(paths, (path) =>
|
|
25
|
+
Effect.map(fs.readFile(path), (bytes) => [posix(relative(root, path)), Buffer.from(bytes).toString("base64")] as const),
|
|
26
|
+
);
|
|
27
|
+
return new Map(contents);
|
|
28
|
+
}).pipe(Effect.mapError((failure) => new SetupFailure({ message: failure.message })));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function biomeRound(root: string, index: number): Effect.Effect<number, SetupFailure> {
|
|
32
|
+
return Effect.gen(function* () {
|
|
33
|
+
const fixed = (yield* biome(root, ["check", "--write", "--unsafe"])).summary.changed;
|
|
34
|
+
const formatted = (yield* biome(root, ["format", "--write"])).summary.changed;
|
|
35
|
+
yield* Console.log(
|
|
36
|
+
`quality: Biome round ${index} rewrote ${plural(fixed, "file")} with fixes and ${plural(formatted, "file")} with the format pass.`,
|
|
37
|
+
);
|
|
38
|
+
return fixed + formatted;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface Settling<Failure, Requirements> {
|
|
43
|
+
readonly round: (index: number) => Effect.Effect<number, Failure, Requirements>;
|
|
44
|
+
readonly snapshot: Effect.Effect<ReadonlyMap<string, string>, Failure, Requirements>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function unsettled(before: ReadonlyMap<string, string>, after: ReadonlyMap<string, string>): SetupFailure {
|
|
48
|
+
const changed = [...new Set([...before.keys(), ...after.keys()])]
|
|
49
|
+
.filter((path) => before.get(path) !== after.get(path))
|
|
50
|
+
.sort((left, right) => left.localeCompare(right));
|
|
51
|
+
return new SetupFailure({
|
|
52
|
+
message: [
|
|
53
|
+
`Biome still rewrote files after ${MAX_FIX_ROUNDS} rounds, so quality fix stopped. These files changed in the last round:`,
|
|
54
|
+
...changed.map((path) => ` ${path}`),
|
|
55
|
+
"Two fixes probably undo each other there. Fix the code by hand, or turn off one of the rules.",
|
|
56
|
+
].join("\n"),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function settle<Failure, Requirements>({
|
|
61
|
+
round,
|
|
62
|
+
snapshot,
|
|
63
|
+
}: Settling<Failure, Requirements>): Effect.Effect<void, Failure | SetupFailure, Requirements> {
|
|
64
|
+
return Effect.gen(function* () {
|
|
65
|
+
for (let index = 1; index < MAX_FIX_ROUNDS; index += 1) {
|
|
66
|
+
if ((yield* round(index)) === 0) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const before = yield* snapshot;
|
|
71
|
+
if ((yield* round(MAX_FIX_ROUNDS)) === 0) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
return yield* unsettled(before, yield* snapshot);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
11
77
|
|
|
12
|
-
export function fix(cwd: string, config: string | undefined
|
|
78
|
+
export function fix(cwd: string, config: string | undefined): Effect.Effect<void, SetupFailure, FileSystem.FileSystem> {
|
|
13
79
|
return Effect.gen(function* () {
|
|
14
80
|
const { root } = yield* loadConfig(cwd, config);
|
|
15
81
|
const sorted = yield* Effect.mapError(sortManifests(root), (failure) => new SetupFailure({ message: failure.message }));
|
|
16
82
|
yield* Console.log(`quality: sort-package-json rewrote ${plural(sorted, "manifest")}.`);
|
|
17
|
-
|
|
18
|
-
catch: (cause) => new SetupFailure({ message: cause instanceof Error ? cause.message : String(cause) }),
|
|
19
|
-
try: () => biomeReport(root, ["check", "--write", ...(lint ? [] : WITHOUT_LINT)]),
|
|
20
|
-
});
|
|
21
|
-
yield* Console.log(`quality: Biome rewrote ${plural(report.summary.changed, "file")}.`);
|
|
83
|
+
yield* settle({ round: (index) => biomeRound(root, index), snapshot: snapshotOf(root) });
|
|
22
84
|
});
|
|
23
85
|
}
|
package/src/cli.ts
CHANGED
|
@@ -3,7 +3,6 @@ import process from "node:process";
|
|
|
3
3
|
import { Console, Effect } from "effect";
|
|
4
4
|
import { parseCommand, USAGE } from "./cli/args.ts";
|
|
5
5
|
import { writeBaseline } from "./cli/baseline.ts";
|
|
6
|
-
import { checkBaseline } from "./cli/check.ts";
|
|
7
6
|
import { fix } from "./cli/fix.ts";
|
|
8
7
|
import { lint } from "./cli/lint.ts";
|
|
9
8
|
import { migrateBaseline } from "./cli/migrate.ts";
|
|
@@ -24,15 +23,13 @@ const program = Effect.gen(function* () {
|
|
|
24
23
|
case "Lint":
|
|
25
24
|
return yield* lint(process.cwd(), command.config, command.warnings);
|
|
26
25
|
case "Fix":
|
|
27
|
-
return yield* fix(process.cwd(), command.config
|
|
26
|
+
return yield* fix(process.cwd(), command.config);
|
|
28
27
|
case "BaselineWrite":
|
|
29
28
|
return yield* writeBaseline(process.cwd(), command.config, command.rules);
|
|
30
29
|
case "BaselinePrune":
|
|
31
30
|
return yield* pruneBaseline(process.cwd(), command.config, command.against);
|
|
32
31
|
case "BaselineTighten":
|
|
33
32
|
return yield* tightenBaseline(process.cwd(), command.config, command.staged);
|
|
34
|
-
case "BaselineCheck":
|
|
35
|
-
return yield* checkBaseline(process.cwd(), command.config, command.against);
|
|
36
33
|
case "BaselineMigrate":
|
|
37
34
|
return yield* migrateBaseline(process.cwd(), command.config, command.from);
|
|
38
35
|
}
|
package/src/config/decode.ts
CHANGED
|
@@ -19,7 +19,6 @@ const Setting = Schema.Union([Level, Schema.Struct({ level: Schema.optionalKey(L
|
|
|
19
19
|
const LocalRule = Schema.declare(isRule, { expected: "a rule made with defineRule" });
|
|
20
20
|
|
|
21
21
|
const ConfigInput = Schema.Struct({
|
|
22
|
-
adopt: Schema.optionalKey(Schema.Array(Schema.String)),
|
|
23
22
|
baseline: Schema.optionalKey(Schema.String),
|
|
24
23
|
exclude: Schema.optionalKey(Schema.Array(Schema.String)),
|
|
25
24
|
extensions: Schema.optionalKey(Schema.Array(Schema.String)),
|
package/src/config/load.ts
CHANGED
|
@@ -11,7 +11,6 @@ import { type ResolvedRules, resolveRules } from "./resolve.ts";
|
|
|
11
11
|
const DEFAULT_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"];
|
|
12
12
|
|
|
13
13
|
export interface ResolvedConfig extends ResolvedRules, InventoryScope {
|
|
14
|
-
readonly adopt: readonly string[];
|
|
15
14
|
readonly baseline: string;
|
|
16
15
|
readonly file: string;
|
|
17
16
|
readonly registry: string;
|
|
@@ -34,7 +33,6 @@ const importDefault = (file: string): Effect.Effect<unknown, SetupFailure> =>
|
|
|
34
33
|
|
|
35
34
|
const resolved = (root: string, file: string, config: ConfigInput, rules: ResolvedRules): ResolvedConfig => ({
|
|
36
35
|
...rules,
|
|
37
|
-
adopt: config.adopt ?? [],
|
|
38
36
|
baseline: config.baseline ?? "quality/baseline.jsonl",
|
|
39
37
|
exclude: config.exclude ?? [],
|
|
40
38
|
extensions: config.extensions ?? DEFAULT_EXTENSIONS,
|
package/src/config/resolve.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Effect } from "effect";
|
|
|
2
2
|
import type { Level } from "../config.ts";
|
|
3
3
|
import type { Decoded } from "../decoded.ts";
|
|
4
4
|
import type { ActiveRule } from "../engine/run-rules.ts";
|
|
5
|
-
import {
|
|
5
|
+
import type { RuleIndex } from "../engine/violation.ts";
|
|
6
6
|
import type { Rule } from "../rule.ts";
|
|
7
7
|
import { builtInRules } from "../rules/built-in.ts";
|
|
8
8
|
import type { ConfigInput } from "./decode.ts";
|
|
@@ -48,12 +48,10 @@ export const resolveRules = (config: ConfigInput): Effect.Effect<Decoded<Resolve
|
|
|
48
48
|
const settings = config.rules ?? {};
|
|
49
49
|
const known = new Set(rules.map((rule) => rule.id));
|
|
50
50
|
const families = new Set(rules.filter((rule) => rule.family === true).map((rule) => rule.id));
|
|
51
|
-
const adoptable = (id: string): boolean => known.has(id) || [...families].some((family) => covers(family, id));
|
|
52
51
|
const unknown = [
|
|
53
52
|
...Object.keys(settings)
|
|
54
53
|
.filter((id) => !known.has(id))
|
|
55
54
|
.map((id) => `rules.${id}`),
|
|
56
|
-
...(config.adopt ?? []).filter((id) => !adoptable(id)).map((id) => `adopt.${id}`),
|
|
57
55
|
].map((path) => `${path}: no built-in or local rule has this id`);
|
|
58
56
|
const activated = yield* Effect.forEach(rules, (rule) => activate(rule, settings[rule.id]));
|
|
59
57
|
const issues = [...duplicateIssues(rules), ...unknown, ...activated.flatMap((result) => (result._tag === "Invalid" ? result.issues : []))];
|
package/src/config.ts
CHANGED
|
@@ -13,10 +13,7 @@ export type RuleSettings<Rules extends readonly Rule[]> = {
|
|
|
13
13
|
|
|
14
14
|
export type BuiltInRules = typeof builtInRules;
|
|
15
15
|
|
|
16
|
-
type IdOf<Rules extends readonly Rule[]> = Rules[number]["id"];
|
|
17
|
-
|
|
18
16
|
export interface QualityConfig<Local extends readonly Rule[] = readonly Rule[]> {
|
|
19
|
-
readonly adopt?: readonly IdOf<readonly [...BuiltInRules, ...Local]>[];
|
|
20
17
|
readonly baseline?: string;
|
|
21
18
|
readonly exclude?: readonly string[];
|
|
22
19
|
readonly extensions?: readonly string[];
|