@trebired/code-discipline 2.2.0 → 3.0.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 +19 -0
- package/README.md +77 -4
- package/dist/checks/fix-folderization.d.ts.map +1 -1
- package/dist/checks/fix-folderization.js +3 -1
- package/dist/checks/fix-folderization.js.map +1 -1
- package/dist/checks/index.d.ts.map +1 -1
- package/dist/checks/index.js +97 -60
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/rule-slugs.d.ts +4 -3
- package/dist/checks/rule-slugs.d.ts.map +1 -1
- package/dist/checks/rule-slugs.js +15 -8
- package/dist/checks/rule-slugs.js.map +1 -1
- package/dist/checks/rules/comments/ranges.d.ts +10 -0
- package/dist/checks/rules/comments/ranges.d.ts.map +1 -0
- package/dist/checks/rules/comments/ranges.js +210 -0
- package/dist/checks/rules/comments/ranges.js.map +1 -0
- package/dist/checks/rules/comments/stripping.d.ts +12 -0
- package/dist/checks/rules/comments/stripping.d.ts.map +1 -0
- package/dist/checks/rules/comments/stripping.js +81 -0
- package/dist/checks/rules/comments/stripping.js.map +1 -0
- package/dist/checks/rules/dry/candidates.d.ts +8 -0
- package/dist/checks/rules/dry/candidates.d.ts.map +1 -0
- package/dist/checks/rules/dry/candidates.js +98 -0
- package/dist/checks/rules/dry/candidates.js.map +1 -0
- package/dist/checks/rules/dry/fingerprint.d.ts +15 -0
- package/dist/checks/rules/dry/fingerprint.d.ts.map +1 -0
- package/dist/checks/rules/dry/fingerprint.js +80 -0
- package/dist/checks/rules/dry/fingerprint.js.map +1 -0
- package/dist/checks/rules/dry/fix.d.ts +5 -0
- package/dist/checks/rules/dry/fix.d.ts.map +1 -0
- package/dist/checks/rules/dry/fix.js +252 -0
- package/dist/checks/rules/dry/fix.js.map +1 -0
- package/dist/checks/rules/dry/helpers.d.ts +5 -0
- package/dist/checks/rules/dry/helpers.d.ts.map +1 -0
- package/dist/checks/rules/dry/helpers.js +99 -0
- package/dist/checks/rules/dry/helpers.js.map +1 -0
- package/dist/checks/rules/dry/index.d.ts +7 -0
- package/dist/checks/rules/dry/index.d.ts.map +1 -0
- package/dist/checks/rules/dry/index.js +14 -0
- package/dist/checks/rules/dry/index.js.map +1 -0
- package/dist/checks/rules/dry/model.d.ts +37 -0
- package/dist/checks/rules/dry/model.d.ts.map +1 -0
- package/dist/checks/rules/dry/model.js +16 -0
- package/dist/checks/rules/dry/model.js.map +1 -0
- package/dist/checks/rules/dry/serialize/bindings.d.ts +8 -0
- package/dist/checks/rules/dry/serialize/bindings.d.ts.map +1 -0
- package/dist/checks/rules/dry/serialize/bindings.js +62 -0
- package/dist/checks/rules/dry/serialize/bindings.js.map +1 -0
- package/dist/checks/rules/dry/serialize/context.d.ts +18 -0
- package/dist/checks/rules/dry/serialize/context.d.ts.map +1 -0
- package/dist/checks/rules/dry/serialize/context.js +103 -0
- package/dist/checks/rules/dry/serialize/context.js.map +1 -0
- package/dist/checks/rules/dry/serialize/expressions.d.ts +10 -0
- package/dist/checks/rules/dry/serialize/expressions.d.ts.map +1 -0
- package/dist/checks/rules/dry/serialize/expressions.js +161 -0
- package/dist/checks/rules/dry/serialize/expressions.js.map +1 -0
- package/dist/checks/rules/dry/serialize/node.d.ts +5 -0
- package/dist/checks/rules/dry/serialize/node.d.ts.map +1 -0
- package/dist/checks/rules/dry/serialize/node.js +43 -0
- package/dist/checks/rules/dry/serialize/node.js.map +1 -0
- package/dist/checks/rules/dry/serialize/statements.d.ts +7 -0
- package/dist/checks/rules/dry/serialize/statements.d.ts.map +1 -0
- package/dist/checks/rules/dry/serialize/statements.js +99 -0
- package/dist/checks/rules/dry/serialize/statements.js.map +1 -0
- package/dist/checks/rules/evasion-guards/functions.d.ts +14 -0
- package/dist/checks/rules/evasion-guards/functions.d.ts.map +1 -0
- package/dist/checks/rules/evasion-guards/functions.js +83 -0
- package/dist/checks/rules/evasion-guards/functions.js.map +1 -0
- package/dist/checks/rules/evasion-guards/index.d.ts +6 -0
- package/dist/checks/rules/evasion-guards/index.d.ts.map +1 -0
- package/dist/checks/rules/evasion-guards/index.js +126 -0
- package/dist/checks/rules/evasion-guards/index.js.map +1 -0
- package/dist/checks/rules/evasion-guards/runtime.d.ts +6 -0
- package/dist/checks/rules/evasion-guards/runtime.d.ts.map +1 -0
- package/dist/checks/rules/evasion-guards/runtime.js +51 -0
- package/dist/checks/rules/evasion-guards/runtime.js.map +1 -0
- package/dist/checks/rules/evasion-guards/strip.d.ts +11 -0
- package/dist/checks/rules/evasion-guards/strip.d.ts.map +1 -0
- package/dist/checks/rules/evasion-guards/strip.js +89 -0
- package/dist/checks/rules/evasion-guards/strip.js.map +1 -0
- package/dist/checks/rules/folderize/compound-files.d.ts +6 -0
- package/dist/checks/rules/folderize/compound-files.d.ts.map +1 -0
- package/dist/checks/rules/{folderize-compound-files.js → folderize/compound-files.js} +10 -2
- package/dist/checks/rules/folderize/compound-files.js.map +1 -0
- package/dist/checks/rules/{folderize-plan.d.ts → folderize/plan.d.ts} +3 -3
- package/dist/checks/rules/folderize/plan.d.ts.map +1 -0
- package/dist/checks/rules/{folderize-plan.js → folderize/plan.js} +2 -2
- package/dist/checks/rules/folderize/plan.js.map +1 -0
- package/dist/checks/rules/max/file-lines.d.ts +6 -0
- package/dist/checks/rules/max/file-lines.d.ts.map +1 -0
- package/dist/checks/rules/{max-file-lines.js → max/file-lines.js} +9 -1
- package/dist/checks/rules/max/file-lines.js.map +1 -0
- package/dist/checks/rules/max/function-lines.d.ts +6 -0
- package/dist/checks/rules/max/function-lines.d.ts.map +1 -0
- package/dist/checks/rules/{max-function-lines.js → max/function-lines.js} +79 -61
- package/dist/checks/rules/max/function-lines.js.map +1 -0
- package/dist/checks/rules/remove-comments.d.ts +7 -0
- package/dist/checks/rules/remove-comments.d.ts.map +1 -0
- package/dist/checks/rules/remove-comments.js +67 -0
- package/dist/checks/rules/remove-comments.js.map +1 -0
- package/dist/checks/types.d.ts +30 -2
- package/dist/checks/types.d.ts.map +1 -1
- package/dist/cli/run-cli.d.ts.map +1 -1
- package/dist/cli/run-cli.js +123 -36
- package/dist/cli/run-cli.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +68 -62
- package/dist/config/index.js.map +1 -1
- package/dist/config/{normalize-check-options.d.ts → normalize/check-options.d.ts} +2 -2
- package/dist/config/normalize/check-options.d.ts.map +1 -0
- package/dist/config/{normalize-check-options.js → normalize/check-options.js} +7 -5
- package/dist/config/normalize/check-options.js.map +1 -0
- package/dist/config/normalize/rule-options.d.ts +31 -0
- package/dist/config/normalize/rule-options.d.ts.map +1 -0
- package/dist/config/{normalize-rule-options.js → normalize/rule-options.js} +51 -4
- package/dist/config/normalize/rule-options.js.map +1 -0
- package/dist/config/{normalize-source-options.d.ts → normalize/source-options.d.ts} +2 -2
- package/dist/config/normalize/source-options.d.ts.map +1 -0
- package/dist/config/{normalize-source-options.js → normalize/source-options.js} +5 -5
- package/dist/config/normalize/source-options.js.map +1 -0
- package/dist/config/{normalize-sync-imports-options.d.ts → normalize/sync-imports-options.d.ts} +2 -2
- package/dist/config/normalize/sync-imports-options.d.ts.map +1 -0
- package/dist/config/{normalize-sync-imports-options.js → normalize/sync-imports-options.js} +5 -5
- package/dist/config/normalize/sync-imports-options.js.map +1 -0
- package/dist/imports/check-sync-imports.js +1 -1
- package/dist/imports/check-sync-imports.js.map +1 -1
- package/dist/imports/scan.d.ts.map +1 -1
- package/dist/imports/scan.js +10 -0
- package/dist/imports/scan.js.map +1 -1
- package/dist/imports/sync-imports.d.ts.map +1 -1
- package/dist/imports/sync-imports.js +59 -47
- package/dist/imports/sync-imports.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/native/native.d.ts +18 -0
- package/dist/native/native.d.ts.map +1 -0
- package/dist/native/native.js +78 -0
- package/dist/native/native.js.map +1 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +2 -0
- package/dist/run.js.map +1 -1
- package/dist/runtime/gate-command.d.ts +13 -0
- package/dist/runtime/gate-command.d.ts.map +1 -0
- package/dist/runtime/gate-command.js +51 -0
- package/dist/runtime/gate-command.js.map +1 -0
- package/dist/runtime/{runtime-imports-sync.d.ts → imports-sync.d.ts} +1 -1
- package/dist/runtime/imports-sync.d.ts.map +1 -0
- package/dist/runtime/{runtime-imports-sync.js → imports-sync.js} +33 -21
- package/dist/runtime/imports-sync.js.map +1 -0
- package/dist/shared/discipline-types.d.ts +1 -1
- package/dist/shared/discipline-types.d.ts.map +1 -1
- package/dist/shared/languages.d.ts +2 -1
- package/dist/shared/languages.d.ts.map +1 -1
- package/dist/shared/languages.js +4 -1
- package/dist/shared/languages.js.map +1 -1
- package/dist/shared/logging.d.ts.map +1 -1
- package/dist/shared/logging.js +28 -13
- package/dist/shared/logging.js.map +1 -1
- package/dist/shared/utils.d.ts +4 -4
- package/dist/shared/utils.d.ts.map +1 -1
- package/dist/shared/utils.js +4 -4
- package/dist/shared/utils.js.map +1 -1
- package/native/darwin-arm64.node +0 -0
- package/native/darwin-x64.node +0 -0
- package/native/linux-arm64-gnu.node +0 -0
- package/native/linux-x64-gnu.node +0 -0
- package/package.json +11 -4
- package/dist/checks/rules/dry.d.ts +0 -7
- package/dist/checks/rules/dry.d.ts.map +0 -1
- package/dist/checks/rules/dry.js +0 -905
- package/dist/checks/rules/dry.js.map +0 -1
- package/dist/checks/rules/folderize-compound-files.d.ts +0 -6
- package/dist/checks/rules/folderize-compound-files.d.ts.map +0 -1
- package/dist/checks/rules/folderize-compound-files.js.map +0 -1
- package/dist/checks/rules/folderize-plan.d.ts.map +0 -1
- package/dist/checks/rules/folderize-plan.js.map +0 -1
- package/dist/checks/rules/max-file-lines.d.ts +0 -6
- package/dist/checks/rules/max-file-lines.d.ts.map +0 -1
- package/dist/checks/rules/max-file-lines.js.map +0 -1
- package/dist/checks/rules/max-function-lines.d.ts +0 -6
- package/dist/checks/rules/max-function-lines.d.ts.map +0 -1
- package/dist/checks/rules/max-function-lines.js.map +0 -1
- package/dist/config/normalize-check-options.d.ts.map +0 -1
- package/dist/config/normalize-check-options.js.map +0 -1
- package/dist/config/normalize-rule-options.d.ts +0 -29
- package/dist/config/normalize-rule-options.d.ts.map +0 -1
- package/dist/config/normalize-rule-options.js.map +0 -1
- package/dist/config/normalize-source-options.d.ts.map +0 -1
- package/dist/config/normalize-source-options.js.map +0 -1
- package/dist/config/normalize-sync-imports-options.d.ts.map +0 -1
- package/dist/config/normalize-sync-imports-options.js.map +0 -1
- package/dist/runtime/runtime-imports-sync.d.ts.map +0 -1
- package/dist/runtime/runtime-imports-sync.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import ts from "typescript";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { loadNativeBinding } from "../../../native/native.js";
|
|
5
|
+
import { parseSource } from "../../../imports/module-specifiers.js";
|
|
6
|
+
import { isGoExtension, isRustExtension, isTypeScriptFamilyExtension, supportsMaxFunctionLines } from "../../../shared/languages.js";
|
|
6
7
|
function isFunctionLikeWithBody(node) {
|
|
7
8
|
return ((ts.isFunctionDeclaration(node) && node.body !== undefined)
|
|
8
9
|
|| (ts.isMethodDeclaration(node) && node.body !== undefined)
|
|
@@ -71,46 +72,47 @@ function collectTypeScriptFunctionDescriptors(sourceFile) {
|
|
|
71
72
|
visit(sourceFile);
|
|
72
73
|
return descriptors;
|
|
73
74
|
}
|
|
75
|
+
function updateStripState(state, character) {
|
|
76
|
+
if (state.escaped) {
|
|
77
|
+
state.escaped = false;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if ((state.inSingle || state.inDouble || state.inTemplate) && character === "\\") {
|
|
81
|
+
state.escaped = true;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (!state.inDouble && !state.inTemplate && character === "'")
|
|
85
|
+
state.inSingle = !state.inSingle;
|
|
86
|
+
if (!state.inSingle && !state.inTemplate && character === "\"")
|
|
87
|
+
state.inDouble = !state.inDouble;
|
|
88
|
+
if (!state.inSingle && !state.inDouble && character === "`")
|
|
89
|
+
state.inTemplate = !state.inTemplate;
|
|
90
|
+
}
|
|
91
|
+
function isInString(state) {
|
|
92
|
+
return state.inSingle || state.inDouble || state.inTemplate;
|
|
93
|
+
}
|
|
74
94
|
function stripCommentsAndStrings(value) {
|
|
75
95
|
let result = "";
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
const state = {
|
|
97
|
+
escaped: false,
|
|
98
|
+
inDouble: false,
|
|
99
|
+
inSingle: false,
|
|
100
|
+
inTemplate: false,
|
|
101
|
+
};
|
|
80
102
|
for (let index = 0; index < value.length; index += 1) {
|
|
81
|
-
const character = value[index];
|
|
103
|
+
const character = value[index] ?? "";
|
|
82
104
|
const nextCharacter = value[index + 1];
|
|
83
|
-
if (!
|
|
105
|
+
if (!isInString(state) && character === "/" && nextCharacter === "/")
|
|
84
106
|
break;
|
|
85
|
-
|
|
86
|
-
if (!inSingle && !inDouble && !inTemplate && character === "/" && nextCharacter === "*") {
|
|
107
|
+
if (!isInString(state) && character === "/" && nextCharacter === "*") {
|
|
87
108
|
const closingIndex = value.indexOf("*/", index + 2);
|
|
88
109
|
if (closingIndex < 0)
|
|
89
110
|
break;
|
|
90
111
|
index = closingIndex + 1;
|
|
91
112
|
continue;
|
|
92
113
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if ((inSingle || inDouble || inTemplate) && character === "\\") {
|
|
98
|
-
escaped = true;
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
if (!inDouble && !inTemplate && character === "'") {
|
|
102
|
-
inSingle = !inSingle;
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
if (!inSingle && !inTemplate && character === "\"") {
|
|
106
|
-
inDouble = !inDouble;
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
if (!inSingle && !inDouble && character === "`") {
|
|
110
|
-
inTemplate = !inTemplate;
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
if (!inSingle && !inDouble && !inTemplate) {
|
|
114
|
+
updateStripState(state, character);
|
|
115
|
+
if (!isInString(state) && !state.escaped) {
|
|
114
116
|
result += character;
|
|
115
117
|
}
|
|
116
118
|
}
|
|
@@ -127,6 +129,24 @@ function countBraceDelta(value) {
|
|
|
127
129
|
}
|
|
128
130
|
return delta;
|
|
129
131
|
}
|
|
132
|
+
function createPendingBlockFunction() {
|
|
133
|
+
return {
|
|
134
|
+
braceDepth: 0,
|
|
135
|
+
header: "",
|
|
136
|
+
kind: "function",
|
|
137
|
+
name: "",
|
|
138
|
+
startLine: 0,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function createBlockFunctionDescriptor(pending, endLine) {
|
|
142
|
+
return {
|
|
143
|
+
kind: pending.kind,
|
|
144
|
+
lineCount: Math.max(1, endLine - pending.startLine + 1),
|
|
145
|
+
name: pending.name || "anonymous",
|
|
146
|
+
startLine: pending.startLine,
|
|
147
|
+
endLine,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
130
150
|
function collectBlockFunctionDescriptors(text, extension) {
|
|
131
151
|
const descriptors = [];
|
|
132
152
|
const lines = text.split(/\r?\n/);
|
|
@@ -137,46 +157,31 @@ function collectBlockFunctionDescriptors(text, extension) {
|
|
|
137
157
|
const headerNamePattern = isGo
|
|
138
158
|
? /^\s*func(?:\s*\([^)]*\))?\s+([A-Za-z_]\w*)/u
|
|
139
159
|
: /\bfn\s+([A-Za-z_]\w*)/u;
|
|
140
|
-
let
|
|
141
|
-
let pendingStartLine = 0;
|
|
142
|
-
let pendingBraceDepth = 0;
|
|
143
|
-
let pendingName = "";
|
|
144
|
-
let pendingKind = "function";
|
|
160
|
+
let pending = createPendingBlockFunction();
|
|
145
161
|
for (let index = 0; index < lines.length; index += 1) {
|
|
146
162
|
const line = lines[index] ?? "";
|
|
147
|
-
if (!
|
|
163
|
+
if (!pending.header) {
|
|
148
164
|
if (!headerStartPattern.test(line))
|
|
149
165
|
continue;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
166
|
+
pending.header = line;
|
|
167
|
+
pending.startLine = index + 1;
|
|
168
|
+
pending.kind = isGo && /\bfunc\s*\(/u.test(line) ? "method" : "function";
|
|
169
|
+
pending.name = headerNamePattern.exec(line)?.[1] ?? "anonymous";
|
|
154
170
|
}
|
|
155
171
|
else {
|
|
156
|
-
|
|
157
|
-
if (!
|
|
158
|
-
|
|
172
|
+
pending.header = `${pending.header}\n${line}`;
|
|
173
|
+
if (!pending.name || pending.name === "anonymous") {
|
|
174
|
+
pending.name = headerNamePattern.exec(pending.header)?.[1] ?? pending.name;
|
|
159
175
|
}
|
|
160
176
|
}
|
|
161
|
-
if (
|
|
177
|
+
if (pending.braceDepth === 0 && !stripCommentsAndStrings(pending.header).includes("{")) {
|
|
162
178
|
continue;
|
|
163
179
|
}
|
|
164
|
-
|
|
165
|
-
if (
|
|
180
|
+
pending.braceDepth += countBraceDelta(line);
|
|
181
|
+
if (pending.braceDepth > 0)
|
|
166
182
|
continue;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
kind: pendingKind,
|
|
170
|
-
lineCount: Math.max(1, (index + 1) - pendingStartLine + 1),
|
|
171
|
-
name: pendingName || "anonymous",
|
|
172
|
-
startLine: pendingStartLine,
|
|
173
|
-
endLine: index + 1,
|
|
174
|
-
});
|
|
175
|
-
pendingHeader = "";
|
|
176
|
-
pendingStartLine = 0;
|
|
177
|
-
pendingBraceDepth = 0;
|
|
178
|
-
pendingName = "";
|
|
179
|
-
pendingKind = "function";
|
|
183
|
+
descriptors.push(createBlockFunctionDescriptor(pending, index + 1));
|
|
184
|
+
pending = createPendingBlockFunction();
|
|
180
185
|
}
|
|
181
186
|
return descriptors;
|
|
182
187
|
}
|
|
@@ -184,7 +189,20 @@ async function runMaxFunctionLinesRule(sourceFiles, options) {
|
|
|
184
189
|
if (!options.rules.maxFunctionLines)
|
|
185
190
|
return [];
|
|
186
191
|
const violations = [];
|
|
192
|
+
const native = loadNativeBinding();
|
|
193
|
+
const nativeHandledPaths = new Set();
|
|
194
|
+
if (native) {
|
|
195
|
+
const nativeResult = JSON.parse(native.runMaxBlockFunctionLinesRule(JSON.stringify({
|
|
196
|
+
sourceFiles,
|
|
197
|
+
max: options.rules.maxFunctionLines.max,
|
|
198
|
+
})));
|
|
199
|
+
violations.push(...nativeResult.violations);
|
|
200
|
+
for (const filePath of nativeResult.handledPaths)
|
|
201
|
+
nativeHandledPaths.add(filePath);
|
|
202
|
+
}
|
|
187
203
|
for (const file of sourceFiles) {
|
|
204
|
+
if (nativeHandledPaths.has(file.absolutePath))
|
|
205
|
+
continue;
|
|
188
206
|
if (!supportsMaxFunctionLines(file.extension))
|
|
189
207
|
continue;
|
|
190
208
|
const text = await fs.readFile(file.absolutePath, "utf8");
|
|
@@ -216,4 +234,4 @@ async function runMaxFunctionLinesRule(sourceFiles, options) {
|
|
|
216
234
|
return violations;
|
|
217
235
|
}
|
|
218
236
|
export { runMaxFunctionLinesRule };
|
|
219
|
-
//# sourceMappingURL=
|
|
237
|
+
//# sourceMappingURL=function-lines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-lines.js","sourceRoot":"","sources":["../../../../src/checks/rules/max/function-lines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ScannedSourceFile } from "../../imports/types.js";
|
|
2
|
+
import type { CodeDisciplineViolation } from "../../shared/discipline-types.js";
|
|
3
|
+
import type { FixCodeDisciplineRuleResult, NormalizedCheckCodeDisciplineOptions } from "../types.js";
|
|
4
|
+
declare function collectRemoveCommentsViolations(sourceFiles: ScannedSourceFile[]): Promise<CodeDisciplineViolation[]>;
|
|
5
|
+
declare function fixRemoveCommentsRule(sourceFiles: ScannedSourceFile[], _options: NormalizedCheckCodeDisciplineOptions): Promise<FixCodeDisciplineRuleResult>;
|
|
6
|
+
export { collectRemoveCommentsViolations, fixRemoveCommentsRule };
|
|
7
|
+
//# sourceMappingURL=remove-comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-comments.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/remove-comments.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAsBrG,iBAAe,+BAA+B,CAC5C,WAAW,EAAE,iBAAiB,EAAE,GAC/B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAwBpC;AAED,iBAAe,qBAAqB,CAClC,WAAW,EAAE,iBAAiB,EAAE,EAChC,QAAQ,EAAE,oCAAoC,GAC7C,OAAO,CAAC,2BAA2B,CAAC,CA4BtC;AAED,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import { loadNativeBinding } from "../../native/native.js";
|
|
3
|
+
import { supportsRemoveComments } from "../../shared/languages.js";
|
|
4
|
+
import { stripComments } from "./comments/stripping.js";
|
|
5
|
+
function createRemoveCommentsViolation(args) {
|
|
6
|
+
return {
|
|
7
|
+
rule: "remove-comments",
|
|
8
|
+
fix: true,
|
|
9
|
+
filePath: args.filePath,
|
|
10
|
+
message: `file contains ${args.commentCount} removable comment(s)`,
|
|
11
|
+
details: {
|
|
12
|
+
commentCount: args.commentCount,
|
|
13
|
+
lineComments: args.lineComments,
|
|
14
|
+
blockComments: args.blockComments,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async function collectRemoveCommentsViolations(sourceFiles) {
|
|
19
|
+
const native = loadNativeBinding();
|
|
20
|
+
if (native) {
|
|
21
|
+
return JSON.parse(native.collectRemoveCommentsViolations(JSON.stringify({ sourceFiles })));
|
|
22
|
+
}
|
|
23
|
+
const violations = [];
|
|
24
|
+
for (const file of sourceFiles) {
|
|
25
|
+
if (!supportsRemoveComments(file.extension))
|
|
26
|
+
continue;
|
|
27
|
+
const sourceText = await fs.readFile(file.absolutePath, "utf8");
|
|
28
|
+
const result = stripComments(sourceText, file.extension);
|
|
29
|
+
if (!result.changed)
|
|
30
|
+
continue;
|
|
31
|
+
violations.push(createRemoveCommentsViolation({
|
|
32
|
+
filePath: file.relativeFromProjectRoot,
|
|
33
|
+
commentCount: result.commentCount,
|
|
34
|
+
lineComments: result.lineComments,
|
|
35
|
+
blockComments: result.blockComments,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
return violations;
|
|
39
|
+
}
|
|
40
|
+
async function fixRemoveCommentsRule(sourceFiles, _options) {
|
|
41
|
+
const native = loadNativeBinding();
|
|
42
|
+
if (native) {
|
|
43
|
+
return JSON.parse(native.fixRemoveCommentsRule(JSON.stringify({ sourceFiles })));
|
|
44
|
+
}
|
|
45
|
+
let rewrittenFiles = 0;
|
|
46
|
+
let removedComments = 0;
|
|
47
|
+
for (const file of sourceFiles) {
|
|
48
|
+
if (!supportsRemoveComments(file.extension))
|
|
49
|
+
continue;
|
|
50
|
+
const sourceText = await fs.readFile(file.absolutePath, "utf8");
|
|
51
|
+
const result = stripComments(sourceText, file.extension);
|
|
52
|
+
if (!result.changed)
|
|
53
|
+
continue;
|
|
54
|
+
await fs.writeFile(file.absolutePath, result.text, "utf8");
|
|
55
|
+
rewrittenFiles += 1;
|
|
56
|
+
removedComments += result.commentCount;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
ok: true,
|
|
60
|
+
violationCount: 0,
|
|
61
|
+
violations: [],
|
|
62
|
+
rewritten_files: rewrittenFiles,
|
|
63
|
+
removed_comments: removedComments,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export { collectRemoveCommentsViolations, fixRemoveCommentsRule };
|
|
67
|
+
//# sourceMappingURL=remove-comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-comments.js","sourceRoot":"","sources":["../../../src/checks/rules/remove-comments.ts"],"names":[],"mappings":"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"}
|
package/dist/checks/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { LoggingOptions } from "../shared/logging-types.js";
|
|
|
2
2
|
import type { ExcludeDirsOptions, PackageJsonImportsSyncOptions, SourceScanOptions, SyncImportsRuleOptions } from "../imports/types.js";
|
|
3
3
|
import type { CodeDisciplineResult, CodeDisciplineRuleName, CodeDisciplineViolation } from "../shared/discipline-types.js";
|
|
4
4
|
type CodeDisciplineRuleSlug = CodeDisciplineRuleName;
|
|
5
|
-
type FixableRuleSlug = "folderize-compound-files" | "sync-imports" | "dry";
|
|
5
|
+
type FixableRuleSlug = "folderize-compound-files" | "sync-imports" | "remove-comments" | "dry";
|
|
6
6
|
type CodeDisciplineMode = "check" | "fix";
|
|
7
7
|
type CodeDisciplineRuntimeMode = CodeDisciplineMode;
|
|
8
8
|
type MaxFileLinesRuleOptions = {
|
|
@@ -11,9 +11,25 @@ type MaxFileLinesRuleOptions = {
|
|
|
11
11
|
type MaxFunctionLinesRuleOptions = {
|
|
12
12
|
max?: number;
|
|
13
13
|
};
|
|
14
|
+
type PackedCodeGuardOptions = {
|
|
15
|
+
minPackedLineColumns?: number;
|
|
16
|
+
maxSemicolonsPerLine?: number;
|
|
17
|
+
maxStructuralTokensPerLine?: number;
|
|
18
|
+
maxPackedFunctionLines?: number;
|
|
19
|
+
maxPackedFunctionStatements?: number;
|
|
20
|
+
minPackedFunctionCharacters?: number;
|
|
21
|
+
maxPackedFileNonEmptyLines?: number;
|
|
22
|
+
minPackedFileCharacters?: number;
|
|
23
|
+
minPackedFileStructuralTokens?: number;
|
|
24
|
+
};
|
|
25
|
+
type EvasionGuardsOptions = boolean | {
|
|
26
|
+
packedCode?: boolean | PackedCodeGuardOptions;
|
|
27
|
+
runtimeCodeHiding?: boolean;
|
|
28
|
+
};
|
|
14
29
|
type FolderizeCompoundFilesRuleOptions = {
|
|
15
30
|
separators?: string[];
|
|
16
31
|
};
|
|
32
|
+
type RemoveCommentsRuleOptions = Record<string, never>;
|
|
17
33
|
type DryHelperReference = {
|
|
18
34
|
from: string;
|
|
19
35
|
exportName: string;
|
|
@@ -31,6 +47,7 @@ type CodeDisciplineRules = {
|
|
|
31
47
|
maxFunctionLines?: MaxFunctionLinesRuleOptions;
|
|
32
48
|
folderizeCompoundFiles?: FolderizeCompoundFilesRuleOptions;
|
|
33
49
|
syncImports?: CodeDisciplineSyncImportsRuleOptions;
|
|
50
|
+
removeComments?: RemoveCommentsRuleOptions;
|
|
34
51
|
dry?: DryRuleOptions;
|
|
35
52
|
};
|
|
36
53
|
type TsconfigPathsNormalizeMode = "relative-dot-prefix" | "strip-dot-prefix" | "none";
|
|
@@ -63,6 +80,7 @@ type CheckCodeDisciplineOptions = {
|
|
|
63
80
|
gitignorePath?: string;
|
|
64
81
|
logging?: LoggingOptions;
|
|
65
82
|
rules?: CodeDisciplineRules;
|
|
83
|
+
evasionGuards?: EvasionGuardsOptions;
|
|
66
84
|
lifecycle?: CodeDisciplineLifecycleHooks;
|
|
67
85
|
tsconfigPaths?: CodeDisciplineTsconfigPathsOptions;
|
|
68
86
|
onlyRules?: CodeDisciplineRuleSlug[];
|
|
@@ -83,6 +101,12 @@ type NormalizedFolderizeCompoundFilesRule = {
|
|
|
83
101
|
type NormalizedDryRule = {
|
|
84
102
|
helpers: DryHelperReference[];
|
|
85
103
|
};
|
|
104
|
+
type NormalizedRemoveCommentsRule = Record<string, never>;
|
|
105
|
+
type NormalizedPackedCodeGuardOptions = Required<PackedCodeGuardOptions>;
|
|
106
|
+
type NormalizedEvasionGuardsOptions = {
|
|
107
|
+
packedCode?: NormalizedPackedCodeGuardOptions;
|
|
108
|
+
runtimeCodeHiding: boolean;
|
|
109
|
+
};
|
|
86
110
|
type NormalizedCheckCodeDisciplineOptions = SourceScanOptions & {
|
|
87
111
|
configPath?: string;
|
|
88
112
|
sourceRootRelative: string;
|
|
@@ -93,8 +117,10 @@ type NormalizedCheckCodeDisciplineOptions = SourceScanOptions & {
|
|
|
93
117
|
maxFunctionLines?: NormalizedMaxFunctionLinesRule;
|
|
94
118
|
folderizeCompoundFiles?: NormalizedFolderizeCompoundFilesRule;
|
|
95
119
|
syncImports?: CodeDisciplineSyncImportsRuleOptions;
|
|
120
|
+
removeComments?: NormalizedRemoveCommentsRule;
|
|
96
121
|
dry?: NormalizedDryRule;
|
|
97
122
|
};
|
|
123
|
+
evasionGuards?: NormalizedEvasionGuardsOptions;
|
|
98
124
|
};
|
|
99
125
|
type CheckCodeDisciplineResult = CodeDisciplineResult;
|
|
100
126
|
type FixCodeDisciplineRuleResult = {
|
|
@@ -104,6 +130,7 @@ type FixCodeDisciplineRuleResult = {
|
|
|
104
130
|
moved_files?: number;
|
|
105
131
|
rewritten_files?: number;
|
|
106
132
|
rewritten_imports?: number;
|
|
133
|
+
removed_comments?: number;
|
|
107
134
|
removed_duplicates?: number;
|
|
108
135
|
added_imports?: number;
|
|
109
136
|
};
|
|
@@ -111,7 +138,8 @@ type FixCodeDisciplineResult = CodeDisciplineResult & {
|
|
|
111
138
|
moved_files: number;
|
|
112
139
|
rewritten_files: number;
|
|
113
140
|
rewritten_imports: number;
|
|
141
|
+
removed_comments: number;
|
|
114
142
|
ruleResults: Partial<Record<FixableRuleSlug, FixCodeDisciplineRuleResult>>;
|
|
115
143
|
};
|
|
116
|
-
export type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, CodeDisciplineConfig, CodeDisciplineLifecycleContext, CodeDisciplineLifecycleHookResult, CodeDisciplineLifecycleHooks, CodeDisciplineMode, CodeDisciplinePackageJsonImportsOptions, CodeDisciplineRuleSlug, CodeDisciplineRuntimeMode, CodeDisciplineRules, CodeDisciplineSyncImportsRuleOptions, CodeDisciplineTsconfigPathsOptions, DryHelperReference, DryRuleOptions, FixableRuleSlug, FixCodeDisciplineOptions, FixCodeDisciplineResult, FixCodeDisciplineRuleResult, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions, MaxFunctionLinesRuleOptions, NormalizedCheckCodeDisciplineOptions, NormalizedDryRule, NormalizedFolderizeCompoundFilesRule, NormalizedMaxFileLinesRule, NormalizedMaxFunctionLinesRule, TsconfigPathsNormalizeMode, };
|
|
144
|
+
export type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, CodeDisciplineConfig, CodeDisciplineLifecycleContext, CodeDisciplineLifecycleHookResult, CodeDisciplineLifecycleHooks, CodeDisciplineMode, CodeDisciplinePackageJsonImportsOptions, CodeDisciplineRuleSlug, CodeDisciplineRuntimeMode, CodeDisciplineRules, CodeDisciplineSyncImportsRuleOptions, CodeDisciplineTsconfigPathsOptions, DryHelperReference, DryRuleOptions, EvasionGuardsOptions, FixableRuleSlug, FixCodeDisciplineOptions, FixCodeDisciplineResult, FixCodeDisciplineRuleResult, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions, MaxFunctionLinesRuleOptions, RemoveCommentsRuleOptions, NormalizedCheckCodeDisciplineOptions, NormalizedDryRule, NormalizedEvasionGuardsOptions, NormalizedFolderizeCompoundFilesRule, NormalizedMaxFileLinesRule, NormalizedMaxFunctionLinesRule, NormalizedPackedCodeGuardOptions, NormalizedRemoveCommentsRule, PackedCodeGuardOptions, TsconfigPathsNormalizeMode, };
|
|
117
145
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EACV,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAEvC,KAAK,sBAAsB,GAAG,sBAAsB,CAAC;AACrD,KAAK,eAAe,GAAG,0BAA0B,GAAG,cAAc,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":";AAYA,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA6QF,iBAAe,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8CxF;AAOD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/cli/run-cli.js
CHANGED
|
@@ -3,7 +3,37 @@ import fs from "node:fs/promises";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { codeDiscipline } from "../run.js";
|
|
5
5
|
import { loadResolvedCodeDisciplineConfig } from "../config/index.js";
|
|
6
|
+
import { runGatedCommand } from "../runtime/gate-command.js";
|
|
6
7
|
import { isDirectExecution } from "../shared/utils.js";
|
|
8
|
+
const LOADING_FRAMES = ["-", "\\", "|", "/"];
|
|
9
|
+
function createLoadingAnimation(label, enabled) {
|
|
10
|
+
if (!enabled) {
|
|
11
|
+
return {
|
|
12
|
+
stop() { },
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
let frameIndex = 0;
|
|
16
|
+
process.stderr.write(`${label} ${LOADING_FRAMES[frameIndex]}`);
|
|
17
|
+
const timer = setInterval(() => {
|
|
18
|
+
frameIndex = (frameIndex + 1) % LOADING_FRAMES.length;
|
|
19
|
+
process.stderr.write(`\r${label} ${LOADING_FRAMES[frameIndex]}`);
|
|
20
|
+
}, 120);
|
|
21
|
+
return {
|
|
22
|
+
stop() {
|
|
23
|
+
clearInterval(timer);
|
|
24
|
+
process.stderr.write(`\r${" ".repeat(label.length + 2)}\r`);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function withLoadingAnimation(label, enabled, task) {
|
|
29
|
+
const animation = createLoadingAnimation(label, enabled);
|
|
30
|
+
try {
|
|
31
|
+
return await task();
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
animation.stop();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
7
37
|
function padDatePart(value) {
|
|
8
38
|
return String(value).padStart(2, "0");
|
|
9
39
|
}
|
|
@@ -19,28 +49,39 @@ function createSavedReportFilename(now) {
|
|
|
19
49
|
function renderHelp() {
|
|
20
50
|
return [
|
|
21
51
|
"Usage: code-discipline <command> [rule-slug...] [save] [--config <path>]",
|
|
52
|
+
" code-discipline gate [rule-slug...] [save] [--config <path>] -- <command> [args...]",
|
|
22
53
|
"",
|
|
23
54
|
"Commands:",
|
|
24
55
|
" check run read-only discipline validation",
|
|
25
56
|
" fix apply configured discipline fixes",
|
|
57
|
+
" gate block a child command when discipline violations exist",
|
|
26
58
|
" save optional token that writes the run output to a timestamped cd-report-YYYY-MM-DD-HH-mm-ss.txt file",
|
|
27
59
|
"",
|
|
28
60
|
"Rule Selectors:",
|
|
29
61
|
" check <rule-slug>... narrows validation to the selected configured rules",
|
|
30
62
|
" fix <rule-slug>... narrows fixes to the selected configured fixable rules",
|
|
63
|
+
" gate <rule-slug>... narrows the pre-start validation before the child command runs",
|
|
31
64
|
"",
|
|
32
65
|
"Config:",
|
|
33
66
|
" --config <path> optionally points to a module that default-exports the config object.",
|
|
34
67
|
" If omitted, code-discipline will auto-discover a config module in the current project root.",
|
|
35
68
|
"",
|
|
69
|
+
"Gate:",
|
|
70
|
+
" gate requires -- before the child command so code-discipline can separate its own arguments.",
|
|
71
|
+
"",
|
|
36
72
|
].join("\n");
|
|
37
73
|
}
|
|
38
74
|
function parseArgs(args) {
|
|
39
75
|
let configPath;
|
|
40
76
|
let saveOutput = false;
|
|
41
77
|
const selectors = [];
|
|
78
|
+
let commandArgs = [];
|
|
42
79
|
for (let index = 0; index < args.length; index += 1) {
|
|
43
80
|
const arg = args[index];
|
|
81
|
+
if (arg === "--") {
|
|
82
|
+
commandArgs = args.slice(index + 1);
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
44
85
|
if (arg === "--config") {
|
|
45
86
|
const value = args[index + 1];
|
|
46
87
|
if (!value) {
|
|
@@ -63,7 +104,7 @@ function parseArgs(args) {
|
|
|
63
104
|
}
|
|
64
105
|
selectors.push(arg);
|
|
65
106
|
}
|
|
66
|
-
return { configPath, saveOutput, selectors };
|
|
107
|
+
return { configPath, saveOutput, selectors, commandArgs };
|
|
67
108
|
}
|
|
68
109
|
function formatViolation(violation) {
|
|
69
110
|
const suggested = violation.suggestedPath ? ` suggested=${violation.suggestedPath}` : "";
|
|
@@ -81,7 +122,7 @@ function renderCheckOutput(violations, violationCount) {
|
|
|
81
122
|
function renderFixOutput(args) {
|
|
82
123
|
return [
|
|
83
124
|
...args.violations.map((violation) => `${formatViolation(violation)}\n`),
|
|
84
|
-
`Fix summary: moved ${args.movedFiles}, rewritten files ${args.rewrittenFiles}, rewritten imports ${args.rewrittenImports}, remaining violations ${args.violationCount}.\n`,
|
|
125
|
+
`Fix summary: moved ${args.movedFiles}, rewritten files ${args.rewrittenFiles}, rewritten imports ${args.rewrittenImports}, removed comments ${args.removedComments}, remaining violations ${args.violationCount}.\n`,
|
|
85
126
|
].join("");
|
|
86
127
|
}
|
|
87
128
|
async function saveCliOutput(cwd, reportText, now) {
|
|
@@ -90,11 +131,77 @@ async function saveCliOutput(cwd, reportText, now) {
|
|
|
90
131
|
await fs.writeFile(reportPath, reportText, "utf8");
|
|
91
132
|
return reportFilename;
|
|
92
133
|
}
|
|
134
|
+
async function writeSavedReport(args) {
|
|
135
|
+
if (!args.saveOutput)
|
|
136
|
+
return;
|
|
137
|
+
const reportFilename = await saveCliOutput(args.cwd, args.reportText, args.now);
|
|
138
|
+
args.stdout(`Saved report to ${reportFilename}.\n`);
|
|
139
|
+
}
|
|
140
|
+
async function runCheckCommand(args) {
|
|
141
|
+
if (args.parsed.commandArgs.length > 0) {
|
|
142
|
+
throw new Error("Command separator -- is only supported with gate");
|
|
143
|
+
}
|
|
144
|
+
const result = await withLoadingAnimation("Scanning codebase", args.showLoadingAnimation, () => codeDiscipline({
|
|
145
|
+
...args.config,
|
|
146
|
+
configPath: args.configPath,
|
|
147
|
+
mode: "check",
|
|
148
|
+
onlyRules: args.parsed.selectors,
|
|
149
|
+
projectRoot: args.cwd,
|
|
150
|
+
}));
|
|
151
|
+
const reportText = renderCheckOutput(result.violations, result.violationCount);
|
|
152
|
+
args.stdout(reportText);
|
|
153
|
+
await writeSavedReport({ ...args, reportText, saveOutput: args.parsed.saveOutput });
|
|
154
|
+
return { exitCode: result.ok ? 0 : 1 };
|
|
155
|
+
}
|
|
156
|
+
async function runFixCommand(args) {
|
|
157
|
+
if (args.parsed.commandArgs.length > 0) {
|
|
158
|
+
throw new Error("Command separator -- is only supported with gate");
|
|
159
|
+
}
|
|
160
|
+
const result = await withLoadingAnimation("Fixing codebase", args.showLoadingAnimation, () => codeDiscipline({
|
|
161
|
+
...args.config,
|
|
162
|
+
configPath: args.configPath,
|
|
163
|
+
mode: "fix",
|
|
164
|
+
onlyRules: args.parsed.selectors,
|
|
165
|
+
projectRoot: args.cwd,
|
|
166
|
+
}));
|
|
167
|
+
const reportText = renderFixOutput({
|
|
168
|
+
movedFiles: result.moved_files,
|
|
169
|
+
rewrittenFiles: result.rewritten_files,
|
|
170
|
+
rewrittenImports: result.rewritten_imports,
|
|
171
|
+
removedComments: result.removed_comments ?? 0,
|
|
172
|
+
violationCount: result.violationCount,
|
|
173
|
+
violations: result.violations,
|
|
174
|
+
});
|
|
175
|
+
args.stdout(reportText);
|
|
176
|
+
await writeSavedReport({ ...args, reportText, saveOutput: args.parsed.saveOutput });
|
|
177
|
+
return { exitCode: result.ok ? 0 : 1 };
|
|
178
|
+
}
|
|
179
|
+
async function runGateCommand(args) {
|
|
180
|
+
if (args.parsed.commandArgs.length === 0) {
|
|
181
|
+
throw new Error("Missing child command after --");
|
|
182
|
+
}
|
|
183
|
+
const result = await withLoadingAnimation("Scanning codebase", args.showLoadingAnimation, () => codeDiscipline({
|
|
184
|
+
...args.config,
|
|
185
|
+
configPath: args.configPath,
|
|
186
|
+
mode: "check",
|
|
187
|
+
onlyRules: args.parsed.selectors,
|
|
188
|
+
projectRoot: args.cwd,
|
|
189
|
+
}));
|
|
190
|
+
if (!result.ok) {
|
|
191
|
+
const reportText = renderCheckOutput(result.violations, result.violationCount);
|
|
192
|
+
args.stdout(reportText);
|
|
193
|
+
await writeSavedReport({ ...args, reportText, saveOutput: args.parsed.saveOutput });
|
|
194
|
+
return { exitCode: 1 };
|
|
195
|
+
}
|
|
196
|
+
const [childCommand, ...childArgs] = args.parsed.commandArgs;
|
|
197
|
+
return runGatedCommand({ args: childArgs, command: childCommand, cwd: args.cwd });
|
|
198
|
+
}
|
|
93
199
|
async function runCli(argv, options = {}) {
|
|
94
200
|
const cwd = options.cwd ?? process.cwd();
|
|
95
201
|
const now = options.now ?? new Date();
|
|
96
202
|
const stdout = options.stdout ?? ((text) => process.stdout.write(text));
|
|
97
203
|
const stderr = options.stderr ?? ((text) => process.stderr.write(text));
|
|
204
|
+
const showLoadingAnimation = !options.stderr && Boolean(process.stderr.isTTY) && !process.env.CI;
|
|
98
205
|
const [command, ...rest] = argv;
|
|
99
206
|
if (!command || command === "help" || command === "--help" || command === "-h") {
|
|
100
207
|
stdout(renderHelp());
|
|
@@ -103,43 +210,23 @@ async function runCli(argv, options = {}) {
|
|
|
103
210
|
try {
|
|
104
211
|
const parsed = parseArgs(rest);
|
|
105
212
|
const { config, configPath } = await loadResolvedCodeDisciplineConfig(cwd, parsed.configPath);
|
|
213
|
+
const commandArgs = {
|
|
214
|
+
config,
|
|
215
|
+
configPath,
|
|
216
|
+
cwd,
|
|
217
|
+
now,
|
|
218
|
+
parsed,
|
|
219
|
+
showLoadingAnimation,
|
|
220
|
+
stdout,
|
|
221
|
+
};
|
|
106
222
|
if (command === "check") {
|
|
107
|
-
|
|
108
|
-
...config,
|
|
109
|
-
configPath,
|
|
110
|
-
mode: "check",
|
|
111
|
-
onlyRules: parsed.selectors,
|
|
112
|
-
projectRoot: cwd,
|
|
113
|
-
});
|
|
114
|
-
const reportText = renderCheckOutput(result.violations, result.violationCount);
|
|
115
|
-
stdout(reportText);
|
|
116
|
-
if (parsed.saveOutput) {
|
|
117
|
-
const reportFilename = await saveCliOutput(cwd, reportText, now);
|
|
118
|
-
stdout(`Saved report to ${reportFilename}.\n`);
|
|
119
|
-
}
|
|
120
|
-
return { exitCode: result.ok ? 0 : 1 };
|
|
223
|
+
return await runCheckCommand(commandArgs);
|
|
121
224
|
}
|
|
122
225
|
if (command === "fix") {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
onlyRules: parsed.selectors,
|
|
128
|
-
projectRoot: cwd,
|
|
129
|
-
});
|
|
130
|
-
const reportText = renderFixOutput({
|
|
131
|
-
movedFiles: result.moved_files,
|
|
132
|
-
rewrittenFiles: result.rewritten_files,
|
|
133
|
-
rewrittenImports: result.rewritten_imports,
|
|
134
|
-
violationCount: result.violationCount,
|
|
135
|
-
violations: result.violations,
|
|
136
|
-
});
|
|
137
|
-
stdout(reportText);
|
|
138
|
-
if (parsed.saveOutput) {
|
|
139
|
-
const reportFilename = await saveCliOutput(cwd, reportText, now);
|
|
140
|
-
stdout(`Saved report to ${reportFilename}.\n`);
|
|
141
|
-
}
|
|
142
|
-
return { exitCode: result.ok ? 0 : 1 };
|
|
226
|
+
return await runFixCommand(commandArgs);
|
|
227
|
+
}
|
|
228
|
+
if (command === "gate") {
|
|
229
|
+
return await runGateCommand(commandArgs);
|
|
143
230
|
}
|
|
144
231
|
stderr(`Unknown command: ${command}\n`);
|
|
145
232
|
stderr(renderHelp());
|