less verbose debug

This commit is contained in:
Aleksey Kladov 2018-12-22 12:13:20 +03:00
parent 94241cec04
commit 90f20f8c53
2 changed files with 45 additions and 8 deletions

View file

@ -152,12 +152,18 @@ impl RawNotification {
params: to_value(params).unwrap(), params: to_value(params).unwrap(),
} }
} }
pub fn is<N>(&self) -> bool
where
N: Notification,
{
self.method == N::METHOD
}
pub fn cast<N>(self) -> ::std::result::Result<N::Params, RawNotification> pub fn cast<N>(self) -> ::std::result::Result<N::Params, RawNotification>
where where
N: Notification, N: Notification,
N::Params: serde::de::DeserializeOwned, N::Params: serde::de::DeserializeOwned,
{ {
if self.method != N::METHOD { if !self.is::<N>() {
return Err(self); return Err(self);
} }
Ok(from_value(self.params).unwrap()) Ok(from_value(self.params).unwrap())

View file

@ -2,6 +2,7 @@ mod handlers;
mod subscriptions; mod subscriptions;
use std::{ use std::{
fmt,
path::PathBuf, path::PathBuf,
sync::Arc, sync::Arc,
}; };
@ -109,6 +110,43 @@ pub fn main_loop(
Ok(()) Ok(())
} }
enum Event {
Msg(RawMessage),
Task(Task),
Vfs(VfsTask),
Lib(LibraryData),
}
impl fmt::Debug for Event {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let debug_verbose_not = |not: &RawNotification, f: &mut fmt::Formatter| {
f.debug_struct("RawNotification")
.field("method", &not.method)
.finish()
};
match self {
Event::Msg(RawMessage::Notification(not)) => {
if not.is::<req::DidOpenTextDocument>() || not.is::<req::DidChangeTextDocument>() {
return debug_verbose_not(not, f);
}
}
Event::Task(Task::Notify(not)) => {
if not.is::<req::PublishDecorations>() || not.is::<req::PublishDiagnostics>() {
return debug_verbose_not(not, f);
}
}
_ => (),
}
match self {
Event::Msg(it) => fmt::Debug::fmt(it, f),
Event::Task(it) => fmt::Debug::fmt(it, f),
Event::Vfs(it) => fmt::Debug::fmt(it, f),
Event::Lib(it) => fmt::Debug::fmt(it, f),
}
}
}
fn main_loop_inner( fn main_loop_inner(
internal_mode: bool, internal_mode: bool,
publish_decorations: bool, publish_decorations: bool,
@ -123,13 +161,6 @@ fn main_loop_inner(
) -> Result<()> { ) -> Result<()> {
let (libdata_sender, libdata_receiver) = unbounded(); let (libdata_sender, libdata_receiver) = unbounded();
loop { loop {
#[derive(Debug)]
enum Event {
Msg(RawMessage),
Task(Task),
Vfs(VfsTask),
Lib(LibraryData),
}
log::trace!("selecting"); log::trace!("selecting");
let event = select! { let event = select! {
recv(msg_receiver, msg) => match msg { recv(msg_receiver, msg) => match msg {