import { ProtocolError, TMessage, TNotification } from "../protocol";
export type CommonError = ProtocolError;
export interface ILanguageConfig {
    id: string;
    /** @deprecated in favor of globs, everything listed in extensions is listed in glob form as well */
    extensions: string[];
    /** something/*.json, *.js, *.ts */
    globs: string[];
    hasLanguageServer: boolean;
    languageServerIds: string[];
}
export type ListLanguagesMessage = TMessage<"language/list", Record<string, never>, {
    result: {
        languages: ILanguageConfig[];
    };
    error: CommonError;
}>;
export interface LSPResponseError {
    /**
     * A number indicating the error type that occurred.
     */
    code: number;
    /**
     * A string providing a short description of the error.
     */
    message: string;
    /**
     * A primitive or structured value that contains additional
     * information about the error. Can be omitted.
     */
    data?: unknown;
}
export type LSPRequestMessage = TMessage<"language/lspRequest", {
    languageId: string;
    serverId: string;
    message: {
        method: string;
        params?: unknown;
    };
}, {
    result: unknown;
    error: CommonError | LSPResponseError;
}>;
export type LanguageLspNotification = TNotification<"language/lspNotification", {
    languageId: string;
    serverId: string;
    message: {
        method: string;
        params?: unknown;
    };
}>;
/**
 * Used for requests from the server to the client
 */
export type LanguageLspServerRequest = TNotification<"language/lspServerRequest", {
    languageId: string;
    serverId: string;
    message: {
        id: number | string;
        method: string;
        params?: unknown;
    };
}>;
/**
 * Used for responses from the client to the server on a request
 */
export type LanguageLspServerResponse = TMessage<"language/lspServerResponse", {
    languageId: string;
    serverId: string;
    message: {
        id: number | string;
        result?: string | number | boolean | Record<string, unknown> | null;
        error?: CommonError | LSPResponseError;
    };
}, {
    result: unknown;
    error: CommonError | LSPResponseError;
}>;
export type LanguageMessage = ListLanguagesMessage | LSPRequestMessage | LanguageLspServerResponse;
export type LanguageRequest = LanguageMessage["request"];
export type LanguageResponse = LanguageMessage["response"];
export type LanguageNotification = LanguageLspNotification | LanguageLspServerRequest;
