@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.
- package/dist/cache.js +143 -2
- package/dist/cache.js.map +1 -1
- package/dist/call-graph.d.ts +4 -1
- package/dist/call-graph.js +290 -25
- package/dist/call-graph.js.map +1 -1
- package/dist/external-tools.d.ts +23 -4
- package/dist/external-tools.js +68 -12
- package/dist/external-tools.js.map +1 -1
- package/dist/file-context.d.ts +6 -0
- package/dist/file-context.js +6 -1
- package/dist/file-context.js.map +1 -1
- package/dist/graph.js +149 -39
- package/dist/graph.js.map +1 -1
- package/dist/index.d.ts +27 -3
- package/dist/index.js +254 -41
- package/dist/index.js.map +1 -1
- package/dist/inferrer.d.ts +5 -0
- package/dist/inferrer.js +1 -1
- package/dist/inferrer.js.map +1 -1
- package/dist/mappers/ts-concepts.js +31 -6
- package/dist/mappers/ts-concepts.js.map +1 -1
- package/dist/public-api.d.ts +73 -0
- package/dist/public-api.js +351 -0
- package/dist/public-api.js.map +1 -0
- package/dist/reporter.d.ts +5 -0
- package/dist/reporter.js +119 -84
- package/dist/reporter.js.map +1 -1
- package/dist/review-health.d.ts +38 -0
- package/dist/review-health.js +60 -0
- package/dist/review-health.js.map +1 -0
- package/dist/rules/a11y.d.ts +10 -0
- package/dist/rules/a11y.js +294 -0
- package/dist/rules/a11y.js.map +1 -0
- package/dist/rules/async.d.ts +8 -0
- package/dist/rules/async.js +142 -0
- package/dist/rules/async.js.map +1 -0
- package/dist/rules/base.js +112 -87
- package/dist/rules/base.js.map +1 -1
- package/dist/rules/confidence.d.ts +2 -2
- package/dist/rules/confidence.js +32 -15
- package/dist/rules/confidence.js.map +1 -1
- package/dist/rules/dead-code.d.ts +2 -1
- package/dist/rules/dead-code.js +49 -3
- package/dist/rules/dead-code.js.map +1 -1
- package/dist/rules/index.d.ts +12 -0
- package/dist/rules/index.js +414 -4
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/ink.js +41 -0
- package/dist/rules/ink.js.map +1 -1
- package/dist/rules/kern-source-cross-file.d.ts +2 -0
- package/dist/rules/kern-source-cross-file.js +102 -0
- package/dist/rules/kern-source-cross-file.js.map +1 -0
- package/dist/rules/kern-source.js +145 -18
- package/dist/rules/kern-source.js.map +1 -1
- package/dist/rules/nextjs-app-router.d.ts +11 -0
- package/dist/rules/nextjs-app-router.js +1182 -0
- package/dist/rules/nextjs-app-router.js.map +1 -0
- package/dist/rules/nextjs.js +266 -7
- package/dist/rules/nextjs.js.map +1 -1
- package/dist/rules/perf.d.ts +11 -0
- package/dist/rules/perf.js +131 -0
- package/dist/rules/perf.js.map +1 -0
- package/dist/rules/react-composition.d.ts +12 -0
- package/dist/rules/react-composition.js +741 -0
- package/dist/rules/react-composition.js.map +1 -0
- package/dist/rules/react-hooks.d.ts +11 -0
- package/dist/rules/react-hooks.js +429 -0
- package/dist/rules/react-hooks.js.map +1 -0
- package/dist/rules/react.js +265 -49
- package/dist/rules/react.js.map +1 -1
- package/dist/rules/security-v5.d.ts +11 -0
- package/dist/rules/security-v5.js +200 -0
- package/dist/rules/security-v5.js.map +1 -0
- package/dist/rules/utils.d.ts +52 -1
- package/dist/rules/utils.js +159 -0
- package/dist/rules/utils.js.map +1 -1
- package/dist/semantic-diff.js +1 -1
- package/dist/semantic-diff.js.map +1 -1
- package/dist/taint-ast.js +260 -10
- package/dist/taint-ast.js.map +1 -1
- package/dist/taint-crossfile.d.ts +30 -2
- package/dist/taint-crossfile.js +280 -59
- package/dist/taint-crossfile.js.map +1 -1
- package/dist/taint-findings.js +3 -0
- package/dist/taint-findings.js.map +1 -1
- package/dist/taint-types.d.ts +4 -3
- package/dist/taint-types.js +70 -6
- package/dist/taint-types.js.map +1 -1
- package/dist/taint.d.ts +1 -1
- package/dist/taint.js +1 -1
- package/dist/taint.js.map +1 -1
- package/dist/types.d.ts +98 -0
- package/dist/types.js.map +1 -1
- 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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"}
|
package/dist/rules/utils.d.ts
CHANGED
|
@@ -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
|
|
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;
|
package/dist/rules/utils.js
CHANGED
|
@@ -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
|
package/dist/rules/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/rules/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/rules/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/semantic-diff.js
CHANGED
|
@@ -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: '
|
|
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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"}
|