diff options
| author | Kirill Bulatov <mail4score@gmail.com> | 2021-05-03 18:16:35 +0300 |
|---|---|---|
| committer | Kirill Bulatov <mail4score@gmail.com> | 2021-05-03 18:16:35 +0300 |
| commit | 28293d370ffc4270bb6244579166f0df18962951 (patch) | |
| tree | fe1261ad5d053b5f1a60b98456c2f3ecca7452e3 | |
| parent | 1679a376f30c5ad8971c0f855074a3f489fee5fa (diff) | |
| download | rust-28293d370ffc4270bb6244579166f0df18962951.tar.gz rust-28293d370ffc4270bb6244579166f0df18962951.zip | |
Add docs and use better naming
| -rw-r--r-- | crates/ide/src/lib.rs | 4 | ||||
| -rw-r--r-- | crates/ide_assists/src/lib.rs | 25 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 4 |
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, )?; |
