aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/rust-analyzer/src/main_loop/handlers.rs29
1 files changed, 18 insertions, 11 deletions
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs
index cae447eea..eaa43f2bd 100644
--- a/crates/rust-analyzer/src/main_loop/handlers.rs
+++ b/crates/rust-analyzer/src/main_loop/handlers.rs
@@ -404,7 +404,7 @@ pub fn handle_runnables(
404 continue; 404 continue;
405 } 405 }
406 } 406 }
407 if is_lib_target(&runnable, cargo_spec.as_ref()) { 407 if should_skip_target(&runnable, cargo_spec.as_ref()) {
408 continue; 408 continue;
409 } 409 }
410 410
@@ -812,7 +812,7 @@ pub fn handle_code_lens(
812 if snap.config.lens.runnable() { 812 if snap.config.lens.runnable() {
813 // Gather runnables 813 // Gather runnables
814 for runnable in snap.analysis().runnables(file_id)? { 814 for runnable in snap.analysis().runnables(file_id)? {
815 if is_lib_target(&runnable, cargo_spec.as_ref()) { 815 if should_skip_target(&runnable, cargo_spec.as_ref()) {
816 continue; 816 continue;
817 } 817 }
818 818
@@ -1185,6 +1185,11 @@ fn to_runnable_action(
1185 file_id: FileId, 1185 file_id: FileId,
1186 runnable: &Runnable, 1186 runnable: &Runnable,
1187) -> Option<lsp_ext::CommandLinkGroup> { 1187) -> Option<lsp_ext::CommandLinkGroup> {
1188 let cargo_spec = CargoTargetSpec::for_file(&snap, file_id).ok()?;
1189 if should_skip_target(runnable, cargo_spec.as_ref()) {
1190 return None;
1191 }
1192
1188 to_proto::runnable(snap, file_id, runnable).ok().map(|r| { 1193 to_proto::runnable(snap, file_id, runnable).ok().map(|r| {
1189 let mut group = lsp_ext::CommandLinkGroup::default(); 1194 let mut group = lsp_ext::CommandLinkGroup::default();
1190 1195
@@ -1222,16 +1227,18 @@ fn prepare_hover_actions(
1222 .collect() 1227 .collect()
1223} 1228}
1224 1229
1225fn is_lib_target(runnable: &Runnable, cargo_spec: Option<&CargoTargetSpec>) -> bool { 1230fn should_skip_target(runnable: &Runnable, cargo_spec: Option<&CargoTargetSpec>) -> bool {
1226 // Do not suggest binary run on other target than binary 1231 match runnable.kind {
1227 if let RunnableKind::Bin = runnable.kind { 1232 RunnableKind::Bin => {
1228 if let Some(spec) = cargo_spec { 1233 // Do not suggest binary run on other target than binary
1229 match spec.target_kind { 1234 match &cargo_spec {
1230 TargetKind::Bin => return true, 1235 Some(spec) => match spec.target_kind {
1231 _ => (), 1236 TargetKind::Bin => false,
1237 _ => true,
1238 },
1239 None => true,
1232 } 1240 }
1233 } 1241 }
1242 _ => false,
1234 } 1243 }
1235
1236 false
1237} 1244}