import type { Language, SourceScript, VirtualCode } from '@volar/language-core'; import type * as ts from 'typescript'; import type * as vscode from 'vscode-languageserver-protocol'; import type { TextDocument } from 'vscode-languageserver-textdocument'; import type { URI } from 'vscode-uri'; import type { LanguageService } from './languageService'; import type { UriMap } from './utils/uriMap'; export type * from 'vscode-languageserver-protocol'; export interface LanguageServiceEnvironment { workspaceFolders: URI[]; locale?: string; clientCapabilities?: vscode.ClientCapabilities; fs?: FileSystem; console?: Console; getConfiguration?(section: string, scopeUri?: string): Promise; onDidChangeConfiguration?(cb: (params: vscode.DidChangeConfigurationParams) => void): vscode.Disposable; onDidChangeWatchedFiles?(cb: (params: vscode.DidChangeWatchedFilesParams) => void): vscode.Disposable; } export interface FileSystem { stat(uri: URI): ProviderResult; readDirectory(uri: URI): ProviderResult<[string, FileType][]>; readFile(uri: URI, encoding?: string): ProviderResult; } 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 LanguageServiceCommand { create(...args: T): vscode.Command | undefined; is(value: vscode.Command): boolean; } export interface ProjectContext { } export interface LanguageServiceContext { language: Language; project: ProjectContext; getLanguageService(): LanguageService; env: LanguageServiceEnvironment; inject(key: K, ...args: Provide[K] extends (...args: any) => any ? Parameters : never): ReturnType any ? Provide[K] : never> | undefined; commands: { showReferences: LanguageServiceCommand<[uri: string, position: vscode.Position, locations: vscode.Location[]]>; rename: LanguageServiceCommand<[uri: string, position: vscode.Position]>; setSelection: LanguageServiceCommand<[position: vscode.Position]>; }; documents: { get(uri: URI, languageId: string, snapshot: ts.IScriptSnapshot): TextDocument; }; plugins: [LanguageServicePlugin, LanguageServicePluginInstance][]; disabledEmbeddedDocumentUris: UriMap; disabledServicePlugins: WeakSet; decodeEmbeddedDocumentUri(maybeEmbeddedUri: URI): [ documentUri: URI, embeddedCodeId: string ] | undefined; encodeEmbeddedDocumentUri(uri: URI, embeddedCodeId: string): URI; } export type ProviderResult = T | Thenable; export type NullableProviderResult = ProviderResult; export type SemanticToken = [ line: number, character: number, length: number, tokenTypes: number, tokenModifiers: number ]; export interface LanguageServicePlugin

{ name?: string; capabilities: { executeCommandProvider?: { commands: string[]; }; selectionRangeProvider?: boolean; foldingRangeProvider?: boolean; linkedEditingRangeProvider?: boolean; colorProvider?: boolean; documentSymbolProvider?: boolean; documentFormattingProvider?: boolean; referencesProvider?: boolean; implementationProvider?: boolean; declarationProvider?: boolean; definitionProvider?: boolean; typeDefinitionProvider?: boolean; callHierarchyProvider?: boolean; typeHierarchyProvider?: boolean; hoverProvider?: boolean; documentHighlightProvider?: boolean; monikerProvider?: boolean; inlineValueProvider?: boolean; workspaceSymbolProvider?: { resolveProvider?: boolean; }; renameProvider?: { prepareProvider?: boolean; }; signatureHelpProvider?: { triggerCharacters?: string[]; retriggerCharacters?: string[]; }; completionProvider?: { resolveProvider?: boolean; triggerCharacters?: string[]; }; autoInsertionProvider?: { triggerCharacters: string[]; configurationSections?: string[]; }; documentOnTypeFormattingProvider?: { triggerCharacters: string[]; }; documentLinkProvider?: { resolveProvider?: boolean; }; codeLensProvider?: { resolveProvider?: boolean; }; inlayHintProvider?: { resolveProvider?: boolean; }; semanticTokensProvider?: { legend: vscode.SemanticTokensLegend; }; codeActionProvider?: { codeActionKinds?: string[]; resolveProvider?: boolean; }; diagnosticProvider?: { interFileDependencies: boolean; workspaceDiagnostics: boolean; }; fileReferencesProvider?: boolean; fileRenameEditsProvider?: boolean; documentDropEditsProvider?: boolean; }; create(context: LanguageServiceContext): LanguageServicePluginInstance

; } export interface EmbeddedCodeFormattingOptions { level: number; initialIndentLevel: number; } export interface LanguageServicePluginInstance

