From 6caf60fa704d8df191ffc0bedf5fe8f4eb9bcd1e Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 4 Apr 2018 10:15:18 +0200 Subject: [PATCH] fix #43429 --- .../editor/contrib/suggest/suggestMemory.ts | 24 ++++++++++++------- .../suggest/test/suggestMemory.test.ts | 18 ++++++++++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/vs/editor/contrib/suggest/suggestMemory.ts b/src/vs/editor/contrib/suggest/suggestMemory.ts index 5256dd4bce4..29c6afc906d 100644 --- a/src/vs/editor/contrib/suggest/suggestMemory.ts +++ b/src/vs/editor/contrib/suggest/suggestMemory.ts @@ -66,18 +66,24 @@ export class LRUMemory extends Memory { // in order of completions, select the first // that has been used in the past let { word } = model.getWordUntilPosition(pos); + if (word.length !== 0) { + return 0; + } + + let lineSuffix = model.getLineContent(pos.lineNumber).substr(pos.column - 10, pos.column - 1); + if (/\s$/.test(lineSuffix)) { + return 0; + } let res = 0; let seq = -1; - if (word.length === 0) { - for (let i = 0; i < items.length; i++) { - const { suggestion } = items[i]; - const key = `${model.getLanguageIdentifier().language}/${suggestion.label}`; - const item = this._cache.get(key); - if (item && item.touch > seq && item.type === suggestion.type && item.insertText === suggestion.insertText) { - seq = item.touch; - res = i; - } + for (let i = 0; i < items.length; i++) { + const { suggestion } = items[i]; + const key = `${model.getLanguageIdentifier().language}/${suggestion.label}`; + const item = this._cache.get(key); + if (item && item.touch > seq && item.type === suggestion.type && item.insertText === suggestion.insertText) { + seq = item.touch; + res = i; } } return res; diff --git a/src/vs/editor/contrib/suggest/test/suggestMemory.test.ts b/src/vs/editor/contrib/suggest/test/suggestMemory.test.ts index 9d69016057f..4025fcd221e 100644 --- a/src/vs/editor/contrib/suggest/test/suggestMemory.test.ts +++ b/src/vs/editor/contrib/suggest/test/suggestMemory.test.ts @@ -21,7 +21,7 @@ suite('SuggestMemories', function () { setup(function () { pos = { lineNumber: 1, column: 1 }; - buffer = TextModel.createFromString('This is some text'); + buffer = TextModel.createFromString('This is some text.\nthis.\nfoo: ,'); items = [ createSuggestItem('foo', 0), createSuggestItem('bar', 0) @@ -39,7 +39,9 @@ suite('SuggestMemories', function () { mem.memorize(buffer, pos, null); }); - test('ShyMemories', function () { + test('LRUMemory', function () { + + pos = { lineNumber: 2, column: 6 }; const mem = new LRUMemory(); mem.memorize(buffer, pos, items[1]); @@ -59,7 +61,19 @@ suite('SuggestMemories', function () { createSuggestItem('new1', 0), createSuggestItem('new2', 0) ]), 0); + }); + test('intellisense is not showing top options first #43429', function () { + // ensure we don't memorize for whitespace prefixes + + pos = { lineNumber: 2, column: 6 }; + const mem = new LRUMemory(); + + mem.memorize(buffer, pos, items[1]); + assert.equal(mem.select(buffer, pos, items), 1); + + assert.equal(mem.select(buffer, { lineNumber: 3, column: 5 }, items), 0); // foo: |, + assert.equal(mem.select(buffer, { lineNumber: 3, column: 6 }, items), 1); // foo: ,| }); test('PrefixMemory', function () {