@codeledger/cli 0.6.7 → 0.6.9
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/dist/architecture-graph/dependency-scanner.d.ts +16 -0
- package/dist/architecture-graph/dependency-scanner.d.ts.map +1 -0
- package/dist/architecture-graph/dependency-scanner.js +96 -0
- package/dist/architecture-graph/dependency-scanner.js.map +1 -0
- package/dist/architecture-graph/graph-builder.d.ts +70 -0
- package/dist/architecture-graph/graph-builder.d.ts.map +1 -0
- package/dist/architecture-graph/graph-builder.js +231 -0
- package/dist/architecture-graph/graph-builder.js.map +1 -0
- package/dist/architecture-graph/index.d.ts +4 -0
- package/dist/architecture-graph/index.d.ts.map +1 -0
- package/dist/architecture-graph/index.js +7 -0
- package/dist/architecture-graph/index.js.map +1 -0
- package/dist/architecture-graph/service-scanner.d.ts +22 -0
- package/dist/architecture-graph/service-scanner.d.ts.map +1 -0
- package/dist/architecture-graph/service-scanner.js +181 -0
- package/dist/architecture-graph/service-scanner.js.map +1 -0
- package/dist/commands/activate.d.ts.map +1 -1
- package/dist/commands/activate.js +16 -1
- package/dist/commands/activate.js.map +1 -1
- package/dist/commands/audit-export.d.ts +8 -0
- package/dist/commands/audit-export.d.ts.map +1 -0
- package/dist/commands/audit-export.js +190 -0
- package/dist/commands/audit-export.js.map +1 -0
- package/dist/commands/commit-msg.d.ts +58 -0
- package/dist/commands/commit-msg.d.ts.map +1 -0
- package/dist/commands/commit-msg.js +461 -0
- package/dist/commands/commit-msg.js.map +1 -0
- package/dist/commands/fix.d.ts +7 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +107 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/graph.d.ts +8 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +29 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +14 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/intent.d.ts +3 -1
- package/dist/commands/intent.d.ts.map +1 -1
- package/dist/commands/intent.js +68 -2
- package/dist/commands/intent.js.map +1 -1
- package/dist/commands/learn.d.ts +8 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +33 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/pack.d.ts +12 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +75 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/pr-summary.d.ts +59 -0
- package/dist/commands/pr-summary.d.ts.map +1 -0
- package/dist/commands/pr-summary.js +524 -0
- package/dist/commands/pr-summary.js.map +1 -0
- package/dist/commands/serve.d.ts +13 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +179 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/session-cleanup.js +1 -0
- package/dist/commands/session-cleanup.js.map +1 -1
- package/dist/commands/session-summary.d.ts.map +1 -1
- package/dist/commands/session-summary.js +135 -3
- package/dist/commands/session-summary.js.map +1 -1
- package/dist/commands/setup-ci.d.ts +6 -4
- package/dist/commands/setup-ci.d.ts.map +1 -1
- package/dist/commands/setup-ci.js +228 -23
- package/dist/commands/setup-ci.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +35 -3
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +127 -4
- package/dist/index.js.map +1 -1
- package/dist/intent/extractor.d.ts +15 -0
- package/dist/intent/extractor.d.ts.map +1 -0
- package/dist/intent/extractor.js +149 -0
- package/dist/intent/extractor.js.map +1 -0
- package/dist/intent/fetcher.d.ts +33 -0
- package/dist/intent/fetcher.d.ts.map +1 -0
- package/dist/intent/fetcher.js +364 -0
- package/dist/intent/fetcher.js.map +1 -0
- package/dist/intent/loader.d.ts +26 -0
- package/dist/intent/loader.d.ts.map +1 -0
- package/dist/intent/loader.js +80 -0
- package/dist/intent/loader.js.map +1 -0
- package/dist/intent/types.d.ts +33 -0
- package/dist/intent/types.d.ts.map +1 -0
- package/dist/intent/types.js +9 -0
- package/dist/intent/types.js.map +1 -0
- package/dist/project-config.d.ts +38 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +206 -0
- package/dist/project-config.js.map +1 -0
- package/dist/review-intelligence/detectors/architecture-graph.d.ts +18 -0
- package/dist/review-intelligence/detectors/architecture-graph.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/architecture-graph.js +73 -0
- package/dist/review-intelligence/detectors/architecture-graph.js.map +1 -0
- package/dist/review-intelligence/detectors/cjs-named-import.d.ts +13 -0
- package/dist/review-intelligence/detectors/cjs-named-import.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/cjs-named-import.js +134 -0
- package/dist/review-intelligence/detectors/cjs-named-import.js.map +1 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.d.ts +17 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.js +93 -0
- package/dist/review-intelligence/detectors/exact-count-assertion.js.map +1 -0
- package/dist/review-intelligence/detectors/exports-map-missing.d.ts +14 -0
- package/dist/review-intelligence/detectors/exports-map-missing.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/exports-map-missing.js +131 -0
- package/dist/review-intelligence/detectors/exports-map-missing.js.map +1 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts +12 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.js +82 -0
- package/dist/review-intelligence/detectors/fixture-keyword-drift.js.map +1 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.d.ts +12 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.js +97 -0
- package/dist/review-intelligence/detectors/optional-infra-crash.js.map +1 -0
- package/dist/review-intelligence/detectors/pack-rules.d.ts +16 -0
- package/dist/review-intelligence/detectors/pack-rules.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/pack-rules.js +107 -0
- package/dist/review-intelligence/detectors/pack-rules.js.map +1 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.d.ts +11 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.d.ts.map +1 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.js +100 -0
- package/dist/review-intelligence/detectors/undeclared-dependency.js.map +1 -0
- package/dist/review-intelligence/engine/ast-parser.d.ts +90 -0
- package/dist/review-intelligence/engine/ast-parser.d.ts.map +1 -0
- package/dist/review-intelligence/engine/ast-parser.js +266 -0
- package/dist/review-intelligence/engine/ast-parser.js.map +1 -0
- package/dist/review-intelligence/engine/dataflow.d.ts +34 -0
- package/dist/review-intelligence/engine/dataflow.d.ts.map +1 -0
- package/dist/review-intelligence/engine/dataflow.js +115 -0
- package/dist/review-intelligence/engine/dataflow.js.map +1 -0
- package/dist/review-intelligence/engine/index.d.ts +7 -0
- package/dist/review-intelligence/engine/index.d.ts.map +1 -0
- package/dist/review-intelligence/engine/index.js +7 -0
- package/dist/review-intelligence/engine/index.js.map +1 -0
- package/dist/review-intelligence/engine/symbol-resolver.d.ts +34 -0
- package/dist/review-intelligence/engine/symbol-resolver.d.ts.map +1 -0
- package/dist/review-intelligence/engine/symbol-resolver.js +106 -0
- package/dist/review-intelligence/engine/symbol-resolver.js.map +1 -0
- package/dist/review-intelligence/fixes/index.d.ts +54 -0
- package/dist/review-intelligence/fixes/index.d.ts.map +1 -0
- package/dist/review-intelligence/fixes/index.js +346 -0
- package/dist/review-intelligence/fixes/index.js.map +1 -0
- package/dist/review-intelligence/index.d.ts +4 -1
- package/dist/review-intelligence/index.d.ts.map +1 -1
- package/dist/review-intelligence/index.js +22 -3
- package/dist/review-intelligence/index.js.map +1 -1
- package/dist/review-intelligence/invariants.d.ts +15 -0
- package/dist/review-intelligence/invariants.d.ts.map +1 -1
- package/dist/review-intelligence/invariants.js +48 -4
- package/dist/review-intelligence/invariants.js.map +1 -1
- package/dist/review-intelligence/learning/index.d.ts +39 -0
- package/dist/review-intelligence/learning/index.d.ts.map +1 -0
- package/dist/review-intelligence/learning/index.js +265 -0
- package/dist/review-intelligence/learning/index.js.map +1 -0
- package/dist/review-intelligence/packs/index.d.ts +69 -0
- package/dist/review-intelligence/packs/index.d.ts.map +1 -0
- package/dist/review-intelligence/packs/index.js +168 -0
- package/dist/review-intelligence/packs/index.js.map +1 -0
- package/dist/review-intelligence/repair-guidance.d.ts.map +1 -1
- package/dist/review-intelligence/repair-guidance.js +46 -0
- package/dist/review-intelligence/repair-guidance.js.map +1 -1
- package/dist/review-intelligence/types.d.ts +18 -9
- package/dist/review-intelligence/types.d.ts.map +1 -1
- package/dist/review-intelligence/types.js +9 -1
- package/dist/review-intelligence/types.js.map +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +23 -128
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/templates/hooks.d.ts.map +1 -1
- package/dist/templates/hooks.js +39 -0
- package/dist/templates/hooks.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Represents a scope block (try/catch, if, function) */
|
|
2
|
+
export interface ScopeBlock {
|
|
3
|
+
kind: 'try' | 'catch' | 'if' | 'function' | 'arrow' | 'block';
|
|
4
|
+
startLine: number;
|
|
5
|
+
endLine: number;
|
|
6
|
+
}
|
|
7
|
+
/** Result of checking if a line is wrapped in try/catch */
|
|
8
|
+
export interface TryCatchInfo {
|
|
9
|
+
isWrapped: boolean;
|
|
10
|
+
tryStartLine?: number;
|
|
11
|
+
catchStartLine?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Find all try/catch blocks in source code.
|
|
15
|
+
* Returns pairs of (try start line, catch start line, block end line).
|
|
16
|
+
*/
|
|
17
|
+
export declare function findTryCatchBlocks(content: string): ScopeBlock[];
|
|
18
|
+
/**
|
|
19
|
+
* Check if a specific line is inside a try/catch block.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isInsideTryCatch(content: string, targetLine: number): TryCatchInfo;
|
|
22
|
+
/**
|
|
23
|
+
* Check if a variable assigned on one line is used in a function call nearby.
|
|
24
|
+
* Useful for detecting patterns like:
|
|
25
|
+
* const result = schema.safeParse(body);
|
|
26
|
+
* if (!result.success) return sendInvalidRequest(reply);
|
|
27
|
+
*/
|
|
28
|
+
export declare function tracksVariableUsage(content: string, variableName: string, nearLine: number, windowSize?: number): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Detect guard-return patterns: if (condition) return/throw before a target line.
|
|
31
|
+
* This helps detect validation patterns that guard subsequent code.
|
|
32
|
+
*/
|
|
33
|
+
export declare function hasGuardBefore(content: string, targetLine: number, guardPattern: RegExp, windowSize?: number): boolean;
|
|
34
|
+
//# sourceMappingURL=dataflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../../src/review-intelligence/engine/dataflow.ts"],"names":[],"mappings":"AAOA,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CA6ChE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAoBlF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAW,GACtB,OAAO,CAaT;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,UAAU,GAAE,MAAW,GACtB,OAAO,CAqBT"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// ─── Dataflow Analysis ──────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Lightweight dataflow analysis for detecting patterns like:
|
|
4
|
+
// - try/catch wrapping around specific calls
|
|
5
|
+
// - variable assignments flowing into function arguments
|
|
6
|
+
// - guard patterns (if-return before usage)
|
|
7
|
+
/**
|
|
8
|
+
* Find all try/catch blocks in source code.
|
|
9
|
+
* Returns pairs of (try start line, catch start line, block end line).
|
|
10
|
+
*/
|
|
11
|
+
export function findTryCatchBlocks(content) {
|
|
12
|
+
const blocks = [];
|
|
13
|
+
const lines = content.split('\n');
|
|
14
|
+
const braceStack = [];
|
|
15
|
+
for (let i = 0; i < lines.length; i++) {
|
|
16
|
+
const line = lines[i];
|
|
17
|
+
const trimmed = line.trim();
|
|
18
|
+
if (/^\s*try\s*\{/.test(line) || trimmed === 'try {') {
|
|
19
|
+
braceStack.push({ kind: 'try', startLine: i + 1 });
|
|
20
|
+
}
|
|
21
|
+
else if (/^\s*catch\s*/.test(line)) {
|
|
22
|
+
braceStack.push({ kind: 'catch', startLine: i + 1 });
|
|
23
|
+
}
|
|
24
|
+
// Count braces to track block ends
|
|
25
|
+
const opens = (line.match(/\{/g) ?? []).length;
|
|
26
|
+
const closes = (line.match(/\}/g) ?? []).length;
|
|
27
|
+
for (let c = 0; c < closes; c++) {
|
|
28
|
+
if (braceStack.length > 0) {
|
|
29
|
+
const top = braceStack.pop();
|
|
30
|
+
blocks.push({
|
|
31
|
+
kind: top.kind,
|
|
32
|
+
startLine: top.startLine,
|
|
33
|
+
endLine: i + 1,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Re-push opens (minus the ones that also close on the same line)
|
|
38
|
+
// This is a simplified heuristic — for precise analysis, we'd need
|
|
39
|
+
// a real parser, but this works for common patterns
|
|
40
|
+
for (let o = 0; o < opens - closes; o++) {
|
|
41
|
+
if (/^\s*try\s*\{/.test(line) || trimmed === 'try {') {
|
|
42
|
+
// Already pushed above
|
|
43
|
+
}
|
|
44
|
+
else if (/^\s*catch\s*/.test(line)) {
|
|
45
|
+
// Already pushed above
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
braceStack.push({ kind: 'block', startLine: i + 1 });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return blocks;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if a specific line is inside a try/catch block.
|
|
56
|
+
*/
|
|
57
|
+
export function isInsideTryCatch(content, targetLine) {
|
|
58
|
+
const blocks = findTryCatchBlocks(content);
|
|
59
|
+
const tryBlocks = blocks.filter((b) => b.kind === 'try');
|
|
60
|
+
for (const tryBlock of tryBlocks) {
|
|
61
|
+
if (targetLine >= tryBlock.startLine && targetLine <= tryBlock.endLine) {
|
|
62
|
+
// Find the corresponding catch block
|
|
63
|
+
const catchBlock = blocks.find((b) => b.kind === 'catch' && b.startLine > tryBlock.endLine - 2 && b.startLine <= tryBlock.endLine + 1);
|
|
64
|
+
return {
|
|
65
|
+
isWrapped: true,
|
|
66
|
+
tryStartLine: tryBlock.startLine,
|
|
67
|
+
catchStartLine: catchBlock?.startLine,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { isWrapped: false };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a variable assigned on one line is used in a function call nearby.
|
|
75
|
+
* Useful for detecting patterns like:
|
|
76
|
+
* const result = schema.safeParse(body);
|
|
77
|
+
* if (!result.success) return sendInvalidRequest(reply);
|
|
78
|
+
*/
|
|
79
|
+
export function tracksVariableUsage(content, variableName, nearLine, windowSize = 10) {
|
|
80
|
+
const lines = content.split('\n');
|
|
81
|
+
const start = Math.max(0, nearLine - 1 - windowSize);
|
|
82
|
+
const end = Math.min(lines.length, nearLine - 1 + windowSize);
|
|
83
|
+
for (let i = start; i < end; i++) {
|
|
84
|
+
const line = lines[i];
|
|
85
|
+
if (line && new RegExp(`\\b${variableName}\\b`).test(line)) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Detect guard-return patterns: if (condition) return/throw before a target line.
|
|
93
|
+
* This helps detect validation patterns that guard subsequent code.
|
|
94
|
+
*/
|
|
95
|
+
export function hasGuardBefore(content, targetLine, guardPattern, windowSize = 15) {
|
|
96
|
+
const lines = content.split('\n');
|
|
97
|
+
const start = Math.max(0, targetLine - 1 - windowSize);
|
|
98
|
+
const end = targetLine - 1;
|
|
99
|
+
for (let i = start; i < end; i++) {
|
|
100
|
+
const line = lines[i];
|
|
101
|
+
if (line && guardPattern.test(line)) {
|
|
102
|
+
// Check if this guard includes a return/throw
|
|
103
|
+
if (/\b(?:return|throw)\b/.test(line)) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
// Check next line for return/throw
|
|
107
|
+
const nextLine = lines[i + 1];
|
|
108
|
+
if (nextLine && /\b(?:return|throw)\b/.test(nextLine)) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=dataflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../../src/review-intelligence/engine/dataflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { isAnalyzableFile, parseImports, parseCallExpressions, parseGenerics, parseExports, analyzeFile, } from './ast-parser.js';
|
|
2
|
+
export type { ImportInfo, CallExpressionInfo, GenericInfo, ExportInfo, FileAnalysis, } from './ast-parser.js';
|
|
3
|
+
export { findTryCatchBlocks, isInsideTryCatch, tracksVariableUsage, hasGuardBefore, } from './dataflow.js';
|
|
4
|
+
export type { ScopeBlock, TryCatchInfo } from './dataflow.js';
|
|
5
|
+
export { resolveModule, isWorkspacePackage, extractExternalPackages, isNamedCjsImport, } from './symbol-resolver.js';
|
|
6
|
+
export type { ModuleKind, ResolvedModule } from './symbol-resolver.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/review-intelligence/engine/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// ─── AST Engine ─────────────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Re-exports for the AST analysis engine.
|
|
4
|
+
export { isAnalyzableFile, parseImports, parseCallExpressions, parseGenerics, parseExports, analyzeFile, } from './ast-parser.js';
|
|
5
|
+
export { findTryCatchBlocks, isInsideTryCatch, tracksVariableUsage, hasGuardBefore, } from './dataflow.js';
|
|
6
|
+
export { resolveModule, isWorkspacePackage, extractExternalPackages, isNamedCjsImport, } from './symbol-resolver.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/review-intelligence/engine/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,0CAA0C;AAE1C,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AASzB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Classification of an import source */
|
|
2
|
+
export type ModuleKind = 'builtin' | 'local' | 'external' | 'workspace';
|
|
3
|
+
/** Resolved module information */
|
|
4
|
+
export interface ResolvedModule {
|
|
5
|
+
/** Original import specifier */
|
|
6
|
+
source: string;
|
|
7
|
+
/** Classification */
|
|
8
|
+
kind: ModuleKind;
|
|
9
|
+
/** Bare package name (e.g. 'lodash' from 'lodash/fp') */
|
|
10
|
+
packageName?: string;
|
|
11
|
+
/** Subpath (e.g. '/fp' from 'lodash/fp') */
|
|
12
|
+
subpath?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve an import source to its module classification.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveModule(source: string): ResolvedModule;
|
|
18
|
+
/**
|
|
19
|
+
* Check if a package name looks like a workspace package.
|
|
20
|
+
* Common patterns: @org/package where org matches the monorepo scope.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isWorkspacePackage(packageName: string, workspaceScopes: string[]): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Extract all unique external package names from a list of imports.
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractExternalPackages(imports: Array<{
|
|
27
|
+
source: string;
|
|
28
|
+
}>): Set<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a CJS module is being imported with named imports.
|
|
31
|
+
* This is a common ESM/CJS interop issue.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isNamedCjsImport(namedImports: string[], source: string, knownCjsPackages: Set<string>): boolean;
|
|
34
|
+
//# sourceMappingURL=symbol-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-resolver.d.ts","sourceRoot":"","sources":["../../../src/review-intelligence/engine/symbol-resolver.ts"],"names":[],"mappings":"AAQA,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AAExE,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAqD5D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACjC,GAAG,CAAC,MAAM,CAAC,CAWb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,OAAO,CAOT"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// ─── Symbol Resolver ────────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Resolves import sources to determine:
|
|
4
|
+
// - Whether a module is a Node.js builtin
|
|
5
|
+
// - Whether a module is a local file (relative import)
|
|
6
|
+
// - Whether a module is an external package
|
|
7
|
+
// - The bare package name (for dependency checking)
|
|
8
|
+
/** Well-known Node.js builtin modules */
|
|
9
|
+
const NODE_BUILTINS = new Set([
|
|
10
|
+
'assert', 'async_hooks', 'buffer', 'child_process', 'cluster', 'console',
|
|
11
|
+
'constants', 'crypto', 'dgram', 'diagnostics_channel', 'dns', 'domain',
|
|
12
|
+
'events', 'fs', 'http', 'http2', 'https', 'inspector', 'module', 'net',
|
|
13
|
+
'os', 'path', 'perf_hooks', 'process', 'punycode', 'querystring', 'readline',
|
|
14
|
+
'repl', 'stream', 'string_decoder', 'sys', 'timers', 'tls', 'trace_events',
|
|
15
|
+
'tty', 'url', 'util', 'v8', 'vm', 'wasi', 'worker_threads', 'zlib',
|
|
16
|
+
'test', 'sqlite',
|
|
17
|
+
]);
|
|
18
|
+
/**
|
|
19
|
+
* Resolve an import source to its module classification.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveModule(source) {
|
|
22
|
+
// node: protocol builtins
|
|
23
|
+
if (source.startsWith('node:')) {
|
|
24
|
+
return {
|
|
25
|
+
source,
|
|
26
|
+
kind: 'builtin',
|
|
27
|
+
packageName: source,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Bare builtin names
|
|
31
|
+
const bareName = source.split('/')[0];
|
|
32
|
+
if (NODE_BUILTINS.has(bareName)) {
|
|
33
|
+
return {
|
|
34
|
+
source,
|
|
35
|
+
kind: 'builtin',
|
|
36
|
+
packageName: bareName,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Relative imports
|
|
40
|
+
if (source.startsWith('.') || source.startsWith('/')) {
|
|
41
|
+
return {
|
|
42
|
+
source,
|
|
43
|
+
kind: 'local',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Scoped packages: @scope/package or @scope/package/subpath
|
|
47
|
+
if (source.startsWith('@')) {
|
|
48
|
+
const parts = source.split('/');
|
|
49
|
+
const packageName = parts.length >= 2 ? `${parts[0]}/${parts[1]}` : source;
|
|
50
|
+
const subpath = parts.length > 2 ? '/' + parts.slice(2).join('/') : undefined;
|
|
51
|
+
return {
|
|
52
|
+
source,
|
|
53
|
+
kind: 'external',
|
|
54
|
+
packageName,
|
|
55
|
+
subpath,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// Regular external packages: package or package/subpath
|
|
59
|
+
const parts = source.split('/');
|
|
60
|
+
const packageName = parts[0];
|
|
61
|
+
const subpath = parts.length > 1 ? '/' + parts.slice(1).join('/') : undefined;
|
|
62
|
+
return {
|
|
63
|
+
source,
|
|
64
|
+
kind: 'external',
|
|
65
|
+
packageName,
|
|
66
|
+
subpath,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if a package name looks like a workspace package.
|
|
71
|
+
* Common patterns: @org/package where org matches the monorepo scope.
|
|
72
|
+
*/
|
|
73
|
+
export function isWorkspacePackage(packageName, workspaceScopes) {
|
|
74
|
+
for (const scope of workspaceScopes) {
|
|
75
|
+
if (packageName.startsWith(scope + '/')) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Extract all unique external package names from a list of imports.
|
|
83
|
+
*/
|
|
84
|
+
export function extractExternalPackages(imports) {
|
|
85
|
+
const packages = new Set();
|
|
86
|
+
for (const imp of imports) {
|
|
87
|
+
const resolved = resolveModule(imp.source);
|
|
88
|
+
if (resolved.kind === 'external' && resolved.packageName) {
|
|
89
|
+
packages.add(resolved.packageName);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return packages;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if a CJS module is being imported with named imports.
|
|
96
|
+
* This is a common ESM/CJS interop issue.
|
|
97
|
+
*/
|
|
98
|
+
export function isNamedCjsImport(namedImports, source, knownCjsPackages) {
|
|
99
|
+
if (namedImports.length === 0)
|
|
100
|
+
return false;
|
|
101
|
+
const resolved = resolveModule(source);
|
|
102
|
+
if (resolved.kind !== 'external')
|
|
103
|
+
return false;
|
|
104
|
+
return knownCjsPackages.has(resolved.packageName ?? source);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=symbol-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-resolver.js","sourceRoot":"","sources":["../../../src/review-intelligence/engine/symbol-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ReviewFinding } from '../types.js';
|
|
2
|
+
/** Result of applying an auto-fix */
|
|
3
|
+
export interface FixResult {
|
|
4
|
+
/** The rule ID that was fixed */
|
|
5
|
+
rule_id: string;
|
|
6
|
+
/** File that was modified */
|
|
7
|
+
file: string;
|
|
8
|
+
/** New file content after fix */
|
|
9
|
+
newContent: string;
|
|
10
|
+
/** Human-readable description of what was changed */
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
/** A fixer function */
|
|
14
|
+
export type Fixer = (finding: ReviewFinding, content: string) => FixResult | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Register a fixer for a rule ID. Replaces any existing fixer for that rule.
|
|
17
|
+
*/
|
|
18
|
+
export declare function registerFixer(ruleId: string, fixer: Fixer): void;
|
|
19
|
+
/**
|
|
20
|
+
* Remove a registered fixer by rule ID. No-op if not found.
|
|
21
|
+
*/
|
|
22
|
+
export declare function unregisterFixer(ruleId: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Register a fallback fixer that applies to findings matching a predicate.
|
|
25
|
+
*/
|
|
26
|
+
export declare function registerFallbackFixer(matches: (f: ReviewFinding) => boolean, fixer: Fixer): void;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a finding has an auto-fix available.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isFixable(finding: ReviewFinding): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Apply an auto-fix to a finding.
|
|
33
|
+
* Returns undefined if no fix is available or the fix cannot be applied safely.
|
|
34
|
+
*/
|
|
35
|
+
export declare function applyFix(finding: ReviewFinding, content: string): FixResult | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Apply all available fixes to a file's findings.
|
|
38
|
+
* Applies fixes in reverse line order to preserve line numbers.
|
|
39
|
+
*/
|
|
40
|
+
export declare function applyAllFixes(findings: ReviewFinding[], content: string): {
|
|
41
|
+
newContent: string;
|
|
42
|
+
applied: FixResult[];
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Get all fixable rule IDs.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getFixableRuleIds(): string[];
|
|
48
|
+
/**
|
|
49
|
+
* Stamp `fixable: true` on findings that have a registered fixer
|
|
50
|
+
* (exact match OR fallback). Called by the engine after detectors run,
|
|
51
|
+
* before returning results.
|
|
52
|
+
*/
|
|
53
|
+
export declare function annotateFixable(findings: ReviewFinding[]): void;
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/review-intelligence/fixes/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qCAAqC;AACrC,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,uBAAuB;AACvB,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;AA2BvF;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,OAAO,EACtC,KAAK,EAAE,KAAK,GACX,IAAI,CAEN;AAaD;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAEzD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAIvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,MAAM,GACd;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,EAAE,CAAA;CAAE,CAiB9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAM/D"}
|