@kernlang/review 3.1.9 → 3.3.4

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.
Files changed (94) hide show
  1. package/dist/cache.js +143 -2
  2. package/dist/cache.js.map +1 -1
  3. package/dist/call-graph.d.ts +4 -1
  4. package/dist/call-graph.js +290 -25
  5. package/dist/call-graph.js.map +1 -1
  6. package/dist/external-tools.d.ts +23 -4
  7. package/dist/external-tools.js +68 -12
  8. package/dist/external-tools.js.map +1 -1
  9. package/dist/file-context.d.ts +6 -0
  10. package/dist/file-context.js +6 -1
  11. package/dist/file-context.js.map +1 -1
  12. package/dist/graph.js +149 -39
  13. package/dist/graph.js.map +1 -1
  14. package/dist/index.d.ts +27 -3
  15. package/dist/index.js +254 -41
  16. package/dist/index.js.map +1 -1
  17. package/dist/inferrer.d.ts +5 -0
  18. package/dist/inferrer.js +1 -1
  19. package/dist/inferrer.js.map +1 -1
  20. package/dist/mappers/ts-concepts.js +31 -6
  21. package/dist/mappers/ts-concepts.js.map +1 -1
  22. package/dist/public-api.d.ts +73 -0
  23. package/dist/public-api.js +351 -0
  24. package/dist/public-api.js.map +1 -0
  25. package/dist/reporter.d.ts +5 -0
  26. package/dist/reporter.js +119 -84
  27. package/dist/reporter.js.map +1 -1
  28. package/dist/review-health.d.ts +38 -0
  29. package/dist/review-health.js +60 -0
  30. package/dist/review-health.js.map +1 -0
  31. package/dist/rules/a11y.d.ts +10 -0
  32. package/dist/rules/a11y.js +294 -0
  33. package/dist/rules/a11y.js.map +1 -0
  34. package/dist/rules/async.d.ts +8 -0
  35. package/dist/rules/async.js +142 -0
  36. package/dist/rules/async.js.map +1 -0
  37. package/dist/rules/base.js +112 -87
  38. package/dist/rules/base.js.map +1 -1
  39. package/dist/rules/confidence.d.ts +2 -2
  40. package/dist/rules/confidence.js +32 -15
  41. package/dist/rules/confidence.js.map +1 -1
  42. package/dist/rules/dead-code.d.ts +2 -1
  43. package/dist/rules/dead-code.js +49 -3
  44. package/dist/rules/dead-code.js.map +1 -1
  45. package/dist/rules/index.d.ts +12 -0
  46. package/dist/rules/index.js +414 -4
  47. package/dist/rules/index.js.map +1 -1
  48. package/dist/rules/ink.js +41 -0
  49. package/dist/rules/ink.js.map +1 -1
  50. package/dist/rules/kern-source-cross-file.d.ts +2 -0
  51. package/dist/rules/kern-source-cross-file.js +102 -0
  52. package/dist/rules/kern-source-cross-file.js.map +1 -0
  53. package/dist/rules/kern-source.js +145 -18
  54. package/dist/rules/kern-source.js.map +1 -1
  55. package/dist/rules/nextjs-app-router.d.ts +11 -0
  56. package/dist/rules/nextjs-app-router.js +1182 -0
  57. package/dist/rules/nextjs-app-router.js.map +1 -0
  58. package/dist/rules/nextjs.js +266 -7
  59. package/dist/rules/nextjs.js.map +1 -1
  60. package/dist/rules/perf.d.ts +11 -0
  61. package/dist/rules/perf.js +131 -0
  62. package/dist/rules/perf.js.map +1 -0
  63. package/dist/rules/react-composition.d.ts +12 -0
  64. package/dist/rules/react-composition.js +741 -0
  65. package/dist/rules/react-composition.js.map +1 -0
  66. package/dist/rules/react-hooks.d.ts +11 -0
  67. package/dist/rules/react-hooks.js +429 -0
  68. package/dist/rules/react-hooks.js.map +1 -0
  69. package/dist/rules/react.js +265 -49
  70. package/dist/rules/react.js.map +1 -1
  71. package/dist/rules/security-v5.d.ts +11 -0
  72. package/dist/rules/security-v5.js +200 -0
  73. package/dist/rules/security-v5.js.map +1 -0
  74. package/dist/rules/utils.d.ts +52 -1
  75. package/dist/rules/utils.js +159 -0
  76. package/dist/rules/utils.js.map +1 -1
  77. package/dist/semantic-diff.js +1 -1
  78. package/dist/semantic-diff.js.map +1 -1
  79. package/dist/taint-ast.js +260 -10
  80. package/dist/taint-ast.js.map +1 -1
  81. package/dist/taint-crossfile.d.ts +30 -2
  82. package/dist/taint-crossfile.js +280 -59
  83. package/dist/taint-crossfile.js.map +1 -1
  84. package/dist/taint-findings.js +3 -0
  85. package/dist/taint-findings.js.map +1 -1
  86. package/dist/taint-types.d.ts +4 -3
  87. package/dist/taint-types.js +70 -6
  88. package/dist/taint-types.js.map +1 -1
  89. package/dist/taint.d.ts +1 -1
  90. package/dist/taint.js +1 -1
  91. package/dist/taint.js.map +1 -1
  92. package/dist/types.d.ts +98 -0
  93. package/dist/types.js.map +1 -1
  94. package/package.json +3 -3
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Security v5 — XSS attribute surface, javascript: URLs, crypto misuse.
3
+ *
4
+ * Note: ssrf-fetch and sql-string-concat are handled automatically by the
5
+ * shared taint engine via new sinks registered in taint-types.ts (Wave 0).
6
+ * This file holds only the rules that can't be expressed as a sink category.
7
+ */
8
+ import { Node, SyntaxKind } from 'ts-morph';
9
+ import { finding, nodeSpan } from './utils.js';
10
+ // ── Rule: xss-href-javascript ────────────────────────────────────────────
11
+ // JSX href / src attribute set to a string starting with `javascript:`,
12
+ // or to an expression whose value can be traced to a literal javascript: URL.
13
+ function xssHrefJavascript(ctx) {
14
+ const findings = [];
15
+ for (const attr of ctx.sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute)) {
16
+ const name = attr.getNameNode().getText();
17
+ if (name !== 'href' && name !== 'src' && name !== 'action' && name !== 'formAction')
18
+ continue;
19
+ const init = attr.getInitializer();
20
+ if (!init)
21
+ continue;
22
+ // Literal string attribute: href="javascript:alert(1)"
23
+ // Autofix: replace the string literal with "#". That's the standard
24
+ // "inert link" marker — safe default, user can change to a real URL later.
25
+ if (Node.isStringLiteral(init)) {
26
+ const value = init.getLiteralValue();
27
+ if (/^\s*javascript:/i.test(value)) {
28
+ findings.push(finding('xss-href-javascript', 'error', 'bug', `${name} uses a javascript: URL — executes arbitrary script on click`, ctx.filePath, attr.getStartLineNumber(), 1, {
29
+ suggestion: 'Replace javascript: URL with an onClick handler or a safe href',
30
+ autofix: {
31
+ type: 'replace',
32
+ span: nodeSpan(init, ctx.filePath),
33
+ replacement: '"#"',
34
+ description: 'Replace javascript: URL with inert "#" — wire an onClick handler for real behavior',
35
+ },
36
+ }));
37
+ }
38
+ continue;
39
+ }
40
+ // Expression attribute: href={someVar} — flag when the expression is a
41
+ // template literal or string literal starting with javascript:
42
+ if (Node.isJsxExpression(init)) {
43
+ const expr = init.getExpression();
44
+ if (!expr)
45
+ continue;
46
+ if (Node.isStringLiteral(expr)) {
47
+ if (/^\s*javascript:/i.test(expr.getLiteralValue())) {
48
+ findings.push(finding('xss-href-javascript', 'error', 'bug', `${name} uses a javascript: URL — executes arbitrary script on click`, ctx.filePath, attr.getStartLineNumber(), 1, {
49
+ suggestion: 'Replace javascript: URL with an onClick handler or a safe href',
50
+ autofix: {
51
+ type: 'replace',
52
+ span: nodeSpan(expr, ctx.filePath),
53
+ replacement: '"#"',
54
+ description: 'Replace javascript: URL with inert "#"',
55
+ },
56
+ }));
57
+ }
58
+ }
59
+ else if (Node.isTemplateExpression(expr) || Node.isNoSubstitutionTemplateLiteral(expr)) {
60
+ const text = expr.getText();
61
+ if (/^[`'"]\s*javascript:/i.test(text)) {
62
+ findings.push(finding('xss-href-javascript', 'error', 'bug', `${name} is a template literal starting with javascript: — executes arbitrary script on click`, ctx.filePath, attr.getStartLineNumber(), 1, { suggestion: 'Replace javascript: URL with an onClick handler or a safe href' }));
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return findings;
68
+ }
69
+ // ── Rule: crypto-iv-reuse ────────────────────────────────────────────────
70
+ // createCipheriv(algo, key, iv) with a literal/constant IV.
71
+ // A reused IV on GCM is catastrophic; on CBC it's merely broken.
72
+ function isLiteralOrConstant(node) {
73
+ if (!node)
74
+ return false;
75
+ if (Node.isStringLiteral(node))
76
+ return true;
77
+ if (Node.isNumericLiteral(node))
78
+ return true;
79
+ if (Node.isNoSubstitutionTemplateLiteral(node))
80
+ return true;
81
+ // Buffer.from("constant"), Buffer.from([1,2,3]), Buffer.alloc(16)
82
+ if (Node.isCallExpression(node)) {
83
+ const callee = node.getExpression().getText();
84
+ if (callee === 'Buffer.from' || callee === 'Buffer.alloc') {
85
+ const arg = node.getArguments()[0];
86
+ if (!arg)
87
+ return false;
88
+ // Buffer.alloc(16) — all zeros, always unsafe
89
+ if (callee === 'Buffer.alloc' && Node.isNumericLiteral(arg))
90
+ return true;
91
+ if (Node.isStringLiteral(arg))
92
+ return true;
93
+ if (Node.isNumericLiteral(arg))
94
+ return true;
95
+ if (Node.isArrayLiteralExpression(arg)) {
96
+ return arg.getElements().every((el) => Node.isNumericLiteral(el));
97
+ }
98
+ }
99
+ }
100
+ return false;
101
+ }
102
+ /** Resolve a variable reference to its initializer if it is a top-level const. */
103
+ function resolveConstInitializer(node) {
104
+ if (!Node.isIdentifier(node))
105
+ return undefined;
106
+ const decls = node.getSymbol()?.getDeclarations() ?? [];
107
+ for (const d of decls) {
108
+ if (Node.isVariableDeclaration(d)) {
109
+ // Must be a `const` declaration
110
+ const statement = d.getVariableStatement();
111
+ if (statement && statement.getDeclarationKind() === 'const') {
112
+ return d.getInitializer();
113
+ }
114
+ }
115
+ }
116
+ return undefined;
117
+ }
118
+ function cryptoIvReuse(ctx) {
119
+ const findings = [];
120
+ for (const call of ctx.sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
121
+ const callee = call.getExpression().getText();
122
+ if (callee !== 'createCipheriv' && callee !== 'crypto.createCipheriv')
123
+ continue;
124
+ const args = call.getArguments();
125
+ if (args.length < 3)
126
+ continue;
127
+ const ivArg = args[2];
128
+ let unsafe = isLiteralOrConstant(ivArg);
129
+ let reason = 'IV is a compile-time constant';
130
+ if (!unsafe && Node.isIdentifier(ivArg)) {
131
+ const init = resolveConstInitializer(ivArg);
132
+ if (init && isLiteralOrConstant(init)) {
133
+ unsafe = true;
134
+ reason = `IV resolves to constant '${ivArg.getText()}' (declared as const with a literal initializer)`;
135
+ }
136
+ }
137
+ if (unsafe) {
138
+ findings.push(finding('crypto-iv-reuse', 'error', 'bug', `createCipheriv called with a constant IV — ${reason}. Reusing an IV on AES-GCM leaks the key stream; on CBC it enables chosen-plaintext attacks.`, ctx.filePath, call.getStartLineNumber(), 1, {
139
+ suggestion: 'Generate a fresh IV per encryption: `const iv = crypto.randomBytes(ivLength)` and prepend it to the ciphertext for decryption',
140
+ }));
141
+ }
142
+ }
143
+ return findings;
144
+ }
145
+ // ── Rule: crypto-weak-kdf ────────────────────────────────────────────────
146
+ // pbkdf2(password, salt, iterations, keylen, digest) with iterations below
147
+ // the current OWASP minimum (600_000 for SHA-256 as of 2023, 210_000 for
148
+ // SHA-512). We use 100_000 as a hard floor to avoid flagging historical
149
+ // but still-passing callers; anything lower is indefensible.
150
+ const PBKDF2_MIN_ITERATIONS = 100_000;
151
+ function cryptoWeakKdf(ctx) {
152
+ const findings = [];
153
+ for (const call of ctx.sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
154
+ const callee = call.getExpression().getText();
155
+ if (callee !== 'pbkdf2' &&
156
+ callee !== 'pbkdf2Sync' &&
157
+ callee !== 'crypto.pbkdf2' &&
158
+ callee !== 'crypto.pbkdf2Sync') {
159
+ continue;
160
+ }
161
+ const args = call.getArguments();
162
+ if (args.length < 3)
163
+ continue;
164
+ const iterArg = args[2];
165
+ let iterations;
166
+ if (Node.isNumericLiteral(iterArg)) {
167
+ iterations = Number(iterArg.getLiteralValue());
168
+ }
169
+ else if (Node.isIdentifier(iterArg)) {
170
+ const init = resolveConstInitializer(iterArg);
171
+ if (init && Node.isNumericLiteral(init)) {
172
+ iterations = Number(init.getLiteralValue());
173
+ }
174
+ }
175
+ if (iterations !== undefined && iterations < PBKDF2_MIN_ITERATIONS) {
176
+ // Autofix: replace the iterations literal with 600_000 (OWASP 2023 min
177
+ // for SHA-256). Only when the arg is a direct literal — don't try to
178
+ // rewrite a referenced constant, that requires resolving and patching
179
+ // the declaration.
180
+ const canAutofix = Node.isNumericLiteral(iterArg);
181
+ findings.push(finding('crypto-weak-kdf', 'error', 'bug', `pbkdf2 called with only ${iterations} iterations — well below the OWASP minimum (600,000 for SHA-256, 210,000 for SHA-512). This key derivation can be brute-forced.`, ctx.filePath, call.getStartLineNumber(), 1, {
182
+ suggestion: 'Use argon2id via `argon2` or increase iterations to at least 600,000 for SHA-256 / 210,000 for SHA-512',
183
+ ...(canAutofix
184
+ ? {
185
+ autofix: {
186
+ type: 'replace',
187
+ span: nodeSpan(iterArg, ctx.filePath),
188
+ replacement: '600_000',
189
+ description: 'Bump iteration count to 600,000 (OWASP 2023 minimum for SHA-256)',
190
+ },
191
+ }
192
+ : {}),
193
+ }));
194
+ }
195
+ }
196
+ return findings;
197
+ }
198
+ // ── Exported Security v5 Rules ───────────────────────────────────────────
199
+ export const securityV5Rules = [xssHrefJavascript, cryptoIvReuse, cryptoWeakKdf];
200
+ //# sourceMappingURL=security-v5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-v5.js","sourceRoot":"","sources":["../../src/rules/security-v5.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,57 @@
2
2
  * Shared helpers for review rules — eliminates duplication of span() and finding()
3
3
  * across base.ts, react.ts, nextjs.ts, express.ts, security.ts, vue.ts, dead-logic.ts.
4
4
  */
5
- import type { ReviewFinding, SourceSpan } from '../types.js';
5
+ import { Node } from 'ts-morph';
6
+ import type { ReviewFinding, RuleContext, SourceSpan } from '../types.js';
7
+ /**
8
+ * True when the file's runtime boundary is clearly non-client (server
9
+ * component, API route, Next.js middleware). React hook rules should
10
+ * short-circuit on these files — hooks cannot run there, so any match is
11
+ * either unused code or a false positive.
12
+ *
13
+ * `shared` and `unknown` intentionally return false: shared utilities are
14
+ * often imported from both client and server; unknown happens when reviewing
15
+ * a single file without graph context.
16
+ */
17
+ export declare function isNonClientBoundary(ctx: RuleContext): boolean;
18
+ /**
19
+ * True when the source file looks like a React file — has JSX, a `react`
20
+ * import, or calls a recognizable React hook. Used to override an aggressive
21
+ * boundary classifier: `src/routes/Home.tsx` gets `boundary=api` from the
22
+ * path-based classifier (because of `/routes/`), but its JSX content tells us
23
+ * it really is a client React file where hook rules should still run.
24
+ */
25
+ export declare function hasReactContent(ctx: RuleContext): boolean;
26
+ /**
27
+ * Convenience: true when hook-specific rules should skip this file. Combines
28
+ * the boundary gate with a React-content override so misclassified React
29
+ * routes (`src/routes/Home.tsx`) still get checked.
30
+ */
31
+ export declare function shouldSkipHookRules(ctx: RuleContext): boolean;
6
32
  export declare function span(file: string, line: number, col?: number, endLine?: number, endCol?: number): SourceSpan;
33
+ /**
34
+ * Compute a precise SourceSpan for a ts-morph Node, using 1-based line/column.
35
+ * Used by autofix rules that need character-accurate replacement coordinates.
36
+ */
37
+ export declare function nodeSpan(node: Node, file: string): SourceSpan;
38
+ /**
39
+ * Compute a SourceSpan for the insertion point immediately before a node.
40
+ * For use with FixAction.type === 'insert-before'.
41
+ */
42
+ export declare function insertBeforeSpan(node: Node, file: string): SourceSpan;
43
+ /**
44
+ * Compute a SourceSpan for the insertion point immediately after a node.
45
+ * For use with FixAction.type === 'insert-after'.
46
+ */
47
+ export declare function insertAfterSpan(node: Node, file: string): SourceSpan;
7
48
  export declare function finding(ruleId: string, severity: 'error' | 'warning' | 'info', category: ReviewFinding['category'], message: string, file: string, line: number, col?: number, extra?: Partial<ReviewFinding>): ReviewFinding;
49
+ export interface CleanupMatcherSpec {
50
+ cleanupPatterns: RegExp[];
51
+ cleanupReturnIdentifiers?: string[];
52
+ cleanupReturnCallPattern?: RegExp;
53
+ }
54
+ export declare function escapeRegex(text: string): string;
55
+ export declare function findAssignedIdentifier(node: Node): string | undefined;
56
+ export declare function getTopLevelCleanupExpressions(body: Node): Node[];
57
+ export declare function resolveCleanupExpressionTexts(expr: Node): string[];
58
+ export declare function cleanupExpressionMatches(expr: Node, spec: CleanupMatcherSpec): boolean;
@@ -2,10 +2,100 @@
2
2
  * Shared helpers for review rules — eliminates duplication of span() and finding()
3
3
  * across base.ts, react.ts, nextjs.ts, express.ts, security.ts, vue.ts, dead-logic.ts.
4
4
  */
5
+ import { Node, SyntaxKind } from 'ts-morph';
5
6
  import { createFingerprint } from '../types.js';
7
+ /**
8
+ * True when the file's runtime boundary is clearly non-client (server
9
+ * component, API route, Next.js middleware). React hook rules should
10
+ * short-circuit on these files — hooks cannot run there, so any match is
11
+ * either unused code or a false positive.
12
+ *
13
+ * `shared` and `unknown` intentionally return false: shared utilities are
14
+ * often imported from both client and server; unknown happens when reviewing
15
+ * a single file without graph context.
16
+ */
17
+ export function isNonClientBoundary(ctx) {
18
+ const b = ctx.fileContext?.boundary;
19
+ return b === 'server' || b === 'api' || b === 'middleware';
20
+ }
21
+ /**
22
+ * True when the source file looks like a React file — has JSX, a `react`
23
+ * import, or calls a recognizable React hook. Used to override an aggressive
24
+ * boundary classifier: `src/routes/Home.tsx` gets `boundary=api` from the
25
+ * path-based classifier (because of `/routes/`), but its JSX content tells us
26
+ * it really is a client React file where hook rules should still run.
27
+ */
28
+ export function hasReactContent(ctx) {
29
+ const sf = ctx.sourceFile;
30
+ if (sf.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).length > 0)
31
+ return true;
32
+ if (sf.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).length > 0)
33
+ return true;
34
+ if (sf.getImportDeclarations().some((i) => i.getModuleSpecifierValue() === 'react'))
35
+ return true;
36
+ const fullText = sf.getFullText();
37
+ return /\buse(?:State|Effect|Ref|Callback|Memo|Reducer|Context|LayoutEffect)\s*[<(]/.test(fullText);
38
+ }
39
+ /**
40
+ * Convenience: true when hook-specific rules should skip this file. Combines
41
+ * the boundary gate with a React-content override so misclassified React
42
+ * routes (`src/routes/Home.tsx`) still get checked.
43
+ */
44
+ export function shouldSkipHookRules(ctx) {
45
+ if (!isNonClientBoundary(ctx))
46
+ return false;
47
+ // Non-client boundary — but if it has React content, the classifier is wrong.
48
+ return !hasReactContent(ctx);
49
+ }
6
50
  export function span(file, line, col = 1, endLine, endCol) {
7
51
  return { file, startLine: line, startCol: col, endLine: endLine ?? line, endCol: endCol ?? col };
8
52
  }
53
+ /**
54
+ * Compute a precise SourceSpan for a ts-morph Node, using 1-based line/column.
55
+ * Used by autofix rules that need character-accurate replacement coordinates.
56
+ */
57
+ export function nodeSpan(node, file) {
58
+ const sf = node.getSourceFile();
59
+ const start = sf.getLineAndColumnAtPos(node.getStart());
60
+ const end = sf.getLineAndColumnAtPos(node.getEnd());
61
+ return {
62
+ file,
63
+ startLine: start.line,
64
+ startCol: start.column,
65
+ endLine: end.line,
66
+ endCol: end.column,
67
+ };
68
+ }
69
+ /**
70
+ * Compute a SourceSpan for the insertion point immediately before a node.
71
+ * For use with FixAction.type === 'insert-before'.
72
+ */
73
+ export function insertBeforeSpan(node, file) {
74
+ const sf = node.getSourceFile();
75
+ const start = sf.getLineAndColumnAtPos(node.getStart());
76
+ return {
77
+ file,
78
+ startLine: start.line,
79
+ startCol: start.column,
80
+ endLine: start.line,
81
+ endCol: start.column,
82
+ };
83
+ }
84
+ /**
85
+ * Compute a SourceSpan for the insertion point immediately after a node.
86
+ * For use with FixAction.type === 'insert-after'.
87
+ */
88
+ export function insertAfterSpan(node, file) {
89
+ const sf = node.getSourceFile();
90
+ const end = sf.getLineAndColumnAtPos(node.getEnd());
91
+ return {
92
+ file,
93
+ startLine: end.line,
94
+ startCol: end.column,
95
+ endLine: end.line,
96
+ endCol: end.column,
97
+ };
98
+ }
9
99
  export function finding(ruleId, severity, category, message, file, line, col = 1, extra) {
10
100
  return {
11
101
  source: 'kern',
@@ -18,4 +108,73 @@ export function finding(ruleId, severity, category, message, file, line, col = 1
18
108
  ...extra,
19
109
  };
20
110
  }
111
+ export function escapeRegex(text) {
112
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
113
+ }
114
+ export function findAssignedIdentifier(node) {
115
+ let cur = node.getParent();
116
+ while (cur && !Node.isVariableDeclaration(cur)) {
117
+ cur = cur.getParent();
118
+ }
119
+ if (!cur || !Node.isVariableDeclaration(cur))
120
+ return undefined;
121
+ const nameNode = cur.getNameNode();
122
+ return Node.isIdentifier(nameNode) ? nameNode.getText() : undefined;
123
+ }
124
+ export function getTopLevelCleanupExpressions(body) {
125
+ if (!Node.isBlock(body))
126
+ return [body];
127
+ const cleanupExprs = [];
128
+ for (const retStmt of body.getDescendantsOfKind(SyntaxKind.ReturnStatement)) {
129
+ let inNested = false;
130
+ let cur = retStmt.getParent();
131
+ while (cur && cur !== body) {
132
+ if (Node.isArrowFunction(cur) || Node.isFunctionExpression(cur) || Node.isFunctionDeclaration(cur)) {
133
+ inNested = true;
134
+ break;
135
+ }
136
+ cur = cur.getParent();
137
+ }
138
+ if (inNested)
139
+ continue;
140
+ const expr = retStmt.getExpression();
141
+ if (expr)
142
+ cleanupExprs.push(expr);
143
+ }
144
+ return cleanupExprs;
145
+ }
146
+ export function resolveCleanupExpressionTexts(expr) {
147
+ if (Node.isArrowFunction(expr) || Node.isFunctionExpression(expr))
148
+ return [expr.getText(), expr.getBody().getText()];
149
+ if (Node.isCallExpression(expr))
150
+ return [expr.getText()];
151
+ if (!Node.isIdentifier(expr))
152
+ return [expr.getText()];
153
+ const texts = [expr.getText()];
154
+ const declarations = expr.getSymbol()?.getDeclarations() ?? [];
155
+ for (const decl of declarations) {
156
+ if (Node.isFunctionDeclaration(decl) && decl.getBody()) {
157
+ texts.push(decl.getText(), decl.getBody().getText());
158
+ continue;
159
+ }
160
+ if (!Node.isVariableDeclaration(decl))
161
+ continue;
162
+ const init = decl.getInitializer();
163
+ if (!init)
164
+ continue;
165
+ texts.push(init.getText());
166
+ if (Node.isArrowFunction(init) || Node.isFunctionExpression(init)) {
167
+ texts.push(init.getBody().getText());
168
+ }
169
+ }
170
+ return texts;
171
+ }
172
+ export function cleanupExpressionMatches(expr, spec) {
173
+ if (Node.isIdentifier(expr) && spec.cleanupReturnIdentifiers?.includes(expr.getText()))
174
+ return true;
175
+ if (Node.isCallExpression(expr) && spec.cleanupReturnCallPattern?.test(expr.getText()))
176
+ return true;
177
+ const texts = resolveCleanupExpressionTexts(expr);
178
+ return texts.some((text) => spec.cleanupPatterns.some((pattern) => pattern.test(text)));
179
+ }
21
180
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/rules/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,GAAG,GAAG,CAAC,EAAE,OAAgB,EAAE,MAAe;IACzF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,QAAsC,EACtC,QAAmC,EACnC,OAAe,EACf,IAAY,EACZ,IAAY,EACZ,GAAG,GAAG,CAAC,EACP,KAA8B;IAE9B,OAAO;QACL,MAAM,EAAE,MAAM;QACd,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAClC,WAAW,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;QACjD,GAAG,KAAK;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/rules/utils.ts"],"names":[],"mappings":"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"}
@@ -126,7 +126,7 @@ export function computeSemanticDiff(oldInferred, newInferred, oldConcepts, newCo
126
126
  if (oldReturns !== newReturns && oldReturns !== '' && newReturns !== '') {
127
127
  changes.push({
128
128
  type: 'return-type-changed',
129
- severity: 'warning',
129
+ severity: 'info',
130
130
  functionName: fnName,
131
131
  filePath,
132
132
  line: newFn.startLine,
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-diff.js","sourceRoot":"","sources":["../src/semantic-diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-diff.js","sourceRoot":"","sources":["../src/semantic-diff.ts"],"names":[],"mappings":"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"}