diff --git a/packages/cspell/bin.js b/packages/cspell/bin.js index f06e4e65543..7625ebe49f5 100755 --- a/packages/cspell/bin.js +++ b/packages/cspell/bin.js @@ -8,6 +8,8 @@ const program = require('commander'); app.run(program, process.argv).catch((e) => { if (!(e instanceof program.CommanderError) && !(e instanceof app.CheckFailed)) { console.log(e); + // It is possible an explicit exit code was set, use it if it was. + process.exitCode = process.exitCode || 1; } if (e instanceof app.CheckFailed) { process.exitCode = e.exitCode; diff --git a/packages/cspell/src/app.ts b/packages/cspell/src/app.ts index 1f77e9c2d24..2dd3237c242 100644 --- a/packages/cspell/src/app.ts +++ b/packages/cspell/src/app.ts @@ -17,6 +17,9 @@ import { tableToLines } from './util/table'; import { Emitters, isProgressFileComplete, MessageType, ProgressItem, Issue } from './emitters'; import { isSpellingDictionaryLoadError, SpellingDictionaryLoadError, ImportError } from 'cspell-lib'; import { emitTraceResults } from './traceEmitter'; +import { CheckFailed } from './util/errors'; + +export { CheckFailed } from './util/errors'; interface Options extends CSpellApplicationOptions { legacy?: boolean; @@ -409,9 +412,3 @@ class TS extends Array { function template(s: string): TemplateStringsArray { return new TS(s); } - -export class CheckFailed extends Error { - constructor(message: string, readonly exitCode: number = 1) { - super(message); - } -} diff --git a/packages/cspell/src/util/errors.test.ts b/packages/cspell/src/util/errors.test.ts new file mode 100644 index 00000000000..c58ca545426 --- /dev/null +++ b/packages/cspell/src/util/errors.test.ts @@ -0,0 +1,11 @@ +import { CheckFailed } from './errors'; + +describe('errors', () => { + test.each` + ErrorClass | params + ${CheckFailed} | ${['no matches']} + `('new', ({ ErrorClass, params }) => { + const e = new ErrorClass(...params); + expect(e instanceof Error).toBe(true); + }); +}); diff --git a/packages/cspell/src/util/errors.ts b/packages/cspell/src/util/errors.ts new file mode 100644 index 00000000000..997b23ff6f3 --- /dev/null +++ b/packages/cspell/src/util/errors.ts @@ -0,0 +1,5 @@ +export class CheckFailed extends Error { + constructor(message: string, readonly exitCode: number = 1) { + super(message); + } +}