Expose the inline completions provider in the monaco editor.

This commit is contained in:
Henning Dieterichs 2021-05-31 16:28:44 +02:00
parent e9579534bb
commit 67a8548712
No known key found for this signature in database
GPG key ID: 771381EFFDB9EC06
4 changed files with 54 additions and 12 deletions

View file

@ -686,7 +686,7 @@ export interface CompletionItemProvider {
}
/**
* How an {@link InlineCompletionItemProvider inline completion provider} was triggered.
* How an {@link InlineCompletionsProvider inline completion provider} was triggered.
*/
export enum InlineCompletionTriggerKind {
/**
@ -709,9 +709,6 @@ export interface InlineCompletionContext {
readonly triggerKind: InlineCompletionTriggerKind;
}
/**
* @internal
*/
export interface InlineCompletion {
/**
* The text to insert.
@ -729,20 +726,21 @@ export interface InlineCompletion {
readonly command?: Command;
}
/**
* @internal
*/
export interface InlineCompletions<TItem extends InlineCompletion = InlineCompletion> {
readonly items: readonly TItem[];
}
/**
* @internal
*/
export interface InlineCompletionsProvider<T extends InlineCompletions = InlineCompletions> {
provideInlineCompletions(model: model.ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): ProviderResult<T>;
/**
* Will be called when an item is shown.
*/
handleItemDidShow?(completions: T, item: T['items'][number]): void;
/**
* Will be called when a completions list is no longer in use and can be garbage-collected.
*/
freeInlineCompletions(completions: T): void;
}

View file

@ -361,7 +361,7 @@ export enum InlayHintKind {
}
/**
* How an {@link InlineCompletionItemProvider inline completion provider} was triggered.
* How an {@link InlineCompletionsProvider inline completion provider} was triggered.
*/
export enum InlineCompletionTriggerKind {
/**

View file

@ -547,6 +547,13 @@ export function registerDocumentRangeSemanticTokensProvider(languageId: string,
return modes.DocumentRangeSemanticTokensProviderRegistry.register(languageId, provider);
}
/**
* Register an inline completions provider.
*/
export function registerInlineCompletionsProvider(languageId: string, provider: modes.InlineCompletionsProvider): IDisposable {
return modes.InlineCompletionsProviderRegistry.register(languageId, provider);
}
/**
* Contains additional diagnostic information about the context in which
* a [code action](#CodeActionProvider.provideCodeActions) is run.
@ -613,6 +620,7 @@ export function createMonacoLanguagesAPI(): typeof monaco.languages {
registerSelectionRangeProvider: <any>registerSelectionRangeProvider,
registerDocumentSemanticTokensProvider: <any>registerDocumentSemanticTokensProvider,
registerDocumentRangeSemanticTokensProvider: <any>registerDocumentRangeSemanticTokensProvider,
registerInlineCompletionsProvider: <any>registerInlineCompletionsProvider,
// enums
DocumentHighlightKind: standaloneEnums.DocumentHighlightKind,

38
src/vs/monaco.d.ts vendored
View file

@ -5330,6 +5330,11 @@ declare namespace monaco.languages {
*/
export function registerDocumentRangeSemanticTokensProvider(languageId: string, provider: DocumentRangeSemanticTokensProvider): IDisposable;
/**
* Register an inline completions provider.
*/
export function registerInlineCompletionsProvider(languageId: string, provider: InlineCompletionsProvider): IDisposable;
/**
* Contains additional diagnostic information about the context in which
* a [code action](#CodeActionProvider.provideCodeActions) is run.
@ -5837,7 +5842,7 @@ declare namespace monaco.languages {
}
/**
* How an {@link InlineCompletionItemProvider inline completion provider} was triggered.
* How an {@link InlineCompletionsProvider inline completion provider} was triggered.
*/
export enum InlineCompletionTriggerKind {
/**
@ -5859,6 +5864,37 @@ declare namespace monaco.languages {
readonly triggerKind: InlineCompletionTriggerKind;
}
export interface InlineCompletion {
/**
* The text to insert.
* If the text contains a line break, the range must end at the end of a line.
* If existing text should be replaced, the existing text must be a prefix of the text to insert.
*/
readonly text: string;
/**
* The range to replace.
* Must begin and end on the same line.
*/
readonly range?: IRange;
readonly command?: Command;
}
export interface InlineCompletions<TItem extends InlineCompletion = InlineCompletion> {
readonly items: readonly TItem[];
}
export interface InlineCompletionsProvider<T extends InlineCompletions = InlineCompletions> {
provideInlineCompletions(model: editor.ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): ProviderResult<T>;
/**
* Will be called when an item is shown.
*/
handleItemDidShow?(completions: T, item: T['items'][number]): void;
/**
* Will be called when a completions list is no longer in use and can be garbage-collected.
*/
freeInlineCompletions(completions: T): void;
}
export interface CodeAction {
title: string;
command?: Command;