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§
Sourcefn capabilities(&self) -> LspCapabilities
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§
Sourcefn open_document(&mut self, _document: &Document) -> Result<(), LspError>
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());Sourcefn change_document(&mut self, _document: &Document) -> Result<(), LspError>
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());Sourcefn close_document(&mut self, _document: &Document) -> Result<(), LspError>
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());Sourcefn cancel(&mut self, request_id: LspRequestId) -> Result<(), LspError>
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))));Sourcefn document_symbols(
&mut self,
_document: &Document,
) -> Result<Vec<SemanticDocumentSymbol>, LspError>
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")));Sourcefn references(
&mut self,
_document: &Document,
) -> Result<Vec<SemanticReference>, LspError>
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")));Sourcefn diagnostics(
&mut self,
_document: &Document,
) -> Result<Vec<LspDiagnostic>, LspError>
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§
impl LspBackend for NoopLspBackend
Advertises no optional LSP capabilities.