sh-ast 0.3.1 → 0.4.0

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 (84) hide show
  1. package/README.md +116 -144
  2. package/dist/analyze/ansi-c-escapes.d.ts +1 -1
  3. package/dist/analyze/ansi-c-escapes.js +1 -1
  4. package/dist/analyze/enumerate-commands.d.ts +11 -16
  5. package/dist/analyze/enumerate-commands.d.ts.map +1 -1
  6. package/dist/analyze/enumerate-commands.js +82 -92
  7. package/dist/analyze/enumerate-commands.js.map +1 -1
  8. package/dist/analyze/index.d.ts +3 -2
  9. package/dist/analyze/index.d.ts.map +1 -1
  10. package/dist/analyze/index.js +1 -1
  11. package/dist/analyze/node-helpers.d.ts +10 -21
  12. package/dist/analyze/node-helpers.d.ts.map +1 -1
  13. package/dist/analyze/node-helpers.js +16 -27
  14. package/dist/analyze/node-helpers.js.map +1 -1
  15. package/dist/analyze/resolve-argv0.d.ts +6 -6
  16. package/dist/analyze/resolve-argv0.js +6 -6
  17. package/dist/analyze/resolve-word.d.ts +7 -10
  18. package/dist/analyze/resolve-word.d.ts.map +1 -1
  19. package/dist/analyze/resolve-word.js +39 -22
  20. package/dist/analyze/resolve-word.js.map +1 -1
  21. package/dist/analyze.d.ts +3780 -397
  22. package/dist/errors.d.ts +6 -79
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/errors.js +5 -64
  25. package/dist/errors.js.map +1 -1
  26. package/dist/index.d.ts +16 -14
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +23 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/sh-ast.d.ts +3503 -1027
  31. package/dist/syntax-errors.d.ts +56 -0
  32. package/dist/syntax-errors.d.ts.map +1 -0
  33. package/dist/syntax-errors.js +80 -0
  34. package/dist/syntax-errors.js.map +1 -0
  35. package/dist/syntax-snapshot.d.ts +47 -0
  36. package/dist/syntax-snapshot.d.ts.map +1 -0
  37. package/dist/syntax-snapshot.js +121 -0
  38. package/dist/syntax-snapshot.js.map +1 -0
  39. package/dist/syntax-wire.d.ts +31 -0
  40. package/dist/syntax-wire.d.ts.map +1 -0
  41. package/dist/syntax-wire.js +202 -0
  42. package/dist/syntax-wire.js.map +1 -0
  43. package/dist/syntax.d.ts +65 -0
  44. package/dist/syntax.d.ts.map +1 -0
  45. package/dist/syntax.js +152 -0
  46. package/dist/syntax.js.map +1 -0
  47. package/dist/wasm-instance.d.ts +5 -8
  48. package/dist/wasm-instance.d.ts.map +1 -1
  49. package/dist/wasm-instance.js +44 -47
  50. package/dist/wasm-instance.js.map +1 -1
  51. package/generated/syntax-constants.d.ts +1652 -0
  52. package/generated/syntax-constants.js +1384 -0
  53. package/generated/syntax-schema.d.ts +60 -0
  54. package/generated/syntax-schema.js +1740 -0
  55. package/generated/syntax-types.d.ts +1977 -0
  56. package/package.json +2 -2
  57. package/shim/sh-ast.wasm +0 -0
  58. package/dist/normalize.d.ts +0 -52
  59. package/dist/normalize.d.ts.map +0 -1
  60. package/dist/normalize.js +0 -260
  61. package/dist/normalize.js.map +0 -1
  62. package/dist/parse.d.ts +0 -50
  63. package/dist/parse.d.ts.map +0 -1
  64. package/dist/parse.js +0 -125
  65. package/dist/parse.js.map +0 -1
  66. package/dist/types.d.ts +0 -74
  67. package/dist/types.d.ts.map +0 -1
  68. package/dist/types.js +0 -2
  69. package/dist/types.js.map +0 -1
  70. package/dist/visitor-keys.d.ts +0 -21
  71. package/dist/visitor-keys.d.ts.map +0 -1
  72. package/dist/visitor-keys.js +0 -23
  73. package/dist/visitor-keys.js.map +0 -1
  74. package/dist/walk.d.ts +0 -18
  75. package/dist/walk.d.ts.map +0 -1
  76. package/dist/walk.js +0 -40
  77. package/dist/walk.js.map +0 -1
  78. package/generated/child-type-schema.d.ts +0 -14
  79. package/generated/child-type-schema.js +0 -188
  80. package/generated/node-types.d.ts +0 -1002
  81. package/generated/position-fields.d.ts +0 -21
  82. package/generated/position-fields.js +0 -50
  83. package/generated/visitor-keys.d.ts +0 -11
  84. package/generated/visitor-keys.js +0 -50
