From 2d93ffc8e2b7bee5d51c93bf9785b23ca4e004f9 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Thu, 18 Aug 2016 11:16:39 +0200 Subject: [PATCH] improve filter/score speed a little by avoiding uncessary string-creation, #10621 --- .../contrib/suggest/common/completionModel.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/vs/editor/contrib/suggest/common/completionModel.ts b/src/vs/editor/contrib/suggest/common/completionModel.ts index ec1bdcd042a..19a311ec721 100644 --- a/src/vs/editor/contrib/suggest/common/completionModel.ts +++ b/src/vs/editor/contrib/suggest/common/completionModel.ts @@ -78,16 +78,23 @@ export class CompletionModel { private _filterAndScore(): void { this._filteredItems = []; this._topScoreIdx = -1; - let topScore = -1; const {leadingLineContent, characterCountDelta} = this._lineContext; - //TODO@joh - sort by 'overwriteBefore' such that we can 'reuse' the word (wordLowerCase) + let word = ''; + let topScore = -1; + for (const item of this._items) { - const start = leadingLineContent.length - (item.suggestion.overwriteBefore + characterCountDelta); - const word = leadingLineContent.substr(start); const {filter, suggestion} = item; + // 'word' is that remainder of the current line that we + // filter and score against. In theory each suggestion uses a + // differnet word, but in practice not - that's why we cache + const wordLen = item.suggestion.overwriteBefore + characterCountDelta; + if (word.length !== wordLen) { + word = leadingLineContent.slice(-wordLen); + } + let match = false; // compute highlights based on 'label'