From 673d8139bef1c9eb2e3a535f752abdf0f40bf252 Mon Sep 17 00:00:00 2001 From: ikeyan Date: Sat, 12 Sep 2020 13:03:20 +0900 Subject: [PATCH] improved time complexity (quadratic -> linear) --- lib/formatter.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/formatter.ts b/lib/formatter.ts index 598fffd..a02371b 100644 --- a/lib/formatter.ts +++ b/lib/formatter.ts @@ -24,14 +24,11 @@ export function format(fileName: string, text: string, options = createDefaultFo const languageService = ts.createLanguageService(host); const edits = languageService.getFormattingEditsForDocument(fileName, options); - edits + const [lastEnd, result] = edits .sort((a, b) => a.span.start - b.span.start) - .reverse() - .forEach(edit => { - const head = text.slice(0, edit.span.start); - const tail = text.slice(edit.span.start + edit.span.length); - text = `${head}${edit.newText}${tail}`; - }); - - return text; + .reduce<[number, string]>( + ([lastEnd, result], edit) => + [edit.span.start + edit.span.length, result + text.slice(lastEnd, edit.span.start) + edit.newText], + [0, ""]); + return result + text.slice(lastEnd); }