UNPKG

@jupyter-lsp/jupyterlab-lsp

Version:

Language Server Protocol integration for JupyterLab

90 lines 3.73 kB
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