@@ -1,23 +1,11 @@
1
+ /** Enumerates invocations on caller-owned faithful records while retaining syntactic contexts. */
2
+ import { AndStmt, OrStmt, Pipe, PipeAll } from '../../generated/syntax-constants.js';
3
+ import { nodePos } from '../syntax.js';
1
4
  import { ShAnalyzeMaxDepthError } from '../errors.js';
2
- import { isShNodeShape, nodeArray, stringField } from './node-helpers.js';
5
+ import { isSyntaxNode, nodeArray } from './node-helpers.js';
3
6
  import { resolveWord } from './resolve-word.js';
4
- /**
5
- * mvdan/sh v3.13.1's `syntax.BinCmdOperator` token values for `BinaryCmd.Op`
6
- * — `AndStmt` (`&&`), `OrStmt` (`||`), `Pipe` (`|`), `PipeAll` (`|&`). These
7
- * are not part of any documented wire contract (`normalize()` copies
8
- * mvdan/sh's raw numeric token straight through — see design/ARCHITECTURE.md
9
- * open question 4), so they're pinned here by empirical observation against
10
- * this bridge's own shim rather than derived from an upstream constant, and
11
- * locked in by a canary test (`enumerate-commands.test.ts`, "binary command
12
- * operator identification") that would fail loudly if a future mvdan/sh
13
- * version renumbered them.
14
- */
15
- const BIN_CMD_OP_AND = 11;
16
- const BIN_CMD_OP_OR = 12;
17
- const BIN_CMD_OP_PIPE = 13;
18
- const BIN_CMD_OP_PIPE_ALL = 14;
19
7
  function isPipeOp(op) {
20
- return op === BIN_CMD_OP_PIPE || op === BIN_CMD_OP_PIPE_ALL;
8
+ return op === Pipe || op === PipeAll;
21
9
  }
22
10
  /**
23
11
  * The maximum number of *genuinely nested* structural frames (subshells,
@@ -80,14 +68,14 @@ function scanForHiddenCommands(value, context, sites, depth) {
80
68
  scanForHiddenCommands(item, context, sites, depth);
81
69
  return;
82
70
  }
83
- if (!isShNodeShape(value))
71
+ if (typeof value !== 'object' || value === null || value instanceof Uint8Array)
84
72
  return;
85
- if (value.type === 'CmdSubst') {
86
- visitStmtList(nodeArray(value.stmts), pushContext(context, { kind: 'cmdSubst' }), sites, depth + 1);
73
+ if (isSyntaxNode(value) && value.Type === 'CmdSubst') {
74
+ visitStmtList(nodeArray(value.Stmts), pushContext(context, { kind: 'cmdSubst' }), sites, depth + 1);
87
75
  return;
88
76
  }
89
- if (value.type === 'ProcSubst') {
90
- visitStmtList(nodeArray(value.stmts), pushContext(context, { kind: 'procSubst' }), sites, depth + 1);
77
+ if (isSyntaxNode(value) && value.Type === 'ProcSubst') {
78
+ visitStmtList(nodeArray(value.Stmts), pushContext(context, { kind: 'procSubst' }), sites, depth + 1);
91
79
  return;
92
80
  }
93
81
  for (const field of Object.values(value)) {
@@ -111,13 +99,13 @@ function visitStmt(stmt, context, sites, depth) {
111
99
  throw new ShAnalyzeMaxDepthError(MAX_STRUCTURAL_DEPTH);
112
100
  }
113
101
  let stmtContext = context;
114
- if (stmt.negated === true)
102
+ if (stmt.Negated)
115
103
  stmtContext = pushContext(stmtContext, { kind: 'negated' });
116
- if (stmt.background === true)
104
+ if (stmt.Background)
117
105
  stmtContext = pushContext(stmtContext, { kind: 'background' });
118
- scanForHiddenCommands(stmt.redirs, stmtContext, sites, depth);
119
- const cmd = stmt.cmd;
120
- if (isShNodeShape(cmd))
106
+ scanForHiddenCommands(stmt.Redirs, stmtContext, sites, depth);
107
+ const cmd = stmt.Cmd;
108
+ if (isSyntaxNode(cmd))
121
109
  visitCommand(cmd, stmtContext, sites, depth);
122
110
  }
123
111
  /**
@@ -140,16 +128,16 @@ function visitStmt(stmt, context, sites, depth) {
140
128
  */
