From 115ab2d6572df48d3548ed841e19eac5e7761721 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 16 May 2018 13:02:35 +0200 Subject: [PATCH] fix #49895 --- .../editor/contrib/suggest/completionModel.ts | 5 +++- .../suggest/test/completionModel.test.ts | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/contrib/suggest/completionModel.ts b/src/vs/editor/contrib/suggest/completionModel.ts index f2325b12fce..58b95c31146 100644 --- a/src/vs/editor/contrib/suggest/completionModel.ts +++ b/src/vs/editor/contrib/suggest/completionModel.ts @@ -106,13 +106,16 @@ export class CompletionModel { adopt(except: Set): ISuggestionItem[] { let res = new Array(); - for (let i = 0; i < this._items.length; i++) { + for (let i = 0; i < this._items.length;) { if (!except.has(this._items[i].support)) { res.push(this._items[i]); // unordered removed this._items[i] = this._items[this._items.length - 1]; this._items.pop(); + } else { + // continue with next item + i++; } } this._refilterKind = Refilter.All; diff --git a/src/vs/editor/contrib/suggest/test/completionModel.test.ts b/src/vs/editor/contrib/suggest/test/completionModel.test.ts index 233c662364d..87631a1720a 100644 --- a/src/vs/editor/contrib/suggest/test/completionModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/completionModel.test.ts @@ -107,6 +107,35 @@ suite('CompletionModel', function () { assert.ok(complete[0] === completeItem); }); + test('Fuzzy matching of snippets stopped working with inline snippet suggestions #49895', function () { + const completeItem1 = createSuggestItem('foobar1', 1, undefined, false, { lineNumber: 1, column: 2 }); + const completeItem2 = createSuggestItem('foobar2', 1, undefined, false, { lineNumber: 1, column: 2 }); + const completeItem3 = createSuggestItem('foobar3', 1, undefined, false, { lineNumber: 1, column: 2 }); + const completeItem4 = createSuggestItem('foobar4', 1, undefined, false, { lineNumber: 1, column: 2 }); + const completeItem5 = createSuggestItem('foobar5', 1, undefined, false, { lineNumber: 1, column: 2 }); + const incompleteItem1 = createSuggestItem('foofoo1', 1, undefined, true, { lineNumber: 1, column: 2 }); + + const model = new CompletionModel( + [ + completeItem1, + completeItem2, + completeItem3, + completeItem4, + completeItem5, + incompleteItem1, + ], 2, { leadingLineContent: 'f', characterCountDelta: 0 } + ); + assert.equal(model.incomplete.size, 1); + assert.equal(model.items.length, 6); + + const { incomplete } = model; + const complete = model.adopt(incomplete); + + assert.equal(incomplete.size, 1); + assert.ok(incomplete.has(incompleteItem1.support)); + assert.equal(complete.length, 5); + }); + test('proper current word when length=0, #16380', function () { model = new CompletionModel([ -- GitLab