about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKirill Bulatov <mail4score@gmail.com>2021-05-03 18:16:35 +0300
committerKirill Bulatov <mail4score@gmail.com>2021-05-03 18:16:35 +0300
commit28293d370ffc4270bb6244579166f0df18962951 (patch)
treefe1261ad5d053b5f1a60b98456c2f3ecca7452e3
parent1679a376f30c5ad8971c0f855074a3f489fee5fa (diff)
downloadrust-28293d370ffc4270bb6244579166f0df18962951.tar.gz
rust-28293d370ffc4270bb6244579166f0df18962951.zip
Add docs and use better naming
-rw-r--r--crates/ide/src/lib.rs4
-rw-r--r--crates/ide_assists/src/lib.rs25
-rw-r--r--crates/rust-analyzer/src/handlers.rs4
3 files changed, 25 insertions, 8 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 6a88236e3f4..8e5b7204496 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -87,7 +87,9 @@ pub use crate::{
     },
 };
 pub use hir::{Documentation, Semantics};
-pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy};
+pub use ide_assists::{
+    Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy, SingleResolve,
+};
 pub use ide_completion::{
     CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit,
     InsertTextFormat,
diff --git a/crates/ide_assists/src/lib.rs b/crates/ide_assists/src/lib.rs
index 01addffe949..5a0047f0373 100644
--- a/crates/ide_assists/src/lib.rs
+++ b/crates/ide_assists/src/lib.rs
@@ -94,12 +94,27 @@ impl FromStr for AssistKind {
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
 pub struct AssistId(pub &'static str, pub AssistKind);
 
-// TODO kb docs
-#[derive(Debug, Clone)]
+/// A way to control how many asssist to resolve during the assist resolution.
+/// When an assist is resolved, its edits are calculated that might be costly to always do by default.
+#[derive(Debug)]
 pub enum AssistResolveStrategy {
+    /// No assists should be resolved.
     None,
+    /// All assists should be resolved.
     All,
-    Single(String, AssistKind),
+    /// Only a certain assists should be resolved.
+    Single(SingleResolve),
+}
+
+/// Hold the [`AssistId`] data of a certain assist to resolve.
+/// The original id object cannot be used due to a `'static` lifetime
+/// and the requirement to construct this struct dynamically during the resolve handling.
+#[derive(Debug)]
+pub struct SingleResolve {
+    /// The id of the assist.
+    pub assist_id: String,
+    // The kind of the assist.
+    pub assist_kind: AssistKind,
 }
 
 impl AssistResolveStrategy {
@@ -107,8 +122,8 @@ impl AssistResolveStrategy {
         match self {
             AssistResolveStrategy::None => false,
             AssistResolveStrategy::All => true,
-            AssistResolveStrategy::Single(id_to_resolve, kind) => {
-                id_to_resolve == id.0 && kind == &id.1
+            AssistResolveStrategy::Single(single_resolve) => {
+                single_resolve.assist_id == id.0 && single_resolve.assist_kind == id.1
             }
         }
     }
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs
index cd6bbf30333..304951b7d23 100644
--- a/crates/rust-analyzer/src/handlers.rs
+++ b/crates/rust-analyzer/src/handlers.rs
@@ -10,7 +10,7 @@ use std::{
 use ide::{
     AnnotationConfig, AssistKind, AssistResolveStrategy, FileId, FilePosition, FileRange,
     HoverAction, HoverGotoTypeData, Query, RangeInfo, Runnable, RunnableKind, SearchScope,
-    SourceChange, TextEdit,
+    SingleResolve, SourceChange, TextEdit,
 };
 use ide_db::SymbolKind;
 use itertools::Itertools;
@@ -1072,7 +1072,7 @@ pub(crate) fn handle_code_action_resolve(
     let assists = snap.analysis.assists_with_fixes(
         &assists_config,
         &snap.config.diagnostics(),
-        AssistResolveStrategy::Single(params.id.clone(), assist_kind),
+        AssistResolveStrategy::Single(SingleResolve { assist_id: params.id.clone(), assist_kind }),
         frange,
     )?;