import { CodeEditor } from '@jupyterlab/codeeditor';
import type { IVirtualPosition, IRootPosition, IPosition, IEditorPosition, WidgetLSPAdapter, Document } from '@jupyterlab/lsp';
import type * as lsProtocol from 'vscode-languageserver-protocol';
import { VirtualDocument } from './virtual/document';
export declare class PositionConverter {
    static lsp_to_cm(position: lsProtocol.Position): IPosition;
    static cm_to_lsp(position: IPosition): lsProtocol.Position;
    static lsp_to_ce(position: lsProtocol.Position): CodeEditor.IPosition;
    static cm_to_ce(position: IPosition): CodeEditor.IPosition;
    static ce_to_cm(position: CodeEditor.IPosition): IPosition;
}
/** TODO should it be wrapped into an object? Where should these live? */
export interface IEditorRange {
    start: IEditorPosition;
    end: IEditorPosition;
    editor: CodeEditor.IEditor;
}
export declare function documentAtRootPosition(adapter: WidgetLSPAdapter<any>, position: IRootPosition): VirtualDocument;
export declare function editorAtRootPosition(adapter: WidgetLSPAdapter<any>, position: IRootPosition): Document.IEditor;
export declare function rootPositionToVirtualPosition(adapter: WidgetLSPAdapter<any>, position: IRootPosition): IVirtualPosition;
export declare function rootPositionToEditorPosition(adapter: WidgetLSPAdapter<any>, position: IRootPosition): IEditorPosition;
export declare function editorPositionToRootPosition(adapter: WidgetLSPAdapter<any>, editor: Document.IEditor, position: IEditorPosition): IRootPosition | null;
export declare function rangeToEditorRange(adapter: WidgetLSPAdapter<any>, range: lsProtocol.Range, editor: CodeEditor.IEditor | null, virtualDocument: VirtualDocument): IEditorRange;
