import type { LanguageContext } from '@volar/language-core'; import type * as vscode from 'vscode-languageserver-protocol'; import type { TextDocument } from 'vscode-languageserver-textdocument'; import type { DocumentProvider } from './documents'; export type * from 'vscode-languageserver-protocol'; export interface ServiceEnvironment { workspaceFolder: string; typescript?: { uriToFileName(uri: string): string; fileNameToUri(fileName: string): string; }; locale?: string; clientCapabilities?: vscode.ClientCapabilities; fs?: FileSystem; console?: Console; getConfiguration?(section: string, scopeUri?: string): Promise; onDidChangeConfiguration?(cb: () => void): vscode.Disposable; onDidChangeWatchedFiles?(cb: (params: vscode.DidChangeWatchedFilesParams) => void): vscode.Disposable; } export interface Console { error(message: string): void; info(message: string): void; log(message: string): void; warn(message: string): void; } export interface FileSystem { stat(uri: string): Result; readDirectory(uri: string): Result<[string, FileType][]>; readFile(uri: string, encoding?: string): Result; } export interface FileStat { type: FileType; ctime: number; mtime: number; size: number; } export declare enum FileType { Unknown = 0, File = 1, Directory = 2, SymbolicLink = 64 } export interface ServiceCommand { create(...args: T): vscode.Command | undefined; is(value: vscode.Command): boolean; } export interface ServiceContext { language: LanguageContext; env: ServiceEnvironment; inject(key: K, ...args: Provide[K] extends (...args: any) => any ? Parameters : never): ReturnType any ? Provide[K] : never>; commands: { showReferences: ServiceCommand<[uri: string, position: vscode.Position, locations: vscode.Location[]]>; rename: ServiceCommand<[uri: string, position: vscode.Position]>; setSelection: ServiceCommand<[position: vscode.Position]>; }; documents: DocumentProvider; services: [ServicePlugin, ServicePluginInstance][]; disabledVirtualFileUris: Set; disabledServicePlugins: WeakSet; } export type Result = T | Thenable; export type NullableResult = Result; export type SemanticToken = [number, number, number, number, number]; export interface ServicePlugin { name?: string; triggerCharacters?: string[]; signatureHelpTriggerCharacters?: string[]; signatureHelpRetriggerCharacters?: string[]; autoFormatTriggerCharacters?: string[]; create(context: ServiceContext): ServicePluginInstance; } export interface ServicePluginInstance

{ provide?: P; isAdditionalCompletion?: boolean; provideHover?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideDocumentSymbols?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideDocumentHighlights?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideLinkedEditingRanges?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideDefinition?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideTypeDefinition?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideImplementation?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideCodeLenses?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideCodeActions?(document: TextDocument, range: vscode.Range, context: vscode.CodeActionContext, token: vscode.CancellationToken): NullableResult; provideDocumentFormattingEdits?(document: TextDocument, range: vscode.Range, options: vscode.FormattingOptions, token: vscode.CancellationToken): NullableResult; provideOnTypeFormattingEdits?(document: TextDocument, position: vscode.Position, key: string, options: vscode.FormattingOptions, token: vscode.CancellationToken): NullableResult; provideDocumentLinks?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideCompletionItems?(document: TextDocument, position: vscode.Position, context: vscode.CompletionContext, token: vscode.CancellationToken): NullableResult; provideDocumentColors?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideColorPresentations?(document: TextDocument, color: vscode.Color, range: vscode.Range, token: vscode.CancellationToken): NullableResult; provideFoldingRanges?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideSignatureHelp?(document: TextDocument, position: vscode.Position, context: vscode.SignatureHelpContext, token: vscode.CancellationToken): NullableResult; provideRenameRange?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideRenameEdits?(document: TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): NullableResult; provideReferences?(document: TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken): NullableResult; provideSelectionRanges?(document: TextDocument, positions: vscode.Position[], token: vscode.CancellationToken): NullableResult; provideInlayHints?(document: TextDocument, range: vscode.Range, token: vscode.CancellationToken): NullableResult; provideCallHierarchyItems?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableResult; provideCallHierarchyIncomingCalls?(item: vscode.CallHierarchyItem, token: vscode.CancellationToken): Result; provideCallHierarchyOutgoingCalls?(item: vscode.CallHierarchyItem, token: vscode.CancellationToken): Result; provideDocumentSemanticTokens?(document: TextDocument, range: vscode.Range, legend: vscode.SemanticTokensLegend, token: vscode.CancellationToken): NullableResult; provideWorkspaceSymbols?(query: string, token: vscode.CancellationToken): NullableResult; provideDiagnostics?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideSemanticDiagnostics?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideDiagnosticMarkupContent?(diagnostic: vscode.Diagnostic, token: vscode.CancellationToken): NullableResult; provideFileReferences?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideReferencesCodeLensRanges?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideAutoInsertionEdit?(document: TextDocument, position: vscode.Position, lastChange: { range: vscode.Range; text: string; }, token: vscode.CancellationToken): NullableResult; provideFileRenameEdits?(oldUri: string, newUri: string, token: vscode.CancellationToken): NullableResult; provideFormattingIndentSensitiveLines?(document: TextDocument, token: vscode.CancellationToken): NullableResult; provideDocumentDropEdits?(document: TextDocument, position: vscode.Position, dataTransfer: Map, token: vscode.CancellationToken): NullableResult; resolveCodeLens?(codeLens: vscode.CodeLens, token: vscode.CancellationToken): Result; resolveCodeAction?(codeAction: vscode.CodeAction, token: vscode.CancellationToken): Result; resolveCompletionItem?(item: vscode.CompletionItem, token: vscode.CancellationToken): Result; resolveDocumentLink?(link: vscode.DocumentLink, token: vscode.CancellationToken): Result; resolveInlayHint?(inlayHint: vscode.InlayHint, token: vscode.CancellationToken): Result; transformCompletionItem?(item: vscode.CompletionItem): vscode.CompletionItem | undefined; transformCodeAction?(item: vscode.CodeAction): vscode.CodeAction | undefined; dispose?(): void; } export interface DocumentDropEdit { insertText: string; insertTextFormat: vscode.InsertTextFormat; additionalEdit?: vscode.WorkspaceEdit; createDataTransferFile?: (vscode.CreateFile & { contentsMimeType: string; })[]; } export interface DataTransferItem { value: any; asString(): Thenable; asFile(): DataTransferFile | undefined; } export interface DataTransferFile { name: string; uri?: string; data(): Thenable; }