diff --git a/src/vs/editor/common/modes/supports.ts b/src/vs/editor/common/modes/supports.ts index 2526b072617db719583212c926068cc531c66826..c63cb2f6edd6b049bba106ffc349ab107bbaa47e 100644 --- a/src/vs/editor/common/modes/supports.ts +++ b/src/vs/editor/common/modes/supports.ts @@ -196,13 +196,13 @@ export class SnippetsRegistry { } - public static getSnippetsStrict(model: IReadOnlyModel, position: IPosition): modes.ISuggestion[] { + public static fillInSnippets(bucket: modes.ISuggestion[], model: IReadOnlyModel, position: IPosition): void { const match = model.getLineContent(position.lineNumber).substr(0, position.column - 1).match(/[^\s]+$/); if (!match) { - return []; + return; } + let idx = 0; const prefix = match[0]; - const result: modes.ISuggestion[] = []; let snipppetsByMode = this._snippets[model.getModeId()]; if (snipppetsByMode) { for (let path in snipppetsByMode) { @@ -210,12 +210,12 @@ export class SnippetsRegistry { if (suggestions) { for (const suggestion of suggestions) { if (strings.endsWith(prefix, suggestion.label)) { - result.push(suggestion); + bucket[idx++] = suggestion; } } } } } - return result; + bucket.length = idx; } } diff --git a/src/vs/editor/contrib/suggest/browser/tabCompletion.ts b/src/vs/editor/contrib/suggest/browser/tabCompletion.ts index 8c7ce38b4fefccdcf650dc337a07785b10ed3477..c6e7859fddfdeb7dd755edff46dc34e062e56b79 100644 --- a/src/vs/editor/contrib/suggest/browser/tabCompletion.ts +++ b/src/vs/editor/contrib/suggest/browser/tabCompletion.ts @@ -31,8 +31,7 @@ class TabCompletionController implements editor.IEditorContribution { this._snippetController = getSnippetController(editor); const hasSnippets = keybindingService.createKey(TabCompletionController.ContextKey, undefined); this._cursorChangeSubscription = editor.onDidChangeCursorPosition(e => { - this._currentCompletions.length = 0; - this._currentCompletions = SnippetsRegistry.getSnippetsStrict(editor.getModel(), editor.getPosition()); + SnippetsRegistry.fillInSnippets(this._currentCompletions, editor.getModel(), editor.getPosition()); hasSnippets.set(this._currentCompletions.length === 1); //todo@joh make it work with N }); }