aboutsummaryrefslogtreecommitdiff
path: root/crates/rust-analyzer/src/main_loop/handlers.rs
diff options
context:
space:
mode:
authorMikhail Rakhmanov <[email protected]>2020-06-03 17:39:01 +0100
committerMikhail Rakhmanov <[email protected]>2020-06-03 17:39:01 +0100
commitbacd0428fa0fd744eb0aac6d5d7abd18c6c707b7 (patch)
tree54ceaaeec17255753cf886da1fffc640e50df254 /crates/rust-analyzer/src/main_loop/handlers.rs
parentcb482e6351c4005f29bb89d38c64c4e3f93d7a6d (diff)
Fix review comments
Diffstat (limited to 'crates/rust-analyzer/src/main_loop/handlers.rs')
-rw-r--r--crates/rust-analyzer/src/main_loop/handlers.rs27
1 files changed, 13 insertions, 14 deletions
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs
index 3c4064441..fab82ff7e 100644
--- a/crates/rust-analyzer/src/main_loop/handlers.rs
+++ b/crates/rust-analyzer/src/main_loop/handlers.rs
@@ -756,9 +756,13 @@ pub fn handle_code_action(
756 handle_fixes(&world, &params, &mut res)?; 756 handle_fixes(&world, &params, &mut res)?;
757 757
758 if world.config.client_caps.resolve_code_action { 758 if world.config.client_caps.resolve_code_action {
759 for assist in world.analysis().unresolved_assists(&world.config.assist, frange)?.into_iter() 759 for (index, assist) in world
760 .analysis()
761 .unresolved_assists(&world.config.assist, frange)?
762 .into_iter()
763 .enumerate()
760 { 764 {
761 res.push(to_proto::unresolved_code_action(&world, assist)?); 765 res.push(to_proto::unresolved_code_action(&world, assist, index)?);
762 } 766 }
763 } else { 767 } else {
764 for assist in world.analysis().resolved_assists(&world.config.assist, frange)?.into_iter() { 768 for assist in world.analysis().resolved_assists(&world.config.assist, frange)?.into_iter() {
@@ -773,24 +777,19 @@ pub fn handle_resolve_code_action(
773 world: WorldSnapshot, 777 world: WorldSnapshot,
774 params: lsp_ext::ResolveCodeActionParams, 778 params: lsp_ext::ResolveCodeActionParams,
775) -> Result<Option<lsp_ext::SnippetWorkspaceEdit>> { 779) -> Result<Option<lsp_ext::SnippetWorkspaceEdit>> {
776 if !world.config.client_caps.resolve_code_action {
777 return Ok(None);
778 }
779
780 let _p = profile("handle_resolve_code_action"); 780 let _p = profile("handle_resolve_code_action");
781 let file_id = from_proto::file_id(&world, &params.code_action_params.text_document.uri)?; 781 let file_id = from_proto::file_id(&world, &params.code_action_params.text_document.uri)?;
782 let line_index = world.analysis().file_line_index(file_id)?; 782 let line_index = world.analysis().file_line_index(file_id)?;
783 let range = from_proto::text_range(&line_index, params.code_action_params.range); 783 let range = from_proto::text_range(&line_index, params.code_action_params.range);
784 let frange = FileRange { file_id, range }; 784 let frange = FileRange { file_id, range };
785 let mut res: Vec<lsp_ext::CodeAction> = Vec::new();
786 785
787 for assist in world.analysis().resolved_assists(&world.config.assist, frange)?.into_iter() { 786 let assists = world.analysis().resolved_assists(&world.config.assist, frange)?;
788 res.push(to_proto::resolved_code_action(&world, assist)?); 787 let id_components = params.id.split(":").collect::<Vec<&str>>();
789 } 788 let index = id_components.last().unwrap().parse::<usize>().unwrap();
790 Ok(res 789 let id_string = id_components.first().unwrap();
791 .into_iter() 790 let assist = &assists[index];
792 .find(|action| action.id.clone().unwrap() == params.id && action.title == params.label) 791 assert!(assist.assist.id.0 == *id_string);
793 .and_then(|action| action.edit)) 792 Ok(to_proto::resolved_code_action(&world, assist.clone())?.edit)
794} 793}
795 794
796pub fn handle_code_lens( 795pub fn handle_code_lens(