pub struct LspClient { /* private fields */ }Implementations§
Source§impl LspClient
impl LspClient
Sourcepub fn start(
server: &ResolvedServer,
root_uri: &Uri,
init_timeout: Option<Duration>,
) -> Result<Self, String>
pub fn start( server: &ResolvedServer, root_uri: &Uri, init_timeout: Option<Duration>, ) -> Result<Self, String>
Starts and initializes a server. init_timeout bounds the initialize
handshake (default 60 s) — budgeted background work passes what is left
of its own deadline.
pub fn info(&self) -> &SemanticBackendInfo
Sourcepub fn did_open(
&mut self,
uri: &Uri,
language_id: &str,
text: &str,
) -> Result<(), String>
pub fn did_open( &mut self, uri: &Uri, language_id: &str, text: &str, ) -> Result<(), String>
Brings the server’s view of uri up to date: didOpen once, then
didChange (full text) only when the content changed.
pub fn references( &mut self, uri: &Uri, position: Position, ) -> Result<Vec<Location>, String>
pub fn definition( &mut self, uri: &Uri, position: Position, ) -> Result<GotoDefinitionResponse, String>
pub fn rename( &mut self, uri: &Uri, position: Position, new_name: &str, ) -> Result<Option<WorkspaceEdit>, String>
Sourcepub fn type_hierarchy(
&mut self,
uri: &Uri,
position: Position,
direction: HierarchyDirection,
) -> Result<TypeHierarchyNode, String>
pub fn type_hierarchy( &mut self, uri: &Uri, position: Position, direction: HierarchyDirection, ) -> Result<TypeHierarchyNode, String>
Direct super- or subtypes of the type at position (LSP 3.17
prepareTypeHierarchy + typeHierarchy/supertypes|subtypes), shaped
like the JetBrains bridge answer: root = the type itself, children =
one level of related types. Paths inside the project root are
project-relative, others absolute; lines are 1-based.
pub fn implementations( &mut self, uri: &Uri, position: Position, ) -> Result<Vec<Location>, String>
pub fn shutdown(&mut self)
Trait Implementations§
Source§impl LspBackend for LspClient
impl LspBackend for LspClient
Source§fn is_stale(&self, _project_root: &str) -> bool
fn is_stale(&self, _project_root: &str) -> bool
A server whose stdout closed (exit or crash) is stale; the router evicts it and starts a fresh one on the next call.
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>
Source§fn set_request_timeout(&mut self, timeout: Option<Duration>)
fn set_request_timeout(&mut self, timeout: Option<Duration>)
Caps how long a single request may block (
None restores the default).
Opportunistic semantic work sets a short deadline so it never holds the
backend long; backends without a per-request timeout ignore it.Source§fn backend_info(&self) -> SemanticBackendInfo
fn backend_info(&self) -> SemanticBackendInfo
Identity, negotiated capabilities and position encoding. The default
describes a backend offering exactly the five mandatory operations.
fn type_hierarchy( &mut self, uri: &Uri, position: Position, direction: HierarchyDirection, ) -> Result<TypeHierarchyNode, String>
fn declaration( &mut self, _uri: &Uri, _position: Position, ) -> Result<Vec<Location>, 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>
Source§fn replace_symbol_body(
&mut self,
edit: &RangeEdit,
) -> Result<EditResult, String>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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_dead_after_error(&self, project_root: &str) -> bool
fn is_dead_after_error(&self, project_root: &str) -> bool
After a failed call: is the backend dead (evict) rather than reporting an
ordinary error (keep)? Runs only on the error path, so it may afford a
costlier probe than
Self::is_stale. Defaults to is_stale.Source§fn last_truncation(&self) -> Option<Truncation>
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 …)”.Auto Trait Implementations§
impl !Freeze for LspClient
impl !Sync for LspClient
impl RefUnwindSafe for LspClient
impl Send for LspClient
impl Unpin for LspClient
impl UnsafeUnpin for LspClient
impl UnwindSafe for LspClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more