From 2f34618b87a85cc7524e5dc75cc92a4466d0c1c5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 20 Sep 2017 19:13:03 -0700 Subject: [PATCH] Adding completion item kind enum --- src/vs/editor/common/modes.ts | 10 ++++++++- .../editor/contrib/suggest/browser/suggest.ts | 4 ++-- .../contrib/suggest/browser/suggestModel.ts | 4 ++-- .../suggest/test/browser/suggestModel.test.ts | 6 ++--- .../standalone/browser/standaloneLanguages.ts | 6 +++-- src/vs/monaco.d.ts | 10 ++++++++- src/vs/vscode.d.ts | 16 +++++++++++++- src/vs/workbench/api/node/extHost.api.impl.ts | 1 + .../api/node/extHostLanguageFeatures.ts | 2 +- .../api/node/extHostTypeConverters.ts | 22 +++++++++++++++++++ src/vs/workbench/api/node/extHostTypes.ts | 10 +++++++++ 11 files changed, 78 insertions(+), 13 deletions(-) diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index ca04a29fe5d..9184a639da4 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -247,11 +247,19 @@ export interface ISuggestResult { dispose?(): void; } +/** + * How a suggest provider was triggered. + */ +export enum SuggestTriggerKind { + Invoke = 0, + TriggerCharacter = 1 +} + /** * @internal */ export interface SuggestContext { - trigger: 'auto' | 'manual'; + triggerKind: SuggestTriggerKind; triggerCharacter?: string; } diff --git a/src/vs/editor/contrib/suggest/browser/suggest.ts b/src/vs/editor/contrib/suggest/browser/suggest.ts index de99bc8d1e5..aea81522ddd 100644 --- a/src/vs/editor/contrib/suggest/browser/suggest.ts +++ b/src/vs/editor/contrib/suggest/browser/suggest.ts @@ -12,7 +12,7 @@ import { onUnexpectedExternalError } from 'vs/base/common/errors'; import { TPromise } from 'vs/base/common/winjs.base'; import { IModel, IEditorContribution, ICommonCodeEditor } from 'vs/editor/common/editorCommon'; import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions'; -import { ISuggestResult, ISuggestSupport, ISuggestion, SuggestRegistry, SuggestContext } from 'vs/editor/common/modes'; +import { ISuggestResult, ISuggestSupport, ISuggestion, SuggestRegistry, SuggestContext, SuggestTriggerKind } from 'vs/editor/common/modes'; import { Position, IPosition } from 'vs/editor/common/core/position'; import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; @@ -57,7 +57,7 @@ export function provideSuggestionItems(model: IModel, position: Position, snippe supports.unshift([_snippetSuggestSupport]); } - const suggestConext = context || { trigger: 'auto' }; + const suggestConext = context || { triggerKind: SuggestTriggerKind.Invoke }; // add suggestions from contributed providers - providers are ordered in groups of // equal score and once a group produces a result the process stops diff --git a/src/vs/editor/contrib/suggest/browser/suggestModel.ts b/src/vs/editor/contrib/suggest/browser/suggestModel.ts index 15b52091b05..e71781a9f33 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestModel.ts @@ -11,7 +11,7 @@ import Event, { Emitter } from 'vs/base/common/event'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { TPromise } from 'vs/base/common/winjs.base'; import { ICommonCodeEditor, IModel, IWordAtPosition } from 'vs/editor/common/editorCommon'; -import { ISuggestSupport, SuggestRegistry, StandardTokenType } from 'vs/editor/common/modes'; +import { ISuggestSupport, SuggestRegistry, StandardTokenType, SuggestTriggerKind } from 'vs/editor/common/modes'; import { Position } from 'vs/editor/common/core/position'; import { provideSuggestionItems, getSuggestionComparator, ISuggestionItem } from './suggest'; import { CompletionModel } from './completionModel'; @@ -358,7 +358,7 @@ export class SuggestModel implements IDisposable { onlyFrom, { triggerCharacter: context.triggerCharacter, - trigger: context.auto ? 'auto' : 'manual' + triggerKind: context.triggerCharacter ? SuggestTriggerKind.TriggerCharacter : SuggestTriggerKind.Invoke } ).then(items => { diff --git a/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts b/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts index c983f204053..0964ab132cc 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts @@ -11,7 +11,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { TPromise } from 'vs/base/common/winjs.base'; import { Model } from 'vs/editor/common/model/model'; import { ICommonCodeEditor, Handler } from 'vs/editor/common/editorCommon'; -import { ISuggestSupport, ISuggestResult, SuggestRegistry } from 'vs/editor/common/modes'; +import { ISuggestSupport, ISuggestResult, SuggestRegistry, SuggestTriggerKind } from 'vs/editor/common/modes'; import { SuggestModel, LineContext } from 'vs/editor/contrib/suggest/browser/suggestModel'; import { MockCodeEditor, MockScopeLocation } from 'vs/editor/test/common/mocks/mockCodeEditor'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; @@ -458,12 +458,12 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { }); }); - test('Trigger characters is provided in suggest context', function () { + test('Trigger character is provided in suggest context', function () { let triggerCharacter = ''; disposables.push(SuggestRegistry.register({ scheme: 'test' }, { triggerCharacters: ['.'], provideCompletionItems(doc, pos, context) { - assert.equal(context.trigger, 'auto'); + assert.equal(context.triggerKind, SuggestTriggerKind.TriggerCharacter); triggerCharacter = context.triggerCharacter; return { currentWord: '', diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index a362d640897..78fe0aa3d37 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -546,7 +546,7 @@ export interface CompletionContext { /** * How the completion was triggered. */ - readonly trigger: 'auto' | 'manual'; + triggerKind: modes.SuggestTriggerKind; /** * Character that triggered the completion item provider. @@ -610,6 +610,7 @@ function convertKind(kind: CompletionItemKind): modes.SuggestionType { } return 'property'; } + class SuggestAdapter { private _provider: CompletionItemProvider; @@ -758,6 +759,7 @@ export function createMonacoLanguagesAPI(): typeof monaco.languages { DocumentHighlightKind: modes.DocumentHighlightKind, CompletionItemKind: CompletionItemKind, SymbolKind: modes.SymbolKind, - IndentAction: IndentAction + IndentAction: IndentAction, + SuggestTriggerKind: modes.SuggestTriggerKind }; } diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index d633e2bd6cb..d490e9c987e 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4237,7 +4237,7 @@ declare module monaco.languages { /** * How the completion was triggered. */ - readonly trigger: 'auto' | 'manual'; + triggerKind: SuggestTriggerKind; /** * Character that triggered the completion item provider. * @@ -4513,6 +4513,14 @@ declare module monaco.languages { provideHover(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): Hover | Thenable; } + /** + * How a suggest provider was triggered. + */ + export enum SuggestTriggerKind { + Invoke = 0, + TriggerCharacter = 1, + } + /** * Represents a parameter of a callable-signature. A parameter can * have a label and a doc-comment. diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index bf5170ac593..f54331ff7fc 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -2718,6 +2718,20 @@ declare module 'vscode' { constructor(items?: CompletionItem[], isIncomplete?: boolean); } + /** + * How a [completion provider](#CompletionItemProvider) was triggered + */ + export enum CompletionTriggerKind { + /** + * Completion was triggered normally. + */ + Invoke = 0, + /** + * Completion was triggered by a trigger character. + */ + TriggerCharacter = 1 + } + /** * Contains additional information about the context in which * [completion provider](#CompletionItemProvider.provideCompletionItems) is triggered. @@ -2726,7 +2740,7 @@ declare module 'vscode' { /** * How the completion was triggered. */ - readonly trigger: 'auto' | 'manual'; + readonly triggerKind: CompletionTriggerKind; /** * Character that triggered the completion item provider. diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 7f06becd069..eaf99b356ff 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -563,6 +563,7 @@ export function createApiFactory( CompletionItem: extHostTypes.CompletionItem, CompletionItemKind: extHostTypes.CompletionItemKind, CompletionList: extHostTypes.CompletionList, + CompletionTriggerKind: extHostTypes.CompletionTriggerKind, Diagnostic: extHostTypes.Diagnostic, DiagnosticSeverity: extHostTypes.DiagnosticSeverity, Disposable: extHostTypes.Disposable, diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 8ae31ac1f2c..9439c69b9b7 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -492,7 +492,7 @@ class SuggestAdapter { const pos = TypeConverters.toPosition(position); return asWinJsPromise(token => { - return this._provider.provideCompletionItems(doc, pos, token, context); + return this._provider.provideCompletionItems(doc, pos, token, TypeConverters.CompletionContext.from(context)); }).then(value => { const _id = this._idPool++; diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts index d8aef198fd8..22d9b4cacf5 100644 --- a/src/vs/workbench/api/node/extHostTypeConverters.ts +++ b/src/vs/workbench/api/node/extHostTypeConverters.ts @@ -307,6 +307,28 @@ export function toDocumentHighlight(occurrence: modes.DocumentHighlight): types. return new types.DocumentHighlight(toRange(occurrence.range), occurrence.kind); } +export namespace CompletionTriggerKind { + export function from(kind: modes.SuggestTriggerKind) { + switch (kind) { + case modes.SuggestTriggerKind.TriggerCharacter: + return types.CompletionTriggerKind.TriggerCharacter; + + case modes.SuggestTriggerKind.Invoke: + default: + return types.CompletionTriggerKind.Invoke; + } + } +} + +export namespace CompletionContext { + export function from(context: modes.SuggestContext): types.CompletionContext { + return { + triggerKind: CompletionTriggerKind.from(context.triggerKind), + triggerCharacter: context.triggerCharacter + }; + } +} + export const CompletionItemKind = { from(kind: types.CompletionItemKind): modes.SuggestionType { diff --git a/src/vs/workbench/api/node/extHostTypes.ts b/src/vs/workbench/api/node/extHostTypes.ts index d63e57a1506..f84c4574eb5 100644 --- a/src/vs/workbench/api/node/extHostTypes.ts +++ b/src/vs/workbench/api/node/extHostTypes.ts @@ -879,6 +879,16 @@ export class SignatureHelp { } } +export enum CompletionTriggerKind { + Invoke = 0, + TriggerCharacter = 1 +} + +export interface CompletionContext { + triggerKind: CompletionTriggerKind; + triggerCharacter: string; +} + export enum CompletionItemKind { Text = 0, Method = 1, -- GitLab