@kernlang/core 3.4.2 → 3.4.3-canary.9.1.62aecb74
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/codegen/body-ts.d.ts +5 -2
- package/dist/codegen/body-ts.js +54 -7
- package/dist/codegen/body-ts.js.map +1 -1
- package/dist/codegen-expression.js +27 -0
- package/dist/codegen-expression.js.map +1 -1
- package/dist/concepts.d.ts +33 -0
- package/dist/concepts.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/native-eligibility-ast.d.ts +52 -0
- package/dist/native-eligibility-ast.js +189 -0
- package/dist/native-eligibility-ast.js.map +1 -0
- package/dist/native-eligibility.d.ts +29 -18
- package/dist/native-eligibility.js +24 -26
- package/dist/native-eligibility.js.map +1 -1
- package/dist/parser-expression.d.ts +4 -2
- package/dist/parser-expression.js +72 -11
- package/dist/parser-expression.js.map +1 -1
- package/dist/parser-validate-body-statements.d.ts +6 -6
- package/dist/parser-validate-body-statements.js +7 -6
- package/dist/parser-validate-body-statements.js.map +1 -1
- package/dist/schema.js +11 -4
- package/dist/schema.js.map +1 -1
- package/dist/spec.d.ts +1 -1
- package/dist/spec.js +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/value-ir.d.ts +6 -0
- package/dist/value-ir.js +2 -1
- package/dist/value-ir.js.map +1 -1
- package/package.json +1 -1
|
@@ -27,8 +27,11 @@
|
|
|
27
27
|
* - Result-flavored propagation only (`'err'` discriminant). Option
|
|
28
28
|
* propagation in native bodies is deferred to slice 8 (typecheck-driven).
|
|
29
29
|
* - `if` requires `cond="EXPR"`. `else` is a sibling node (no condition).
|
|
30
|
-
* `else if` chains
|
|
31
|
-
*
|
|
30
|
+
* `else if` chains: an `else` whose first child is an `if` (with optional
|
|
31
|
+
* sibling inner `else`) is collapsed to `else if (...)` in the emitted
|
|
32
|
+
* TS. Same shape works for hand-written nested KERN and for slice 5b's
|
|
33
|
+
* `kern migrate native-handlers` output, which emits `else > if(…)` so
|
|
34
|
+
* raw `else if` chains round-trip byte-equivalent through `--verify`.
|
|
32
35
|
*
|
|
33
36
|
* `gensymCounter` is local to each emit call — every handler gets its own
|
|
34
37
|
* fresh `__k_t1`, `__k_t2`, … sequence (same convention as slice 7).
|
package/dist/codegen/body-ts.js
CHANGED
|
@@ -27,8 +27,11 @@
|
|
|
27
27
|
* - Result-flavored propagation only (`'err'` discriminant). Option
|
|
28
28
|
* propagation in native bodies is deferred to slice 8 (typecheck-driven).
|
|
29
29
|
* - `if` requires `cond="EXPR"`. `else` is a sibling node (no condition).
|
|
30
|
-
* `else if` chains
|
|
31
|
-
*
|
|
30
|
+
* `else if` chains: an `else` whose first child is an `if` (with optional
|
|
31
|
+
* sibling inner `else`) is collapsed to `else if (...)` in the emitted
|
|
32
|
+
* TS. Same shape works for hand-written nested KERN and for slice 5b's
|
|
33
|
+
* `kern migrate native-handlers` output, which emits `else > if(…)` so
|
|
34
|
+
* raw `else if` chains round-trip byte-equivalent through `--verify`.
|
|
32
35
|
*
|
|
33
36
|
* `gensymCounter` is local to each emit call — every handler gets its own
|
|
34
37
|
* fresh `__k_t1`, `__k_t2`, … sequence (same convention as slice 7).
|
|
@@ -84,12 +87,37 @@ function emitChildrenTS(children, ctx, indent) {
|
|
|
84
87
|
lines.push(`${indent}if (${emitExpression(condIR)}) {`);
|
|
85
88
|
for (const sl of emitChildrenTS(child.children ?? [], ctx, indent + INDENT_STEP))
|
|
86
89
|
lines.push(sl);
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
// Walk the `else` chain so byte-equivalent `else if` chains compile back
|
|
91
|
+
// out as `else if (...)` instead of `else { if (...) {...} else {...} }`.
|
|
92
|
+
// Recognised shapes for `else`:
|
|
93
|
+
// 1. else > [if, else_inner] → chain: `} else if (cond) {...`, recurse on else_inner
|
|
94
|
+
// 2. else > [if] → terminal chain: `} else if (cond) {...}` (no else)
|
|
95
|
+
// 3. else > anything else → plain `} else { ... }`, chain ends
|
|
96
|
+
// Slice 5b's migration emits shape 1/2; hand-written KERN can use any.
|
|
97
|
+
let elseCandidate = children[i + 1];
|
|
98
|
+
if (elseCandidate?.type === 'else')
|
|
92
99
|
i++;
|
|
100
|
+
while (elseCandidate && elseCandidate.type === 'else') {
|
|
101
|
+
const ec = elseCandidate.children ?? [];
|
|
102
|
+
const isChainable = ec.length >= 1 && ec[0].type === 'if' && (ec.length === 1 || (ec.length === 2 && ec[1].type === 'else'));
|
|
103
|
+
if (isChainable) {
|
|
104
|
+
const ifNode = ec[0];
|
|
105
|
+
const nestedCondRaw = String(ifNode.props?.cond ?? '');
|
|
106
|
+
const nestedCondIR = parseExpression(nestedCondRaw);
|
|
107
|
+
if (nestedCondIR.kind === 'propagate') {
|
|
108
|
+
throw new Error("Propagation '?' is not allowed in `if cond=` — bind the call to a `let` first, then test the bound name.");
|
|
109
|
+
}
|
|
110
|
+
lines.push(`${indent}} else if (${emitExpression(nestedCondIR)}) {`);
|
|
111
|
+
for (const sl of emitChildrenTS(ifNode.children ?? [], ctx, indent + INDENT_STEP))
|
|
112
|
+
lines.push(sl);
|
|
113
|
+
elseCandidate = ec.length === 2 ? ec[1] : undefined;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
lines.push(`${indent}} else {`);
|
|
117
|
+
for (const el of emitChildrenTS(ec, ctx, indent + INDENT_STEP))
|
|
118
|
+
lines.push(el);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
93
121
|
}
|
|
94
122
|
lines.push(`${indent}}`);
|
|
95
123
|
}
|
|
@@ -149,6 +177,10 @@ function emitChildrenTS(children, ctx, indent) {
|
|
|
149
177
|
for (const line of emitThrowTS(child, ctx))
|
|
150
178
|
lines.push(`${indent}${line}`);
|
|
151
179
|
}
|
|
180
|
+
else if (child.type === 'do') {
|
|
181
|
+
for (const line of emitDoTS(child, ctx))
|
|
182
|
+
lines.push(`${indent}${line}`);
|
|
183
|
+
}
|
|
152
184
|
else if (child.type === 'each') {
|
|
153
185
|
// Slice 4d — each loop.
|
|
154
186
|
// Slice 4c+4d review fix (Codex P1): the schema's `each` already
|
|
@@ -230,4 +262,19 @@ function emitThrowTS(node, ctx) {
|
|
|
230
262
|
}
|
|
231
263
|
return [`throw ${emitExpression(valueIR)};`];
|
|
232
264
|
}
|
|
265
|
+
function emitDoTS(node, ctx) {
|
|
266
|
+
const props = (node.props ?? {});
|
|
267
|
+
const rawValue = props.value;
|
|
268
|
+
if (rawValue === undefined || rawValue === '') {
|
|
269
|
+
return [];
|
|
270
|
+
}
|
|
271
|
+
const valueIR = parseExpression(String(rawValue));
|
|
272
|
+
if (valueIR.kind === 'propagate' && valueIR.op === '?') {
|
|
273
|
+
rejectPropagationInsideTry(ctx);
|
|
274
|
+
const tmp = `__k_t${++ctx.gensymCounter}`;
|
|
275
|
+
const inner = emitExpression(valueIR.argument);
|
|
276
|
+
return [`const ${tmp} = ${inner};`, `if (${tmp}.kind === 'err') return ${tmp};`];
|
|
277
|
+
}
|
|
278
|
+
return [`${emitExpression(valueIR)};`];
|
|
279
|
+
}
|
|
233
280
|
//# sourceMappingURL=body-ts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-ts.js","sourceRoot":"","sources":["../../src/codegen/body-ts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"body-ts.js","sourceRoot":"","sources":["../../src/codegen/body-ts.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,6 +113,16 @@ export function emitExpression(node) {
|
|
|
113
113
|
}
|
|
114
114
|
case 'arrayLit':
|
|
115
115
|
return `[${node.items.map(emitExpression).join(', ')}]`;
|
|
116
|
+
case 'conditional': {
|
|
117
|
+
// Slice α-2: ternary `test ? consequent : alternate`. Right-associative
|
|
118
|
+
// and lower precedence than every binary op — paren-wrap any non-atomic
|
|
119
|
+
// child to keep the round-tripped TS unambiguous to humans and tools.
|
|
120
|
+
const test = emitExpression(node.test);
|
|
121
|
+
const consequent = emitExpression(node.consequent);
|
|
122
|
+
const alternate = emitExpression(node.alternate);
|
|
123
|
+
const wrap = (child, emitted) => needsConditionalChildParens(child) ? `(${emitted})` : emitted;
|
|
124
|
+
return `${wrap(node.test, test)} ? ${wrap(node.consequent, consequent)} : ${wrap(node.alternate, alternate)}`;
|
|
125
|
+
}
|
|
116
126
|
case 'propagate':
|
|
117
127
|
throw new Error(`Propagation '${node.op}' is only allowed at statement level (top of \`let value=\` or \`return value=\`). ` +
|
|
118
128
|
`Mid-expression \`${node.op}\` (e.g., \`Text.upper(call()${node.op})\`) is rejected — bind the call to a \`let\` first, then use the bound name.`);
|
|
@@ -146,6 +156,23 @@ function needsParens(child, parentOp, side) {
|
|
|
146
156
|
function needsReceiverParens(child) {
|
|
147
157
|
return child.kind === 'binary' || child.kind === 'unary' || child.kind === 'spread';
|
|
148
158
|
}
|
|
159
|
+
/** Slice α-2: paren-wrap predicate for ternary children. Ternary has very
|
|
160
|
+
* low precedence — only `,` and assignment are lower. Atoms (idents,
|
|
161
|
+
* literals, calls, members, parenthesized) emit without extra parens.
|
|
162
|
+
* Binary/unary/await/spread/new/conditional get wrapped for clarity. */
|
|
163
|
+
function needsConditionalChildParens(child) {
|
|
164
|
+
switch (child.kind) {
|
|
165
|
+
case 'binary':
|
|
166
|
+
case 'unary':
|
|
167
|
+
case 'spread':
|
|
168
|
+
case 'await':
|
|
169
|
+
case 'new':
|
|
170
|
+
case 'conditional':
|
|
171
|
+
return true;
|
|
172
|
+
default:
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
149
176
|
function escapeTemplateQuasi(s) {
|
|
150
177
|
return s.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${');
|
|
151
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-expression.js","sourceRoot":"","sources":["../src/codegen-expression.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codegen-expression.js","sourceRoot":"","sources":["../src/codegen-expression.ts"],"names":[],"mappings":"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"}
|
package/dist/concepts.d.ts
CHANGED
|
@@ -191,6 +191,39 @@ export interface EffectPayload {
|
|
|
191
191
|
* True when the mapper could fully inspect query parameters on the target URL.
|
|
192
192
|
*/
|
|
193
193
|
queryParamsResolved?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* For `network` subtype only. Lower-case host extracted from the call's URL
|
|
196
|
+
* when it was an absolute URL (`https://api.example.com/users` → `api.example.com`,
|
|
197
|
+
* `http://localhost:8080/x` → `localhost:8080`). Undefined for relative
|
|
198
|
+
* URLs (`/api/users`), template literals where the host is interpolated
|
|
199
|
+
* (`https://${HOST}/api`), and unresolved expressions.
|
|
200
|
+
*
|
|
201
|
+
* Captured but not yet consumed by cross-stack rules. Phase 1 of the
|
|
202
|
+
* surface-fingerprinting work — phase 2 will let cross-stack rules use
|
|
203
|
+
* this to filter out third-party hosts (e.g. a frontend `fetch` to
|
|
204
|
+
* `stripe.com/api/charges` should not match against the partner backend's
|
|
205
|
+
* `/api/charges` route).
|
|
206
|
+
*/
|
|
207
|
+
host?: string;
|
|
208
|
+
/**
|
|
209
|
+
* For `network` subtype only. The set of HTTP status codes the call-site
|
|
210
|
+
* EXPLICITLY branches on — extracted from `response.status === N`,
|
|
211
|
+
* `err.status === N`, `err.response?.status === N`, or `case N:` in a
|
|
212
|
+
* switch over one of those expressions. Excludes generic catch-all
|
|
213
|
+
* handlers (`catch (e) { log(e); }`), `response.ok` checks, and
|
|
214
|
+
* status-range tests (`status >= 400`).
|
|
215
|
+
*
|
|
216
|
+
* Empty list means we saw the network call but no explicit status
|
|
217
|
+
* dispatch — the call-site treats every failure identically. Undefined
|
|
218
|
+
* means the analysis was inconclusive (response variable escaped the
|
|
219
|
+
* scope, dynamic status check, etc).
|
|
220
|
+
*
|
|
221
|
+
* Phase 1 of the `error-contract-drift` work — phase 2 will compare
|
|
222
|
+
* this against the server-side `errorStatusCodes` to flag PRs that add
|
|
223
|
+
* a server status the client doesn't handle. Captured but not yet
|
|
224
|
+
* consumed.
|
|
225
|
+
*/
|
|
226
|
+
handledErrorStatusCodes?: readonly number[];
|
|
194
227
|
}
|
|
195
228
|
export interface StateMutationPayload {
|
|
196
229
|
readonly kind: 'state_mutation';
|
package/dist/concepts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concepts.js","sourceRoot":"","sources":["../src/concepts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"concepts.js","sourceRoot":"","sources":["../src/concepts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAuVH,4EAA4E;AAE5E,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAY,EAAE,MAAc;IACtE,OAAO,GAAG,QAAQ,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,SAAiB,EACjB,QAAgB,EAChB,OAAgB,EAChB,MAAe;IAEf,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,CAAC;AAClG,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export type { GapCategory, GapClassification } from './migrate-literals.js';
|
|
|
25
25
|
export { classifyHandlerGap, isInlineSafeExpression, isInlineSafeLiteral } from './migrate-literals.js';
|
|
26
26
|
export type { EligibilityResult, FileEligibilityReport, RawBody } from './native-eligibility.js';
|
|
27
27
|
export { classifyHandlerBody, extractRawBodies, scanFileForEligibility } from './native-eligibility.js';
|
|
28
|
+
export type { AstEligibilityResult } from './native-eligibility-ast.js';
|
|
29
|
+
export { classifyHandlerBodyAst, hasComments, isValidKernExpression, } from './native-eligibility-ast.js';
|
|
28
30
|
export type { ActionProps, AssumeProps, BranchProps, CacheProps, CollectProps, ColumnProps, ConditionalProps, ConfigProps, ConstProps, DependencyProps, DeriveProps, EachProps, ErrorProps, EventProps, ExpectProps, FieldProps, FnProps, GuardProps, ImportProps, InterfaceProps, InvariantProps, MachineProps, MemoProps, MethodProps, ModelProps, ModuleProps, NodePropsMap, OnProps, OptionProps, PatternProps, RecoverProps, RelationProps, RepositoryProps, ResolveProps, SelectProps, ServiceProps, StateProps, StoreProps, TestProps, TransformProps, TransitionProps, TypeProps, UnionProps, VariantProps, WebSocketProps, } from './node-props.js';
|
|
29
31
|
export { propsOf, propsUntyped } from './node-props.js';
|
|
30
32
|
export type { Token, TokenKind } from './parser.js';
|
package/dist/index.js
CHANGED
|
@@ -35,6 +35,7 @@ export { KernCodegenError, KernConfigError, KernParseError } from './errors.js';
|
|
|
35
35
|
export { escapeKernString, importTypeScript } from './importer.js';
|
|
36
36
|
export { classifyHandlerGap, isInlineSafeExpression, isInlineSafeLiteral } from './migrate-literals.js';
|
|
37
37
|
export { classifyHandlerBody, extractRawBodies, scanFileForEligibility } from './native-eligibility.js';
|
|
38
|
+
export { classifyHandlerBodyAst, hasComments, isValidKernExpression, } from './native-eligibility-ast.js';
|
|
38
39
|
// Typed node props
|
|
39
40
|
export { propsOf, propsUntyped } from './node-props.js';
|
|
40
41
|
// Core
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE7F,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAElC,8EAA8E;AAC9E,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,+BAA+B,EAC/B,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAEtC,gCAAgC;AAChC,OAAO,EACL,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,eAAe,EACf,MAAM;AACN,4CAA4C;AAC5C,cAAc,EACd,mBAAmB,EACnB,qBAAqB;AACrB,kFAAkF;AAClF,aAAa,EACb,QAAQ,EACR,qBAAqB;AACrB,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,aAAa;AACb,uDAAuD;AACvD,QAAQ,EACR,eAAe,EACf,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,cAAc,EACd,0BAA0B;AAC1B,uDAAuD;AACvD,wBAAwB,EACxB,8BAA8B,EAC9B,iBAAiB,EACjB,aAAa,EACb,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,0EAA0E;AAC1E,0EAA0E;AAC1E,yEAAyE;AACzE,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAoB5F,mDAAmD;AACnD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AASvD,SAAS;AACT,OAAO,EACL,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIxG,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Native KERN handler-body AST eligibility — slice α-3.
|
|
2
|
+
*
|
|
3
|
+
* Replaces slice 5a's regex pre-screen (in `native-eligibility.ts`) with a
|
|
4
|
+
* TS-AST walk that mirrors the migrator's `mapStatement` rules in
|
|
5
|
+
* `packages/cli/src/commands/migrate-native-handlers.ts`. After this slice,
|
|
6
|
+
* the diagnostic and the migrator agree by construction:
|
|
7
|
+
*
|
|
8
|
+
* classifyHandlerBodyAst(body).eligible === true
|
|
9
|
+
* ⟺ kern migrate native-handlers will emit a `lang="kern"` rewrite for it.
|
|
10
|
+
*
|
|
11
|
+
* Why this matters: the slice 5a regex disagreed with the migrator's deeper
|
|
12
|
+
* TS-AST shape check on ~34% of "eligible" bodies (agon scan, 2026-05-04).
|
|
13
|
+
* Promoting the diagnostic from `info` to `warn` at that disagreement rate
|
|
14
|
+
* would surface fix-or-suppress noise on bodies the migrator silently bails
|
|
15
|
+
* on — exactly the no-unused-vars trust-collapse pattern. AST agreement is
|
|
16
|
+
* the prerequisite for the future warn promotion.
|
|
17
|
+
*
|
|
18
|
+
* The reason strings here are deliberately specific (e.g. `var-destructure`,
|
|
19
|
+
* `try-finally`, `expr-stmt-mutation`) so users running
|
|
20
|
+
* `kern migrate native-handlers` and `kern review` see actionable hints
|
|
21
|
+
* instead of a generic "ineligible". */
|
|
22
|
+
export interface AstEligibilityResult {
|
|
23
|
+
eligible: boolean;
|
|
24
|
+
/** When eligible: 'empty' | 'ok'.
|
|
25
|
+
* When ineligible: a short kebab-case slug naming the first blocking shape.
|
|
26
|
+
* Examples: 'comments-present', 'ts-parse-error', 'var-destructure',
|
|
27
|
+
* 'var-non-const', 'try-finally', 'for-stmt', 'expr-stmt-mutation',
|
|
28
|
+
* 'return-bad-expr', 'unsupported-stmt-<Kind>'. */
|
|
29
|
+
reason: string;
|
|
30
|
+
}
|
|
31
|
+
/** True when `exprText` parses cleanly under KERN's parser-expression. The
|
|
32
|
+
* multi-line guard catches body-statement attributes (`value="…"`) where
|
|
33
|
+
* raw newlines would break the line shape.
|
|
34
|
+
*
|
|
35
|
+
* Exported so the migrator (`migrate-native-handlers.ts`) shares the
|
|
36
|
+
* same predicate the classifier uses — slice α-3 gemini review pulled
|
|
37
|
+
* the formerly duplicated helper into core to prevent the migrator's
|
|
38
|
+
* bail conditions from drifting away from the classifier's pass
|
|
39
|
+
* conditions. */
|
|
40
|
+
export declare function isValidKernExpression(exprText: string): boolean;
|
|
41
|
+
/** True when `bodyText` contains any line or block comment. The migrator
|
|
42
|
+
* drops comments silently on rewrite, so a body containing them is
|
|
43
|
+
* ineligible — preserving the comment is the user's responsibility.
|
|
44
|
+
* Exported (slice α-3 gemini review) so the migrator imports the same
|
|
45
|
+
* scanner predicate and comment-detection cannot diverge between the
|
|
46
|
+
* two sides. */
|
|
47
|
+
export declare function hasComments(bodyText: string): boolean;
|
|
48
|
+
/** Classify a raw `<<<…>>>` handler body — the AST-aware replacement for
|
|
49
|
+
* the slice 5a regex pass. Returns `eligible: true` only if every top-level
|
|
50
|
+
* statement (and every nested if/try branch) maps to a body-statement form
|
|
51
|
+
* the migrator can emit. */
|
|
52
|
+
export declare function classifyHandlerBodyAst(rawBody: string): AstEligibilityResult;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/** Native KERN handler-body AST eligibility — slice α-3.
|
|
2
|
+
*
|
|
3
|
+
* Replaces slice 5a's regex pre-screen (in `native-eligibility.ts`) with a
|
|
4
|
+
* TS-AST walk that mirrors the migrator's `mapStatement` rules in
|
|
5
|
+
* `packages/cli/src/commands/migrate-native-handlers.ts`. After this slice,
|
|
6
|
+
* the diagnostic and the migrator agree by construction:
|
|
7
|
+
*
|
|
8
|
+
* classifyHandlerBodyAst(body).eligible === true
|
|
9
|
+
* ⟺ kern migrate native-handlers will emit a `lang="kern"` rewrite for it.
|
|
10
|
+
*
|
|
11
|
+
* Why this matters: the slice 5a regex disagreed with the migrator's deeper
|
|
12
|
+
* TS-AST shape check on ~34% of "eligible" bodies (agon scan, 2026-05-04).
|
|
13
|
+
* Promoting the diagnostic from `info` to `warn` at that disagreement rate
|
|
14
|
+
* would surface fix-or-suppress noise on bodies the migrator silently bails
|
|
15
|
+
* on — exactly the no-unused-vars trust-collapse pattern. AST agreement is
|
|
16
|
+
* the prerequisite for the future warn promotion.
|
|
17
|
+
*
|
|
18
|
+
* The reason strings here are deliberately specific (e.g. `var-destructure`,
|
|
19
|
+
* `try-finally`, `expr-stmt-mutation`) so users running
|
|
20
|
+
* `kern migrate native-handlers` and `kern review` see actionable hints
|
|
21
|
+
* instead of a generic "ineligible". */
|
|
22
|
+
import ts from 'typescript';
|
|
23
|
+
import { parseExpression } from './parser-expression.js';
|
|
24
|
+
/** True when `exprText` parses cleanly under KERN's parser-expression. The
|
|
25
|
+
* multi-line guard catches body-statement attributes (`value="…"`) where
|
|
26
|
+
* raw newlines would break the line shape.
|
|
27
|
+
*
|
|
28
|
+
* Exported so the migrator (`migrate-native-handlers.ts`) shares the
|
|
29
|
+
* same predicate the classifier uses — slice α-3 gemini review pulled
|
|
30
|
+
* the formerly duplicated helper into core to prevent the migrator's
|
|
31
|
+
* bail conditions from drifting away from the classifier's pass
|
|
32
|
+
* conditions. */
|
|
33
|
+
export function isValidKernExpression(exprText) {
|
|
34
|
+
if (/\n/.test(exprText))
|
|
35
|
+
return false;
|
|
36
|
+
try {
|
|
37
|
+
parseExpression(exprText);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** True when `bodyText` contains any line or block comment. The migrator
|
|
45
|
+
* drops comments silently on rewrite, so a body containing them is
|
|
46
|
+
* ineligible — preserving the comment is the user's responsibility.
|
|
47
|
+
* Exported (slice α-3 gemini review) so the migrator imports the same
|
|
48
|
+
* scanner predicate and comment-detection cannot diverge between the
|
|
49
|
+
* two sides. */
|
|
50
|
+
export function hasComments(bodyText) {
|
|
51
|
+
const scanner = ts.createScanner(ts.ScriptTarget.Latest, /*skipTrivia*/ false);
|
|
52
|
+
scanner.setText(bodyText);
|
|
53
|
+
while (true) {
|
|
54
|
+
const kind = scanner.scan();
|
|
55
|
+
if (kind === ts.SyntaxKind.EndOfFileToken)
|
|
56
|
+
return false;
|
|
57
|
+
if (kind === ts.SyntaxKind.SingleLineCommentTrivia || kind === ts.SyntaxKind.MultiLineCommentTrivia)
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Classify a single statement. Returns null if the migrator can emit it,
|
|
62
|
+
* otherwise a kebab-case reason. Recurses through if/try branches. */
|
|
63
|
+
function classifyStmt(stmt, sf) {
|
|
64
|
+
if (ts.isVariableStatement(stmt)) {
|
|
65
|
+
const flags = stmt.declarationList.flags;
|
|
66
|
+
if (!(flags & ts.NodeFlags.Const))
|
|
67
|
+
return 'var-non-const';
|
|
68
|
+
const decls = stmt.declarationList.declarations;
|
|
69
|
+
if (decls.length !== 1)
|
|
70
|
+
return 'var-multi-decl';
|
|
71
|
+
const decl = decls[0];
|
|
72
|
+
if (!ts.isIdentifier(decl.name))
|
|
73
|
+
return 'var-destructure';
|
|
74
|
+
if (!decl.initializer)
|
|
75
|
+
return 'var-no-init';
|
|
76
|
+
if (decl.type)
|
|
77
|
+
return 'var-typed';
|
|
78
|
+
if (!isValidKernExpression(decl.initializer.getText(sf)))
|
|
79
|
+
return 'var-bad-expr';
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (ts.isReturnStatement(stmt)) {
|
|
83
|
+
if (!stmt.expression)
|
|
84
|
+
return null;
|
|
85
|
+
if (!isValidKernExpression(stmt.expression.getText(sf)))
|
|
86
|
+
return 'return-bad-expr';
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
if (ts.isThrowStatement(stmt)) {
|
|
90
|
+
if (!stmt.expression)
|
|
91
|
+
return 'throw-no-expr';
|
|
92
|
+
if (!isValidKernExpression(stmt.expression.getText(sf)))
|
|
93
|
+
return 'throw-bad-expr';
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
if (ts.isIfStatement(stmt)) {
|
|
97
|
+
if (!isValidKernExpression(stmt.expression.getText(sf)))
|
|
98
|
+
return 'if-bad-cond';
|
|
99
|
+
const thenReason = classifyBranch(stmt.thenStatement, sf);
|
|
100
|
+
if (thenReason !== null)
|
|
101
|
+
return thenReason;
|
|
102
|
+
if (stmt.elseStatement) {
|
|
103
|
+
// `else if (…)` is a nested IfStatement here. The migrator's mapIf
|
|
104
|
+
// recurses for it, and the body emitters (TS + Python) collapse the
|
|
105
|
+
// resulting `else > if` shape back to `else if` / `elif` (commit
|
|
106
|
+
// 88c06dcc on dev). classifyBranch handles the nested IfStatement
|
|
107
|
+
// by re-entering classifyStmt, so the recursion is automatic.
|
|
108
|
+
const elseReason = classifyBranch(stmt.elseStatement, sf);
|
|
109
|
+
if (elseReason !== null)
|
|
110
|
+
return elseReason;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
if (ts.isTryStatement(stmt)) {
|
|
115
|
+
if (!stmt.catchClause)
|
|
116
|
+
return 'try-no-catch';
|
|
117
|
+
if (stmt.finallyBlock)
|
|
118
|
+
return 'try-finally';
|
|
119
|
+
const cc = stmt.catchClause;
|
|
120
|
+
if (cc.variableDeclaration && !ts.isIdentifier(cc.variableDeclaration.name))
|
|
121
|
+
return 'try-destruct-catch';
|
|
122
|
+
const tryReason = classifyBranch(stmt.tryBlock, sf);
|
|
123
|
+
if (tryReason !== null)
|
|
124
|
+
return tryReason;
|
|
125
|
+
return classifyBranch(cc.block, sf);
|
|
126
|
+
}
|
|
127
|
+
if (ts.isExpressionStatement(stmt)) {
|
|
128
|
+
// Slice α-1: ExpressionStatement → `do value="…"`. Reject mutation
|
|
129
|
+
// (assignments, ++, --) here so the classifier matches what the migrator
|
|
130
|
+
// emits — the migrator has the same defensive guards.
|
|
131
|
+
if (ts.isBinaryExpression(stmt.expression)) {
|
|
132
|
+
const op = stmt.expression.operatorToken.kind;
|
|
133
|
+
if (op >= ts.SyntaxKind.FirstAssignment && op <= ts.SyntaxKind.LastAssignment)
|
|
134
|
+
return 'expr-stmt-assignment';
|
|
135
|
+
}
|
|
136
|
+
if (ts.isPostfixUnaryExpression(stmt.expression) || ts.isPrefixUnaryExpression(stmt.expression)) {
|
|
137
|
+
const op = stmt.expression.operator;
|
|
138
|
+
if (op === ts.SyntaxKind.PlusPlusToken || op === ts.SyntaxKind.MinusMinusToken)
|
|
139
|
+
return 'expr-stmt-mutation';
|
|
140
|
+
}
|
|
141
|
+
if (!isValidKernExpression(stmt.expression.getText(sf)))
|
|
142
|
+
return 'expr-stmt-bad-expr';
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
if (ts.isForStatement(stmt) || ts.isForOfStatement(stmt) || ts.isForInStatement(stmt))
|
|
146
|
+
return 'for-stmt';
|
|
147
|
+
if (ts.isWhileStatement(stmt) || ts.isDoStatement(stmt))
|
|
148
|
+
return 'while-do-stmt';
|
|
149
|
+
if (ts.isSwitchStatement(stmt))
|
|
150
|
+
return 'switch-stmt';
|
|
151
|
+
if (ts.isBlock(stmt))
|
|
152
|
+
return 'bare-block';
|
|
153
|
+
// Fallback — the TS SyntaxKind name surfaces in diagnostics so users have
|
|
154
|
+
// a starting point when they hit something exotic (label, with, debugger).
|
|
155
|
+
return `unsupported-stmt-${ts.SyntaxKind[stmt.kind]}`;
|
|
156
|
+
}
|
|
157
|
+
function classifyBranch(node, sf) {
|
|
158
|
+
const stmts = ts.isBlock(node) ? Array.from(node.statements) : [node];
|
|
159
|
+
for (const s of stmts) {
|
|
160
|
+
const r = classifyStmt(s, sf);
|
|
161
|
+
if (r !== null)
|
|
162
|
+
return r;
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
/** Classify a raw `<<<…>>>` handler body — the AST-aware replacement for
|
|
167
|
+
* the slice 5a regex pass. Returns `eligible: true` only if every top-level
|
|
168
|
+
* statement (and every nested if/try branch) maps to a body-statement form
|
|
169
|
+
* the migrator can emit. */
|
|
170
|
+
export function classifyHandlerBodyAst(rawBody) {
|
|
171
|
+
const trimmed = rawBody.trim();
|
|
172
|
+
if (trimmed === '')
|
|
173
|
+
return { eligible: true, reason: 'empty' };
|
|
174
|
+
if (hasComments(rawBody))
|
|
175
|
+
return { eligible: false, reason: 'comments-present' };
|
|
176
|
+
const sf = ts.createSourceFile('__handler.ts', rawBody, ts.ScriptTarget.Latest, true);
|
|
177
|
+
// ts.SourceFile carries `parseDiagnostics` despite not exposing it on the
|
|
178
|
+
// public type — the migrator reads it the same way.
|
|
179
|
+
const diags = sf.parseDiagnostics;
|
|
180
|
+
if (diags && diags.length > 0)
|
|
181
|
+
return { eligible: false, reason: 'ts-parse-error' };
|
|
182
|
+
for (const stmt of sf.statements) {
|
|
183
|
+
const r = classifyStmt(stmt, sf);
|
|
184
|
+
if (r !== null)
|
|
185
|
+
return { eligible: false, reason: r };
|
|
186
|
+
}
|
|
187
|
+
return { eligible: true, reason: 'ok' };
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=native-eligibility-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-eligibility-ast.js","sourceRoot":"","sources":["../src/native-eligibility-ast.ts"],"names":[],"mappings":"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"}
|