@krassowski/jupyterlab-lsp
Version:
Language Server Protocol integration for JupyterLab
93 lines (92 loc) • 3.8 kB
TypeScript
import { VDomModel, VDomRenderer } from '@jupyterlab/apputils';
import { CodeEditor } from '@jupyterlab/codeeditor';
import { IDocumentWidget } from '@jupyterlab/docregistry';
import { TranslationBundle } from '@jupyterlab/translation';
import type * as CodeMirror from 'codemirror';
import React, { ReactElement } from 'react';
import * as lsProtocol from 'vscode-languageserver-protocol';
import { CodeDiagnostics as LSPDiagnosticsSettings } from '../../_diagnostics';
import { StatusMessage, WidgetAdapter } from '../../adapters/adapter';
import { FeatureSettings } from '../../feature';
import { DiagnosticSeverity } from '../../lsp';
import { IEditorPosition } from '../../positioning';
import { CodeMirrorVirtualEditor } from '../../virtual/codemirror_editor';
import { VirtualDocument } from '../../virtual/document';
import { IVirtualEditor } from '../../virtual/editor';
import '../../../style/diagnostics_listing.css';
/**
* Diagnostic which is localized at a specific editor (cell) within a notebook
* (if used in the context of a FileEditor, then there is just a single editor)
*/
export interface IEditorDiagnostic {
diagnostic: lsProtocol.Diagnostic;
editor: CodeMirror.Editor;
range: {
start: IEditorPosition;
end: IEditorPosition;
};
}
export declare const DIAGNOSTICS_LISTING_CLASS = "lsp-diagnostics-listing";
export declare class DiagnosticsDatabase extends Map<VirtualDocument, IEditorDiagnostic[]> {
get all(): Array<IEditorDiagnostic>;
}
export interface IDiagnosticsRow {
data: IEditorDiagnostic;
key: string;
document: VirtualDocument;
/**
* Cell number is the ordinal, 1-based cell identifier displayed to the user.
*/
cell_number?: number;
}
interface IListingContext {
db: DiagnosticsDatabase;
editor: IVirtualEditor<CodeEditor.IEditor>;
adapter: WidgetAdapter<IDocumentWidget>;
}
interface IColumnOptions {
id: string;
label: string;
render_cell(data: IDiagnosticsRow, context?: IListingContext): ReactElement;
sort(a: IDiagnosticsRow, b: IDiagnosticsRow): number;
is_available?(context: IListingContext): boolean;
}
declare class Column {
private options;
is_visible: boolean;
constructor(options: IColumnOptions);
render_cell(data: IDiagnosticsRow, context: IListingContext): React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any> | null) | (new (props: any) => React.Component<any, any, any>)>;
sort(a: IDiagnosticsRow, b: IDiagnosticsRow): number;
get id(): string;
is_available(context: IListingContext): boolean;
render_header(listing: DiagnosticsListing): ReactElement;
}
export declare function message_without_code(diagnostic: lsProtocol.Diagnostic): string;
export declare class DiagnosticsListing extends VDomRenderer<DiagnosticsListing.Model> {
sort_key: string;
sort_direction: number;
private _diagnostics;
protected trans: TranslationBundle;
columns: Column[];
protected severityTranslations: Record<keyof typeof DiagnosticSeverity, string>;
constructor(model: DiagnosticsListing.Model);
sort(key: string): void;
render(): JSX.Element;
get_diagnostic(key: string): IDiagnosticsRow | undefined;
jump_to(row: IDiagnosticsRow): void;
}
export declare namespace DiagnosticsListing {
/**
* A VDomModel for the LSP of current file editor/notebook.
*/
class Model extends VDomModel {
diagnostics: DiagnosticsDatabase | null;
virtual_editor: CodeMirrorVirtualEditor | null;
adapter: WidgetAdapter<any> | null;
settings: FeatureSettings<LSPDiagnosticsSettings>;
status_message: StatusMessage;
trans: TranslationBundle;
constructor(translator_bundle: TranslationBundle);
}
}
export {};