@@ -40,6 +40,8 @@ pub enum Error {
40 StreamClosed,
40 StreamClosed,
41 #[error("LSP not defined")]
41 #[error("LSP not defined")]
42 LspNotDefined,
42 LspNotDefined,
43+ #[error("Unhandled")]
43 #[error(transparent)]
45 #[error(transparent)]
44 Other(#[from] anyhow::Error),
46 Other(#[from] anyhow::Error),
@@ -226,34 +228,27 @@ pub enum MethodCall {
228impl MethodCall {
230impl MethodCall {
229− pub fn parse(method: &str, params: jsonrpc::Params) -> Option<MethodCall> {
231+ pub fn parse(method: &str, params: jsonrpc::Params) -> Result<MethodCall> {
230 use lsp::request::Request;
232 use lsp::request::Request;
231 let request = match method {
233 let request = match method {
232 lsp::request::WorkDoneProgressCreate::METHOD => {
234 lsp::request::WorkDoneProgressCreate::METHOD => {
233− let params: lsp::WorkDoneProgressCreateParams = params
235+ let params: lsp::WorkDoneProgressCreateParams = params.parse()?;
235− .expect("Failed to parse WorkDoneCreate params");
236 Self::WorkDoneProgressCreate(params)
236 Self::WorkDoneProgressCreate(params)
238 lsp::request::ApplyWorkspaceEdit::METHOD => {
238 lsp::request::ApplyWorkspaceEdit::METHOD => {
239− let params: lsp::ApplyWorkspaceEditParams = params
239+ let params: lsp::ApplyWorkspaceEditParams = params.parse()?;
241− .expect("Failed to parse ApplyWorkspaceEdit params");
242 Self::ApplyWorkspaceEdit(params)
240 Self::ApplyWorkspaceEdit(params)
244 lsp::request::WorkspaceFoldersRequest::METHOD => Self::WorkspaceFolders,
242 lsp::request::WorkspaceFoldersRequest::METHOD => Self::WorkspaceFolders,
245 lsp::request::WorkspaceConfiguration::METHOD => {
243 lsp::request::WorkspaceConfiguration::METHOD => {
246− let params: lsp::ConfigurationParams = params
244+ let params: lsp::ConfigurationParams = params.parse()?;
248− .expect("Failed to parse WorkspaceConfiguration params");
249 Self::WorkspaceConfiguration(params)
245 Self::WorkspaceConfiguration(params)
252− log::warn!("unhandled lsp request: {}", method);
248+ return Err(Error::Unhandled);
256− Some(request)
251+ Ok(request)
@@ -268,48 +263,34 @@ pub enum Notification {
270impl Notification {
265impl Notification {
271− pub fn parse(method: &str, params: jsonrpc::Params) -> Option<Notification> {
266+ pub fn parse(method: &str, params: jsonrpc::Params) -> Result<Notification> {
272 use lsp::notification::Notification as _;
267 use lsp::notification::Notification as _;
274 let notification = match method {
269 let notification = match method {
275 lsp::notification::Initialized::METHOD => Self::Initialized,
270 lsp::notification::Initialized::METHOD => Self::Initialized,
276 lsp::notification::PublishDiagnostics::METHOD => {
271 lsp::notification::PublishDiagnostics::METHOD => {
277− let params: lsp::PublishDiagnosticsParams = params
272+ let params: lsp::PublishDiagnosticsParams = params.parse()?;
281− "received malformed PublishDiagnostic from Language Server: {}",
287− // TODO: need to loop over diagnostics and distinguish them by URI
288 Self::PublishDiagnostics(params)
273 Self::PublishDiagnostics(params)
291 lsp::notification::ShowMessage::METHOD => {
276 lsp::notification::ShowMessage::METHOD => {
292− let params: lsp::ShowMessageParams = params.parse().ok()?;
277+ let params: lsp::ShowMessageParams = params.parse()?;
294 Self::ShowMessage(params)
278 Self::ShowMessage(params)
296 lsp::notification::LogMessage::METHOD => {
280 lsp::notification::LogMessage::METHOD => {
297− let params: lsp::LogMessageParams = params.parse().ok()?;
281+ let params: lsp::LogMessageParams = params.parse()?;
299 Self::LogMessage(params)
282 Self::LogMessage(params)
301 lsp::notification::Progress::METHOD => {
284 lsp::notification::Progress::METHOD => {
302− let params: lsp::ProgressParams = params.parse().ok()?;
285+ let params: lsp::ProgressParams = params.parse()?;
304 Self::ProgressMessage(params)
286 Self::ProgressMessage(params)
307− log::error!("unhandled LSP notification: {}", method);
289+ return Err(Error::Unhandled);
312− Some(notification)
293+ Ok(notification)