diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 0e18df81adf..c39c9c9f20f 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -301,7 +301,7 @@ export interface Hover { } export interface HoverProvider { - provideHover(model:editorCommon.IReadOnlyModel, position:editorCommon.IEditorPosition, cancellationToken:CancellationToken): Hover | Thenable; + provideHover(model:editorCommon.IReadOnlyModel, position:editorCommon.IEditorPosition, token:CancellationToken): Hover | Thenable; } export type SuggestionType = 'method' @@ -344,7 +344,15 @@ export interface ISuggestResult { } /** - * Interface used to get completion suggestions at a specific location. + * The completion item provider interface defines the contract between extensions and + * the [IntelliSense](https://code.visualstudio.com/docs/editor/editingevolved#_intellisense). + * + * When computing *complete* completion items is expensive, providers can optionally implement + * the `resolveCompletionItem`-function. In that case it is enough to return completion + * items with a [label](#CompletionItem.label) from the + * [provideCompletionItems](#CompletionItemProvider.provideCompletionItems)-function. Subsequently, + * when a completion item is shown in the UI and gains focus this provider is asked to resolve + * the item, like adding [doc-comment](#CompletionItem.documentation) or [details](#CompletionItem.detail). */ export interface ISuggestSupport { @@ -355,14 +363,28 @@ export interface ISuggestSupport { filter?: IFilter; /** - * Compute all completions for the given resource at the given position. + * Provide completion items for the given position and document. + * + * @param document The document in which the command was invoked. + * @param position The position at which the command was invoked. + * @param token A cancellation token. + * @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(model:editorCommon.IReadOnlyModel, position:editorCommon.IEditorPosition, cancellationToken:CancellationToken): ISuggestResult[] | Thenable; + provideCompletionItems(model:editorCommon.IReadOnlyModel, position:editorCommon.IEditorPosition, token:CancellationToken): ISuggestResult[] | Thenable; /** - * Compute more details for the given suggestion. + * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation) + * or [details](#CompletionItem.detail). + * + * The editor will only resolve a completion item once. + * + * @param item A completion item currently active in the UI. + * @param token A cancellation token. + * @return The resolved completion item or a thenable that resolves to of such. It is OK to return the given + * `item`. When no result is returned, the given `item` will be used. */ - getSuggestionDetails?: (resource: URI, position: editorCommon.IPosition, suggestion: ISuggestion) => TPromise; + resolveCompletionItem?(model:editorCommon.IReadOnlyModel, position:editorCommon.IEditorPosition, item: ISuggestion, token: CancellationToken): ISuggestion | Thenable; } /** diff --git a/src/vs/editor/common/modes/supports/suggestSupport.ts b/src/vs/editor/common/modes/supports/suggestSupport.ts index 3ccfcf8d1f0..dd8fc19ee80 100644 --- a/src/vs/editor/common/modes/supports/suggestSupport.ts +++ b/src/vs/editor/common/modes/supports/suggestSupport.ts @@ -52,10 +52,10 @@ export class TextualSuggestSupport implements ISuggestSupport { this._configurationService = configurationService; } - public provideCompletionItems(model:IReadOnlyModel, position:IEditorPosition, cancellationToken:CancellationToken): ISuggestResult[] | Thenable { + public provideCompletionItems(model:IReadOnlyModel, position:IEditorPosition, token:CancellationToken): ISuggestResult[] | Thenable { let config = this._configurationService.getConfiguration<{ wordBasedSuggestions: boolean }>('editor'); if (!config || config.wordBasedSuggestions) { - return wireCancellationToken(cancellationToken, this._editorWorkerService.textualSuggest(model.getAssociatedResource(), position)); + return wireCancellationToken(token, this._editorWorkerService.textualSuggest(model.getAssociatedResource(), position)); } return []; } diff --git a/src/vs/editor/contrib/suggest/browser/completionModel.ts b/src/vs/editor/contrib/suggest/browser/completionModel.ts index 4cdad20c9e4..dbb97948a0a 100644 --- a/src/vs/editor/contrib/suggest/browser/completionModel.ts +++ b/src/vs/editor/contrib/suggest/browser/completionModel.ts @@ -7,12 +7,12 @@ import {isFalsyOrEmpty} from 'vs/base/common/arrays'; import {assign} from 'vs/base/common/objects'; -import URI from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; -import {IPosition} from 'vs/editor/common/editorCommon'; +import {IReadOnlyModel, IEditorPosition} from 'vs/editor/common/editorCommon'; import {IFilter, IMatch, fuzzyContiguousFilter} from 'vs/base/common/filters'; import {ISuggestResult, ISuggestSupport, ISuggestion} from 'vs/editor/common/modes'; import {ISuggestResult2} from '../common/suggest'; +import {asWinJsPromise} from 'vs/base/common/async'; export class CompletionItem { @@ -30,12 +30,14 @@ export class CompletionItem { this.filter = container.support && container.support.filter || fuzzyContiguousFilter; } - resolveDetails(resource: URI, position: IPosition): TPromise { - if (!this._support || typeof this._support.getSuggestionDetails !== 'function') { + resolveDetails(model:IReadOnlyModel, position:IEditorPosition): TPromise { + if (!this._support || typeof this._support.resolveCompletionItem !== 'function') { return TPromise.as(this.suggestion); } - return this._support.getSuggestionDetails(resource, position, this.suggestion); + return asWinJsPromise((token) => { + return this._support.resolveCompletionItem(model, position, this.suggestion, token); + }); } updateDetails(value: ISuggestion): void { diff --git a/src/vs/editor/contrib/suggest/browser/suggestModel.ts b/src/vs/editor/contrib/suggest/browser/suggestModel.ts index e9011d51b75..7408e97415e 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestModel.ts @@ -9,11 +9,12 @@ import Event, { Emitter } from 'vs/base/common/event'; import {IDisposable, dispose} from 'vs/base/common/lifecycle'; import {startsWith} from 'vs/base/common/strings'; import {TPromise} from 'vs/base/common/winjs.base'; -import {EventType, ICommonCodeEditor, ICursorSelectionChangedEvent, IPosition, CursorChangeReason} from 'vs/editor/common/editorCommon'; +import {EventType, ICommonCodeEditor, ICursorSelectionChangedEvent, IEditorPosition, CursorChangeReason} from 'vs/editor/common/editorCommon'; import {ISuggestSupport, ISuggestion, SuggestRegistry} from 'vs/editor/common/modes'; import {CodeSnippet} from 'vs/editor/contrib/snippet/common/snippet'; import {ISuggestResult2, provideCompletionItems} from '../common/suggest'; import {CompletionModel} from './completionModel'; +import {Position} from 'vs/editor/common/core/position'; export interface ICancelEvent { retrigger: boolean; @@ -228,15 +229,12 @@ export class SuggestModel implements IDisposable { return actuallyCanceled; } - public getRequestPosition(): IPosition { + public getRequestPosition(): IEditorPosition { if (!this.context) { return null; } - return { - lineNumber: this.context.lineNumber, - column: this.context.column - }; + return new Position(this.context.lineNumber, this.context.column); } private isAutoSuggest(): boolean { diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts index 31cc70d09e5..446102826d0 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts @@ -488,10 +488,9 @@ export class SuggestWidget implements IContentWidget, IDisposable { this.updateWidgetHeight(); this.list.reveal(index); - const resource = this.editor.getModel().getAssociatedResource(); const position = this.model.getRequestPosition() || this.editor.getPosition(); - this.currentSuggestionDetails = item.resolveDetails(resource, position) + this.currentSuggestionDetails = item.resolveDetails(this.editor.getModel(), position) .then(details => { item.updateDetails(details); this.list.setFocus(index); diff --git a/src/vs/languages/css/common/css.ts b/src/vs/languages/css/common/css.ts index c2563485358..479314b1ae4 100644 --- a/src/vs/languages/css/common/css.ts +++ b/src/vs/languages/css/common/css.ts @@ -338,7 +338,7 @@ export class CSSMode extends AbstractMode { Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: [' ', ':'], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); Modes.QuickFixRegistry.register(this.getId(), this); @@ -383,8 +383,8 @@ export class CSSMode extends AbstractMode { return this._worker((w) => w.findOccurrences(resource, position, strict)); } - public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideCompletionItems(model.getAssociatedResource(), position)); + public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideCompletionItems(model.getAssociatedResource(), position)); } static $_provideCompletionItems = OneWorkerAttr(CSSMode, CSSMode.prototype._provideCompletionItems); @@ -397,8 +397,8 @@ export class CSSMode extends AbstractMode { return this._worker((w) => w.findDeclaration(resource, position)); } - public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideHover(model.getAssociatedResource(), position)); + public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideHover(model.getAssociatedResource(), position)); } static $_provideHover = OneWorkerAttr(CSSMode, CSSMode.prototype._provideHover); diff --git a/src/vs/languages/handlebars/common/handlebars.ts b/src/vs/languages/handlebars/common/handlebars.ts index 7f1ed2a9360..0dfcd64f998 100644 --- a/src/vs/languages/handlebars/common/handlebars.ts +++ b/src/vs/languages/handlebars/common/handlebars.ts @@ -121,7 +121,7 @@ export class HandlebarsMode extends htmlMode.HTMLMode { Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: ['.', ':', '<', '"', '=', '/'], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); Modes.OccurrencesRegistry.register(this.getId(), this); } diff --git a/src/vs/languages/html/common/html.ts b/src/vs/languages/html/common/html.ts index 3e29b78ac89..8aed537d63e 100644 --- a/src/vs/languages/html/common/html.ts +++ b/src/vs/languages/html/common/html.ts @@ -333,7 +333,7 @@ export class HTMLMode extends AbstractMode impl Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: ['.', ':', '<', '"', '=', '/'], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); Modes.OccurrencesRegistry.register(this.getId(), this); Modes.FormatRegistry.register(this.getId(), this); @@ -474,8 +474,8 @@ export class HTMLMode extends AbstractMode impl return this._worker((w) => w.format(resource, range, options)); } - public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideHover(model.getAssociatedResource(), position)); + public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideHover(model.getAssociatedResource(), position)); } static $_provideHover = OneWorkerAttr(HTMLMode, HTMLMode.prototype._provideHover); @@ -493,8 +493,8 @@ export class HTMLMode extends AbstractMode impl return this._worker((w) => w.findOccurrences(resource, position, strict)); } - public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideCompletionItems(model.getAssociatedResource(), position)); + public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideCompletionItems(model.getAssociatedResource(), position)); } static $_provideCompletionItems = OneWorkerAttr(HTMLMode, HTMLMode.prototype._provideCompletionItems); diff --git a/src/vs/languages/json/common/json.ts b/src/vs/languages/json/common/json.ts index ffab3d7b227..786b4ad332d 100644 --- a/src/vs/languages/json/common/json.ts +++ b/src/vs/languages/json/common/json.ts @@ -77,7 +77,7 @@ export class JSONMode extends AbstractMode implements Modes.HoverProvider, Modes Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: [], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); } @@ -132,8 +132,8 @@ export class JSONMode extends AbstractMode implements Modes.HoverProvider, Modes return this._worker((w) => w.navigateValueSet(resource, position, up)); } - public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideCompletionItems(model.getAssociatedResource(), position)); + public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideCompletionItems(model.getAssociatedResource(), position)); } static $_provideCompletionItems = OneWorkerAttr(JSONMode, JSONMode.prototype._provideCompletionItems); @@ -141,8 +141,8 @@ export class JSONMode extends AbstractMode implements Modes.HoverProvider, Modes return this._worker((w) => w.provideCompletionItems(resource, position)); } - public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideHover(model.getAssociatedResource(), position)); + public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideHover(model.getAssociatedResource(), position)); } static $_provideHover = OneWorkerAttr(JSONMode, JSONMode.prototype._provideHover); diff --git a/src/vs/languages/less/common/less.ts b/src/vs/languages/less/common/less.ts index bab360a0151..f36df7540b5 100644 --- a/src/vs/languages/less/common/less.ts +++ b/src/vs/languages/less/common/less.ts @@ -216,7 +216,7 @@ export class LESSMode extends AbstractMode implements Modes.HoverProvider, Modes Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: [], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); this.tokenizationSupport = createTokenizationSupport(modeService, this, lexer); @@ -263,8 +263,8 @@ export class LESSMode extends AbstractMode implements Modes.HoverProvider, Modes return this._worker((w) => w.findReferences(resource, position)); } - public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideCompletionItems(model.getAssociatedResource(), position)); + public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideCompletionItems(model.getAssociatedResource(), position)); } static $_provideCompletionItems = OneWorkerAttr(LESSMode, LESSMode.prototype._provideCompletionItems); @@ -272,8 +272,8 @@ export class LESSMode extends AbstractMode implements Modes.HoverProvider, Modes return this._worker((w) => w.provideCompletionItems(resource, position)); } - public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideHover(model.getAssociatedResource(), position)); + public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideHover(model.getAssociatedResource(), position)); } static $_provideHover = OneWorkerAttr(LESSMode, LESSMode.prototype._provideHover); diff --git a/src/vs/languages/markdown/common/markdown.ts b/src/vs/languages/markdown/common/markdown.ts index 674b31697c2..c05eb45fd5e 100644 --- a/src/vs/languages/markdown/common/markdown.ts +++ b/src/vs/languages/markdown/common/markdown.ts @@ -240,8 +240,8 @@ export class MarkdownMode extends AbstractMode implements Modes.IEmitOutputSuppo Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: [], shouldAutotriggerSuggest: false, - provideCompletionItems: (model, position, cancellationToken) => { - return wireCancellationToken(cancellationToken, editorWorkerService.textualSuggest(model.getAssociatedResource(), position)); + provideCompletionItems: (model, position, token) => { + return wireCancellationToken(token, editorWorkerService.textualSuggest(model.getAssociatedResource(), position)); } }); } diff --git a/src/vs/languages/razor/common/razor.ts b/src/vs/languages/razor/common/razor.ts index e8c6978433b..942a948caf3 100644 --- a/src/vs/languages/razor/common/razor.ts +++ b/src/vs/languages/razor/common/razor.ts @@ -70,7 +70,7 @@ export class RAZORMode extends htmlMode.HTMLMode { Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: ['.', ':', '<', '"', '=', '/'], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); Modes.OccurrencesRegistry.register(this.getId(), this); } diff --git a/src/vs/languages/sass/common/sass.ts b/src/vs/languages/sass/common/sass.ts index e0e935d9349..7a259a9f64f 100644 --- a/src/vs/languages/sass/common/sass.ts +++ b/src/vs/languages/sass/common/sass.ts @@ -317,7 +317,7 @@ export class SASSMode extends AbstractMode implements Modes.HoverProvider, Modes Modes.SuggestRegistry.register(this.getId(), { triggerCharacters: [], shouldAutotriggerSuggest: true, - provideCompletionItems: (model, position, cancellationToken) => this.provideCompletionItems(model, position, cancellationToken) + provideCompletionItems: (model, position, token) => this.provideCompletionItems(model, position, token) }); this.tokenizationSupport = createTokenizationSupport(modeService, this, lexer); @@ -364,8 +364,8 @@ export class SASSMode extends AbstractMode implements Modes.HoverProvider, Modes return this._worker((w) => w.findReferences(resource, position)); } - public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideCompletionItems(model.getAssociatedResource(), position)); + public provideCompletionItems(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideCompletionItems(model.getAssociatedResource(), position)); } static $_provideCompletionItems = OneWorkerAttr(SASSMode, SASSMode.prototype._provideCompletionItems); @@ -373,8 +373,8 @@ export class SASSMode extends AbstractMode implements Modes.HoverProvider, Modes return this._worker((w) => w.provideCompletionItems(resource, position)); } - public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, cancellationToken:CancellationToken): Thenable { - return wireCancellationToken(cancellationToken, this._provideHover(model.getAssociatedResource(), position)); + public provideHover(model:EditorCommon.IReadOnlyModel, position:EditorCommon.IEditorPosition, token:CancellationToken): Thenable { + return wireCancellationToken(token, this._provideHover(model.getAssociatedResource(), position)); } static $_provideHover = OneWorkerAttr(SASSMode, SASSMode.prototype._provideHover); diff --git a/src/vs/languages/typescript/common/languageFeatures.ts b/src/vs/languages/typescript/common/languageFeatures.ts index 61b87bb8bd2..4cc92ea6022 100644 --- a/src/vs/languages/typescript/common/languageFeatures.ts +++ b/src/vs/languages/typescript/common/languageFeatures.ts @@ -174,12 +174,12 @@ class SuggestAdapter extends Adapter implements modes.ISuggestSupport { return true; } - provideCompletionItems(model:editor.IReadOnlyModel, position:editor.IEditorPosition, cancellationToken:CancellationToken): Thenable { + provideCompletionItems(model:editor.IReadOnlyModel, position:editor.IEditorPosition, token:CancellationToken): Thenable { const wordInfo = model.getWordUntilPosition(position); const resource = model.getAssociatedResource(); const offset = this._positionToOffset(resource, position); - return wireCancellationToken(cancellationToken, this._worker(resource).then(worker => { + return wireCancellationToken(token, this._worker(resource).then(worker => { return worker.getCompletionsAtPosition(resource.toString(), offset); }).then(info => { if (!info) { @@ -200,9 +200,10 @@ class SuggestAdapter extends Adapter implements modes.ISuggestSupport { })); } - getSuggestionDetails(resource: URI, position: editor.IPosition, suggestion: modes.ISuggestion) { + resolveCompletionItem(model:editor.IReadOnlyModel, position:editor.IEditorPosition, suggestion: modes.ISuggestion, token: CancellationToken): Thenable { + const resource = model.getAssociatedResource(); - return this._worker(resource).then(worker => { + return wireCancellationToken(token, this._worker(resource).then(worker => { return worker.getCompletionEntryDetails(resource.toString(), this._positionToOffset(resource, position), suggestion.label); @@ -218,7 +219,7 @@ class SuggestAdapter extends Adapter implements modes.ISuggestSupport { typeLabel: ts.displayPartsToString(details.displayParts), documentationLabel: ts.displayPartsToString(details.documentation) }; - }); + })); } static asType(kind: string): modes.SuggestionType{ @@ -246,9 +247,9 @@ class SignatureHelpAdapter extends Adapter implements modes.SignatureHelpProvide public signatureHelpTriggerCharacters = ['(', ',']; - provideSignatureHelp(model: editor.IReadOnlyModel, position: editor.IEditorPosition, cancellationToken: CancellationToken): Thenable { + provideSignatureHelp(model: editor.IReadOnlyModel, position: editor.IEditorPosition, token: CancellationToken): Thenable { let resource = model.getAssociatedResource(); - return wireCancellationToken(cancellationToken, this._worker(resource).then(worker => worker.getSignatureHelpItems(resource.toString(), this._positionToOffset(resource, position))).then(info => { + return wireCancellationToken(token, this._worker(resource).then(worker => worker.getSignatureHelpItems(resource.toString(), this._positionToOffset(resource, position))).then(info => { if (!info) { return; @@ -295,10 +296,10 @@ class SignatureHelpAdapter extends Adapter implements modes.SignatureHelpProvide class QuickInfoAdapter extends Adapter implements modes.HoverProvider { - provideHover(model:editor.IReadOnlyModel, position:editor.IEditorPosition, cancellationToken:CancellationToken): Thenable { + provideHover(model:editor.IReadOnlyModel, position:editor.IEditorPosition, token:CancellationToken): Thenable { let resource = model.getAssociatedResource(); - return wireCancellationToken(cancellationToken, this._worker(resource).then(worker => { + return wireCancellationToken(token, this._worker(resource).then(worker => { return worker.getQuickInfoAtPosition(resource.toString(), this._positionToOffset(resource, position)); }).then(info => { if (!info) { diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 37f7b2d55f1..42ce5364a9e 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -480,7 +480,7 @@ class SuggestAdapter { this._provider = provider; } - suggest(resource: URI, position: IPosition): TPromise { + provideCompletionItems(resource: URI, position: IPosition): TPromise { const doc = this._documents.getDocumentData(resource).document; const pos = TypeConverters.toPosition(position); @@ -553,7 +553,7 @@ class SuggestAdapter { }); } - getSuggestionDetails(resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise { + resolveCompletionItem(resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise { if (typeof this._provider.resolveCompletionItem !== 'function') { return TPromise.as(suggestion); } @@ -805,12 +805,12 @@ export class ExtHostLanguageFeatures { return this._createDisposable(handle); } - $suggest(handle: number, resource: URI, position: IPosition): TPromise { - return this._withAdapter(handle, SuggestAdapter, adapter => adapter.suggest(resource, position)); + $provideCompletionItems(handle: number, resource: URI, position: IPosition): TPromise { + return this._withAdapter(handle, SuggestAdapter, adapter => adapter.provideCompletionItems(resource, position)); } - $getSuggestionDetails(handle: number, resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise { - return this._withAdapter(handle, SuggestAdapter, adapter => adapter.getSuggestionDetails(resource, position, suggestion)); + $resolveCompletionItem(handle: number, resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise { + return this._withAdapter(handle, SuggestAdapter, adapter => adapter.resolveCompletionItem(resource, position, suggestion)); } // --- parameter hints @@ -886,8 +886,8 @@ export class MainThreadLanguageFeatures { $registerHoverProvider(handle: number, selector: vscode.DocumentSelector): TPromise { this._registrations[handle] = modes.HoverProviderRegistry.register(selector, { - provideHover: (model:IReadOnlyModel, position:IEditorPosition, cancellationToken:CancellationToken): Thenable => { - return wireCancellationToken(cancellationToken, this._proxy.$provideHover(handle, model.getAssociatedResource(), position)); + provideHover: (model:IReadOnlyModel, position:IEditorPosition, token:CancellationToken): Thenable => { + return wireCancellationToken(token, this._proxy.$provideHover(handle, model.getAssociatedResource(), position)); } }); return undefined; @@ -989,11 +989,11 @@ export class MainThreadLanguageFeatures { this._registrations[handle] = modes.SuggestRegistry.register(selector, { triggerCharacters: triggerCharacters, shouldAutotriggerSuggest: true, - provideCompletionItems: (model:IReadOnlyModel, position:IEditorPosition, cancellationToken:CancellationToken): Thenable => { - return wireCancellationToken(cancellationToken, this._proxy.$suggest(handle, model.getAssociatedResource(), position)); + provideCompletionItems: (model:IReadOnlyModel, position:IEditorPosition, token:CancellationToken): Thenable => { + return wireCancellationToken(token, this._proxy.$provideCompletionItems(handle, model.getAssociatedResource(), position)); }, - getSuggestionDetails: (resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise => { - return this._proxy.$getSuggestionDetails(handle, resource, position, suggestion); + resolveCompletionItem: (model:IReadOnlyModel, position:IEditorPosition, suggestion: modes.ISuggestion, token: CancellationToken): Thenable => { + return wireCancellationToken(token, this._proxy.$resolveCompletionItem(handle, model.getAssociatedResource(), position, suggestion)); } }); return undefined; @@ -1006,8 +1006,8 @@ export class MainThreadLanguageFeatures { signatureHelpTriggerCharacters: triggerCharacter, - provideSignatureHelp: (model:IReadOnlyModel, position:IEditorPosition, cancellationToken:CancellationToken): Thenable => { - return wireCancellationToken(cancellationToken, this._proxy.$provideSignatureHelp(handle, model.getAssociatedResource(), position)); + provideSignatureHelp: (model:IReadOnlyModel, position:IEditorPosition, token:CancellationToken): Thenable => { + return wireCancellationToken(token, this._proxy.$provideSignatureHelp(handle, model.getAssociatedResource(), position)); } });