diff --git a/src/_.contribution.ts b/src/_.contribution.ts index f3b59a6d..df4d0069 100644 --- a/src/_.contribution.ts +++ b/src/_.contribution.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { languages, Emitter, IEvent, editor, Position } from './fillers/monaco-editor-core'; +import { languages, Emitter, IEvent, editor, Position, IRange } from './fillers/monaco-editor-core'; import { Suggestions } from 'dt-sql-parser'; interface ILang extends languages.ILanguageExtensionPoint { @@ -146,12 +146,21 @@ export interface DiagnosticsOptions { } /** - * A completion item, it will be convert to monaco.languages.CompletionItem. + * A completion item. + * ICompletionItem is pretty much the same as {@link languages.CompletionItem}, + * with the only difference being that the range and insertText is optional. */ -export interface ICompletionItem extends Partial { - label: string | languages.CompletionItemLabel; - kind: languages.CompletionItemKind; - detail: string; +export interface ICompletionItem extends Omit { + range?: IRange | languages.CompletionItemRanges; + insertText?: string; +} + +/** + * ICompletionList is pretty much the same as {@link languages.CompletionList}, + * with the only difference being that the type of suggestion is {@link ICompletionItem} + */ +export interface ICompletionList extends Omit { + suggestions: ICompletionItem[]; } /** @@ -166,7 +175,7 @@ export type CompletionService = ( position: Position, completionContext: languages.CompletionContext, suggestions: Suggestions | null -) => Promise; +) => Promise; export interface LanguageServiceDefaults { readonly languageId: string; diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index ebc99bc0..a736d6ad 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -170,20 +170,25 @@ export class CompletionAdapter implements languages.Completio position.lineNumber, wordInfo.endColumn ); - const unwrappedCompletions = Array.isArray(completions) ? completions : completions.completionItems - const completionItems: languages.CompletionItem[] = unwrappedCompletions.map((item) => ({ - ...item, - insertText: - item.insertText ?? - (typeof item.label === 'string' ? item.label : item.label.label), - range: item.range ?? wordRange, - insertTextRules: - item.insertTextRules ?? - languages.CompletionItemInsertTextRule.InsertAsSnippet - })); + const unwrappedCompletions = Array.isArray(completions) + ? completions + : completions.suggestions; + const completionItems: languages.CompletionItem[] = unwrappedCompletions.map( + (item) => ({ + ...item, + insertText: + item.insertText ?? + (typeof item.label === 'string' ? item.label : item.label.label), + range: item.range ?? wordRange, + insertTextRules: + item.insertTextRules ?? + languages.CompletionItemInsertTextRule.InsertAsSnippet + }) + ); return { suggestions: completionItems, + dispose: Array.isArray(completions) ? undefined : completions.dispose, incomplete: Array.isArray(completions) ? undefined : completions.incomplete }; });