import { Language, LanguageContext } from '@volar/language-core'; import type * as vscode from 'vscode-languageserver-protocol'; import type { TextDocument } from 'vscode-languageserver-textdocument'; import { URI } from 'vscode-uri'; import { DocumentsAndSourceMaps } from './documents'; export type * from 'vscode-languageserver-protocol'; export interface SharedModules { typescript?: typeof import('typescript/lib/tsserverlibrary'); } export interface ServiceEnvironment { locale?: string; workspaceUri: URI; rootUri: URI; clientCapabilities?: vscode.ClientCapabilities; getConfiguration?(section: string, scopeUri?: string): Promise; onDidChangeConfiguration?(cb: () => void): vscode.Disposable; onDidChangeWatchedFiles?(cb: (params: vscode.DidChangeWatchedFilesParams) => void): vscode.Disposable; uriToFileName(uri: string): string; fileNameToUri(fileName: string): string; fs?: FileSystem; console?: Console; } 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 } interface Command { create: T; is(value: vscode.Command): boolean; } export interface ServiceContext extends LanguageContext { env: ServiceEnvironment; inject(key: K, ...args: Provide[K] extends (...args: any) => any ? Parameters : never): ReturnType any ? Provide[K] : never>; getTextDocument(uri: string): TextDocument | undefined; commands: { showReferences: Command<(uri: string, position: vscode.Position, locations: vscode.Location[]) => vscode.Command | undefined>; rename: Command<(uri: string, position: vscode.Position) => vscode.Command | undefined>; setSelection: Command<(position: vscode.Position) => vscode.Command | undefined>; }; documents: DocumentsAndSourceMaps; rules: { [id: string]: Rule; }; services: { [id: string]: ReturnType; }; ruleFixes?: { [uri: string]: { [ruleId: string]: { [ruleFixId: number]: [vscode.Diagnostic, RuleFix[]]; }; }; }; } export type Result = T | Thenable; export type NullableResult = Result; export type SemanticToken = [number, number, number, number, number]; type ServiceProvide

= P extends undefined ? { provide?: undefined; } : { provide: P; }; export type Service

= { (context: ServiceContext | undefined, modules: SharedModules | undefined): { isAdditionalCompletion?: boolean; triggerCharacters?: string[]; signatureHelpTriggerCharacters?: string[]; signatureHelpRetriggerCharacters?: string[]; autoFormatTriggerCharacters?: string[]; 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, 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, context: AutoInsertionContext, token: vscode.CancellationToken): NullableResult; provideFileRenameEdits?(oldUri: string, newUri: string, token: vscode.CancellationToken): NullableResult; provideFormattingIndentSensitiveLines?(document: TextDocument, 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; resolveReferencesCodeLensLocations?(document: TextDocument, range: vscode.Range, references: vscode.Location[], token: vscode.CancellationToken): Result; transformCompletionItem?(item: vscode.CompletionItem): vscode.CompletionItem | undefined; transformCodeAction?(item: vscode.CodeAction): vscode.CodeAction | undefined; dispose?(): void; } & ServiceProvide

; }; export interface AutoInsertionContext { lastChange: { range: vscode.Range; rangeOffset: number; rangeLength: number; text: string; }; } export declare enum RuleType { Format = 0, Syntax = 1, Semantic = 2 } export interface Rule { type?: RuleType; run(document: TextDocument, ctx: RuleContext): void; } export interface RuleContext { env: ServiceEnvironment; inject(key: K, ...args: Provide[K] extends (...args: any) => any ? Parameters : never): ReturnType any ? Provide[K] : never>; report(error: vscode.Diagnostic, ...fixes: RuleFix[]): void; } export interface RuleFix { /** * Code action kind, like `quickfix` or `refactor`. * * See https://code.visualstudio.com/api/references/vscode-api#CodeActionKind */ kinds?: vscode.CodeActionKind[]; /** * Title of the code action. */ title?: string; /** * Edit to apply to the document. */ getEdits?(diagnostic: vscode.Diagnostic): NullableResult; /** * Cross-file edits to apply to the workspace. */ getWorkspaceEdit?(diagnostic: vscode.Diagnostic): NullableResult; } export interface Config { languages?: { [id: string]: Language; }; services?: { [id: string]: Service; }; rules?: { [id: string]: Rule; }; } //# sourceMappingURL=types.d.ts.map