diff --git a/src/vs/editor/contrib/suggest/common/suggest.ts b/src/vs/editor/contrib/suggest/common/suggest.ts index 679eaab0646..654ce11e3bc 100644 --- a/src/vs/editor/contrib/suggest/common/suggest.ts +++ b/src/vs/editor/contrib/suggest/common/suggest.ts @@ -197,5 +197,19 @@ export function getSuggestionComparator(snippetConfig: SnippetConfig): (a: ISugg } CommonEditorRegistry.registerDefaultLanguageCommand('_executeCompletionItemProvider', (model, position, args) => { - return provideSuggestionItems(model, position); + + const result: ISuggestResult = { + incomplete: false, + suggestions: [] + }; + + return provideSuggestionItems(model, position).then(items => { + + for (const {container, suggestion} of items) { + result.incomplete = result.incomplete || container.incomplete; + result.suggestions.push(suggestion); + } + + return result; + }); }); diff --git a/src/vs/workbench/api/node/extHostApiCommands.ts b/src/vs/workbench/api/node/extHostApiCommands.ts index 770f293bd07..61ea59bf93c 100644 --- a/src/vs/workbench/api/node/extHostApiCommands.ts +++ b/src/vs/workbench/api/node/extHostApiCommands.ts @@ -336,21 +336,16 @@ class ExtHostApiCommands { }); } - private _executeCompletionItemProvider(resource: URI, position: types.Position, triggerCharacter: string): Thenable { + private _executeCompletionItemProvider(resource: URI, position: types.Position, triggerCharacter: string): Thenable { const args = { resource, position: position && typeConverters.fromPosition(position), triggerCharacter }; - return this._commands.executeCommand<{ suggestion: modes.ISuggestion; container: modes.ISuggestResult }[]>('_executeCompletionItemProvider', args).then(values => { - if (values) { - let items: types.CompletionItem[] = []; - let incomplete: boolean; - for (let item of values) { - incomplete = item.container.incomplete || incomplete; - items.push(typeConverters.Suggest.to(item.container, position, item.suggestion)); - } - return new types.CompletionList(items, incomplete); + return this._commands.executeCommand('_executeCompletionItemProvider', args).then(result => { + if (result) { + const items = result.suggestions.map(suggestion => typeConverters.Suggest.to(position, suggestion)); + return new types.CompletionList(items, result.incomplete); } }); } diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts index 7057cabc3a2..28683634501 100644 --- a/src/vs/workbench/api/node/extHostTypeConverters.ts +++ b/src/vs/workbench/api/node/extHostTypeConverters.ts @@ -329,7 +329,7 @@ export const Suggest = { return suggestion; }, - to(container: modes.ISuggestResult, position: types.Position, suggestion: modes.ISuggestion): types.CompletionItem { + to(position: types.Position, suggestion: modes.ISuggestion): types.CompletionItem { const result = new types.CompletionItem(suggestion.label); result.insertText = suggestion.insertText; result.kind = CompletionItemKind.to(suggestion.type);