{ provide?: P; isAdditionalCompletion?: boolean; executeCommand?(command: string, args: any[], token: vscode.CancellationToken): ProviderResult; provideHover?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideDocumentSymbols?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideDocumentHighlights?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideLinkedEditingRanges?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideDeclaration?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideDefinition?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideTypeDefinition?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideImplementation?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideCodeLenses?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideCodeActions?(document: TextDocument, range: vscode.Range, context: vscode.CodeActionContext, token: vscode.CancellationToken): NullableProviderResult; provideDocumentFormattingEdits?(document: TextDocument, range: vscode.Range, options: vscode.FormattingOptions, embeddedCodeContext: EmbeddedCodeFormattingOptions | undefined, token: vscode.CancellationToken): NullableProviderResult; provideOnTypeFormattingEdits?(document: TextDocument, position: vscode.Position, key: string, options: vscode.FormattingOptions, embeddedCodeContext: EmbeddedCodeFormattingOptions | undefined, token: vscode.CancellationToken): NullableProviderResult; provideDocumentLinks?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideCompletionItems?(document: TextDocument, position: vscode.Position, context: vscode.CompletionContext, token: vscode.CancellationToken): NullableProviderResult; provideDocumentColors?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideColorPresentations?(document: TextDocument, color: vscode.Color, range: vscode.Range, token: vscode.CancellationToken): NullableProviderResult; provideFoldingRanges?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideSignatureHelp?(document: TextDocument, position: vscode.Position, context: vscode.SignatureHelpContext, token: vscode.CancellationToken): NullableProviderResult; provideRenameRange?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideRenameEdits?(document: TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): NullableProviderResult; provideReferences?(document: TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken): NullableProviderResult; provideSelectionRanges?(document: TextDocument, positions: vscode.Position[], token: vscode.CancellationToken): NullableProviderResult; provideInlayHints?(document: TextDocument, range: vscode.Range, token: vscode.CancellationToken): NullableProviderResult; provideInlineValues?(document: TextDocument, range: vscode.Range, context: vscode.InlineValueContext, token: vscode.CancellationToken): NullableProviderResult; provideCallHierarchyItems?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideCallHierarchyIncomingCalls?(item: vscode.CallHierarchyItem, token: vscode.CancellationToken): ProviderResult; provideCallHierarchyOutgoingCalls?(item: vscode.CallHierarchyItem, token: vscode.CancellationToken): ProviderResult; provideTypeHierarchyItems?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideTypeHierarchySupertypes?(item: vscode.TypeHierarchyItem, token: vscode.CancellationToken): ProviderResult; provideTypeHierarchySubtypes?(item: vscode.TypeHierarchyItem, token: vscode.CancellationToken): ProviderResult; provideDocumentSemanticTokens?(document: TextDocument, range: vscode.Range, legend: vscode.SemanticTokensLegend, token: vscode.CancellationToken): NullableProviderResult; provideWorkspaceSymbols?(query: string, token: vscode.CancellationToken): NullableProviderResult; provideDiagnostics?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideWorkspaceDiagnostics?(token: vscode.CancellationToken): NullableProviderResult; provideMoniker?(document: TextDocument, position: vscode.Position, token: vscode.CancellationToken): NullableProviderResult; provideFileReferences?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideReferencesCodeLensRanges?(document: TextDocument, token: vscode.CancellationToken): NullableProviderResult; provideAutoInsertSnippet?(document: TextDocument, position: vscode.Position, lastChange: { rangeOffset: number; rangeLength: number; text: string; }, token: vscode.CancellationToken): NullableProviderResult; provideFileRenameEdits?(oldUri: URI, newUri: URI, token: vscode.CancellationToken): NullableProviderResult; provideDocumentDropEdits?(document: TextDocument, position: vscode.Position, dataTransfer: Map, token: vscode.CancellationToken): NullableProviderResult; resolveCodeLens?(codeLens: vscode.CodeLens, token: vscode.CancellationToken): ProviderResult; resolveCodeAction?(codeAction: vscode.CodeAction, token: vscode.CancellationToken): ProviderResult; resolveCompletionItem?(item: vscode.CompletionItem, token: vscode.CancellationToken): ProviderResult; resolveDocumentLink?(link: vscode.DocumentLink, token: vscode.CancellationToken): ProviderResult; resolveInlayHint?(inlayHint: vscode.InlayHint, token: vscode.CancellationToken): ProviderResult; resolveWorkspaceSymbol?(symbol: vscode.WorkspaceSymbol, token: vscode.CancellationToken): ProviderResult; resolveEmbeddedCodeFormattingOptions?(sourceScript: SourceScript, embeddedCode: VirtualCode, options: EmbeddedCodeFormattingOptions, token: vscode.CancellationToken): NullableProviderResult; 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; }