@kusto/monaco-kusto
Version:
CSL, KQL plugin for the Monaco Editor
140 lines (139 loc) • 6.28 kB
TypeScript
/// <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;