@vibelint/vibelint-wizard 0.1.7
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/README.md +36 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +522 -0
- package/dist/index.js.map +1 -0
- package/package.json +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# @vibelint/vibelint-wizard
|
|
2
|
+
|
|
3
|
+
Interactive ESLint warning approval tool.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -D @vibelint/vibelint-wizard
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"scripts": {
|
|
16
|
+
"commit-wizard": "vibelint-wizard"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run commit-wizard
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Config
|
|
26
|
+
|
|
27
|
+
- `VIBELINT_ESLINT_CMD` - ESLint command (default: `npx eslint . --ext ts,tsx,js,jsx --format json --max-warnings 999999`)
|
|
28
|
+
|
|
29
|
+
## Git Hook
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# .husky/pre-commit
|
|
33
|
+
npm run commit-wizard || exit 1
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Note:** `.eslint-warnings-cache.json` must be committed to git.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from "child_process";
|
|
3
|
+
import { createHash } from "crypto";
|
|
4
|
+
import { existsSync } from "fs";
|
|
5
|
+
import { readFile, rename, writeFile } from "fs/promises";
|
|
6
|
+
import { join, relative } from "path";
|
|
7
|
+
import kleur from "kleur";
|
|
8
|
+
import prompts from "prompts";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
const CACHE_FILE = ".eslint-warnings-cache.json";
|
|
11
|
+
const CACHE_VERSION = "1.1";
|
|
12
|
+
const ESLINT_CMD = process.env.VIBELINT_ESLINT_CMD || "npx eslint . --ext ts,tsx,js,jsx --format json --max-warnings 999999";
|
|
13
|
+
// Zod schemas for runtime validation
|
|
14
|
+
const warningFingerprintSchema = z.object({
|
|
15
|
+
file: z.string(),
|
|
16
|
+
ruleId: z.string(),
|
|
17
|
+
codeHash: z.string(),
|
|
18
|
+
message: z.string()
|
|
19
|
+
});
|
|
20
|
+
const cacheFileSchema = z.object({
|
|
21
|
+
version: z.string(),
|
|
22
|
+
eslintConfigHash: z.string(),
|
|
23
|
+
approvedWarnings: z.array(warningFingerprintSchema)
|
|
24
|
+
});
|
|
25
|
+
const eslintMessageSchema = z.object({
|
|
26
|
+
ruleId: z.string().nullable(),
|
|
27
|
+
severity: z.number(),
|
|
28
|
+
message: z.string(),
|
|
29
|
+
line: z.number(),
|
|
30
|
+
column: z.number(),
|
|
31
|
+
endLine: z.number().optional(),
|
|
32
|
+
endColumn: z.number().optional(),
|
|
33
|
+
source: z.string().optional()
|
|
34
|
+
});
|
|
35
|
+
const eslintFileResultSchema = z.object({
|
|
36
|
+
filePath: z.string(),
|
|
37
|
+
messages: z.array(eslintMessageSchema),
|
|
38
|
+
suppressedMessages: z.array(eslintMessageSchema).optional(),
|
|
39
|
+
errorCount: z.number(),
|
|
40
|
+
warningCount: z.number(),
|
|
41
|
+
fatalErrorCount: z.number().optional(),
|
|
42
|
+
fixableErrorCount: z.number().optional(),
|
|
43
|
+
fixableWarningCount: z.number().optional(),
|
|
44
|
+
usedDeprecatedRules: z.array(z.unknown()).optional()
|
|
45
|
+
});
|
|
46
|
+
function computeCodeHash(lineContent) {
|
|
47
|
+
const trimmed = lineContent.trim();
|
|
48
|
+
return createHash("sha256").update(trimmed).digest("hex");
|
|
49
|
+
}
|
|
50
|
+
async function readSourceLine(filePath, lineNumber) {
|
|
51
|
+
try {
|
|
52
|
+
const content = await readFile(filePath, "utf-8");
|
|
53
|
+
const lines = content.split("\n");
|
|
54
|
+
if (lineNumber > 0 && lineNumber <= lines.length) {
|
|
55
|
+
return lines[lineNumber - 1];
|
|
56
|
+
}
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.warn(`Warning: Could not read file ${filePath}: ${error}`);
|
|
61
|
+
return "";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function readSourceContext(filePath, lineNumber, contextLines = 3) {
|
|
65
|
+
try {
|
|
66
|
+
const content = await readFile(filePath, "utf-8");
|
|
67
|
+
const lines = content.split("\n");
|
|
68
|
+
if (lineNumber > 0 && lineNumber <= lines.length) {
|
|
69
|
+
const startLine = Math.max(0, lineNumber - contextLines - 1);
|
|
70
|
+
const endLine = Math.min(lines.length, lineNumber + contextLines);
|
|
71
|
+
const context = lines.slice(startLine, endLine);
|
|
72
|
+
const line = lines[lineNumber - 1];
|
|
73
|
+
return { line, context };
|
|
74
|
+
}
|
|
75
|
+
return { line: "", context: [] };
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.warn(`Warning: Could not read file ${filePath}: ${error}`);
|
|
79
|
+
return { line: "", context: [] };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function createFingerprint(filePath, ruleId, message, lineContent) {
|
|
83
|
+
const relativePath = relative(process.cwd(), filePath).replace(/\\/g, "/");
|
|
84
|
+
const codeHash = computeCodeHash(lineContent);
|
|
85
|
+
return {
|
|
86
|
+
file: relativePath,
|
|
87
|
+
ruleId: ruleId || "unknown",
|
|
88
|
+
codeHash,
|
|
89
|
+
message
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function fingerprintMatches(fp1, fp2) {
|
|
93
|
+
return (fp1.file === fp2.file && fp1.ruleId === fp2.ruleId && fp1.codeHash === fp2.codeHash && fp1.message === fp2.message);
|
|
94
|
+
}
|
|
95
|
+
async function detectAndHashEslintConfig() {
|
|
96
|
+
const configFiles = [
|
|
97
|
+
"eslint.config.mjs",
|
|
98
|
+
"eslint.config.js",
|
|
99
|
+
"eslint.config.ts",
|
|
100
|
+
".eslintrc.json",
|
|
101
|
+
".eslintrc.js",
|
|
102
|
+
".eslintrc.cjs",
|
|
103
|
+
".eslintrc.yml",
|
|
104
|
+
".eslintrc.yaml"
|
|
105
|
+
];
|
|
106
|
+
const foundConfigs = [];
|
|
107
|
+
for (const configFile of configFiles) {
|
|
108
|
+
const configPath = join(process.cwd(), configFile);
|
|
109
|
+
if (existsSync(configPath)) {
|
|
110
|
+
try {
|
|
111
|
+
const content = await readFile(configPath, "utf-8");
|
|
112
|
+
foundConfigs.push({ path: configFile, content });
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.warn(`Warning: Could not read ESLint config file ${configFile}: ${error}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (foundConfigs.length === 0) {
|
|
120
|
+
console.warn("Warning: No ESLint configuration file found!");
|
|
121
|
+
return createHash("sha256").update("no-config").digest("hex");
|
|
122
|
+
}
|
|
123
|
+
foundConfigs.sort((a, b) => a.path.localeCompare(b.path));
|
|
124
|
+
const hash = createHash("sha256");
|
|
125
|
+
for (const config of foundConfigs) {
|
|
126
|
+
hash.update(config.path);
|
|
127
|
+
hash.update("\0");
|
|
128
|
+
hash.update(config.content);
|
|
129
|
+
hash.update("\0");
|
|
130
|
+
}
|
|
131
|
+
return hash.digest("hex");
|
|
132
|
+
}
|
|
133
|
+
async function confirmEslintConfigChange(oldHash, newHash) {
|
|
134
|
+
console.log(`\n${kleur.yellow().bold("ā ļø ESLint Configuration Change Detected!")}\n`);
|
|
135
|
+
console.log(`${kleur.dim("The ESLint configuration has changed since the last run.")}\n`);
|
|
136
|
+
console.log(`${kleur.dim("Old config hash:")} ${kleur.gray(oldHash.substring(0, 16))}...`);
|
|
137
|
+
console.log(`${kleur.dim("New config hash:")} ${kleur.gray(newHash.substring(0, 16))}...\n`);
|
|
138
|
+
console.log(`${kleur.yellow("This could affect which warnings are detected.")}\n`);
|
|
139
|
+
console.log(`${kleur.dim("Please review the ESLint config changes carefully.")}\n`);
|
|
140
|
+
if (process.stdin.isPaused()) {
|
|
141
|
+
process.stdin.resume();
|
|
142
|
+
}
|
|
143
|
+
if (!process.stdin.isTTY) {
|
|
144
|
+
console.error("\nERROR: stdin is not a TTY. Cannot prompt for confirmation.");
|
|
145
|
+
console.error("This script requires an interactive terminal.");
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
const response = await prompts({
|
|
150
|
+
type: "confirm",
|
|
151
|
+
name: "confirmed",
|
|
152
|
+
message: "Do you want to proceed with the new ESLint configuration?",
|
|
153
|
+
initial: false,
|
|
154
|
+
stdin: process.stdin,
|
|
155
|
+
stdout: process.stdout
|
|
156
|
+
}, {
|
|
157
|
+
onCancel: () => {
|
|
158
|
+
console.log("\nCancelled by user. Exiting.");
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
if (!response || typeof response !== "object" || !("confirmed" in response)) {
|
|
163
|
+
console.error("\nERROR: No response received from prompt.");
|
|
164
|
+
console.error("Exiting for safety.");
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
return response.confirmed === true;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.error("\nERROR: Prompt failed:", error);
|
|
171
|
+
console.error("Exiting for safety.");
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function loadCache(currentConfigHash) {
|
|
176
|
+
try {
|
|
177
|
+
const content = await readFile(CACHE_FILE, "utf-8");
|
|
178
|
+
const parsed = cacheFileSchema.parse(JSON.parse(content));
|
|
179
|
+
if (parsed.version !== CACHE_VERSION) {
|
|
180
|
+
console.warn(`Warning: Cache version mismatch. Starting fresh.`);
|
|
181
|
+
return { version: CACHE_VERSION, eslintConfigHash: currentConfigHash, approvedWarnings: [] };
|
|
182
|
+
}
|
|
183
|
+
if (!parsed.eslintConfigHash) {
|
|
184
|
+
parsed.eslintConfigHash = currentConfigHash;
|
|
185
|
+
}
|
|
186
|
+
return { ...parsed, eslintConfigHash: parsed.eslintConfigHash };
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (error instanceof Error && "code" in error && typeof error.code === "string") {
|
|
190
|
+
if (error.code === "ENOENT") {
|
|
191
|
+
return {
|
|
192
|
+
version: CACHE_VERSION,
|
|
193
|
+
eslintConfigHash: currentConfigHash,
|
|
194
|
+
approvedWarnings: []
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
console.warn(`Warning: Could not read cache file: ${error}. Starting fresh.`);
|
|
199
|
+
return { version: CACHE_VERSION, eslintConfigHash: currentConfigHash, approvedWarnings: [] };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async function saveCache(cache) {
|
|
203
|
+
const tempFile = `${CACHE_FILE}.tmp`;
|
|
204
|
+
try {
|
|
205
|
+
await writeFile(tempFile, JSON.stringify(cache, null, 2) + "\n", "utf-8");
|
|
206
|
+
await rename(tempFile, CACHE_FILE);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
try {
|
|
210
|
+
const fs = await import("fs/promises");
|
|
211
|
+
try {
|
|
212
|
+
await fs.unlink(tempFile);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Ignore unlink errors
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Ignore import errors
|
|
220
|
+
}
|
|
221
|
+
throw new Error(`Failed to save cache file: ${error}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function runESLint() {
|
|
225
|
+
const result = spawnSync(ESLINT_CMD, [], {
|
|
226
|
+
encoding: "utf-8",
|
|
227
|
+
cwd: process.cwd(),
|
|
228
|
+
stdio: ["inherit", "pipe", "pipe"],
|
|
229
|
+
shell: true
|
|
230
|
+
});
|
|
231
|
+
if (result.stdout && result.stdout.trim()) {
|
|
232
|
+
try {
|
|
233
|
+
const parsed = z.array(eslintFileResultSchema).parse(JSON.parse(result.stdout));
|
|
234
|
+
return parsed;
|
|
235
|
+
}
|
|
236
|
+
catch (parseError) {
|
|
237
|
+
console.error("ESLint execution failed - could not parse JSON output:");
|
|
238
|
+
if (parseError instanceof z.ZodError) {
|
|
239
|
+
console.error("Zod validation error:", parseError.issues);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
console.error("JSON parse error:", parseError);
|
|
243
|
+
}
|
|
244
|
+
console.error("Raw output:", result.stdout.substring(0, 500));
|
|
245
|
+
if (result.stderr) {
|
|
246
|
+
console.error("Stderr:", result.stderr);
|
|
247
|
+
}
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
console.error("Failed to run ESLint - no output received");
|
|
252
|
+
if (result.stderr) {
|
|
253
|
+
console.error("Stderr:", result.stderr);
|
|
254
|
+
}
|
|
255
|
+
if (result.error) {
|
|
256
|
+
console.error("Error:", result.error);
|
|
257
|
+
}
|
|
258
|
+
process.exit(1);
|
|
259
|
+
}
|
|
260
|
+
async function processWarnings() {
|
|
261
|
+
const currentConfigHash = await detectAndHashEslintConfig();
|
|
262
|
+
const cache = await loadCache(currentConfigHash);
|
|
263
|
+
if (cache.eslintConfigHash !== currentConfigHash) {
|
|
264
|
+
const confirmed = await confirmEslintConfigChange(cache.eslintConfigHash, currentConfigHash);
|
|
265
|
+
if (!confirmed) {
|
|
266
|
+
console.log(kleur.red("\nā ESLint config change not confirmed. Exiting."));
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
console.log(kleur.green("\nā ESLint config change confirmed. Proceeding...\n"));
|
|
270
|
+
cache.eslintConfigHash = currentConfigHash;
|
|
271
|
+
}
|
|
272
|
+
console.log(kleur.blue("Running ESLint on entire project..."));
|
|
273
|
+
const eslintResults = runESLint();
|
|
274
|
+
const warnings = [];
|
|
275
|
+
for (const result of eslintResults) {
|
|
276
|
+
for (const msg of result.messages) {
|
|
277
|
+
if (msg.severity === 1) {
|
|
278
|
+
const lineContent = msg.source || (await readSourceLine(result.filePath, msg.line));
|
|
279
|
+
const sourceContext = await readSourceContext(result.filePath, msg.line, 3);
|
|
280
|
+
const fingerprint = createFingerprint(result.filePath, msg.ruleId, msg.message, lineContent);
|
|
281
|
+
warnings.push({
|
|
282
|
+
fingerprint,
|
|
283
|
+
filePath: result.filePath,
|
|
284
|
+
line: msg.line,
|
|
285
|
+
column: msg.column,
|
|
286
|
+
ruleId: msg.ruleId || "unknown",
|
|
287
|
+
message: msg.message,
|
|
288
|
+
codeSnippet: lineContent.trim(),
|
|
289
|
+
codeContext: sourceContext.context
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (warnings.length === 0) {
|
|
295
|
+
console.log(kleur.green("ā No ESLint warnings found."));
|
|
296
|
+
await saveCache(cache);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
console.log(`Found ${kleur.yellow().bold(warnings.length.toString())} ${kleur.yellow("warning(s)")}. Checking against cache...`);
|
|
300
|
+
const newWarnings = warnings.filter((w) => !cache.approvedWarnings.some((approved) => fingerprintMatches(approved, w.fingerprint)));
|
|
301
|
+
if (newWarnings.length === 0) {
|
|
302
|
+
console.log(kleur.green("ā All warnings are already approved."));
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
console.log(`\nFound ${kleur.cyan().bold(newWarnings.length.toString())} ${kleur.yellow("new warning(s)")} that need approval:\n`);
|
|
306
|
+
const rejectedWarnings = [];
|
|
307
|
+
for (let i = 0; i < newWarnings.length; i++) {
|
|
308
|
+
const warning = newWarnings[i];
|
|
309
|
+
console.log(`\n[${kleur.cyan().bold(`${i + 1}/${newWarnings.length}`)}] ${kleur.yellow().bold("Warning")}:`);
|
|
310
|
+
console.log(` ${kleur.dim("File")}: ${kleur.cyan(warning.fingerprint.file)}:${kleur.cyan().bold(warning.line.toString())}:${kleur.cyan().bold(warning.column.toString())}`);
|
|
311
|
+
console.log(` ${kleur.dim("Rule")}: ${kleur.magenta(warning.ruleId)}`);
|
|
312
|
+
console.log(` ${kleur.dim("Message")}: ${kleur.white(warning.message)}`);
|
|
313
|
+
if (warning.codeContext && warning.codeContext.length > 0) {
|
|
314
|
+
const contextStartLine = Math.max(1, warning.line - 3);
|
|
315
|
+
console.log(` ${kleur.dim("Code context")}:`);
|
|
316
|
+
warning.codeContext.forEach((contextLine, idx) => {
|
|
317
|
+
const lineNum = contextStartLine + idx;
|
|
318
|
+
const isWarningLine = lineNum === warning.line;
|
|
319
|
+
const marker = isWarningLine ? kleur.red().bold(">>>") : kleur.dim(" ");
|
|
320
|
+
const lineNumColor = isWarningLine ? kleur.red().bold : kleur.dim;
|
|
321
|
+
const codeColor = isWarningLine ? kleur.red : kleur.gray;
|
|
322
|
+
console.log(` ${marker} ${lineNumColor(lineNum.toString().padStart(4, " "))} ${kleur.dim("|")} ${codeColor(contextLine)}`);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
else if (warning.codeSnippet) {
|
|
326
|
+
console.log(` ${kleur.dim("Code")}: ${kleur.gray(warning.codeSnippet)}`);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
console.log(` ${kleur.dim("Code")}: ${kleur.dim("(no code available)")}`);
|
|
330
|
+
}
|
|
331
|
+
if (process.stdin.isPaused()) {
|
|
332
|
+
process.stdin.resume();
|
|
333
|
+
}
|
|
334
|
+
if (!process.stdin.isTTY) {
|
|
335
|
+
console.error("\nERROR: stdin is not a TTY. Cannot prompt for approval.");
|
|
336
|
+
console.error("This script requires an interactive terminal.");
|
|
337
|
+
process.exit(1);
|
|
338
|
+
}
|
|
339
|
+
let response;
|
|
340
|
+
try {
|
|
341
|
+
response = await prompts({
|
|
342
|
+
type: "select",
|
|
343
|
+
name: "action",
|
|
344
|
+
message: "What would you like to do? (REQUIRED - script will fail if no input)",
|
|
345
|
+
choices: [
|
|
346
|
+
{ title: "ā Approve (mark as approved)", value: "approve" },
|
|
347
|
+
{ title: "ā Reject (will show all rejections at end)", value: "reject" },
|
|
348
|
+
{ title: "ā Skip for now (ask again next time)", value: "skip" }
|
|
349
|
+
],
|
|
350
|
+
stdin: process.stdin,
|
|
351
|
+
stdout: process.stdout
|
|
352
|
+
}, {
|
|
353
|
+
onCancel: () => {
|
|
354
|
+
console.log("\nCancelled by user. Commit aborted.");
|
|
355
|
+
process.exit(1);
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
console.error("\nERROR: Prompt failed:", error);
|
|
361
|
+
console.error("This likely means stdin is not properly connected.");
|
|
362
|
+
console.error("Commit aborted for safety.");
|
|
363
|
+
process.exit(1);
|
|
364
|
+
}
|
|
365
|
+
if (!response || typeof response !== "object" || !("action" in response)) {
|
|
366
|
+
console.error("\nERROR: No response received from prompt.");
|
|
367
|
+
console.error("Response received:", JSON.stringify(response));
|
|
368
|
+
console.error("This likely means stdin is not properly connected or not interactive.");
|
|
369
|
+
console.error("Please ensure your git hook runs in an interactive terminal,");
|
|
370
|
+
console.error("or run 'npm run lint:check-warnings' manually before committing.");
|
|
371
|
+
console.error("\nNew warnings found:");
|
|
372
|
+
for (const warning of newWarnings.slice(i)) {
|
|
373
|
+
console.error(` - ${warning.fingerprint.file}:${warning.line}:${warning.column} - ${warning.ruleId}: ${warning.message}`);
|
|
374
|
+
}
|
|
375
|
+
process.exit(1);
|
|
376
|
+
}
|
|
377
|
+
const action = response.action;
|
|
378
|
+
if (typeof action !== "string" || action.length === 0) {
|
|
379
|
+
console.error(`\nERROR: Invalid or empty action received: ${JSON.stringify(action)}`);
|
|
380
|
+
console.error("Response object:", JSON.stringify(response));
|
|
381
|
+
console.error("This likely means prompts didn't wait for user input.");
|
|
382
|
+
console.error("Commit aborted for safety.");
|
|
383
|
+
process.exit(1);
|
|
384
|
+
}
|
|
385
|
+
if (!["approve", "reject", "skip"].includes(action)) {
|
|
386
|
+
console.error(`\nERROR: Invalid action value: ${action}`);
|
|
387
|
+
console.error("Expected one of: approve, reject, skip");
|
|
388
|
+
console.error("Commit aborted for safety.");
|
|
389
|
+
process.exit(1);
|
|
390
|
+
}
|
|
391
|
+
if (action === "approve") {
|
|
392
|
+
cache.approvedWarnings.push(warning.fingerprint);
|
|
393
|
+
await saveCache(cache);
|
|
394
|
+
console.log(kleur.green(" ā Approved and saved to cache"));
|
|
395
|
+
}
|
|
396
|
+
else if (action === "reject") {
|
|
397
|
+
rejectedWarnings.push({
|
|
398
|
+
file: warning.fingerprint.file,
|
|
399
|
+
line: warning.line,
|
|
400
|
+
column: warning.column,
|
|
401
|
+
ruleId: warning.ruleId,
|
|
402
|
+
message: warning.message,
|
|
403
|
+
codeSnippet: warning.codeSnippet,
|
|
404
|
+
codeContext: warning.codeContext
|
|
405
|
+
});
|
|
406
|
+
console.log(kleur.red(" ā Rejected (will be shown at end)"));
|
|
407
|
+
}
|
|
408
|
+
else if (action === "skip") {
|
|
409
|
+
console.log(kleur.yellow(" ā Skipped"));
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
console.log(kleur.red("\nUnknown action. Commit aborted."));
|
|
413
|
+
process.exit(1);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (rejectedWarnings.length > 0) {
|
|
417
|
+
console.log(`\n\n${kleur.red().bold("=".repeat(80))}`);
|
|
418
|
+
console.log(kleur
|
|
419
|
+
.red()
|
|
420
|
+
.bold(`ā COMMIT ABORTED: ${kleur.yellow().bold(rejectedWarnings.length.toString())} ${kleur.yellow("warning(s)")} were rejected`));
|
|
421
|
+
console.log(kleur.red().bold("=".repeat(80)) + "\n");
|
|
422
|
+
console.log(kleur.yellow().bold("Here are the ESLint warnings that need to be fixed:\n"));
|
|
423
|
+
for (let i = 0; i < rejectedWarnings.length; i++) {
|
|
424
|
+
const w = rejectedWarnings[i];
|
|
425
|
+
console.log(`${kleur.cyan().bold(`${i + 1}.`)} ${kleur.cyan(w.file)}:${kleur.cyan().bold(w.line.toString())}:${kleur.cyan().bold(w.column.toString())}`);
|
|
426
|
+
console.log(` ${kleur.dim("Rule")}: ${kleur.magenta(w.ruleId)}`);
|
|
427
|
+
console.log(` ${kleur.dim("Message")}: ${kleur.white(w.message)}`);
|
|
428
|
+
if (w.codeContext && w.codeContext.length > 0) {
|
|
429
|
+
const contextStartLine = Math.max(1, w.line - 3);
|
|
430
|
+
console.log(` ${kleur.dim("Code context")}:`);
|
|
431
|
+
w.codeContext.forEach((contextLine, idx) => {
|
|
432
|
+
const lineNum = contextStartLine + idx;
|
|
433
|
+
const isWarningLine = lineNum === w.line;
|
|
434
|
+
const marker = isWarningLine ? kleur.red().bold(">>>") : kleur.dim(" ");
|
|
435
|
+
const lineNumColor = isWarningLine ? kleur.red().bold : kleur.dim;
|
|
436
|
+
const codeColor = isWarningLine ? kleur.red : kleur.gray;
|
|
437
|
+
console.log(` ${marker} ${lineNumColor(lineNum.toString().padStart(4, " "))} ${kleur.dim("|")} ${codeColor(contextLine)}`);
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
else if (w.codeSnippet) {
|
|
441
|
+
console.log(` ${kleur.dim("Code")}: ${kleur.gray(w.codeSnippet)}`);
|
|
442
|
+
}
|
|
443
|
+
console.log("");
|
|
444
|
+
}
|
|
445
|
+
console.log(`${kleur.cyan().bold("=".repeat(80))}`);
|
|
446
|
+
console.log(kleur.cyan().bold("AI-Friendly Fix Request:"));
|
|
447
|
+
console.log(kleur.cyan().bold("=".repeat(80)) + "\n");
|
|
448
|
+
console.log(kleur.yellow().bold("Please fix the following ESLint warnings:\n"));
|
|
449
|
+
const warningsList = rejectedWarnings
|
|
450
|
+
.map((w, i) => {
|
|
451
|
+
let codeSection = "";
|
|
452
|
+
if (w.codeContext && w.codeContext.length > 0) {
|
|
453
|
+
const contextStartLine = Math.max(1, w.line - 3);
|
|
454
|
+
const contextLines = w.codeContext
|
|
455
|
+
.map((line, idx) => {
|
|
456
|
+
const lineNum = contextStartLine + idx;
|
|
457
|
+
const marker = lineNum === w.line ? ">>>" : " ";
|
|
458
|
+
return `${marker} ${lineNum.toString().padStart(4, " ")} | ${line}`;
|
|
459
|
+
})
|
|
460
|
+
.join("\n");
|
|
461
|
+
codeSection = `\n Code context:\n${contextLines}`;
|
|
462
|
+
}
|
|
463
|
+
else if (w.codeSnippet) {
|
|
464
|
+
codeSection = `\n Current code: ${w.codeSnippet}`;
|
|
465
|
+
}
|
|
466
|
+
return `${i + 1}. ${w.file}:${w.line}:${w.column}\n Rule: ${w.ruleId}\n Issue: ${w.message}${codeSection}`;
|
|
467
|
+
})
|
|
468
|
+
.join("\n\n");
|
|
469
|
+
console.log(warningsList);
|
|
470
|
+
console.log(`\n${kleur.red().bold("=".repeat(80))}\n`);
|
|
471
|
+
process.exit(1);
|
|
472
|
+
}
|
|
473
|
+
const currentWarningFingerprints = new Set(warnings.map((w) => JSON.stringify(w.fingerprint)));
|
|
474
|
+
const originalCacheSize = cache.approvedWarnings.length;
|
|
475
|
+
cache.approvedWarnings = cache.approvedWarnings.filter((approved) => {
|
|
476
|
+
const approvedKey = JSON.stringify(approved);
|
|
477
|
+
return currentWarningFingerprints.has(approvedKey);
|
|
478
|
+
});
|
|
479
|
+
const fixedCount = originalCacheSize - cache.approvedWarnings.length;
|
|
480
|
+
await saveCache(cache);
|
|
481
|
+
if (fixedCount > 0) {
|
|
482
|
+
console.log(`\n${"=".repeat(80)}`);
|
|
483
|
+
console.log(`š SUCCESS! ${fixedCount} warning(s) have been fixed!`);
|
|
484
|
+
console.log(`${"=".repeat(80)}`);
|
|
485
|
+
console.log(`\nGreat work! ${fixedCount} previously approved warning(s) are no longer present in the codebase.`);
|
|
486
|
+
console.log("They've been automatically removed from the cache.\n");
|
|
487
|
+
}
|
|
488
|
+
if (newWarnings.length > 0) {
|
|
489
|
+
const approvedCount = newWarnings.filter((w) => cache.approvedWarnings.some((approved) => fingerprintMatches(approved, w.fingerprint))).length;
|
|
490
|
+
console.log(`\nā Cache updated:`);
|
|
491
|
+
console.log(` - ${approvedCount} new warning(s) approved`);
|
|
492
|
+
console.log(` - ${fixedCount} warning(s) fixed and removed from cache`);
|
|
493
|
+
console.log(` - Total approved warnings in cache: ${cache.approvedWarnings.length}`);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
console.log(`\nā All warnings are already approved.`);
|
|
497
|
+
if (fixedCount > 0) {
|
|
498
|
+
console.log(` - ${fixedCount} warning(s) fixed and removed from cache`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
;
|
|
503
|
+
(async () => {
|
|
504
|
+
try {
|
|
505
|
+
await processWarnings();
|
|
506
|
+
}
|
|
507
|
+
catch (error) {
|
|
508
|
+
console.error("Fatal error:", error);
|
|
509
|
+
process.exit(1);
|
|
510
|
+
}
|
|
511
|
+
finally {
|
|
512
|
+
if (process.stdin.setRawMode) {
|
|
513
|
+
try {
|
|
514
|
+
process.stdin.setRawMode(false);
|
|
515
|
+
}
|
|
516
|
+
catch {
|
|
517
|
+
// Ignore errors when restoring
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
})();
|
|
522
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vibelint/vibelint-wizard",
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"description": "Interactive ESLint warning approval tool",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"vibelint-wizard": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"keywords": [
|
|
15
|
+
"eslint",
|
|
16
|
+
"warnings",
|
|
17
|
+
"approval",
|
|
18
|
+
"lint"
|
|
19
|
+
],
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=18"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"kleur": "^3.0.3",
|
|
26
|
+
"prompts": "^2.4.2",
|
|
27
|
+
"zod": "^3.23.8"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/prompts": "^2.4.9"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc",
|
|
34
|
+
"clean": "rm -rf dist"
|
|
35
|
+
}
|
|
36
|
+
}
|