/** * Lightweight LSP client — spawns a language server via stdio and * speaks JSON-RPC 2.0 to it (subset of the LSP spec). * * This is intentionally minimal: we support `initialize`, `shutdown`, * `textDocument/didOpen`, and the handful of request methods our tools need. * We do NOT implement the full LSP spec, workspace folders, semantic tokens, etc. */ import type { ServerEntry } from './server-registry'; export interface Diagnostic { range: { start: { line: number; character: number; }; end: { line: number; character: number; }; }; severity?: number; code?: number | string; source?: string; message: string; } export interface Location { uri: string; range: { start: { line: number; character: number; }; end: { line: number; character: number; }; }; } export interface Hover { contents: string | { kind: string; value: string; } | Array; } export interface CodeAction { title: string; kind?: string; diagnostics?: Diagnostic[]; isPreferred?: boolean; } export interface WorkspaceEdit { changes?: Record>; } export declare class LspClient { private readonly entry; private readonly rootUri; private readonly logger; private proc; private nextId; private pending; private initialized; constructor(entry: ServerEntry, rootUri: string, logger: { log: (...args: unknown[]) => void; }); /** Spawn the server, send initialize, wait for response. */ start(): Promise; /** Gracefully shut down the server. */ stop(): Promise; get alive(): boolean; didOpen(uri: string, languageId: string, text: string): Promise; getDiagnostics(uri: string): Promise; getDefinition(uri: string, line: number, character: number): Promise; getReferences(uri: string, line: number, character: number): Promise; getHover(uri: string, line: number, character: number): Promise; getCodeActions(uri: string, range: Location['range'], diagnostics: Diagnostic[]): Promise; rename(uri: string, line: number, character: number, newName: string): Promise; private notificationHandlers; private request; private notify; private send; private setupReader; private handleMessage; private rejectAll; } //# sourceMappingURL=client.d.ts.map