From b8e91f35e2cdebc14dda9b73de1dd31183f5d91d Mon Sep 17 00:00:00 2001 From: Jason Dent Date: Sat, 23 Jan 2021 12:34:59 +0100 Subject: [PATCH] fix: make sure version and help do not exit with non-zero code. (#883) * fix: reduce the cost of the word splitter * fix: #880 --- packages/cspell-lib/src/util/wordSplitter.ts | 20 ++++++++++++-------- packages/cspell/bin.js | 4 +++- packages/cspell/src/app.ts | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/cspell-lib/src/util/wordSplitter.ts b/packages/cspell-lib/src/util/wordSplitter.ts index 2b244e0cc7d8..5a296a44f37e 100644 --- a/packages/cspell-lib/src/util/wordSplitter.ts +++ b/packages/cspell-lib/src/util/wordSplitter.ts @@ -49,7 +49,7 @@ export function split( ): SplitResult { const relWordToSplit = findNextWordText({ text: line.text, offset: offset - line.offset }); const lineOffset = line.offset; - const requested = new Map>(); + const requested = new Map(); if (!relWordToSplit.text) { const text = rebaseTextOffset(relWordToSplit); @@ -88,15 +88,19 @@ export function split( } function has(word: TextOffset): boolean { - let a = requested.get(word.offset); - const b = a?.get(word.text); - if (b !== undefined) return b; - if (!a) { - a = new Map(); - requested.set(word.offset, a); + const i = word.offset; + const j = word.text.length; + let v = i + (j << 20); + if (i < 1 << 20 && j < 1 << 11) { + const b = requested.get(v); + if (b !== undefined) return b; + } else { + v = -1; } const r = isValidWord(rebaseTextOffset(word)); - a.set(word.text, r); + if (v >= 0) { + requested.set(v, r); + } return r; } diff --git a/packages/cspell/bin.js b/packages/cspell/bin.js index 7c1c6c99c096..f06e4e65543c 100755 --- a/packages/cspell/bin.js +++ b/packages/cspell/bin.js @@ -9,5 +9,7 @@ app.run(program, process.argv).catch((e) => { if (!(e instanceof program.CommanderError) && !(e instanceof app.CheckFailed)) { console.log(e); } - 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 daf2e00532f0..85f2f89895c9 100644 --- a/packages/cspell/src/app.ts +++ b/packages/cspell/src/app.ts @@ -426,7 +426,7 @@ function template(s: string): TemplateStringsArray { } export class CheckFailed extends Error { - constructor(message: string, readonly errorCode: number) { + constructor(message: string, readonly exitCode: number = 1) { super(message); } }