sh-ast 0.3.0 → 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.
- package/README.md +165 -133
- package/dist/analyze/ansi-c-escapes.d.ts +1 -1
- package/dist/analyze/ansi-c-escapes.js +1 -1
- package/dist/analyze/enumerate-commands.d.ts +11 -16
- package/dist/analyze/enumerate-commands.d.ts.map +1 -1
- package/dist/analyze/enumerate-commands.js +82 -92
- package/dist/analyze/enumerate-commands.js.map +1 -1
- package/dist/analyze/index.d.ts +3 -2
- package/dist/analyze/index.d.ts.map +1 -1
- package/dist/analyze/index.js +1 -1
- package/dist/analyze/node-helpers.d.ts +10 -21
- package/dist/analyze/node-helpers.d.ts.map +1 -1
- package/dist/analyze/node-helpers.js +16 -27
- package/dist/analyze/node-helpers.js.map +1 -1
- package/dist/analyze/resolve-argv0.d.ts +6 -6
- package/dist/analyze/resolve-argv0.js +6 -6
- package/dist/analyze/resolve-word.d.ts +7 -10
- package/dist/analyze/resolve-word.d.ts.map +1 -1
- package/dist/analyze/resolve-word.js +39 -22
- package/dist/analyze/resolve-word.js.map +1 -1
- package/dist/analyze.d.ts +3780 -397
- package/dist/errors.d.ts +6 -79
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -64
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +16 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/sh-ast.d.ts +3503 -1027
- package/dist/syntax-errors.d.ts +56 -0
- package/dist/syntax-errors.d.ts.map +1 -0
- package/dist/syntax-errors.js +80 -0
- package/dist/syntax-errors.js.map +1 -0
- package/dist/syntax-snapshot.d.ts +47 -0
- package/dist/syntax-snapshot.d.ts.map +1 -0
- package/dist/syntax-snapshot.js +121 -0
- package/dist/syntax-snapshot.js.map +1 -0
- package/dist/syntax-wire.d.ts +31 -0
- package/dist/syntax-wire.d.ts.map +1 -0
- package/dist/syntax-wire.js +202 -0
- package/dist/syntax-wire.js.map +1 -0
- package/dist/syntax.d.ts +65 -0
- package/dist/syntax.d.ts.map +1 -0
- package/dist/syntax.js +152 -0
- package/dist/syntax.js.map +1 -0
- package/dist/wasm-instance.d.ts +5 -8
- package/dist/wasm-instance.d.ts.map +1 -1
- package/dist/wasm-instance.js +44 -47
- package/dist/wasm-instance.js.map +1 -1
- package/generated/syntax-constants.d.ts +1652 -0
- package/generated/syntax-constants.js +1384 -0
- package/generated/syntax-schema.d.ts +60 -0
- package/generated/syntax-schema.js +1740 -0
- package/generated/syntax-types.d.ts +1977 -0
- package/package.json +2 -2
- package/shim/sh-ast.wasm +0 -0
- package/dist/normalize.d.ts +0 -52
- package/dist/normalize.d.ts.map +0 -1
- package/dist/normalize.js +0 -260
- package/dist/normalize.js.map +0 -1
- package/dist/parse.d.ts +0 -50
- package/dist/parse.d.ts.map +0 -1
- package/dist/parse.js +0 -125
- package/dist/parse.js.map +0 -1
- package/dist/types.d.ts +0 -74
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/visitor-keys.d.ts +0 -21
- package/dist/visitor-keys.d.ts.map +0 -1
- package/dist/visitor-keys.js +0 -23
- package/dist/visitor-keys.js.map +0 -1
- package/dist/walk.d.ts +0 -18
- package/dist/walk.d.ts.map +0 -1
- package/dist/walk.js +0 -40
- package/dist/walk.js.map +0 -1
- package/generated/child-type-schema.d.ts +0 -14
- package/generated/child-type-schema.js +0 -188
- package/generated/node-types.d.ts +0 -1002
- package/generated/position-fields.d.ts +0 -21
- package/generated/position-fields.js +0 -50
- package/generated/visitor-keys.d.ts +0 -11
- 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 {
|
|
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 ===
|
|
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 (
|
|
71
|
+
if (typeof value !== 'object' || value === null || value instanceof Uint8Array)
|
|
84
72
|
return;
|
|
85
|
-
if (value.
|
|
86
|
-
visitStmtList(nodeArray(value.
|
|
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.
|
|
90
|
-
visitStmtList(nodeArray(value.
|
|
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.
|
|
102
|
+
if (stmt.Negated)
|
|
115
103
|
stmtContext = pushContext(stmtContext, { kind: 'negated' });
|
|
116
|
-
if (stmt.
|
|
104
|
+
if (stmt.Background)
|
|
117
105
|
stmtContext = pushContext(stmtContext, { kind: 'background' });
|
|
118
|
-
scanForHiddenCommands(stmt.
|
|
119
|
-
const cmd = stmt.
|
|
120
|
-
if (
|
|
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.
|
|
131
|
+
const workStack = [cmd.Y, cmd.X];
|
|
144
132
|
while (workStack.length > 0) {
|
|
145
133
|
const operandStmt = workStack.pop();
|
|
146
|
-
if (!
|
|
134
|
+
if (!isSyntaxNode(operandStmt))
|
|
147
135
|
continue;
|
|
148
|
-
const innerCmd = operandStmt.
|
|
149
|
-
if (
|
|
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.
|
|
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.
|
|
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.
|
|
199
|
-
const frame = spineOp ===
|
|
186
|
+
const spineOp = spine.Op;
|
|
187
|
+
const frame = spineOp === AndStmt
|
|
200
188
|
? { kind: 'and', side: 'right' }
|
|
201
|
-
: spineOp ===
|
|
189
|
+
: spineOp === OrStmt
|
|
202
190
|
? { kind: 'or', side: 'right' }
|
|
203
191
|
: undefined;
|
|
204
|
-
const y = spine.
|
|
205
|
-
if (
|
|
192
|
+
const y = spine.Y;
|
|
193
|
+
if (isSyntaxNode(y))
|
|
206
194
|
rightOperands.push({ stmt: y, frame });
|
|
207
|
-
const x = spine.
|
|
208
|
-
if (!
|
|
195
|
+
const x = spine.X;
|
|
196
|
+
if (!isSyntaxNode(x))
|
|
209
197
|
break;
|
|
210
|
-
const innerCmd = x.
|
|
211
|
-
if (
|
|
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.
|
|
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.
|
|
228
|
-
visitStmtList(nodeArray(clause.
|
|
229
|
-
const elseClause = clause.
|
|
230
|
-
if (
|
|
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.
|
|
229
|
+
switch (cmd.Type) {
|
|
242
230
|
case 'CallExpr': {
|
|
243
|
-
scanForHiddenCommands(cmd.
|
|
244
|
-
scanForHiddenCommands(cmd.
|
|
245
|
-
|
|
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) =>
|
|
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.
|
|
251
|
+
visitStmtList(nodeArray(cmd.Stmts), context, sites, depth + 1);
|
|
260
252
|
return;
|
|
261
253
|
case 'Subshell':
|
|
262
|
-
visitStmtList(nodeArray(cmd.
|
|
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.
|
|
269
|
-
for (const item of nodeArray(cmd.
|
|
270
|
-
scanForHiddenCommands(item.
|
|
271
|
-
visitStmtList(nodeArray(item.
|
|
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.
|
|
277
|
-
visitStmtList(nodeArray(cmd.
|
|
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.
|
|
282
|
-
visitStmtList(nodeArray(cmd.
|
|
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.
|
|
287
|
-
const nameText =
|
|
288
|
-
const body = cmd.
|
|
289
|
-
if (
|
|
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.
|
|
296
|
-
const stmt = cmd.
|
|
297
|
-
if (
|
|
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.
|
|
295
|
+
scanForHiddenCommands(cmd.Args, context, sites, depth);
|
|
304
296
|
return;
|
|
305
297
|
case 'LetClause':
|
|
306
|
-
scanForHiddenCommands(cmd.
|
|
298
|
+
scanForHiddenCommands(cmd.Exprs, context, sites, depth);
|
|
307
299
|
return;
|
|
308
300
|
case 'TestClause':
|
|
309
|
-
scanForHiddenCommands(cmd.
|
|
301
|
+
scanForHiddenCommands(cmd.X, context, sites, depth);
|
|
310
302
|
return;
|
|
311
303
|
case 'ArithmCmd':
|
|
312
|
-
scanForHiddenCommands(cmd.
|
|
304
|
+
scanForHiddenCommands(cmd.X, context, sites, depth);
|
|
313
305
|
return;
|
|
314
306
|
case 'TestDecl': {
|
|
315
|
-
scanForHiddenCommands(cmd.
|
|
316
|
-
const body = cmd.
|
|
317
|
-
if (
|
|
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.
|
|
325
|
-
if (
|
|
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.
|
|
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.
|
|
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 `
|
|
367
|
-
* subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled.
|
|
368
|
-
*
|
|
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.
|
|
386
|
-
visitStmtList(nodeArray(root.
|
|
372
|
+
if (root.Type === 'File') {
|
|
373
|
+
visitStmtList(nodeArray(root.Stmts), [], sites, 0);
|
|
387
374
|
}
|
|
388
|
-
else if (root.
|
|
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
|
|
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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"}
|
package/dist/analyze/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `sh-ast/analyze` — the static-analysis layer built on top of the
|
|
3
|
-
*
|
|
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
|
|
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;
|
|
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"}
|
package/dist/analyze/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `sh-ast/analyze` — the static-analysis layer built on top of the
|
|
3
|
-
*
|
|
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 {
|
|
1
|
+
import type { Node } from '../../generated/syntax-types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
|
8
|
+
export declare function isSyntaxNode(value: unknown): value is Exclude<Node, {
|
|
9
|
+
Type: 'TypedNil';
|
|
10
|
+
}>;
|
|
13
11
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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:
|
|
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":"
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
|
12
|
-
|
|
13
|
-
value
|
|
14
|
-
!
|
|
15
|
-
typeof value.
|
|
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
|
-
*
|
|
19
|
-
*
|
|
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
|
|
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":"
|
|
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.
|
|
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
|
|
133
|
-
*
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
20
|
-
*
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
482
|
+
const assignmentsSkipped = nodeArray(site.node.Assigns).length;
|
|
483
483
|
const argv = site.argv;
|
|
484
484
|
const chain = [];
|
|
485
485
|
let index = 0;
|