Skip to main content

LspManager

Struct LspManager 

Source
pub struct LspManager { /* private fields */ }
Expand description

Manages lifecycle of multiple language server clients.

Lazily starts LSP servers on-demand based on file extension. Each extension maps to at most one running server instance. Servers are started when first needed and remain running until explicitly shut down or the manager is dropped.

Implementations§

Source§

impl LspManager

Source

pub fn new( project_root: PathBuf, registry: LspServerRegistry, enabled: bool, diagnostics_settle_delay_ms: u64, ) -> Self

Create a new LSP manager without an event channel. Status changes are silently dropped — appropriate for tests and headless mode where no UI consumes them.

Source

pub fn with_event_channel( project_root: PathBuf, registry: LspServerRegistry, enabled: bool, diagnostics_settle_delay_ms: u64, ) -> (Self, UnboundedReceiver<LspConnectEvent>)

Create a new LSP manager paired with a receiver for connection status events. The TUI event loop consumes the receiver and renders Started / Failed events as scrollback lines next to the existing MCP rendering.

Source

pub fn diagnostics_settle_delay_ms(&self) -> u64

Get the configured diagnostics settle delay in milliseconds.

Source

pub async fn ensure_server(&self, file_path: &Path) -> Result<bool>

Ensure a language server is running for the given file’s extension. Returns Ok(true) if a server is (now) running, Ok(false) if no server is configured or the command is not installed.

Source

pub async fn diagnostics(&self, path: &Path) -> Vec<Diagnostic>

Get diagnostics for a specific file. Returns an empty vector if no server is running for that file type.

Source

pub async fn all_diagnostics(&self) -> Vec<Diagnostic>

Get all diagnostics from all running servers. Aggregates diagnostics across all file types with active servers.

Source

pub async fn notify_file_changed( &self, path: &Path, content: &str, ) -> Result<bool>

Ensure the appropriate server is running, then notify it that a file changed. This triggers the server to re-analyze the file and publish updated diagnostics. Returns Ok(true) if a server received the notification, Ok(false) otherwise.

Source

pub async fn active_servers(&self) -> Vec<String>

List the file extensions that have active servers. Useful for debugging and status display.

Source

pub async fn shutdown(&self)

Shutdown all running language servers gracefully. Sends shutdown request, exit notification, then kills the process. Errors are logged but not propagated.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more