import { CompletionContext, FileChangeType, LinkedEditingRanges, SemanticTokens, SignatureHelpContext, TextDocumentContentChangeEvent } from 'vscode-languageserver'; import { CodeAction, CodeActionContext, Color, ColorInformation, ColorPresentation, CompletionItem, CompletionList, DefinitionLink, Diagnostic, FormattingOptions, Hover, Location, Position, Range, ReferenceContext, SymbolInformation, TextDocumentIdentifier, TextEdit, WorkspaceEdit, SelectionRange, SignatureHelp, FoldingRange, } from 'vscode-languageserver-types'; import { Document } from '../core/documents'; export type Resolvable = T | Promise; export interface AppCompletionItem extends CompletionItem { data?: T; } export interface AppCompletionList extends CompletionList { items: Array>; } export interface DiagnosticsProvider { getDiagnostics(document: Document): Resolvable; } export interface HoverProvider { doHover(document: Document, position: Position): Resolvable; } export interface FoldingRangeProvider { getFoldingRanges(document: Document): Resolvable; } export interface CompletionsProvider { getCompletions(document: Document, position: Position, completionContext?: CompletionContext): Resolvable | null>; resolveCompletion?(document: Document, completionItem: AppCompletionItem): Resolvable>; } export interface FormattingProvider { formatDocument(document: Document, options: FormattingOptions): Resolvable; } export interface TagCompleteProvider { doTagComplete(document: Document, position: Position): Resolvable; } export interface DocumentColorsProvider { getDocumentColors(document: Document): Resolvable; } export interface ColorPresentationsProvider { getColorPresentations(document: Document, range: Range, color: Color): Resolvable; } export interface DocumentSymbolsProvider { getDocumentSymbols(document: Document): Resolvable; } export interface DefinitionsProvider { getDefinitions(document: Document, position: Position): Resolvable; } export interface BackwardsCompatibleDefinitionsProvider { getDefinitions(document: Document, position: Position): Resolvable; } export interface CodeActionsProvider { getCodeActions(document: Document, range: Range, context: CodeActionContext): Resolvable; executeCommand?(document: Document, command: string, args?: any[]): Resolvable; } export interface FileRename { oldUri: string; newUri: string; } export interface UpdateImportsProvider { updateImports(fileRename: FileRename): Resolvable; } export interface RenameProvider { rename(document: Document, position: Position, newName: string): Resolvable; prepareRename(document: Document, position: Position): Resolvable; } export interface FindReferencesProvider { findReferences(document: Document, position: Position, context: ReferenceContext): Promise; } export interface SignatureHelpProvider { getSignatureHelp(document: Document, position: Position, context: SignatureHelpContext | undefined): Resolvable; } export interface SelectionRangeProvider { getSelectionRange(document: Document, position: Position): Resolvable; } export interface SemanticTokensProvider { getSemanticTokens(textDocument: Document, range?: Range): Resolvable; } export interface LinkedEditingRangesProvider { getLinkedEditingRanges(document: Document, position: Position): Resolvable; } export interface OnWatchFileChangesPara { fileName: string; changeType: FileChangeType; } export interface OnWatchFileChanges { onWatchFileChanges(onWatchFileChangesParas: OnWatchFileChangesPara[]): void; } export interface UpdateTsOrJsFile { updateTsOrJsFile(fileName: string, changes: TextDocumentContentChangeEvent[]): void; } type ProviderBase = DiagnosticsProvider & HoverProvider & CompletionsProvider & FormattingProvider & FoldingRangeProvider & TagCompleteProvider & DocumentColorsProvider & ColorPresentationsProvider & DocumentSymbolsProvider & UpdateImportsProvider & CodeActionsProvider & FindReferencesProvider & RenameProvider & SignatureHelpProvider & SemanticTokensProvider & LinkedEditingRangesProvider; export type LSProvider = ProviderBase & BackwardsCompatibleDefinitionsProvider; export interface LSPProviderConfig { /** * Whether or not completion lists that are marked as imcomplete * should be filtered server side. */ filterIncompleteCompletions: boolean; /** * Whether or not getDefinitions supports the LocationLink interface. */ definitionLinkSupport: boolean; } interface NamedPlugin { pluginName: string; } export type Plugin = Partial;