From 31f5f816e3747c1a0972d2f0aca25ded9980cd36 Mon Sep 17 00:00:00 2001 From: vsrs Date: Sat, 27 Feb 2021 19:07:14 +0300 Subject: Remove unnecessary file_id argument --- crates/rust-analyzer/src/handlers.rs | 12 +++++------- crates/rust-analyzer/src/to_proto.rs | 5 ++--- 2 files changed, 7 insertions(+), 10 deletions(-) (limited to 'crates/rust-analyzer') diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 4f6f250d6..f198b1f25 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -555,7 +555,7 @@ pub(crate) fn handle_runnables( if should_skip_target(&runnable, cargo_spec.as_ref()) { continue; } - let mut runnable = to_proto::runnable(&snap, file_id, runnable)?; + let mut runnable = to_proto::runnable(&snap, runnable)?; if expect_test { runnable.label = format!("{} + expect", runnable.label); runnable.args.expect_test = Some(true); @@ -773,7 +773,7 @@ pub(crate) fn handle_hover( contents: HoverContents::Markup(to_proto::markup_content(info.info.markup)), range: Some(range), }, - actions: prepare_hover_actions(&snap, position.file_id, &info.info.actions), + actions: prepare_hover_actions(&snap, &info.info.actions), }; Ok(Some(hover)) @@ -1438,17 +1438,16 @@ fn show_impl_command_link( fn runnable_action_links( snap: &GlobalStateSnapshot, - file_id: FileId, runnable: Runnable, ) -> Option { - let cargo_spec = CargoTargetSpec::for_file(&snap, file_id).ok()?; + let cargo_spec = CargoTargetSpec::for_file(&snap, runnable.nav.file_id).ok()?; let hover_config = snap.config.hover(); if !hover_config.runnable() || should_skip_target(&runnable, cargo_spec.as_ref()) { return None; } let action: &'static _ = runnable.action(); - to_proto::runnable(snap, file_id, runnable).ok().map(|r| { + to_proto::runnable(snap, runnable).ok().map(|r| { let mut group = lsp_ext::CommandLinkGroup::default(); if hover_config.run { @@ -1487,7 +1486,6 @@ fn goto_type_action_links( fn prepare_hover_actions( snap: &GlobalStateSnapshot, - file_id: FileId, actions: &[HoverAction], ) -> Vec { if snap.config.hover().none() || !snap.config.hover_actions() { @@ -1498,7 +1496,7 @@ fn prepare_hover_actions( .iter() .filter_map(|it| match it { HoverAction::Implementation(position) => show_impl_command_link(snap, position), - HoverAction::Runnable(r) => runnable_action_links(snap, file_id, r.clone()), + HoverAction::Runnable(r) => runnable_action_links(snap, r.clone()), HoverAction::GoToType(targets) => goto_type_action_links(snap, targets), }) .collect() diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 70cb7fbab..e8fd9bb28 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -828,11 +828,10 @@ pub(crate) fn resolved_code_action( pub(crate) fn runnable( snap: &GlobalStateSnapshot, - file_id: FileId, runnable: Runnable, ) -> Result { let config = snap.config.runnables(); - let spec = CargoTargetSpec::for_file(snap, file_id)?; + let spec = CargoTargetSpec::for_file(snap, runnable.nav.file_id)?; let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone()); let target = spec.as_ref().map(|s| s.target.clone()); let (cargo_args, executable_args) = @@ -865,7 +864,7 @@ pub(crate) fn code_lens( let annotation_range = range(&line_index, annotation.range); let action = run.action(); - let r = runnable(&snap, run.nav.file_id, run)?; + let r = runnable(&snap, run)?; let command = if debug { command::debug_single(&r) -- cgit v1.2.3 From 669e11764430be3a098d6c8fe875d8efbb3547a3 Mon Sep 17 00:00:00 2001 From: vsrs Date: Sat, 27 Feb 2021 20:04:43 +0300 Subject: Add LSP request and VSCode command --- crates/rust-analyzer/src/handlers.rs | 18 ++++++++++++++++++ crates/rust-analyzer/src/lsp_ext.rs | 20 ++++++++++++++++++++ crates/rust-analyzer/src/main_loop.rs | 1 + 3 files changed, 39 insertions(+) (limited to 'crates/rust-analyzer') diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index f198b1f25..53b0d3e41 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -607,6 +607,24 @@ pub(crate) fn handle_runnables( Ok(res) } +pub(crate) fn handle_related_tests( + snap: GlobalStateSnapshot, + params: lsp_ext::RelatedTestsParams, +) -> Result> { + let _p = profile::span("handle_related_tests"); + let position = from_proto::file_position(&snap, params.text_document_position)?; + + let tests = snap.analysis.related_tests(position, None)?; + let mut res = Vec::new(); + for it in tests { + if let Ok(runnable) = to_proto::runnable(&snap, it) { + res.push(lsp_ext::TestInfo { runnable }) + } + } + + Ok(res) +} + pub(crate) fn handle_completion( snap: GlobalStateSnapshot, params: lsp_types::CompletionParams, diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index 0d2c8f7ff..fe11903f9 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs @@ -177,6 +177,26 @@ pub struct CargoRunnable { pub expect_test: Option, } +pub enum RelatedTests {} + +impl Request for RelatedTests { + type Params = RelatedTestsParams; + type Result = Vec; + const METHOD: &'static str = "rust-analyzer/relatedTests"; +} + +#[derive(Serialize, Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct RelatedTestsParams { + #[serde(flatten)] + pub text_document_position: lsp_types::TextDocumentPositionParams, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct TestInfo { + pub runnable: Runnable, +} + pub enum InlayHints {} impl Request for InlayHints { diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 2829d5970..9f86b8c0d 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs @@ -500,6 +500,7 @@ impl GlobalState { .on::(handlers::handle_expand_macro) .on::(handlers::handle_parent_module) .on::(handlers::handle_runnables) + .on::(handlers::handle_related_tests) .on::(handlers::handle_inlay_hints) .on::(handlers::handle_code_action) .on::(handlers::handle_code_action_resolve) -- cgit v1.2.3 From daa2637486755f012c738d3516ff7cb3d3dcd234 Mon Sep 17 00:00:00 2001 From: vsrs Date: Thu, 11 Mar 2021 17:39:41 +0300 Subject: Apply review suggestions --- crates/rust-analyzer/src/handlers.rs | 4 ++-- crates/rust-analyzer/src/lsp_ext.rs | 9 +-------- 2 files changed, 3 insertions(+), 10 deletions(-) (limited to 'crates/rust-analyzer') diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 53b0d3e41..ba8639e30 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -609,10 +609,10 @@ pub(crate) fn handle_runnables( pub(crate) fn handle_related_tests( snap: GlobalStateSnapshot, - params: lsp_ext::RelatedTestsParams, + params: lsp_types::TextDocumentPositionParams, ) -> Result> { let _p = profile::span("handle_related_tests"); - let position = from_proto::file_position(&snap, params.text_document_position)?; + let position = from_proto::file_position(&snap, params)?; let tests = snap.analysis.related_tests(position, None)?; let mut res = Vec::new(); diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index fe11903f9..efcdcd1d9 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs @@ -180,18 +180,11 @@ pub struct CargoRunnable { pub enum RelatedTests {} impl Request for RelatedTests { - type Params = RelatedTestsParams; + type Params = lsp_types::TextDocumentPositionParams; type Result = Vec; const METHOD: &'static str = "rust-analyzer/relatedTests"; } -#[derive(Serialize, Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct RelatedTestsParams { - #[serde(flatten)] - pub text_document_position: lsp_types::TextDocumentPositionParams, -} - #[derive(Debug, Deserialize, Serialize)] pub struct TestInfo { pub runnable: Runnable, -- cgit v1.2.3