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 { get all(): Array; } 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; adapter: WidgetAdapter; } 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 React.ReactElement | null) | (new (props: any) => React.Component)>; 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 { sort_key: string; sort_direction: number; private _diagnostics; protected trans: TranslationBundle; columns: Column[]; protected severityTranslations: Record; 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 | null; settings: FeatureSettings; status_message: StatusMessage; trans: TranslationBundle; constructor(translator_bundle: TranslationBundle); } } export {};