pub struct LspClient { /* private fields */ }Expand description
An asynchronous client for a single language-server process.
Communication uses JSON-RPC 2.0 messages framed with Content-Length
headers on both stdin (requests/notifications we send) and stdout
(responses/notifications the server sends).
Implementations§
Source§impl LspClient
impl LspClient
Sourcepub async fn start(
command: &str,
args: &[String],
workspace: &Path,
) -> Result<Self, LspError>
pub async fn start( command: &str, args: &[String], workspace: &Path, ) -> Result<Self, LspError>
Start a language server process and perform the LSP handshake.
command is the server binary (e.g. rust-analyzer), args are any
extra CLI arguments, and workspace is the root directory that will
be communicated to the server as rootUri.
Sourcepub async fn send_request(
&mut self,
method: &str,
params: Value,
) -> Result<Value, LspError>
pub async fn send_request( &mut self, method: &str, params: Value, ) -> Result<Value, LspError>
Send a JSON-RPC request and wait for the matching response.
Notifications received while waiting for the response are processed and buffered (e.g. diagnostics) rather than returned.
Sourcepub async fn send_notification(
&mut self,
method: &str,
params: Value,
) -> Result<(), LspError>
pub async fn send_notification( &mut self, method: &str, params: Value, ) -> Result<(), LspError>
Send a JSON-RPC notification (no response expected).
Sourcepub async fn read_message(&mut self) -> Result<Value, LspError>
pub async fn read_message(&mut self) -> Result<Value, LspError>
Read a single Content-Length-framed JSON-RPC message from the server.
Sourcepub async fn ensure_document_open(
&mut self,
file_path: &Path,
) -> Result<String, LspError>
pub async fn ensure_document_open( &mut self, file_path: &Path, ) -> Result<String, LspError>
Ensure a file is opened in the language server.
If the file has not yet been opened, the client reads it from disk and
sends a textDocument/didOpen notification. Returns the file:// URI
for the file.
Sourcepub async fn hover(
&mut self,
file: &Path,
line: u32,
character: u32,
) -> Result<Option<HoverResult>, LspError>
pub async fn hover( &mut self, file: &Path, line: u32, character: u32, ) -> Result<Option<HoverResult>, LspError>
Perform a textDocument/hover request.
Sourcepub async fn definition(
&mut self,
file: &Path,
line: u32,
character: u32,
) -> Result<Vec<Location>, LspError>
pub async fn definition( &mut self, file: &Path, line: u32, character: u32, ) -> Result<Vec<Location>, LspError>
Perform a textDocument/definition request.
The response may be a single Location or an array of Locations;
both forms are handled.
Sourcepub async fn references(
&mut self,
file: &Path,
line: u32,
character: u32,
) -> Result<Vec<Location>, LspError>
pub async fn references( &mut self, file: &Path, line: u32, character: u32, ) -> Result<Vec<Location>, LspError>
Perform a textDocument/references request.
Sourcepub async fn completions(
&mut self,
file: &Path,
line: u32,
character: u32,
) -> Result<Vec<CompletionItem>, LspError>
pub async fn completions( &mut self, file: &Path, line: u32, character: u32, ) -> Result<Vec<CompletionItem>, LspError>
Perform a textDocument/completion request.
Handles both a plain array response and the CompletionList wrapper.
Sourcepub fn diagnostics(&self, file: &Path) -> Result<Vec<Diagnostic>, LspError>
pub fn diagnostics(&self, file: &Path) -> Result<Vec<Diagnostic>, LspError>
Return cached diagnostics for the given file.
Diagnostics are populated asynchronously by the server via
textDocument/publishDiagnostics notifications which are captured
every time a response is read. This method itself is synchronous
because it only reads from the in-memory cache.
Sourcepub async fn rename(
&mut self,
file: &Path,
line: u32,
character: u32,
new_name: &str,
) -> Result<WorkspaceEdit, LspError>
pub async fn rename( &mut self, file: &Path, line: u32, character: u32, new_name: &str, ) -> Result<WorkspaceEdit, LspError>
Perform a textDocument/rename request.
Sourcepub async fn format(&mut self, file: &Path) -> Result<Vec<TextEdit>, LspError>
pub async fn format(&mut self, file: &Path) -> Result<Vec<TextEdit>, LspError>
Perform a textDocument/formatting request.
Sourcepub async fn shutdown(&mut self) -> Result<(), LspError>
pub async fn shutdown(&mut self) -> Result<(), LspError>
Gracefully shut down the language server.
Sends shutdown followed by exit, then waits for the child process
to terminate.
Sourcepub fn current_id(&self) -> i64
pub fn current_id(&self) -> i64
Returns the current request id counter value.
Sourcepub fn is_initialized(&self) -> bool
pub fn is_initialized(&self) -> bool
Returns whether the client has been initialized.
Sourcepub fn open_documents(&self) -> &HashSet<String>
pub fn open_documents(&self) -> &HashSet<String>
Returns a reference to the set of currently-opened document URIs.
Sourcepub fn cached_diagnostics(&self) -> &HashMap<String, Vec<Diagnostic>>
pub fn cached_diagnostics(&self) -> &HashMap<String, Vec<Diagnostic>>
Returns a reference to the cached diagnostics map.
Auto Trait Implementations§
impl Freeze for LspClient
impl !RefUnwindSafe for LspClient
impl Send for LspClient
impl Sync 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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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>
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>
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);