Skip to main content

LspBackend

Trait LspBackend 

Source
pub trait LspBackend: Send {
Show 25 methods // Required methods fn open_file( &mut self, uri: &Uri, language_id: &str, text: &str, ) -> Result<(), String>; fn references( &mut self, uri: &Uri, position: Position, scope: &str, ) -> Result<Vec<Location>, String>; fn definition( &mut self, uri: &Uri, position: Position, ) -> Result<GotoDefinitionResponse, String>; fn implementations( &mut self, uri: &Uri, position: Position, scope: &str, ) -> Result<Vec<Location>, String>; fn rename( &mut self, uri: &Uri, position: Position, new_name: &str, ) -> Result<Option<WorkspaceEdit>, String>; // Provided methods fn declaration( &mut self, _uri: &Uri, _position: Position, ) -> Result<Vec<Location>, String> { ... } fn type_hierarchy( &mut self, _uri: &Uri, _position: Position, _direction: HierarchyDirection, ) -> Result<TypeHierarchyNode, String> { ... } fn symbols_overview( &mut self, uri: &Uri, ) -> Result<Vec<SymbolOverviewItem>, String> { ... } fn format(&mut self, _uri: &Uri) -> Result<Vec<TextEdit>, String> { ... } fn inspections(&mut self, _uri: &Uri) -> Result<Vec<InspectionDiag>, String> { ... } fn list_inspections(&mut self) -> Result<Vec<InspectionInfo>, String> { ... } fn replace_symbol_body( &mut self, edit: &RangeEdit, ) -> Result<EditResult, String> { ... } fn insert_before_symbol( &mut self, edit: &RangeEdit, ) -> Result<EditResult, String> { ... } fn insert_after_symbol( &mut self, edit: &RangeEdit, ) -> Result<EditResult, String> { ... } fn rename_preview( &mut self, _req: &RenameQuery, ) -> Result<RenamePlan, String> { ... } fn rename_apply( &mut self, _req: &RenameApply, ) -> Result<RenameResult, String> { ... } fn move_preview(&mut self, _req: &MoveQuery) -> Result<RenamePlan, String> { ... } fn move_apply(&mut self, _req: &MoveApply) -> Result<RenameResult, String> { ... } fn safe_delete_preview( &mut self, _req: &SafeDeleteQuery, ) -> Result<RenamePlan, String> { ... } fn safe_delete_apply( &mut self, _req: &SafeDeleteApply, ) -> Result<RenameResult, String> { ... } fn inline_preview( &mut self, _req: &InlineQuery, ) -> Result<RenamePlan, String> { ... } fn inline_apply( &mut self, _req: &InlineApply, ) -> Result<RenameResult, String> { ... } fn reformat( &mut self, _req: &ReformatQuery, ) -> Result<ReformatResult, String> { ... } fn is_stale(&self, _project_root: &str) -> bool { ... } fn last_truncation(&self) -> Option<Truncation> { ... }
}
Expand description

Code-intelligence backend. Send so instances can live in the global BACKENDS cache (Mutex<HashMap<String, Box<dyn LspBackend>>>).

Required Methods§

Source

fn open_file( &mut self, uri: &Uri, language_id: &str, text: &str, ) -> Result<(), String>

Source

fn references( &mut self, uri: &Uri, position: Position, scope: &str, ) -> Result<Vec<Location>, String>

Source

fn definition( &mut self, uri: &Uri, position: Position, ) -> Result<GotoDefinitionResponse, String>

Source

fn implementations( &mut self, uri: &Uri, position: Position, scope: &str, ) -> Result<Vec<Location>, String>

Source

fn rename( &mut self, uri: &Uri, position: Position, new_name: &str, ) -> Result<Option<WorkspaceEdit>, String>

Provided Methods§

Source

fn declaration( &mut self, _uri: &Uri, _position: Position, ) -> Result<Vec<Location>, String>

Source

fn type_hierarchy( &mut self, _uri: &Uri, _position: Position, _direction: HierarchyDirection, ) -> Result<TypeHierarchyNode, String>

Source

fn symbols_overview( &mut self, uri: &Uri, ) -> Result<Vec<SymbolOverviewItem>, String>

Source

fn format(&mut self, _uri: &Uri) -> Result<Vec<TextEdit>, String>

Source

fn inspections(&mut self, _uri: &Uri) -> Result<Vec<InspectionDiag>, String>

Source

fn list_inspections(&mut self) -> Result<Vec<InspectionInfo>, String>

Source

fn replace_symbol_body( &mut self, edit: &RangeEdit, ) -> Result<EditResult, String>

Replace a symbol’s full declaration range with edit.text. DEFAULT = headless local range write; JetBrainsHttpBackend overrides.

Source

fn insert_before_symbol( &mut self, edit: &RangeEdit, ) -> Result<EditResult, String>

Insert a new sibling before the anchor symbol (range is zero-width at the anchor start line; indentation already baked into edit.text).

Source

fn insert_after_symbol( &mut self, edit: &RangeEdit, ) -> Result<EditResult, String>

Insert a new sibling after the anchor symbol (range is zero-width at the line following the anchor; indentation already baked into edit.text).

Source

fn rename_preview(&mut self, _req: &RenameQuery) -> Result<RenamePlan, String>

Phase 1 of the Two-Phase rename: resolve all usages + conflicts of the target symbol. DEFAULT = Err(BACKEND_REQUIRED) — there is NO lossless headless usage search (spec §3); only Backing B (live IDE) overrides this.

Source

fn rename_apply(&mut self, _req: &RenameApply) -> Result<RenameResult, String>

Phase 2 of the Two-Phase rename: perform the Multi-File rename as ONE transaction (one Undo entry). DEFAULT = Err(BACKEND_REQUIRED).

Source

fn move_preview(&mut self, _req: &MoveQuery) -> Result<RenamePlan, String>

Phase 1 of the Two-Phase move: resolve all usages + conflicts of the target at the new location. DEFAULT = Err(BACKEND_REQUIRED) (no lossless headless move; only Backing B overrides — spec §5.5).

Source

fn move_apply(&mut self, _req: &MoveApply) -> Result<RenameResult, String>

Phase 2 of the Two-Phase move: perform the Multi-File move as ONE Undo transaction. DEFAULT = Err(BACKEND_REQUIRED).

Source

fn safe_delete_preview( &mut self, _req: &SafeDeleteQuery, ) -> Result<RenamePlan, String>

Phase 1 of the Two-Phase safe-delete: report the REMAINING (blocking) references as usages/conflicts. DEFAULT = Err(BACKEND_REQUIRED).

Source

fn safe_delete_apply( &mut self, _req: &SafeDeleteApply, ) -> Result<RenameResult, String>

Phase 2 of the Two-Phase safe-delete: delete the symbol (force = deleteEvenIfUsed) as ONE Undo transaction. DEFAULT = Err(BACKEND_REQUIRED).

Source

fn inline_preview(&mut self, _req: &InlineQuery) -> Result<RenamePlan, String>

Phase 1 of the Two-Phase inline: resolve all substitution sites + conflicts. DEFAULT = Err(BACKEND_REQUIRED) — only Backing B (live IDE) overrides (spec §5.4).

Source

fn inline_apply(&mut self, _req: &InlineApply) -> Result<RenameResult, String>

Phase 2 of the Two-Phase inline: substitute at every call site as ONE Undo transaction. Hard refusal (recursive, multiple returns, override) → UNSUPPORTED at the backend. DEFAULT = Err(BACKEND_REQUIRED).

Source

fn reformat(&mut self, _req: &ReformatQuery) -> Result<ReformatResult, String>

Single-Phase reformat (spec §5.3): no preview, no plan_hash. DEFAULT = Err(BACKEND_REQUIRED).

Source

fn is_stale(&self, _project_root: &str) -> bool

Whether a cached instance of this backend is no longer valid and must be evicted + re-selected. Backing A (in-process LSP) is never stale → default false. Backing B overrides: the IDE may have closed/restarted since caching.

Source

fn last_truncation(&self) -> Option<Truncation>

Truncation metadata of the most recent capped call, or None (Backing A, or no capped call yet). Lets ctx_refactor surface “(truncated …)”.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§