From e5cdcb8b124f5b7d59950429787e760e46388f72 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 3 May 2021 17:08:09 +0300 Subject: Add a way to resolve certain assists --- crates/ide/src/ssr.rs | 55 ++++++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 31 deletions(-) (limited to 'crates/ide/src/ssr.rs') diff --git a/crates/ide/src/ssr.rs b/crates/ide/src/ssr.rs index f3638d928..785ce3010 100644 --- a/crates/ide/src/ssr.rs +++ b/crates/ide/src/ssr.rs @@ -2,18 +2,23 @@ //! assist in ide_assists because that would require the ide_assists crate //! depend on the ide_ssr crate. -use ide_assists::{Assist, AssistId, AssistKind, GroupLabel}; +use ide_assists::{Assist, AssistId, AssistKind, AssistResolveStrategy, GroupLabel}; use ide_db::{base_db::FileRange, label::Label, source_change::SourceChange, RootDatabase}; -pub(crate) fn add_ssr_assist( +pub(crate) fn ssr_assists( db: &RootDatabase, - base: &mut Vec, - resolve: bool, + resolve: AssistResolveStrategy, frange: FileRange, -) -> Option<()> { - let (match_finder, comment_range) = ide_ssr::ssr_from_comment(db, frange)?; +) -> Vec { + let mut ssr_assists = Vec::with_capacity(2); - let (source_change_for_file, source_change_for_workspace) = if resolve { + let (match_finder, comment_range) = match ide_ssr::ssr_from_comment(db, frange) { + Some((match_finder, comment_range)) => (match_finder, comment_range), + None => return ssr_assists, + }; + let id = AssistId("ssr", AssistKind::RefactorRewrite); + + let (source_change_for_file, source_change_for_workspace) = if resolve.should_resolve(&id) { let edits = match_finder.edits(); let source_change_for_file = { @@ -35,16 +40,17 @@ pub(crate) fn add_ssr_assist( for (label, source_change) in assists.into_iter() { let assist = Assist { - id: AssistId("ssr", AssistKind::RefactorRewrite), + id, label: Label::new(label), group: Some(GroupLabel("Apply SSR".into())), target: comment_range, source_change, }; - base.push(assist); + ssr_assists.push(assist); } - Some(()) + + ssr_assists } #[cfg(test)] @@ -52,7 +58,7 @@ mod tests { use std::sync::Arc; use expect_test::expect; - use ide_assists::Assist; + use ide_assists::{Assist, AssistResolveStrategy}; use ide_db::{ base_db::{fixture::WithFixture, salsa::Durability, FileRange}, symbol_index::SymbolsDatabase, @@ -60,24 +66,14 @@ mod tests { }; use rustc_hash::FxHashSet; - use super::add_ssr_assist; + use super::ssr_assists; - fn get_assists(ra_fixture: &str, resolve: bool) -> Vec { + fn get_assists(ra_fixture: &str, resolve: AssistResolveStrategy) -> Vec { let (mut db, file_id, range_or_offset) = RootDatabase::with_range_or_offset(ra_fixture); let mut local_roots = FxHashSet::default(); local_roots.insert(ide_db::base_db::fixture::WORKSPACE); db.set_local_roots_with_durability(Arc::new(local_roots), Durability::HIGH); - - let mut assists = vec![]; - - add_ssr_assist( - &db, - &mut assists, - resolve, - FileRange { file_id, range: range_or_offset.into() }, - ); - - assists + ssr_assists(&db, resolve, FileRange { file_id, range: range_or_offset.into() }) } #[test] @@ -88,16 +84,14 @@ mod tests { // This is foo $0 fn foo() {} "#; - let resolve = true; - - let assists = get_assists(ra_fixture, resolve); + let assists = get_assists(ra_fixture, AssistResolveStrategy::All); assert_eq!(0, assists.len()); } + // TODO kb add partial resolve test #[test] fn resolve_edits_true() { - let resolve = true; let assists = get_assists( r#" //- /lib.rs @@ -109,7 +103,7 @@ mod tests { //- /bar.rs fn bar() { 2 } "#, - resolve, + AssistResolveStrategy::All, ); assert_eq!(2, assists.len()); @@ -200,7 +194,6 @@ mod tests { #[test] fn resolve_edits_false() { - let resolve = false; let assists = get_assists( r#" //- /lib.rs @@ -212,7 +205,7 @@ mod tests { //- /bar.rs fn bar() { 2 } "#, - resolve, + AssistResolveStrategy::None, ); assert_eq!(2, assists.len()); -- cgit v1.2.3