@jupyter-lsp/jupyterlab-lsp
Version:
Language Server Protocol integration for JupyterLab
90 lines • 3.73 kB
JavaScript
import { VirtualDocument } from './virtual/document';
export class PositionConverter {
static lsp_to_cm(position) {
return { line: position.line, ch: position.character };
}
static cm_to_lsp(position) {
return { line: position.line, character: position.ch };
}
static lsp_to_ce(position) {
return { line: position.line, column: position.character };
}
static cm_to_ce(position) {
return { line: position.line, column: position.ch };
}
static ce_to_cm(position) {
return { line: position.line, ch: position.column };
}
}
export function documentAtRootPosition(adapter, position) {
let rootAsSource = position;
if (!adapter.virtualDocument) {
throw Error('Virtual document of adapter disposed!');
}
if (adapter.virtualDocument.root !== adapter.virtualDocument) {
throw Error('Virtual document on adapter must be the root document');
}
return adapter.virtualDocument.documentAtSourcePosition(rootAsSource);
}
export function editorAtRootPosition(adapter, position) {
let rootAsSource = position;
if (!adapter.virtualDocument) {
throw Error('Virtual document of adapter disposed!');
}
if (adapter.virtualDocument.root !== adapter.virtualDocument) {
throw Error('Virtual document on adapter must be the root document');
}
return adapter.virtualDocument.getEditorAtSourceLine(rootAsSource);
}
export function rootPositionToVirtualPosition(adapter, position) {
let rootAsSource = position;
if (!adapter.virtualDocument) {
throw Error('Virtual document of adapter disposed!');
}
if (adapter.virtualDocument.root !== adapter.virtualDocument) {
throw Error('Virtual document on adapter must be the root document');
}
return adapter.virtualDocument.virtualPositionAtDocument(rootAsSource);
}
export function rootPositionToEditorPosition(adapter, position) {
let rootAsSource = position;
if (!adapter.virtualDocument) {
throw Error('Virtual document of adapter disposed!');
}
if (adapter.virtualDocument.root !== adapter.virtualDocument) {
throw Error('Virtual document on adapter must be the root document');
}
return adapter.virtualDocument.transformSourceToEditor(rootAsSource);
}
export function editorPositionToRootPosition(adapter, editor, position) {
if (!adapter.virtualDocument) {
throw Error('Virtual document of adapter disposed!');
}
return adapter.virtualDocument.transformFromEditorToRoot(editor, position);
}
export function rangeToEditorRange(adapter, range, editor, virtualDocument) {
let start = PositionConverter.lsp_to_cm(range.start);
let end = PositionConverter.lsp_to_cm(range.end);
// because `openForeign()` does not use new this.constructor, we need to workaround it for now:
// const startInRoot = virtualDocument.transformVirtualToRoot(start);
// https://github.com/jupyterlab/jupyterlab/issues/15126
const startInRoot = VirtualDocument.prototype.transformVirtualToRoot.call(virtualDocument, start);
if (!startInRoot) {
throw Error('Could not determine position in root');
}
if (editor == null) {
let editorAccessor = editorAtRootPosition(adapter, startInRoot);
const candidate = editorAccessor.getEditor();
if (!candidate) {
throw Error('Editor could not be accessed');
}
editor = candidate;
}
const document = documentAtRootPosition(adapter, startInRoot);
return {
start: document.transformVirtualToEditor(start),
end: document.transformVirtualToEditor(end),
editor: editor
};
}
//# sourceMappingURL=converter.js.map