@@ -4,7 +4,7 @@ use helix_view::{theme, Editor};
44
55use crate::{args::Args, compositor::Compositor, config::Config, job::Jobs, ui};
66
7−use log::error;
7+use log::{error, warn};
88
99use std::{
1010 io::{stdout, Write},
@@ -429,10 +429,27 @@ impl Application {
429429 Call::MethodCall(helix_lsp::jsonrpc::MethodCall {
430430 method, params, id, ..
431431 }) => {
432+ let language_server = match self.editor.language_servers.get_by_id(server_id) {
433+ Some(language_server) => language_server,
434+ None => {
435+ warn!("can't find language server with id `{}`", server_id);
436+ return;
437+ }
438+ };
439+
432440 let call = match MethodCall::parse(&method, params) {
433441 Some(call) => call,
434442 None => {
435443 error!("Method not found {}", method);
444+ // language_server.reply(
445+ // call.id,
446+ // // TODO: make a Into trait that can cast to Err(jsonrpc::Error)
447+ // Err(helix_lsp::jsonrpc::Error {
448+ // code: helix_lsp::jsonrpc::ErrorCode::MethodNotFound,
449+ // message: "Method not found".to_string(),
450+ // data: None,
451+ // }),
452+ // );
436453 return;
437454 }
438455 };
@@ -445,53 +462,9 @@ impl Application {
445462 if spinner.is_stopped() {
446463 spinner.start();
447464 }
448−
449− let doc = self.editor.documents().find(|doc| {
450− doc.language_server()
451− .map(|server| server.id() == server_id)
452− .unwrap_or_default()
453− });
454− match doc {
455− Some(doc) => {
456− // it's ok to unwrap, we check for the language server before
457− let server = doc.language_server().unwrap();
458− tokio::spawn(server.reply(id, Ok(serde_json::Value::Null)));
459− }
460− None => {
461− if let Some(server) =
462− self.editor.language_servers.get_by_id(server_id)
463− {
464− log::warn!(
465− "missing document with language server id `{}`",
466− server_id
467− );
468− tokio::spawn(server.reply(
469− id,
470− Err(helix_lsp::jsonrpc::Error {
471− code: helix_lsp::jsonrpc::ErrorCode::InternalError,
472− message: "document missing".to_string(),
473− data: None,
474− }),
475− ));
476− } else {
477− log::warn!(
478− "can't find language server with id `{}`",
479− server_id
480− );
481− }
482− }
483− }
465+ tokio::spawn(language_server.reply(id, Ok(serde_json::Value::Null)));
484466 }
485467 }
486− // self.language_server.reply(
487− // call.id,
488− // // TODO: make a Into trait that can cast to Err(jsonrpc::Error)
489− // Err(helix_lsp::jsonrpc::Error {
490− // code: helix_lsp::jsonrpc::ErrorCode::MethodNotFound,
491− // message: "Method not found".to_string(),
492− // data: None,
493− // }),
494− // );
495468 }
496469 e => unreachable!("{:?}", e),
497470 }