@taliesinb/mash 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +275 -2
- package/bin/mash.ts +253 -0
- package/dist/bin/mash.d.ts +39 -0
- package/dist/bin/mash.d.ts.map +1 -0
- package/dist/bin/mash.js +281 -0
- package/dist/bin/mash.js.map +1 -0
- package/dist/src/analysis/analyze.d.ts +97 -0
- package/dist/src/analysis/analyze.d.ts.map +1 -0
- package/dist/src/analysis/analyze.js +1406 -0
- package/dist/src/analysis/analyze.js.map +1 -0
- package/dist/src/analysis/fs.d.ts +39 -0
- package/dist/src/analysis/fs.d.ts.map +1 -0
- package/dist/src/analysis/fs.js +117 -0
- package/dist/src/analysis/fs.js.map +1 -0
- package/dist/src/analysis/outputs.d.ts +16 -0
- package/dist/src/analysis/outputs.d.ts.map +1 -0
- package/dist/src/analysis/outputs.js +277 -0
- package/dist/src/analysis/outputs.js.map +1 -0
- package/dist/src/analysis/value.d.ts +76 -0
- package/dist/src/analysis/value.d.ts.map +1 -0
- package/dist/src/analysis/value.js +248 -0
- package/dist/src/analysis/value.js.map +1 -0
- package/dist/src/behaviors/defs/core.d.ts +15 -0
- package/dist/src/behaviors/defs/core.d.ts.map +1 -0
- package/dist/src/behaviors/defs/core.js +1084 -0
- package/dist/src/behaviors/defs/core.js.map +1 -0
- package/dist/src/behaviors/defs/devtools.d.ts +9 -0
- package/dist/src/behaviors/defs/devtools.d.ts.map +1 -0
- package/dist/src/behaviors/defs/devtools.js +432 -0
- package/dist/src/behaviors/defs/devtools.js.map +1 -0
- package/dist/src/behaviors/defs/macos.d.ts +12 -0
- package/dist/src/behaviors/defs/macos.d.ts.map +1 -0
- package/dist/src/behaviors/defs/macos.js +454 -0
- package/dist/src/behaviors/defs/macos.js.map +1 -0
- package/dist/src/behaviors/defs/tools.d.ts +9 -0
- package/dist/src/behaviors/defs/tools.d.ts.map +1 -0
- package/dist/src/behaviors/defs/tools.js +639 -0
- package/dist/src/behaviors/defs/tools.js.map +1 -0
- package/dist/src/behaviors/dsl.d.ts +95 -0
- package/dist/src/behaviors/dsl.d.ts.map +1 -0
- package/dist/src/behaviors/dsl.js +267 -0
- package/dist/src/behaviors/dsl.js.map +1 -0
- package/dist/src/behaviors/index.d.ts +12 -0
- package/dist/src/behaviors/index.d.ts.map +1 -0
- package/dist/src/behaviors/index.js +18 -0
- package/dist/src/behaviors/index.js.map +1 -0
- package/dist/src/behaviors/registry.d.ts +45 -0
- package/dist/src/behaviors/registry.d.ts.map +1 -0
- package/dist/src/behaviors/registry.js +266 -0
- package/dist/src/behaviors/registry.js.map +1 -0
- package/dist/src/behaviors/roles.d.ts +29 -0
- package/dist/src/behaviors/roles.d.ts.map +1 -0
- package/dist/src/behaviors/roles.js +198 -0
- package/dist/src/behaviors/roles.js.map +1 -0
- package/dist/src/behaviors/types.d.ts +120 -0
- package/dist/src/behaviors/types.d.ts.map +1 -0
- package/dist/src/behaviors/types.js +12 -0
- package/dist/src/behaviors/types.js.map +1 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +24 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/integrations/deepsea.d.ts +121 -0
- package/dist/src/integrations/deepsea.d.ts.map +1 -0
- package/dist/src/integrations/deepsea.js +199 -0
- package/dist/src/integrations/deepsea.js.map +1 -0
- package/dist/src/machine.d.ts +139 -0
- package/dist/src/machine.d.ts.map +1 -0
- package/dist/src/machine.js +400 -0
- package/dist/src/machine.js.map +1 -0
- package/dist/src/parser/ast.d.ts +369 -0
- package/dist/src/parser/ast.d.ts.map +1 -0
- package/dist/src/parser/ast.js +17 -0
- package/dist/src/parser/ast.js.map +1 -0
- package/dist/src/parser/parser.d.ts +48 -0
- package/dist/src/parser/parser.d.ts.map +1 -0
- package/dist/src/parser/parser.js +1950 -0
- package/dist/src/parser/parser.js.map +1 -0
- package/dist/src/policy/effects.d.ts +86 -0
- package/dist/src/policy/effects.d.ts.map +1 -0
- package/dist/src/policy/effects.js +53 -0
- package/dist/src/policy/effects.js.map +1 -0
- package/dist/src/policy/policy.d.ts +130 -0
- package/dist/src/policy/policy.d.ts.map +1 -0
- package/dist/src/policy/policy.js +532 -0
- package/dist/src/policy/policy.js.map +1 -0
- package/dist/src/printer/doc.d.ts +151 -0
- package/dist/src/printer/doc.d.ts.map +1 -0
- package/dist/src/printer/doc.js +409 -0
- package/dist/src/printer/doc.js.map +1 -0
- package/dist/src/printer/highlight.d.ts +53 -0
- package/dist/src/printer/highlight.d.ts.map +1 -0
- package/dist/src/printer/highlight.js +339 -0
- package/dist/src/printer/highlight.js.map +1 -0
- package/dist/src/printer/html.d.ts +72 -0
- package/dist/src/printer/html.d.ts.map +1 -0
- package/dist/src/printer/html.js +423 -0
- package/dist/src/printer/html.js.map +1 -0
- package/dist/src/printer/print.d.ts +63 -0
- package/dist/src/printer/print.d.ts.map +1 -0
- package/dist/src/printer/print.js +484 -0
- package/dist/src/printer/print.js.map +1 -0
- package/dist/src/printer/summary.d.ts +50 -0
- package/dist/src/printer/summary.d.ts.map +1 -0
- package/dist/src/printer/summary.js +621 -0
- package/dist/src/printer/summary.js.map +1 -0
- package/dist/src/trace/events.d.ts +183 -0
- package/dist/src/trace/events.d.ts.map +1 -0
- package/dist/src/trace/events.js +9 -0
- package/dist/src/trace/events.js.map +1 -0
- package/dist/src/trace/progress.d.ts +58 -0
- package/dist/src/trace/progress.d.ts.map +1 -0
- package/dist/src/trace/progress.js +83 -0
- package/dist/src/trace/progress.js.map +1 -0
- package/dist/src/vm/arith.d.ts +29 -0
- package/dist/src/vm/arith.d.ts.map +1 -0
- package/dist/src/vm/arith.js +258 -0
- package/dist/src/vm/arith.js.map +1 -0
- package/dist/src/vm/builtins.d.ts +31 -0
- package/dist/src/vm/builtins.d.ts.map +1 -0
- package/dist/src/vm/builtins.js +1773 -0
- package/dist/src/vm/builtins.js.map +1 -0
- package/dist/src/vm/emulate.d.ts +75 -0
- package/dist/src/vm/emulate.d.ts.map +1 -0
- package/dist/src/vm/emulate.js +380 -0
- package/dist/src/vm/emulate.js.map +1 -0
- package/dist/src/vm/expand.d.ts +68 -0
- package/dist/src/vm/expand.d.ts.map +1 -0
- package/dist/src/vm/expand.js +744 -0
- package/dist/src/vm/expand.js.map +1 -0
- package/dist/src/vm/external.d.ts +34 -0
- package/dist/src/vm/external.d.ts.map +1 -0
- package/dist/src/vm/external.js +228 -0
- package/dist/src/vm/external.js.map +1 -0
- package/dist/src/vm/fifo.d.ts +66 -0
- package/dist/src/vm/fifo.d.ts.map +1 -0
- package/dist/src/vm/fifo.js +232 -0
- package/dist/src/vm/fifo.js.map +1 -0
- package/dist/src/vm/interp.d.ts +209 -0
- package/dist/src/vm/interp.d.ts.map +1 -0
- package/dist/src/vm/interp.js +1641 -0
- package/dist/src/vm/interp.js.map +1 -0
- package/dist/src/vm/io.d.ts +180 -0
- package/dist/src/vm/io.d.ts.map +1 -0
- package/dist/src/vm/io.js +502 -0
- package/dist/src/vm/io.js.map +1 -0
- package/dist/src/vm/pattern.d.ts +46 -0
- package/dist/src/vm/pattern.d.ts.map +1 -0
- package/dist/src/vm/pattern.js +498 -0
- package/dist/src/vm/pattern.js.map +1 -0
- package/dist/src/vm/proc.d.ts +94 -0
- package/dist/src/vm/proc.d.ts.map +1 -0
- package/dist/src/vm/proc.js +130 -0
- package/dist/src/vm/proc.js.map +1 -0
- package/dist/src/vm/state.d.ts +104 -0
- package/dist/src/vm/state.d.ts.map +1 -0
- package/dist/src/vm/state.js +233 -0
- package/dist/src/vm/state.js.map +1 -0
- package/dist/src/vm/test.d.ts +11 -0
- package/dist/src/vm/test.d.ts.map +1 -0
- package/dist/src/vm/test.js +277 -0
- package/dist/src/vm/test.js.map +1 -0
- package/package.json +63 -4
- package/src/analysis/analyze.ts +1395 -0
- package/src/analysis/fs.ts +121 -0
- package/src/analysis/outputs.ts +242 -0
- package/src/analysis/value.ts +264 -0
- package/src/behaviors/defs/core.ts +970 -0
- package/src/behaviors/defs/devtools.ts +400 -0
- package/src/behaviors/defs/macos.ts +426 -0
- package/src/behaviors/defs/tools.ts +596 -0
- package/src/behaviors/dsl.ts +293 -0
- package/src/behaviors/index.ts +19 -0
- package/src/behaviors/registry.ts +261 -0
- package/src/behaviors/roles.ts +187 -0
- package/src/behaviors/types.ts +127 -0
- package/src/index.ts +27 -0
- package/src/integrations/deepsea.ts +259 -0
- package/src/machine.ts +483 -0
- package/src/parser/ast.ts +472 -0
- package/src/parser/parser.ts +1826 -0
- package/src/policy/effects.ts +102 -0
- package/src/policy/policy.ts +578 -0
- package/src/printer/doc.ts +454 -0
- package/src/printer/highlight.ts +283 -0
- package/src/printer/html.ts +441 -0
- package/src/printer/print.ts +528 -0
- package/src/printer/summary.ts +601 -0
- package/src/trace/events.ts +102 -0
- package/src/trace/progress.ts +119 -0
- package/src/vm/arith.ts +236 -0
- package/src/vm/builtins.ts +1590 -0
- package/src/vm/emulate.ts +337 -0
- package/src/vm/expand.ts +721 -0
- package/src/vm/external.ts +265 -0
- package/src/vm/fifo.ts +226 -0
- package/src/vm/interp.ts +1623 -0
- package/src/vm/io.ts +570 -0
- package/src/vm/pattern.ts +477 -0
- package/src/vm/proc.ts +147 -0
- package/src/vm/state.ts +267 -0
- package/src/vm/test.ts +253 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Syntax classes for every character of a parsed script, from the AST (not
|
|
3
|
+
* regexes). Outer constructs are painted first and inner ones override, so
|
|
4
|
+
* `"$x"` as an argument is a string with a variable inside.
|
|
5
|
+
*
|
|
6
|
+
* Class names (short, semantic; styled by HTML_CSS in html.ts):
|
|
7
|
+
* kw keywords and grouping (`if`, `do`, `{`, `[[`)
|
|
8
|
+
* op control operators (`|`, `&&`, `;`, `;;`)
|
|
9
|
+
* cmd command names flag options (`-x`, `--long`)
|
|
10
|
+
* str quoted strings esc escapes (`\x`)
|
|
11
|
+
* var parameter expansions sub `$( )`, backquotes, `<( )`
|
|
12
|
+
* ar arithmetic num numbers in arithmetic
|
|
13
|
+
* asg assignment names rd redirections and here-doc delimiters
|
|
14
|
+
* hd here-doc bodies cm comments
|
|
15
|
+
* fn function names ct line continuations (`\`)
|
|
16
|
+
* dir directory arguments file file arguments, redirection targets
|
|
17
|
+
* re search patterns code program text (`sed`/`awk`/`jq` programs, `python -c`, `bash -c`)
|
|
18
|
+
* sc subcommands (`git status`, `npm run build`, `docker compose up`)
|
|
19
|
+
*
|
|
20
|
+
* Argument roles (`dir`, `file`, `re`, `code`, and `cmd` for nested commands
|
|
21
|
+
* such as `timeout 5 npx vitest`) come from the behavior definitions
|
|
22
|
+
* (src/behaviors/roles.ts); they recolor plain and quoted text but keep
|
|
23
|
+
* variables and substitutions inside the word.
|
|
24
|
+
*/
|
|
25
|
+
import { literalOf } from "../parser/parser.js";
|
|
26
|
+
import { argRoles } from "../behaviors/roles.js";
|
|
27
|
+
export const CLASS_NAMES = ['', 'kw', 'op', 'cmd', 'flag', 'str', 'esc', 'var', 'sub', 'ar', 'num', 'asg', 'rd', 'hd', 'cm', 'fn', 'dir', 'file', 're', 'code', 'sc'];
|
|
28
|
+
const INDEX = new Map(CLASS_NAMES.map((c, i) => [c, i]));
|
|
29
|
+
const ROLE_CLASS = { dir: 'dir', file: 'file', pattern: 're', code: 'code', cmd: 'cmd', subcommand: 'sc' };
|
|
30
|
+
/** Classes a role may recolor (variables, substitutions, arithmetic stay). */
|
|
31
|
+
const RECOLOR = new Set([INDEX.get(''), INDEX.get('str'), INDEX.get('esc')]);
|
|
32
|
+
/** Roles of a simple command's words (aligned with `c.words`), from the behavior definitions. */
|
|
33
|
+
export function simpleCommandRoles(c) {
|
|
34
|
+
const words = c.words.map((w) => (w.type === 'Word' ? literalOf(w) ?? undefined : undefined));
|
|
35
|
+
if (words[0] === undefined)
|
|
36
|
+
return words.map(() => undefined);
|
|
37
|
+
return argRoles(words);
|
|
38
|
+
}
|
|
39
|
+
export class Highlight {
|
|
40
|
+
cls;
|
|
41
|
+
source;
|
|
42
|
+
constructor(script, source) {
|
|
43
|
+
this.source = source;
|
|
44
|
+
this.cls = new Uint8Array(source.length);
|
|
45
|
+
for (const s of script.body)
|
|
46
|
+
this.stmt(s);
|
|
47
|
+
for (const c of script.comments ?? [])
|
|
48
|
+
this.paint(c.span.start, c.span.end, 'cm');
|
|
49
|
+
}
|
|
50
|
+
/** The class runs covering `[start, end)`. */
|
|
51
|
+
runs(start, end) {
|
|
52
|
+
const out = [];
|
|
53
|
+
let i = start;
|
|
54
|
+
while (i < end) {
|
|
55
|
+
const c = this.cls[i];
|
|
56
|
+
let j = i + 1;
|
|
57
|
+
while (j < end && this.cls[j] === c)
|
|
58
|
+
j++;
|
|
59
|
+
out.push({ text: this.source.slice(i, j), cls: CLASS_NAMES[c] });
|
|
60
|
+
i = j;
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
/** Recolor the plain and quoted characters of a span. */
|
|
65
|
+
recolor(start, end, cls) {
|
|
66
|
+
const v = INDEX.get(cls) ?? 0;
|
|
67
|
+
for (let i = Math.max(0, start); i < Math.min(end, this.cls.length); i++)
|
|
68
|
+
if (RECOLOR.has(this.cls[i]))
|
|
69
|
+
this.cls[i] = v;
|
|
70
|
+
}
|
|
71
|
+
paint(start, end, cls) {
|
|
72
|
+
const v = INDEX.get(cls) ?? 0;
|
|
73
|
+
for (let i = Math.max(0, start); i < Math.min(end, this.cls.length); i++)
|
|
74
|
+
this.cls[i] = v;
|
|
75
|
+
}
|
|
76
|
+
stmts(list) {
|
|
77
|
+
for (const s of list)
|
|
78
|
+
this.stmt(s);
|
|
79
|
+
}
|
|
80
|
+
stmt(s) {
|
|
81
|
+
this.command(s.command);
|
|
82
|
+
}
|
|
83
|
+
command(c) {
|
|
84
|
+
switch (c.type) {
|
|
85
|
+
case 'SimpleCommand': {
|
|
86
|
+
for (const a of c.assigns)
|
|
87
|
+
this.assign(a);
|
|
88
|
+
let first = true;
|
|
89
|
+
let roles = [];
|
|
90
|
+
try {
|
|
91
|
+
roles = simpleCommandRoles(c);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// display only
|
|
95
|
+
}
|
|
96
|
+
c.words.forEach((w, i) => {
|
|
97
|
+
if (w.type === 'Assign') {
|
|
98
|
+
this.assign(w);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const text = this.source.slice(w.span.start, w.span.end);
|
|
102
|
+
this.word(w, first ? 'cmd' : /^-./.test(text) ? 'flag' : '');
|
|
103
|
+
first = false;
|
|
104
|
+
const role = roles[i];
|
|
105
|
+
if (role && i > 0)
|
|
106
|
+
this.recolor(w.span.start, w.span.end, ROLE_CLASS[role]);
|
|
107
|
+
});
|
|
108
|
+
for (const r of c.redirs)
|
|
109
|
+
this.redirect(r);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
case 'Pipeline':
|
|
113
|
+
for (const st of c.stages)
|
|
114
|
+
this.command(st);
|
|
115
|
+
return;
|
|
116
|
+
case 'AndOr':
|
|
117
|
+
for (const it of c.items)
|
|
118
|
+
this.command(it);
|
|
119
|
+
return;
|
|
120
|
+
case 'FunctionDef':
|
|
121
|
+
this.paint(c.span.start, c.body.span.start, 'fn');
|
|
122
|
+
this.command(c.body);
|
|
123
|
+
return;
|
|
124
|
+
case 'Subshell':
|
|
125
|
+
case 'Group':
|
|
126
|
+
this.stmts(c.body);
|
|
127
|
+
break;
|
|
128
|
+
case 'If':
|
|
129
|
+
for (const cl of c.clauses) {
|
|
130
|
+
this.stmts(cl.cond);
|
|
131
|
+
this.stmts(cl.body);
|
|
132
|
+
}
|
|
133
|
+
if (c.elseBody)
|
|
134
|
+
this.stmts(c.elseBody);
|
|
135
|
+
break;
|
|
136
|
+
case 'Loop':
|
|
137
|
+
this.stmts(c.cond);
|
|
138
|
+
this.stmts(c.body);
|
|
139
|
+
break;
|
|
140
|
+
case 'For':
|
|
141
|
+
case 'Select':
|
|
142
|
+
for (const w of c.items ?? [])
|
|
143
|
+
this.word(w, '');
|
|
144
|
+
this.stmts(c.body);
|
|
145
|
+
break;
|
|
146
|
+
case 'ArithFor': {
|
|
147
|
+
this.paint(c.span.start, c.span.start + 3, 'kw');
|
|
148
|
+
const exprs = [c.init, c.cond, c.step].filter((e) => e !== null);
|
|
149
|
+
const from = exprs.length ? exprs[exprs.length - 1].span.end : c.span.start;
|
|
150
|
+
const close = this.source.indexOf('))', from);
|
|
151
|
+
this.paint(c.span.start + 3, close + 2, 'ar');
|
|
152
|
+
for (const e of exprs)
|
|
153
|
+
this.arith(e);
|
|
154
|
+
this.stmts(c.body);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'Case':
|
|
158
|
+
this.word(c.word, '');
|
|
159
|
+
for (const it of c.items) {
|
|
160
|
+
for (const p of it.patterns)
|
|
161
|
+
this.word(p, '');
|
|
162
|
+
this.stmts(it.body);
|
|
163
|
+
}
|
|
164
|
+
break;
|
|
165
|
+
case 'ArithCommand': {
|
|
166
|
+
const end = c.redirs[0]?.span.start ?? c.span.end;
|
|
167
|
+
this.paint(c.span.start, end, 'ar');
|
|
168
|
+
this.arith(c.expr);
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case 'CondCommand': {
|
|
172
|
+
const end = this.source.lastIndexOf(']]', c.redirs[0]?.span.start ?? c.span.end);
|
|
173
|
+
this.paint(c.span.start, c.span.start + 2, 'kw');
|
|
174
|
+
if (end >= 0)
|
|
175
|
+
this.paint(end, end + 2, 'kw');
|
|
176
|
+
this.cond(c.expr);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
for (const r of c.redirs)
|
|
181
|
+
this.redirect(r);
|
|
182
|
+
}
|
|
183
|
+
assign(a) {
|
|
184
|
+
const valueStart = a.value ? a.value.span.start : a.span.end;
|
|
185
|
+
this.paint(a.span.start, valueStart, 'asg');
|
|
186
|
+
if (a.index)
|
|
187
|
+
this.word(a.index, '');
|
|
188
|
+
if (!a.value)
|
|
189
|
+
return;
|
|
190
|
+
if (a.value.type === 'Word')
|
|
191
|
+
this.word(a.value, '');
|
|
192
|
+
else
|
|
193
|
+
for (const el of a.value.elems) {
|
|
194
|
+
if (el.index)
|
|
195
|
+
this.word(el.index, '');
|
|
196
|
+
this.word(el.value, '');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
redirect(r) {
|
|
200
|
+
this.paint(r.span.start, r.target.span.start, 'rd');
|
|
201
|
+
if (r.heredoc) {
|
|
202
|
+
this.paint(r.target.span.start, r.target.span.end, 'rd');
|
|
203
|
+
const b = r.heredoc.body;
|
|
204
|
+
this.paint(b.span.start, b.span.end, 'hd');
|
|
205
|
+
if (!r.heredoc.quoted)
|
|
206
|
+
this.parts(b.parts);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this.word(r.target, '');
|
|
210
|
+
// a file target; an fd duplication (`2>&1`, `>&-`) is all redirection
|
|
211
|
+
if (/&$/.test(this.source.slice(r.span.start, r.target.span.start).trim()))
|
|
212
|
+
this.recolor(r.target.span.start, r.target.span.end, 'rd');
|
|
213
|
+
else
|
|
214
|
+
this.recolor(r.target.span.start, r.target.span.end, 'file');
|
|
215
|
+
}
|
|
216
|
+
word(w, base) {
|
|
217
|
+
if (base)
|
|
218
|
+
this.paint(w.span.start, w.span.end, base);
|
|
219
|
+
this.parts(w.parts);
|
|
220
|
+
}
|
|
221
|
+
parts(parts) {
|
|
222
|
+
for (const p of parts) {
|
|
223
|
+
switch (p.type) {
|
|
224
|
+
case 'Lit':
|
|
225
|
+
break;
|
|
226
|
+
case 'SglQuoted':
|
|
227
|
+
this.paint(p.span.start, p.span.end, 'str');
|
|
228
|
+
break;
|
|
229
|
+
case 'Escaped':
|
|
230
|
+
this.paint(p.span.start, p.span.end, 'esc');
|
|
231
|
+
break;
|
|
232
|
+
case 'DblQuoted':
|
|
233
|
+
this.paint(p.span.start, p.span.end, 'str');
|
|
234
|
+
this.parts(p.parts);
|
|
235
|
+
break;
|
|
236
|
+
case 'ParamExp':
|
|
237
|
+
this.paint(p.span.start, p.span.end, 'var');
|
|
238
|
+
if (p.index)
|
|
239
|
+
this.parts(p.index.parts);
|
|
240
|
+
if (p.op && 'word' in p.op && p.op.word)
|
|
241
|
+
this.parts(p.op.word.parts);
|
|
242
|
+
if (p.op && p.op.kind === 'replace') {
|
|
243
|
+
this.parts(p.op.pattern.parts);
|
|
244
|
+
if (p.op.replacement)
|
|
245
|
+
this.parts(p.op.replacement.parts);
|
|
246
|
+
}
|
|
247
|
+
if (p.op && (p.op.kind === 'removePrefix' || p.op.kind === 'removeSuffix'))
|
|
248
|
+
this.parts(p.op.pattern.parts);
|
|
249
|
+
break;
|
|
250
|
+
case 'CmdSubst':
|
|
251
|
+
if (p.backquote) {
|
|
252
|
+
this.paint(p.span.start, p.span.start + 1, 'sub');
|
|
253
|
+
this.paint(p.span.end - 1, p.span.end, 'sub');
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
this.paint(p.span.start, p.span.start + 2, 'sub');
|
|
257
|
+
this.paint(p.span.end - 1, p.span.end, 'sub');
|
|
258
|
+
}
|
|
259
|
+
this.stmts(p.body);
|
|
260
|
+
break;
|
|
261
|
+
case 'ProcSubst':
|
|
262
|
+
this.paint(p.span.start, p.span.start + 2, 'sub');
|
|
263
|
+
this.paint(p.span.end - 1, p.span.end, 'sub');
|
|
264
|
+
this.stmts(p.body);
|
|
265
|
+
break;
|
|
266
|
+
case 'ArithExp':
|
|
267
|
+
this.paint(p.span.start, p.span.end, 'ar');
|
|
268
|
+
this.arith(p.expr);
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
arith(e) {
|
|
274
|
+
switch (e.type) {
|
|
275
|
+
case 'ArithNum':
|
|
276
|
+
this.paint(e.span.start, e.span.end, 'num');
|
|
277
|
+
break;
|
|
278
|
+
case 'ArithVar':
|
|
279
|
+
this.paint(e.span.start, e.span.start + e.name.length, 'var');
|
|
280
|
+
if (e.index)
|
|
281
|
+
this.arith(e.index);
|
|
282
|
+
break;
|
|
283
|
+
case 'ArithWord':
|
|
284
|
+
this.parts(e.word.parts);
|
|
285
|
+
break;
|
|
286
|
+
case 'ArithUnary':
|
|
287
|
+
this.arith(e.operand);
|
|
288
|
+
break;
|
|
289
|
+
case 'ArithBinary':
|
|
290
|
+
this.arith(e.left);
|
|
291
|
+
this.arith(e.right);
|
|
292
|
+
break;
|
|
293
|
+
case 'ArithAssign':
|
|
294
|
+
this.arith(e.target);
|
|
295
|
+
this.arith(e.value);
|
|
296
|
+
break;
|
|
297
|
+
case 'ArithTernary':
|
|
298
|
+
this.arith(e.cond);
|
|
299
|
+
this.arith(e.then);
|
|
300
|
+
this.arith(e.else);
|
|
301
|
+
break;
|
|
302
|
+
case 'ArithIncDec':
|
|
303
|
+
this.arith(e.target);
|
|
304
|
+
break;
|
|
305
|
+
case 'ArithGroup':
|
|
306
|
+
this.arith(e.expr);
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
cond(e) {
|
|
311
|
+
switch (e.type) {
|
|
312
|
+
case 'CondWord':
|
|
313
|
+
this.word(e.word, '');
|
|
314
|
+
break;
|
|
315
|
+
case 'CondUnary':
|
|
316
|
+
this.paint(e.span.start, e.operand.span.start, 'op');
|
|
317
|
+
this.word(e.operand, '');
|
|
318
|
+
break;
|
|
319
|
+
case 'CondBinary':
|
|
320
|
+
this.word(e.left, '');
|
|
321
|
+
this.paint(e.left.span.end, e.right.span.start, 'op');
|
|
322
|
+
this.word(e.right, e.op === '=~' ? 'str' : '');
|
|
323
|
+
break;
|
|
324
|
+
case 'CondNot':
|
|
325
|
+
this.paint(e.span.start, e.span.start + 1, 'op');
|
|
326
|
+
this.cond(e.operand);
|
|
327
|
+
break;
|
|
328
|
+
case 'CondAndOr':
|
|
329
|
+
this.cond(e.left);
|
|
330
|
+
this.paint(e.left.span.end, e.right.span.start, 'op');
|
|
331
|
+
this.cond(e.right);
|
|
332
|
+
break;
|
|
333
|
+
case 'CondGroup':
|
|
334
|
+
this.cond(e.expr);
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/printer/highlight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML-native pretty-printing: the same layout as `format`, emitted as
|
|
3
|
+
* syntax-highlighted spans, with best-effort truncation of over-long words so
|
|
4
|
+
* lines fit the width. Truncated output is for display only (it is not valid
|
|
5
|
+
* bash); hidden text stays in the DOM and a click can reveal it.
|
|
6
|
+
*
|
|
7
|
+
* Truncation is a small search, not an optimum: render, find lines over the
|
|
8
|
+
* width, shorten the most suitable atom on each (quoted strings and
|
|
9
|
+
* substitutions first, never command names or flags), re-render, repeat until
|
|
10
|
+
* nothing changes. Multi-line atoms (quoted strings, here-doc bodies) get
|
|
11
|
+
* their continuation lines clipped to the width and are collapsed to their
|
|
12
|
+
* first lines when they are longer than `maxLines`.
|
|
13
|
+
*/
|
|
14
|
+
import type * as A from '../parser/ast.ts';
|
|
15
|
+
import { type FormatOptions } from './print.ts';
|
|
16
|
+
export interface HtmlOptions extends FormatOptions {
|
|
17
|
+
/** Shorten over-long atoms so lines fit `width` (default true). */
|
|
18
|
+
truncate?: boolean;
|
|
19
|
+
/** Lines shown of a multi-line string or here-doc body before collapsing (default 8). */
|
|
20
|
+
maxLines?: number;
|
|
21
|
+
/** Never shorten an atom's first line below this many columns (default 16). */
|
|
22
|
+
minKeep?: number;
|
|
23
|
+
/** Re-layout rounds (default 12). */
|
|
24
|
+
maxIterations?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Prefer shortening over breaking (default true): a line that fits once its
|
|
27
|
+
* strings and paths are shortened is not wrapped; the full text stays in
|
|
28
|
+
* the DOM (and tooltip). False lays out like `format`, then shortens.
|
|
29
|
+
*/
|
|
30
|
+
preferTruncation?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve file and directory arguments statically (default true): the
|
|
33
|
+
* working directory at each command comes from the static analysis (it
|
|
34
|
+
* follows `cd`), starting from `cwd` (unknown when not given). Known paths
|
|
35
|
+
* get a tooltip (`as written → /absolute/path` when they differ beyond `~`)
|
|
36
|
+
* and a `data-href="file://…"` that {@link attachHtmlHandlers} opens.
|
|
37
|
+
*/
|
|
38
|
+
paths?: boolean;
|
|
39
|
+
/** Working directory the snippet starts in. */
|
|
40
|
+
cwd?: string;
|
|
41
|
+
/** Home directory for `~` (default: $HOME). */
|
|
42
|
+
home?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface HtmlResult {
|
|
45
|
+
/** `<pre class="mash">…</pre>` */
|
|
46
|
+
html: string;
|
|
47
|
+
/** The displayed text (with `…` where truncated). */
|
|
48
|
+
text: string;
|
|
49
|
+
/** Number of atoms shortened or collapsed. */
|
|
50
|
+
truncated: number;
|
|
51
|
+
/** Lines still wider than `width` (unbreakable code, not truncatable). */
|
|
52
|
+
overflowing: number;
|
|
53
|
+
}
|
|
54
|
+
/** Pretty-print `source` as highlighted (and, by default, truncated) HTML. */
|
|
55
|
+
export declare function formatHtml(source: string, options?: HtmlOptions): HtmlResult;
|
|
56
|
+
export declare function printScriptHtml(script: A.Script, source: string, options?: HtmlOptions): HtmlResult;
|
|
57
|
+
/**
|
|
58
|
+
* Click behavior for HTML output under `root`: a statically known path opens
|
|
59
|
+
* in a new tab (`file://`; browsers allow that from file:// pages, not from
|
|
60
|
+
* http ones), any other shortened item expands or collapses.
|
|
61
|
+
*/
|
|
62
|
+
export declare function attachHtmlHandlers(root: {
|
|
63
|
+
addEventListener(type: 'click', fn: (e: {
|
|
64
|
+
target: unknown;
|
|
65
|
+
preventDefault(): void;
|
|
66
|
+
}) => void): void;
|
|
67
|
+
}): void;
|
|
68
|
+
/** {@link attachHtmlHandlers} as a script for pages without a module loader: `<script>${HTML_SCRIPT}</script>`. */
|
|
69
|
+
export declare const HTML_SCRIPT: string;
|
|
70
|
+
/** Default styles (light and dark). Attach the click handlers with {@link attachHtmlHandlers} or {@link HTML_SCRIPT}. */
|
|
71
|
+
export declare const HTML_CSS = "\n.mash { --kw:#a626a4; --op:#0184bc; --cmd:#4078f2; --flag:#986801; --str:#50a14f; --esc:#c18401; --var:#e45649;\n --sub:#0184bc; --ar:#986801; --asg:#e45649; --rd:#0184bc; --hd:#50a14f; --cm:#a0a1a7; --fn:#4078f2; --el:#a0a1a7;\n --dir:#00838f; --file:#3f51b5; --re:#d84315; --code:#7b5e57; --sc:#7e3fd8;\n font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; white-space: pre; margin: 0; tab-size: 4; }\n@media (prefers-color-scheme: dark) {\n .mash { --kw:#c678dd; --op:#56b6c2; --cmd:#61afef; --flag:#d19a66; --str:#98c379; --esc:#e5c07b; --var:#e06c75;\n --sub:#56b6c2; --ar:#d19a66; --asg:#e06c75; --rd:#56b6c2; --hd:#98c379; --cm:#7f848e; --fn:#61afef; --el:#7f848e;\n --dir:#4dd0e1; --file:#9fa8ff; --re:#ff8a65; --code:#c8b5ad; --sc:#c49bff; }\n}\n.mash .kw { color: var(--kw); } .mash .op { color: var(--op); } .mash .cmd { color: var(--cmd); font-weight: 600; }\n.mash .flag { color: var(--flag); } .mash .str { color: var(--str); } .mash .esc { color: var(--esc); }\n.mash .var { color: var(--var); } .mash .sub { color: var(--sub); font-weight: 600; } .mash .ar, .mash .num { color: var(--ar); }\n.mash .asg { color: var(--asg); } .mash .rd { color: var(--rd); } .mash .hd { color: var(--hd); }\n.mash .pth { text-decoration: underline dotted; text-underline-offset: 3px; }\n.mash .pth.dir { text-decoration-color: color-mix(in srgb, var(--dir) 55%, transparent); } .mash .pth.file { text-decoration-color: color-mix(in srgb, var(--file) 55%, transparent); }\n.mash [data-href] { cursor: pointer; } .mash [data-href]:hover { background: color-mix(in srgb, currentColor 12%, transparent); border-radius: 3px; }\n.mash .pth .dir, .mash .pth .file { text-decoration: none; }\n/* paths: dotted underline (both kinds), told apart by color */\n.mash .dir, .mash .file { text-decoration: underline dotted; text-underline-offset: 3px; }\n.mash .dir { color: var(--dir); text-decoration-color: color-mix(in srgb, var(--dir) 45%, transparent); }\n.mash .file { color: var(--file); text-decoration-color: color-mix(in srgb, var(--file) 45%, transparent); }\n.mash .re { color: var(--re); } .mash .code { color: var(--code); } .mash .sc { color: var(--sc); font-weight: 600; }\n.mash .cm { color: var(--cm); font-style: italic; } .mash .fn { color: var(--fn); font-weight: 600; } .mash .ct { color: var(--el); }\n.mash .tc .hid { display: none; } .mash .tc.open .hid { display: inline; } .mash .tc.open > .el { display: none; }\n.mash.sum { display: inline-block; white-space: pre; max-width: 100%; overflow: hidden; vertical-align: bottom; }\n.mash.sum .el { cursor: help; } .mash .tr:hover { background: color-mix(in srgb, var(--el) 15%, transparent); border-radius: 3px; }\n.mash .el { color: var(--el); cursor: pointer; border-radius: 3px; } .mash .el:hover { background: color-mix(in srgb, var(--el) 20%, transparent); }\n";
|
|
72
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/printer/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,kBAAkB,CAAA;AAS1C,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAEzD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAyFD,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;CACpB;AAiID,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAEhF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAmGvG;AAOD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,cAAc,IAAI,IAAI,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAWtJ;AAED,mHAAmH;AACnH,eAAO,MAAM,WAAW,QAAiD,CAAA;AAEzE,yHAAyH;AACzH,eAAO,MAAM,QAAQ,gzFA4BpB,CAAA"}
|