141
129
  function flattenPipelineStages(cmd) {
142
130
  const stages = [];
143
- const workStack = [cmd.y, cmd.x];
131
+ const workStack = [cmd.Y, cmd.X];
144
132
  while (workStack.length > 0) {
145
133
  const operandStmt = workStack.pop();
146
- if (!isShNodeShape(operandStmt))
134
+ if (!isSyntaxNode(operandStmt))
147
135
  continue;
148
- const innerCmd = operandStmt.cmd;
149
- if (isShNodeShape(innerCmd) && innerCmd.type === 'BinaryCmd' && isPipeOp(innerCmd.op)) {
136
+ const innerCmd = operandStmt.Cmd;
137
+ if (isSyntaxNode(innerCmd) && innerCmd.Type === 'BinaryCmd' && isPipeOp(innerCmd.Op)) {
150
138
  // Push `y` then `x` so `x` — the side that keeps the chain going in
151
139
  // the left-associative case — is popped (processed) first.
152
- workStack.push(innerCmd.y, innerCmd.x);
140
+ workStack.push(innerCmd.Y, innerCmd.X);
153
141
  }
154
142
  else {
155
143
  stages.push(operandStmt);
@@ -184,7 +172,7 @@ function flattenPipelineStages(cmd) {
184
172
  * treatment, for the same reason).
185
173
  */
186
174
  function visitBinaryCmd(cmd, context, sites, depth) {
187
- const op = cmd.op;
175
+ const op = cmd.Op;
188
176
  if (isPipeOp(op)) {
189
177
  const stages = flattenPipelineStages(cmd);
190
178
  stages.forEach((stage, index) => {
@@ -195,27 +183,27 @@ function visitBinaryCmd(cmd, context, sites, depth) {
195
183
  const rightOperands = [];
196
184
  let spine = cmd;
197
185
  for (;;) {
198
- const spineOp = spine.op;
199
- const frame = spineOp === BIN_CMD_OP_AND
186
+ const spineOp = spine.Op;
187
+ const frame = spineOp === AndStmt
200
188
  ? { kind: 'and', side: 'right' }
201
- : spineOp === BIN_CMD_OP_OR
189
+ : spineOp === OrStmt
202
190
  ? { kind: 'or', side: 'right' }
203
191
  : undefined;
204
- const y = spine.y;
205
- if (isShNodeShape(y))
192
+ const y = spine.Y;
193
+ if (isSyntaxNode(y))
206
194
  rightOperands.push({ stmt: y, frame });
207
- const x = spine.x;
208
- if (!isShNodeShape(x))
195
+ const x = spine.X;
196
+ if (!isSyntaxNode(x))
209
197
  break;
210
- const innerCmd = x.cmd;
211
- if (isShNodeShape(innerCmd) && innerCmd.type === 'BinaryCmd' && !isPipeOp(innerCmd.op)) {
198
+ const innerCmd = x.Cmd;
199
+ if (isSyntaxNode(innerCmd) && innerCmd.Type === 'BinaryCmd' && !isPipeOp(innerCmd.Op)) {
212
200
  spine = innerCmd;
213
201
  continue;
214
202
  }
215
203
  // `x` is the leftmost operand: not a further same-family BinaryCmd
216
204
  // link, so this is where the spine walk ends — visit it with the
217
205
  // *outer* (unmodified) context, exactly as the original recursive
218
- // implementation visited `cmd.x`.
206
+ // implementation visited `cmd.X`.
219
207
  visitStmt(x, context, sites, depth + 1);
220
208
  break;
221
209
  }
@@ -224,10 +212,10 @@ function visitBinaryCmd(cmd, context, sites, depth) {
224
212
  }
225
213
  }
226
214
  function visitIfClause(clause, context, sites, depth) {
227
- visitStmtList(nodeArray(clause.cond), pushContext(context, { kind: 'if', branch: 'cond' }), sites, depth);
228
- visitStmtList(nodeArray(clause.then), pushContext(context, { kind: 'if', branch: 'then' }), sites, depth);
229
- const elseClause = clause.else;
230
- if (isShNodeShape(elseClause)) {
215
+ visitStmtList(nodeArray(clause.Cond), pushContext(context, { kind: 'if', branch: 'cond' }), sites, depth);
216
+ visitStmtList(nodeArray(clause.Then), pushContext(context, { kind: 'if', branch: 'then' }), sites, depth);
217
+ const elseClause = clause.Else;
218
+ if (isSyntaxNode(elseClause)) {
231
219
  // A chained `elif` — mvdan/sh models it as `IfClause.Else` pointing to
232
220
  // another `IfClause` — is one more genuine level of nesting than
233
221
  // `cond`/`then` above, so it gets its own `depth + 1` (a long `elif`
@@ -238,13 +226,17 @@ function visitIfClause(clause, context, sites, depth) {
238
226
  }
239
227
  }
240
228
  function visitCommand(cmd, context, sites, depth) {
241
- switch (cmd.type) {
229
+ switch (cmd.Type) {
242
230
  case 'CallExpr': {
243
- scanForHiddenCommands(cmd.assigns, context, sites, depth);
244
- scanForHiddenCommands(cmd.args, context, sites, depth);
245
- const args = nodeArray(cmd.args);
231
+ scanForHiddenCommands(cmd.Assigns, context, sites, depth);
232
+ scanForHiddenCommands(cmd.Args, context, sites, depth);
233
+ // Argument positions carry command-line meaning. A nil pointer is an
234
+ // unsupported argument, not permission to shift later words left.
235
+ const args = cmd.Args ?? [];
246
236
  if (args.length > 0) {
247
- const argv = args.map((word) => resolveWord(word, { context: 'command-argument' }));
237
+ const argv = args.map((word) => word === null
238
+ ? { static: false, reason: 'unsupported' }
239
+ : resolveWord(word, { context: 'command-argument' }));
248
240
  sites.push({ node: cmd, argv0: argv[0], argv, context });
249
241
  }
250
242
  return;
@@ -256,73 +248,73 @@ function visitCommand(cmd, context, sites, depth) {
256
248
  // Transparent grouping (`{ ...; }`) — no context frame, but still one
257
249
  // genuine level of structural nesting for depth-guard purposes (a
258
250
  // pathological `{ { { ... } } }` chain must still trip the guard).
259
- visitStmtList(nodeArray(cmd.stmts), context, sites, depth + 1);
251
+ visitStmtList(nodeArray(cmd.Stmts), context, sites, depth + 1);
260
252
  return;
261
253
  case 'Subshell':
262
- visitStmtList(nodeArray(cmd.stmts), pushContext(context, { kind: 'subshell' }), sites, depth + 1);
254
+ visitStmtList(nodeArray(cmd.Stmts), pushContext(context, { kind: 'subshell' }), sites, depth + 1);
263
255
  return;
264
256
  case 'IfClause':
265
257
  visitIfClause(cmd, context, sites, depth + 1);
266
258
  return;
267
259
  case 'CaseClause': {
268
- scanForHiddenCommands(cmd.word, context, sites, depth);
269
- for (const item of nodeArray(cmd.items)) {
270
- scanForHiddenCommands(item.patterns, context, sites, depth);
271
- visitStmtList(nodeArray(item.stmts), pushContext(context, { kind: 'case' }), sites, depth + 1);
260
+ scanForHiddenCommands(cmd.Word, context, sites, depth);
261
+ for (const item of nodeArray(cmd.Items)) {
262
+ scanForHiddenCommands(item.Patterns, context, sites, depth);
263
+ visitStmtList(nodeArray(item.Stmts), pushContext(context, { kind: 'case' }), sites, depth + 1);
272
264
  }
273
265
  return;
274
266
  }
275
267
  case 'ForClause': {
276
- scanForHiddenCommands(cmd.loop, context, sites, depth);
277
- visitStmtList(nodeArray(cmd.do), pushContext(context, { kind: 'loop', role: 'body' }), sites, depth + 1);
268
+ scanForHiddenCommands(cmd.Loop, context, sites, depth);
269
+ visitStmtList(nodeArray(cmd.Do), pushContext(context, { kind: 'loop', role: 'body' }), sites, depth + 1);
278
270
  return;
279
271
  }
280
272
  case 'WhileClause': {
281
- visitStmtList(nodeArray(cmd.cond), pushContext(context, { kind: 'loop', role: 'cond' }), sites, depth + 1);
282
- visitStmtList(nodeArray(cmd.do), pushContext(context, { kind: 'loop', role: 'body' }), sites, depth + 1);
273
+ visitStmtList(nodeArray(cmd.Cond), pushContext(context, { kind: 'loop', role: 'cond' }), sites, depth + 1);
274
+ visitStmtList(nodeArray(cmd.Do), pushContext(context, { kind: 'loop', role: 'body' }), sites, depth + 1);
283
275
  return;
284
276
  }
285
277
  case 'FuncDecl': {
286
- const nameNode = cmd.name;
287
- const nameText = isShNodeShape(nameNode) ? stringField(nameNode, 'value') : '';
288
- const body = cmd.body;
289
- if (isShNodeShape(body)) {
278
+ const nameNode = cmd.Name;
279
+ const nameText = nameNode?.Value ?? '';
280
+ const body = cmd.Body;
281
+ if (isSyntaxNode(body)) {
290
282
  visitStmt(body, pushContext(context, { kind: 'function', name: nameText }), sites, depth + 1);
291
283
  }
292
284
  return;
293
285
  }
294
286
  case 'CoprocClause': {
295
- scanForHiddenCommands(cmd.name, context, sites, depth);
296
- const stmt = cmd.stmt;
297
- if (isShNodeShape(stmt)) {
287
+ scanForHiddenCommands(cmd.Name, context, sites, depth);
288
+ const stmt = cmd.Stmt;
289
+ if (isSyntaxNode(stmt)) {
298
290
  visitStmt(stmt, pushContext(context, { kind: 'coproc' }), sites, depth + 1);
299
291
  }
300
292
  return;
301
293
  }
302
294
  case 'DeclClause':
303
- scanForHiddenCommands(cmd.args, context, sites, depth);
295
+ scanForHiddenCommands(cmd.Args, context, sites, depth);
304
296
  return;
305
297
  case 'LetClause':
306
- scanForHiddenCommands(cmd.exprs, context, sites, depth);
298
+ scanForHiddenCommands(cmd.Exprs, context, sites, depth);
307
299
  return;
308
300
  case 'TestClause':
309
- scanForHiddenCommands(cmd.x, context, sites, depth);
301
+ scanForHiddenCommands(cmd.X, context, sites, depth);
310
302
  return;
311
303
  case 'ArithmCmd':
312
- scanForHiddenCommands(cmd.x, context, sites, depth);
304
+ scanForHiddenCommands(cmd.X, context, sites, depth);
313
305
  return;
314
306
  case 'TestDecl': {
315
- scanForHiddenCommands(cmd.description, context, sites, depth);
316
- const body = cmd.body;
317
- if (isShNodeShape(body))
307
+ scanForHiddenCommands(cmd.Description, context, sites, depth);
308
+ const body = cmd.Body;
309
+ if (isSyntaxNode(body))
318
310
  visitStmt(body, context, sites, depth + 1);
319
311
  return;
320
312
  }
321
313
  case 'TimeClause': {
322
314
  // Transparent (`time cmd`) — no context frame, but still one genuine
323
315
  // level of structural nesting for depth-guard purposes.
324
- const stmt = cmd.stmt;
325
- if (isShNodeShape(stmt))
316
+ const stmt = cmd.Stmt;
317
+ if (isSyntaxNode(stmt))
326
318
  visitStmt(stmt, context, sites, depth + 1);
327
319
  return;
328
320
  }
@@ -344,14 +336,14 @@ function visitCommand(cmd, context, sites, depth) {
344
336
  * `CmdSubst`/`ProcSubst` nested inside words, wherever those words occur
345
337
  * (arguments, redirection targets, case subjects/patterns, loop word
346
338
  * lists, assignment values, test/arithmetic operands, …), not only inside
347
- * `CallExpr.args`.
339
+ * `CallExpr.Args`.
348
340
  *
349
341
  * An assignment-only `CallExpr` (`FOO=bar`, `args` empty) has no first word
350
342
  * to resolve and is not itself a command invocation — no program runs — so
351
343
  * it produces no {@link CommandSite}; any command substitution nested in
352
344
  * its assigned value (`FOO=$(sub)`) is still found and reported.
353
345
  *
354
- * Results are sorted by source position (`node.range[0]`), so nested
346
+ * Results are sorted by source position (`nodePos(node).Offset`), so nested
355
347
  * command substitutions and out-of-structural-order redirection targets
356
348
  * still come back in source order regardless of traversal order.
357
349
  *
@@ -363,14 +355,9 @@ function visitCommand(cmd, context, sites, depth) {
363
355
  * traversed iteratively and never risks a stack overflow or trips the
364
356
  * nesting-depth guard below, regardless of how many stages/links it has.
365
357
  *
366
- * @param root - Any `ShNode` — typically a `File` from `parseSync`, but any
367
- * subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled. Note
368
- * `parseSync` itself already refuses (via its own `ShParseMaxDepthError`) any
369
- * input whose estimated nesting exceeds *its* limit before ever producing a
370
- * tree — see `parse-depth-guard.ts` — so a `root` sourced from `parseSync`
371
- * has already passed that earlier, lower-level line of defense; this
372
- * module's own guard below remains a second, independent backstop for
373
- * trees built or mutated some other way.
358
+ * @param root - Any `Node` — typically a `File` from `parseSync`, but any
359
+ * subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled.
360
+ * The depth guard also applies to caller-built or mutated trees.
374
361
  * @throws {@link ShAnalyzeMaxDepthError} if `root`'s genuinely nested
375
362
  * structure (subshells within subshells, chained command/process
376
363
  * substitutions, deeply nested `if`/`case`/loop/function/`time`/`{ }`
@@ -382,15 +369,18 @@ function visitCommand(cmd, context, sites, depth) {
382
369
  */
383
370
  export function enumerateCommands(root) {
384
371
  const sites = [];
385
- if (root.type === 'File') {
386
- visitStmtList(nodeArray(root.stmts), [], sites, 0);
372
+ if (root.Type === 'File') {
373
+ visitStmtList(nodeArray(root.Stmts), [], sites, 0);
387
374
  }
388
- else if (root.type === 'Stmt') {
375
+ else if (root.Type === 'Stmt') {
389
376
  visitStmt(root, [], sites, 0);
390
377
  }
391
378
  else {
392
379
  visitCommand(root, [], sites, 0);
393
380
  }
394
- return [...sites].sort((a, b) => a.node.range[0] - b.node.range[0]);
381
+ return sites
382
+ .map((site) => ({ site, offset: nodePos(site.node).Offset }))
383
+ .sort((a, b) => a.offset - b.offset)
384
+ .map(({ site }) => site);
395
385
  }
396
386
  //# sourceMappingURL=enumerate-commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enumerate-commands.js","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enumerate-commands.js","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `sh-ast/analyze` — the static-analysis layer built on top of the
3
- * normalized AST from the package root. Its first primitive,
3
+ * faithful upstream syntax records from the package root. Its first primitive,
4
4
  * {@link resolveWord}, answers "is this word statically a known string,
5
5
  * and if so which?" — the question every downstream lint rule or command
6
6
  * inventory asks first. Its second, {@link enumerateCommands}, answers
@@ -22,5 +22,6 @@ export type { CommandContext, CommandSite } from './enumerate-commands.js';
22
22
  export { DEFAULT_TRANSPARENT_WRAPPERS, resolveArgv0 } from './resolve-argv0.js';
23
23
  export type { Argv0ChainWord, Argv0Resolution, Argv0UnresolvedReason, Argv0UnresolvedWord, ResolveArgv0Options, WrapperSpec, } from './resolve-argv0.js';
24
24
  export { ShAnalyzeInvalidWrapperSpecError, ShAnalyzeMaxDepthError, ShAstError } from '../errors.js';
25
- export type { Position, ShNode } from '../types.js';
25
+ export type * from '../../generated/syntax-types.js';
26
+ export type { BinAritOperator, BinCmdOperator, BinTestOperator, CaseOperator, GlobOperator, OperatorFamily, ParExpOperator, ParNamesOperator, ProcOperator, RawOperator, RedirOperator, UnAritOperator, UnTestOperator, } from '../../generated/syntax-constants.js';
26
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AASpG,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIpG,mBAAmB,iCAAiC,CAAC;AACrD,YAAY,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,qCAAqC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `sh-ast/analyze` — the static-analysis layer built on top of the
3
- * normalized AST from the package root. Its first primitive,
3
+ * faithful upstream syntax records from the package root. Its first primitive,
4
4
  * {@link resolveWord}, answers "is this word statically a known string,
5
5
  * and if so which?" — the question every downstream lint rule or command
6
6
  * inventory asks first. Its second, {@link enumerateCommands}, answers
@@ -1,28 +1,17 @@
1
- import type { ShNode } from '../types.js';
1
+ import type { Node } from '../../generated/syntax-types.js';
2
2
  /**
3
- * True iff `value` has the minimal shape every normalized {@link ShNode}
4
- * carries (an object, not an array, with a string `type` field). Used to
5
- * narrow `unknown` field values discovered while walking a node's own
6
- * properties — every node field on {@link ShNode} is typed `unknown` (see
7
- * its index signature), so any code that inspects a specific field's value
8
- * needs this runtime check before treating it as a child node.
9
- *
3
+ * Recognizes concrete upstream syntax.Node records without confusing auxiliary
4
+ * records, typed nil interface tags, or token positions with records that have
5
+ * traversable fields. It does not validate complete trees.
10
6
  * @internal
11
7
  */
12
- export declare function isShNodeShape(value: unknown): value is ShNode;
8
+ export declare function isSyntaxNode(value: unknown): value is Exclude<Node, {
9
+ Type: 'TypedNil';
10
+ }>;
13
11
  /**
14
- * Filters `value` down to the {@link ShNode} elements of an array-shaped
15
- * field, discarding anything else — and returning `[]` for a non-array or
16
- * `undefined` field, so callers never need a separate `Array.isArray` guard.
17
- *
12
+ * Retains slice order and object identity while exposing present records to
13
+ * semantic traversal; nil slices and nil pointers contain no subtree to visit.
18
14
  * @internal
19
15
  */
20
- export declare function nodeArray(value: unknown): readonly ShNode[];
21
- /**
22
- * Reads `node[field]` as a string, defaulting to `''` for any other shape
23
- * (missing field, non-string value).
24
- *
25
- * @internal
26
- */
27
- export declare function stringField(node: ShNode, field: string): string;
16
+ export declare function nodeArray<T>(value: readonly (T | null)[] | null): T[];
28
17
  //# sourceMappingURL=node-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../src/analyze/node-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAO7D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/D"}
1
+ {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../src/analyze/node-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAUzF;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,CAErE"}
@@ -1,37 +1,26 @@
1
+ /** Shared guards retain faithful node identity and omit only explicitly nil slice elements. */
2
+ import { SYNTAX_SCHEMA } from '../../generated/syntax-schema.js';
1
3
  /**
2
- * True iff `value` has the minimal shape every normalized {@link ShNode}
3
- * carries (an object, not an array, with a string `type` field). Used to
4
- * narrow `unknown` field values discovered while walking a node's own
5
- * properties — every node field on {@link ShNode} is typed `unknown` (see
6
- * its index signature), so any code that inspects a specific field's value
7
- * needs this runtime check before treating it as a child node.
8
- *
4
+ * Recognizes concrete upstream syntax.Node records without confusing auxiliary
5
+ * records, typed nil interface tags, or token positions with records that have
6
+ * traversable fields. It does not validate complete trees.
9
7
  * @internal
10
8
  */
11
- export function isShNodeShape(value) {
12
- return (typeof value === 'object' &&
13
- value !== null &&
14
- !Array.isArray(value) &&
15
- typeof value.type === 'string');
9
+ export function isSyntaxNode(value) {
10
+ if (typeof value !== 'object' ||
11
+ value === null ||
12
+ !('Type' in value) ||
13
+ typeof value.Type !== 'string') {
14
+ return false;
15
+ }
16
+ return Object.hasOwn(SYNTAX_SCHEMA, value.Type) && SYNTAX_SCHEMA[value.Type].node;
16
17
  }
17
18
  /**
18
- * Filters `value` down to the {@link ShNode} elements of an array-shaped
19
- * field, discarding anything else — and returning `[]` for a non-array or
20
- * `undefined` field, so callers never need a separate `Array.isArray` guard.
21
- *
19
+ * Retains slice order and object identity while exposing present records to
20
+ * semantic traversal; nil slices and nil pointers contain no subtree to visit.
22
21
  * @internal
23
22
  */
24
23
  export function nodeArray(value) {
25
- return Array.isArray(value) ? value.filter(isShNodeShape) : [];
26
- }
27
- /**
28
- * Reads `node[field]` as a string, defaulting to `''` for any other shape
29
- * (missing field, non-string value).
30
- *
31
- * @internal
32
- */
33
- export function stringField(node, field) {
34
- const value = node[field];
35
- return typeof value === 'string' ? value : '';
24
+ return value?.filter((node) => node !== null) ?? [];
36
25
  }
37
26
  //# sourceMappingURL=node-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-helpers.js","sourceRoot":"","sources":["../../src/analyze/node-helpers.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CACvD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"node-helpers.js","sourceRoot":"","sources":["../../src/analyze/node-helpers.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAI,KAAmC;IAC9D,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAa,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC"}
@@ -49,7 +49,7 @@ export interface WrapperSpec {
49
49
  * skipped — this is `env`'s and `sudo`'s own `VAR=val` *operand*
50
50
  * mechanism (setting variables in the wrapped command's environment),
51
51
  * which is a distinct, per-wrapper concept from the shell-level
52
- * `CallExpr.assigns` prefixes {@link Argv0Resolution.assignmentsSkipped}
52
+ * `CallExpr.Assigns` prefixes {@link Argv0Resolution.assignmentsSkipped}
53
53
  * counts.
54
54
  */
55
55
  readonly skipAssignmentOperands?: boolean;
@@ -129,8 +129,8 @@ export interface WrapperSpec {
129
129
  *
130
130
  * Frozen (including each entry object and its own array/regexp fields) so
131
131
  * immutability of this shared, module-scoped table is a contract, not just
132
- * a convention any importer happens to honor — mirrors `visitorKeys`'s and
133
- * `CHILD_TYPE_SCHEMA`'s freezing in `visitor-keys.ts`/`normalize.ts`.
132
+ * a convention any importer happens to honor. Per-call wrapper options are
133
+ * separate values and cannot mutate these shared defaults.
134
134
  *
135
135
  * `xargs` is deliberately **excluded**: unlike every entry here, `xargs`
136
136
  * doesn't simply re-exec a single wrapped command word it can point to
@@ -265,11 +265,11 @@ export interface Argv0Resolution {
265
265
  readonly effective: Argv0ChainWord;
266
266
  /**
267
267
  * The number of `VAR=val` shell-assignment prefixes on the `CallExpr`
268
- * itself (`CommandSite.node.assigns`, e.g. the `FOO=bar` in
268
+ * itself (`CommandSite.node.Assigns`, e.g. the `FOO=bar` in
269
269
  * `FOO=bar rm x`) that were skipped to reach argv0. This is a distinct
270
270
  * mechanism from a wrapper's own `VAR=val` *operands* (e.g. `env`'s or
271
271
  * `sudo`'s, see {@link WrapperSpec.skipAssignmentOperands}) — always
272
- * exactly `CommandSite.node.assigns`'s length, independent of the
272
+ * exactly `CommandSite.node.Assigns`'s length, independent of the
273
273
  * wrapper chain found afterward.
274
274
  */
275
275
  readonly assignmentsSkipped: number;
@@ -314,7 +314,7 @@ export interface Argv0Resolution {
314
314
  * (see {@link WrapperSpec.unresolvableFlags}'s doc comment).
315
315
  *
316
316
  * `VAR=val` shell-assignment prefixes on the `CallExpr` itself
317
- * (`CommandSite.node.assigns`, e.g. `FOO=bar rm x`) are always skipped and
317
+ * (`CommandSite.node.Assigns`, e.g. `FOO=bar rm x`) are always skipped and
318
318
  * counted in {@link Argv0Resolution.assignmentsSkipped} — a mechanism
319
319
  * distinct from a wrapper's own `VAR=val` *operands* (`env A=1 rm x`,
320
320
  * `sudo A=1 rm x`), which {@link WrapperSpec.skipAssignmentOperands}
@@ -16,8 +16,8 @@ import { nodeArray } from './node-helpers.js';
16
16
  *
17
17
  * Frozen (including each entry object and its own array/regexp fields) so
18
18
  * immutability of this shared, module-scoped table is a contract, not just
19
- * a convention any importer happens to honor — mirrors `visitorKeys`'s and
20
- * `CHILD_TYPE_SCHEMA`'s freezing in `visitor-keys.ts`/`normalize.ts`.
19
+ * a convention any importer happens to honor. Per-call wrapper options are
20
+ * separate values and cannot mutate these shared defaults.
21
21
  *
22
22
  * `xargs` is deliberately **excluded**: unlike every entry here, `xargs`
23
23
  * doesn't simply re-exec a single wrapped command word it can point to
@@ -63,7 +63,7 @@ export const DEFAULT_TRANSPARENT_WRAPPERS = deepFreeze([
63
63
  // [argument...]]` — POSIX `env` (`-i`) plus GNU coreutils env(1)'s
64
64
  // commonly documented long/short forms. `VAR=val` operands preceding the
65
65
  // utility are `env`'s own environment-setting mechanism (distinct from
66
- // `CallExpr.assigns`). `-S`/`--split-string` is deliberately *not* an
66
+ // `CallExpr.Assigns`). `-S`/`--split-string` is deliberately *not* an
67
67
  // `argFlags` entry — see `unresolvableFlags` below.
68
68
  {
69
69
  names: ['env'],
@@ -103,7 +103,7 @@ export const DEFAULT_TRANSPARENT_WRAPPERS = deepFreeze([
103
103
  // `enumerate-commands.ts`'s doc comment — `enumerateCommands` treats it
104
104
  // as transparent and never emits a `CallExpr`/`CommandSite` for it), so
105
105
  // this entry only ever matches an argv0 word reading literally `time`
106
- // that reached `CallExpr.args` some other way (quoted — `"time" cmd`
106
+ // that reached `CallExpr.Args` some other way (quoted — `"time" cmd`
107
107
  // suppresses reserved-word recognition — or as another wrapper's
108
108
  // operand, e.g. `env time cmd`). `-p` (POSIX) and GNU time(1)'s
109
109
  // `--verbose`/`--portability` take no operand; `-o file`/`-f format`
@@ -454,7 +454,7 @@ function validateWrapperSpec(spec, index) {
454
454
  * (see {@link WrapperSpec.unresolvableFlags}'s doc comment).
455
455
  *
456
456
  * `VAR=val` shell-assignment prefixes on the `CallExpr` itself
457
- * (`CommandSite.node.assigns`, e.g. `FOO=bar rm x`) are always skipped and
457
+ * (`CommandSite.node.Assigns`, e.g. `FOO=bar rm x`) are always skipped and
458
458
  * counted in {@link Argv0Resolution.assignmentsSkipped} — a mechanism
459
459
  * distinct from a wrapper's own `VAR=val` *operands* (`env A=1 rm x`,
460
460
  * `sudo A=1 rm x`), which {@link WrapperSpec.skipAssignmentOperands}
@@ -479,7 +479,7 @@ export function resolveArgv0(site, options) {
479
479
  if (options?.transparentWrappers !== undefined) {
480
480
  wrappers.forEach(validateWrapperSpec);
481
481
  }
482
- const assignmentsSkipped = nodeArray(site.node.assigns).length;
482
+ const assignmentsSkipped = nodeArray(site.node.Assigns).length;
483
483
  const argv = site.argv;
484
484
  const chain = [];
485
485
  let index = 0;