diff --git a/src/vs/editor/contrib/suggest/browser/suggest.ts b/src/vs/editor/contrib/suggest/browser/suggest.ts index b899c5ffd34..5aaf3048a86 100644 --- a/src/vs/editor/contrib/suggest/browser/suggest.ts +++ b/src/vs/editor/contrib/suggest/browser/suggest.ts @@ -42,6 +42,8 @@ export function setSnippetSuggestSupport(support: ISuggestSupport): ISuggestSupp return old; } +const emptySuggestContext: SuggestContext = {}; + export function provideSuggestionItems(model: IModel, position: Position, snippetConfig: SnippetConfig = 'bottom', onlyFrom?: ISuggestSupport[], context?: SuggestContext): TPromise { const allSuggestions: ISuggestionItem[] = []; @@ -73,7 +75,7 @@ export function provideSuggestionItems(model: IModel, position: Position, snippe return undefined; } - return asWinJsPromise(token => support.provideCompletionItems(model, position, context || {}, token)).then(container => { + return asWinJsPromise(token => support.provideCompletionItems(model, position, context || emptySuggestContext, token)).then(container => { const len = allSuggestions.length; diff --git a/src/vs/editor/contrib/suggest/browser/suggestModel.ts b/src/vs/editor/contrib/suggest/browser/suggestModel.ts index 49e513c551c..2e06afe6329 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestModel.ts @@ -356,7 +356,9 @@ export class SuggestModel implements IDisposable { this.requestPromise = provideSuggestionItems(model, this.editor.getPosition(), this.editor.getConfiguration().contribInfo.snippetSuggestions, onlyFrom, - context + { + triggerCharacter: context.triggerCharacter + } ).then(items => { this.requestPromise = null; diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index 41c1b68becc..a04d6b39933 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -546,14 +546,11 @@ export interface CompletionContext { /** * Character that triggered the completion item provider. * - * Undefined if provider was not triggered by a character. + * `undefined` if provider was not triggered by a character. */ triggerCharacter?: string; } -export type ProviderCompletionItems = (document: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken) => CompletionItem[] | Thenable | CompletionList | Thenable; -export type ProviderCompletionItemsForContext = (document: editorCommon.IReadOnlyModel, position: Position, context: CompletionContext, token: CancellationToken) => CompletionItem[] | Thenable | CompletionList | Thenable; - /** * The completion item provider interface defines the contract between extensions and * the [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense). @@ -570,7 +567,9 @@ export interface CompletionItemProvider { /** * Provide completion items for the given position and document. */ - provideCompletionItems: ProviderCompletionItems | ProviderCompletionItemsForContext; + provideCompletionItems(document: editorCommon.IReadOnlyModel, position: Position, context: CompletionContext, token: CancellationToken): CompletionItem[] | Thenable | CompletionList | Thenable; + provideCompletionItems(document: editorCommon.IReadOnlyModel, position: Position, token: CancellationToken): CompletionItem[] | Thenable | CompletionList | Thenable; + /** * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation) * or [details](#CompletionItem.detail). @@ -657,13 +656,11 @@ class SuggestAdapter { } provideCompletionItems(model: editorCommon.IReadOnlyModel, position: Position, context: modes.SuggestContext, token: CancellationToken): Thenable { - let request: any; - if (this._provider.provideCompletionItems.length <= 3) { - request = (this._provider.provideCompletionItems as ProviderCompletionItems)(model, position, token); - } else { - request = (this._provider.provideCompletionItems as ProviderCompletionItemsForContext)(model, position, context, token); - } - return toThenable(request).then(value => { + const result = this._provider.provideCompletionItems.length <= 3 + ? this._provider.provideCompletionItems(model, position, token) + : this._provider.provideCompletionItems(model, position, context, token); + + return toThenable(result).then(value => { const result: modes.ISuggestResult = { suggestions: [] }; diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 58eafd8e633..63db57368ba 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4237,15 +4237,11 @@ declare module monaco.languages { /** * Character that triggered the completion item provider. * - * Undefined if provider was not triggered by a character. + * `undefined` if provider was not triggered by a character. */ triggerCharacter?: string; } - export type ProviderCompletionItems = (document: editor.IReadOnlyModel, position: Position, token: CancellationToken) => CompletionItem[] | Thenable | CompletionList | Thenable; - - export type ProviderCompletionItemsForContext = (document: editor.IReadOnlyModel, position: Position, context: CompletionContext, token: CancellationToken) => CompletionItem[] | Thenable | CompletionList | Thenable; - /** * The completion item provider interface defines the contract between extensions and * the [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense). @@ -4262,7 +4258,8 @@ declare module monaco.languages { /** * Provide completion items for the given position and document. */ - provideCompletionItems: ProviderCompletionItems | ProviderCompletionItemsForContext; + provideCompletionItems(document: editor.IReadOnlyModel, position: Position, context: CompletionContext, token: CancellationToken): CompletionItem[] | Thenable | CompletionList | Thenable; + provideCompletionItems(document: editor.IReadOnlyModel, position: Position, token: CancellationToken): CompletionItem[] | Thenable | CompletionList | Thenable; /** * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation) * or [details](#CompletionItem.detail). diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 49d7378c9ed..3552946a246 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -2726,14 +2726,11 @@ declare module 'vscode' { /** * Character that triggered the completion item provider. * - * Undefined if provider was not triggered by a character. + * `undefined` if provider was not triggered by a character. */ readonly triggerCharacter?: string; } - export type ProviderCompletionItems = (document: TextDocument, position: Position, token: CancellationToken) => ProviderResult; - export type ProviderCompletionItemsForContext = (document: TextDocument, position: Position, context: CompletionContext, token: CancellationToken) => ProviderResult; - /** * The completion item provider interface defines the contract between extensions and * [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense). @@ -2759,7 +2756,8 @@ declare module 'vscode' { * @return An array of completions, a [completion list](#CompletionList), or a thenable that resolves to either. * The lack of a result can be signaled by returning `undefined`, `null`, or an empty array. */ - provideCompletionItems: ProviderCompletionItems | ProviderCompletionItemsForContext; + provideCompletionItems(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; + provideCompletionItems(document: TextDocument, position: Position, context: CompletionContext, token: CancellationToken): ProviderResult; /** * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation) diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 132af499967..bc177f72477 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -493,9 +493,9 @@ class SuggestAdapter { return asWinJsPromise(token => { if (this._provider.provideCompletionItems.length <= 3) { - return (this._provider.provideCompletionItems as vscode.ProviderCompletionItems)(doc, pos, token); + return this._provider.provideCompletionItems(doc, pos, token); } - return (this._provider.provideCompletionItems as vscode.ProviderCompletionItemsForContext)(doc, pos, context, token); + return this._provider.provideCompletionItems(doc, pos, context, token); }).then(value => { const _id = this._idPool++;