/// <reference types="@kusto/language-service-next/Kusto.Language.Bridge" />
/// <reference types="@kusto/language-service/Kusto.JavaScript.Client" />
import * as ls from 'vscode-languageserver-types';
import type { TextDocument } from 'vscode-languageserver-textdocument';
import type { FoldingRange } from 'vscode-languageserver-types';
import * as s from './schema';
import type { LanguageSettings } from './settings';
import 'language-service';
import k = Kusto.Data.IntelliSense;
import k2 = Kusto.Language.Editor;
import { Database } from './schema';
import type { RenderInfo } from './renderInfo';
import type { ClusterReference, DatabaseReference } from '../types';
import { ClassificationRange } from '../syntaxHighlighting/types';
export declare enum TokenKind {
    TableToken = 2,
    TableColumnToken = 4,
    OperatorToken = 8,// where, project, ...
    SubOperatorToken = 16,// has, contains, ...
    CalculatedColumnToken = 32,
    StringLiteralToken = 64,
    FunctionNameToken = 128,
    UnknownToken = 256,
    CommentToken = 512,
    PlainTextToken = 1024,
    DataTypeToken = 2048,
    ControlCommandToken = 4096,
    CommandPartToken = 8192,
    QueryParametersToken = 16384,
    CslCommandToken = 32768,
    LetVariablesToken = 65536,
    PluginToken = 131072,
    BracketRangeToken = 262144,
    ClientDirectiveToken = 524288
}
/**
 * A plain old javascript object that is roughly equivalent to the @kusto/language-service-next object, but without
 * all the Bridge.Net properties and methods. this object is being sent from web worker to main thread and turns out
 * that when posting the message we lose all properties (and functions), thus we use a POJO instead.
 * This issue started happening once upgrading to 0.20.0 from 0.15.5.
 */
export interface ClassifiedRange {
    kind: k2.ClassificationKind;
    start: number;
    length: number;
    end: number;
}
/**
 * colorization data for specific line range.
 */
export interface ColorizationRange {
    classifications: ClassifiedRange[];
    absoluteStart: number;
    absoluteEnd: number;
}
export interface ResultAction {
    title: string;
    changes: {
        start: number;
        deleteLength: number;
        insertText: string | null;
    }[];
    kind: string;
}
export interface LanguageService {
    doComplete(document: TextDocument, position: ls.Position): Promise<ls.CompletionList>;
    doRangeFormat(document: TextDocument, range: ls.Range): Promise<ls.TextEdit[]>;
    doDocumentFormat(document: TextDocument): Promise<ls.TextEdit[]>;
    doCurrentCommandFormat(document: TextDocument, caretPosition: ls.Position): Promise<ls.TextEdit[]>;
    doFolding(document: TextDocument): Promise<FoldingRange[]>;
    doValidation(document: TextDocument, intervals: {
        start: number;
        end: number;
    }[], includeWarnings?: boolean, includeSuggestions?: boolean): Promise<ls.Diagnostic[]>;
    getResultActions(document: TextDocument, start: number, end: number): Promise<ResultAction[]>;
    getClassifications(document: TextDocument): Promise<ClassificationRange[]>;
    doRename(document: TextDocument, position: ls.Position, newName: string): Promise<ls.WorkspaceEdit | undefined>;
    doHover(document: TextDocument, position: ls.Position): Promise<ls.Hover | undefined>;
    setParameters(scalarParameters: readonly s.ScalarParameter[], tabularParameters: readonly s.TabularParameter[]): Promise<void>;
    setSchema(schema: s.Schema): Promise<void>;
    setSchemaFromShowSchema(schema: s.showSchema.Result, clusterConnectionString: string, databaseInContextName: string, globalScalarParameters?: s.ScalarParameter[], globalTabularParameters?: s.TabularParameter[], databaseInContextAlternateName?: string): Promise<void>;
    normalizeSchema(schema: s.showSchema.Result, clusterConnectionString: string, databaseInContextName: string, databaseInContextAlternateName?: string): Promise<s.EngineSchema>;
    getSchema(): Promise<s.Schema>;
    getCommandInContext(document: TextDocument, cursorOffset: number): Promise<string>;
    getCommandAndLocationInContext(document: TextDocument, cursorOffset: number): Promise<{
        text: string;
        location: ls.Location;
    } | null>;
    getCommandsInDocument(document: TextDocument): Promise<{
        absoluteStart: number;
        absoluteEnd: number;
        text: string;
    }[]>;
    configure(languageSettings: LanguageSettings): void;
    getClientDirective(text: string): Promise<{
        isClientDirective: boolean;
        directiveWithoutLeadingComments: string;
    }>;
    getAdminCommand(text: string): Promise<{
        isAdminCommand: boolean;
        adminCommandWithoutLeadingComments: string;
    }>;
    findDefinition(document: TextDocument, position: ls.Position): Promise<ls.Location[]>;
    findReferences(document: TextDocument, position: ls.Position): Promise<ls.Location[]>;
    getQueryParams(document: TextDocument, cursorOffset: number): Promise<{
        name: string;
        type: string;
    }[]>;
    getGlobalParams(document: TextDocument): Promise<{
        name: string;
        type: string;
    }[]>;
    getReferencedSymbols(document: TextDocument, offset?: number): Promise<{
        name: string;
        kind: string;
        display: string;
    }[]>;
    getReferencedGlobalParams(document: TextDocument, offset?: number): Promise<{
        name: string;
        type: string;
    }[]>;
    getRenderInfo(document: TextDocument, cursorOffset: number): Promise<RenderInfo | undefined>;
    getDatabaseReferences(document: TextDocument, cursorOffset: number): Promise<DatabaseReference[]>;
    getClusterReferences(document: TextDocument, cursorOffset: number): Promise<ClusterReference[]>;
    addDatabaseToSchema(document: TextDocument, clusterName: string, databaseSchema: Database): Promise<void>;
    addClusterToSchema(document: TextDocument, clusterName: string, databases: readonly {
        name: string;
        alternativeName?: string;
    }[]): Promise<void>;
}
export type CmSchema = {
    accounts: k.KustoIntelliSenseAccountEntity[];
    services: k.KustoIntelliSenseServiceEntity[];
    connectionString: string;
};
/**
 * Obtain an instance of the kusto language service.
 */
export declare function getKustoLanguageService(): LanguageService;
