diff options
author | Mikhail Rakhmanov <[email protected]> | 2020-06-03 17:39:01 +0100 |
---|---|---|
committer | Mikhail Rakhmanov <[email protected]> | 2020-06-03 17:39:01 +0100 |
commit | bacd0428fa0fd744eb0aac6d5d7abd18c6c707b7 (patch) | |
tree | 54ceaaeec17255753cf886da1fffc640e50df254 /crates/rust-analyzer/src/main_loop/handlers.rs | |
parent | cb482e6351c4005f29bb89d38c64c4e3f93d7a6d (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.rs | 27 |
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, ¶ms, &mut res)?; | 756 | handle_fixes(&world, ¶ms, &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, ¶ms.code_action_params.text_document.uri)?; | 781 | let file_id = from_proto::file_id(&world, ¶ms.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 | ||
796 | pub fn handle_code_lens( | 795 | pub fn handle_code_lens( |