Trait LspBackend

Source
pub trait LspBackend {
    // Required method
    fn capabilities(&self) -> LspCapabilities;

    // Provided methods
    fn open_document(&mut self, _document: &Document) -> Result<(), LspError> { ... }
    fn change_document(&mut self, _document: &Document) -> Result<(), LspError> { ... }
    fn close_document(&mut self, _document: &Document) -> Result<(), LspError> { ... }
    fn cancel(&mut self, request_id: LspRequestId) -> Result<(), LspError> { ... }
    fn document_symbols(
        &mut self,
        _document: &Document,
    ) -> Result<Vec<SemanticDocumentSymbol>, LspError> { ... }
    fn references(
        &mut self,
        _document: &Document,
    ) -> Result<Vec<SemanticReference>, LspError> { ... }
    fn diagnostics(
        &mut self,
        _document: &Document,
    ) -> Result<Vec<LspDiagnostic>, LspError> { ... }
}
Expand description

Synchronous, UI-agnostic interface for optional language-server enrichment.

Lifecycle methods default to success, cancellation defaults to a typed cancellation error, and query methods default to capability errors. Backends own transport, queuing, concurrency, timeouts, and request-ID allocation.

§Examples

use ailloli_ui_editor::{LspBackend, NoopLspBackend};
let backend = NoopLspBackend;
assert_eq!(backend.capabilities().document_symbols, false);

Required Methods§

Source

fn capabilities(&self) -> LspCapabilities

Returns the backend’s currently advertised optional operations.

§Examples
use ailloli_ui_editor::{LspBackend, NoopLspBackend};
assert_eq!(NoopLspBackend.capabilities().diagnostics, false);

Provided Methods§

Source

fn open_document(&mut self, _document: &Document) -> Result<(), LspError>

Notifies the backend that a document opened.

The default performs no work and returns Ok(()) regardless of document contents or metadata.

§Errors

The default implementation never fails. A backend override may return a categorized LspError for transport, protocol, availability, or I/O failure.

§Examples
use ailloli_ui_editor::{Document, DocumentId, LspBackend, NoopLspBackend};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::new());
assert!(NoopLspBackend.open_document(&document).is_ok());
Source

fn change_document(&mut self, _document: &Document) -> Result<(), LspError>

Notifies the backend that document content or metadata changed.

The default is a no-op success and performs no version validation.

§Errors

The default implementation never fails. A backend override may return a categorized LspError for transport, protocol, availability, or I/O failure.

§Examples
use ailloli_ui_editor::{Document, DocumentId, LspBackend, NoopLspBackend};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::new());
assert!(NoopLspBackend.change_document(&document).is_ok());
Source

fn close_document(&mut self, _document: &Document) -> Result<(), LspError>

Notifies the backend that a document closed.

The default is a no-op success.

§Errors

The default implementation never fails. A backend override may return a categorized LspError for transport, protocol, availability, or I/O failure.

§Examples
use ailloli_ui_editor::{Document, DocumentId, LspBackend, NoopLspBackend};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::new());
assert!(NoopLspBackend.close_document(&document).is_ok());
Source

fn cancel(&mut self, request_id: LspRequestId) -> Result<(), LspError>

Requests cancellation of an opaque request ID.

The default returns LspError::RequestCancelled containing the same ID; it does not track or signal any real request.

§Errors

The default returns LspError::RequestCancelled with the supplied ID. Backend overrides may additionally report availability, protocol, transport, or I/O failures.

§Examples
use ailloli_ui_editor::{LspBackend, LspError, LspRequestId, NoopLspBackend};
assert_eq!(NoopLspBackend.cancel(LspRequestId(7)), Err(LspError::RequestCancelled(LspRequestId(7))));
Source

fn document_symbols( &mut self, _document: &Document, ) -> Result<Vec<SemanticDocumentSymbol>, LspError>

Returns semantic symbols for a document.

The default returns CapabilityUnavailable("document_symbols").

§Errors

The default returns LspError::CapabilityUnavailable. A backend may instead return cancellation, transport, protocol, availability, or I/O failures while servicing the query.

§Examples
use ailloli_ui_editor::{Document, DocumentId, LspBackend, LspError, NoopLspBackend};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::new());
assert_eq!(NoopLspBackend.document_symbols(&document), Err(LspError::CapabilityUnavailable("document_symbols")));
Source

fn references( &mut self, _document: &Document, ) -> Result<Vec<SemanticReference>, LspError>

Returns semantic reference edges for a document.

The default returns CapabilityUnavailable("references").

§Errors

The default returns LspError::CapabilityUnavailable. A backend may instead return cancellation, transport, protocol, availability, or I/O failures while servicing the query.

§Examples
use ailloli_ui_editor::{Document, DocumentId, LspBackend, LspError, NoopLspBackend};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::new());
assert_eq!(NoopLspBackend.references(&document), Err(LspError::CapabilityUnavailable("references")));
Source

fn diagnostics( &mut self, _document: &Document, ) -> Result<Vec<LspDiagnostic>, LspError>

Returns version-tagged diagnostics for a document.

The default returns CapabilityUnavailable("diagnostics").

§Errors

The default returns LspError::CapabilityUnavailable. A backend may instead return cancellation, transport, protocol, availability, or I/O failures while servicing the query.

§Examples
use ailloli_ui_editor::{Document, DocumentId, LspBackend, LspError, NoopLspBackend};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::new());
assert_eq!(NoopLspBackend.diagnostics(&document), Err(LspError::CapabilityUnavailable("diagnostics")));

Implementors§

Source§

impl LspBackend for NoopLspBackend

Advertises no optional LSP capabilities.