Skip to content

Commit a8e0275

Browse files
authored
Handle missing run script files cleanly (#11)
1 parent 113abf7 commit a8e0275

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

bin/moshcode.mjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ const DEFAULT_SCRIPT = `while (alive) {
2323

2424
function readScript(arg) {
2525
if (!arg || arg === "-") return fs.readFileSync(0, "utf8"); // stdin (paste)
26-
return fs.readFileSync(arg, "utf8");
26+
try {
27+
return fs.readFileSync(arg, "utf8");
28+
} catch (e) {
29+
throw new Error(`moshcode run: cannot read script ${JSON.stringify(arg)} (${e.code || e.message})`);
30+
}
2731
}
2832

2933
function parseMax(value) {
@@ -138,7 +142,13 @@ async function main() {
138142
}
139143
else file = a;
140144
}
141-
const src = file ? readScript(file) : (fs.existsSync(EXAMPLE) ? fs.readFileSync(EXAMPLE, "utf8") : DEFAULT_SCRIPT);
145+
let src;
146+
try {
147+
src = file ? readScript(file) : (fs.existsSync(EXAMPLE) ? fs.readFileSync(EXAMPLE, "utf8") : DEFAULT_SCRIPT);
148+
} catch (e) {
149+
console.error(String(e.message || e));
150+
process.exit(1);
151+
}
142152
let ast;
143153
try { ast = compile(src); }
144154
catch (e) { console.error(String(e.message || e)); process.exit(1); }

test/run-options.test.mjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,12 @@ test("run rejects multiple script files", () => {
3333
assert.equal(result.status, 1);
3434
assert.match(result.stderr, /moshcode run: expected one script file/);
3535
});
36+
37+
test("run reports missing script files without a stack trace", () => {
38+
const missing = join(tmpdir(), "moshcode-missing-script.mosh");
39+
const result = run([missing, "--dry-run"]);
40+
41+
assert.equal(result.status, 1);
42+
assert.match(result.stderr, /moshcode run: cannot read script/);
43+
assert.doesNotMatch(result.stderr, /Error: moshcode run/);
44+
});

0 commit comments

Comments
 (0)