mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 22:54:58 +00:00
modernize even more
This commit is contained in:
parent
f6e8b376d1
commit
28ddecf6c9
12 changed files with 29 additions and 70 deletions
|
@ -59,16 +59,7 @@
|
|||
//! }
|
||||
//! ```
|
||||
|
||||
#[macro_use]
|
||||
extern crate failure;
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
extern crate serde;
|
||||
extern crate serde_json;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
extern crate crossbeam_channel;
|
||||
extern crate languageserver_types;
|
||||
use failure::{bail, format_err};
|
||||
|
||||
mod msg;
|
||||
mod stdio;
|
||||
|
@ -81,7 +72,7 @@ use languageserver_types::{
|
|||
};
|
||||
|
||||
pub type Result<T> = ::std::result::Result<T, failure::Error>;
|
||||
pub use {
|
||||
pub use crate::{
|
||||
msg::{ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, RawResponseError},
|
||||
stdio::{stdio_transport, Threads},
|
||||
};
|
||||
|
@ -98,18 +89,18 @@ pub fn run_server(
|
|||
sender: Sender<RawMessage>,
|
||||
server: impl FnOnce(InitializeParams, &Receiver<RawMessage>, &Sender<RawMessage>) -> Result<()>,
|
||||
) -> Result<()> {
|
||||
info!("lsp server initializes");
|
||||
log::info!("lsp server initializes");
|
||||
let params = initialize(&receiver, &sender, caps)?;
|
||||
info!("lsp server initialized, serving requests");
|
||||
log::info!("lsp server initialized, serving requests");
|
||||
server(params, &receiver, &sender)?;
|
||||
info!("lsp server waiting for exit notification");
|
||||
log::info!("lsp server waiting for exit notification");
|
||||
match receiver.recv() {
|
||||
Some(RawMessage::Notification(n)) => n
|
||||
.cast::<Exit>()
|
||||
.map_err(|n| format_err!("unexpected notification during shutdown: {:?}", n))?,
|
||||
m => bail!("unexpected message during shutdown: {:?}", m),
|
||||
}
|
||||
info!("lsp server shutdown complete");
|
||||
log::info!("lsp server shutdown complete");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
use std::io::{BufRead, Write};
|
||||
|
||||
use languageserver_types::{notification::Notification, request::Request};
|
||||
use serde::{de::DeserializeOwned, Serialize};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use serde_json::{from_str, from_value, to_string, to_value, Value};
|
||||
use failure::{bail, format_err};
|
||||
|
||||
use Result;
|
||||
use crate::Result;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
||||
#[serde(untagged)]
|
||||
|
@ -91,7 +92,7 @@ impl RawRequest {
|
|||
pub fn new<R>(id: u64, params: &R::Params) -> RawRequest
|
||||
where
|
||||
R: Request,
|
||||
R::Params: Serialize,
|
||||
R::Params: serde::Serialize,
|
||||
{
|
||||
RawRequest {
|
||||
id,
|
||||
|
@ -102,7 +103,7 @@ impl RawRequest {
|
|||
pub fn cast<R>(self) -> ::std::result::Result<(u64, R::Params), RawRequest>
|
||||
where
|
||||
R: Request,
|
||||
R::Params: DeserializeOwned,
|
||||
R::Params: serde::de::DeserializeOwned,
|
||||
{
|
||||
if self.method != R::METHOD {
|
||||
return Err(self);
|
||||
|
@ -117,7 +118,7 @@ impl RawResponse {
|
|||
pub fn ok<R>(id: u64, result: &R::Result) -> RawResponse
|
||||
where
|
||||
R: Request,
|
||||
R::Result: Serialize,
|
||||
R::Result: serde::Serialize,
|
||||
{
|
||||
RawResponse {
|
||||
id,
|
||||
|
@ -143,7 +144,7 @@ impl RawNotification {
|
|||
pub fn new<N>(params: &N::Params) -> RawNotification
|
||||
where
|
||||
N: Notification,
|
||||
N::Params: Serialize,
|
||||
N::Params: serde::Serialize,
|
||||
{
|
||||
RawNotification {
|
||||
method: N::METHOD.to_string(),
|
||||
|
@ -153,7 +154,7 @@ impl RawNotification {
|
|||
pub fn cast<N>(self) -> ::std::result::Result<N::Params, RawNotification>
|
||||
where
|
||||
N: Notification,
|
||||
N::Params: DeserializeOwned,
|
||||
N::Params: serde::de::DeserializeOwned,
|
||||
{
|
||||
if self.method != N::METHOD {
|
||||
return Err(self);
|
||||
|
@ -191,12 +192,12 @@ fn read_msg_text(inp: &mut impl BufRead) -> Result<Option<String>> {
|
|||
buf.resize(size, 0);
|
||||
inp.read_exact(&mut buf)?;
|
||||
let buf = String::from_utf8(buf)?;
|
||||
debug!("< {}", buf);
|
||||
log::debug!("< {}", buf);
|
||||
Ok(Some(buf))
|
||||
}
|
||||
|
||||
fn write_msg_text(out: &mut impl Write, msg: &str) -> Result<()> {
|
||||
debug!("> {}", msg);
|
||||
log::debug!("> {}", msg);
|
||||
write!(out, "Content-Length: {}\r\n\r\n", msg.len())?;
|
||||
out.write_all(msg.as_bytes())?;
|
||||
out.flush()?;
|
||||
|
|
|
@ -4,8 +4,9 @@ use std::{
|
|||
};
|
||||
|
||||
use crossbeam_channel::{bounded, Receiver, Sender};
|
||||
use failure::bail;
|
||||
|
||||
use {RawMessage, Result};
|
||||
use crate::{RawMessage, Result};
|
||||
|
||||
pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) {
|
||||
let (writer_sender, mut writer_receiver) = bounded::<RawMessage>(16);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue