From 21c1504ca972d59307a065f72154e50bd32aa763 Mon Sep 17 00:00:00 2001 From: Jeremy Kolb Date: Wed, 15 Jul 2020 09:45:30 -0400 Subject: Move allow list into AssistConfig --- crates/ra_assists/src/assist_config.rs | 5 ++++- crates/ra_assists/src/assist_context.rs | 8 +++----- crates/ra_assists/src/lib.rs | 12 +++--------- crates/ra_assists/src/tests.rs | 25 ++++++++++++++----------- 4 files changed, 24 insertions(+), 26 deletions(-) (limited to 'crates/ra_assists') diff --git a/crates/ra_assists/src/assist_config.rs b/crates/ra_assists/src/assist_config.rs index c0a0226fb..cda2abfb9 100644 --- a/crates/ra_assists/src/assist_config.rs +++ b/crates/ra_assists/src/assist_config.rs @@ -4,9 +4,12 @@ //! module, and we use to statically check that we only produce snippet //! assists if we are allowed to. +use crate::AssistKind; + #[derive(Clone, Debug, PartialEq, Eq)] pub struct AssistConfig { pub snippet_cap: Option, + pub allowed: Option>, } impl AssistConfig { @@ -22,6 +25,6 @@ pub struct SnippetCap { impl Default for AssistConfig { fn default() -> Self { - AssistConfig { snippet_cap: Some(SnippetCap { _private: () }) } + AssistConfig { snippet_cap: Some(SnippetCap { _private: () }), allowed: None } } } diff --git a/crates/ra_assists/src/assist_context.rs b/crates/ra_assists/src/assist_context.rs index 9ca2cfe68..3407df856 100644 --- a/crates/ra_assists/src/assist_context.rs +++ b/crates/ra_assists/src/assist_context.rs @@ -57,7 +57,6 @@ pub(crate) struct AssistContext<'a> { pub(crate) sema: Semantics<'a, RootDatabase>, pub(crate) frange: FileRange, source_file: SourceFile, - allowed: Option>, } impl<'a> AssistContext<'a> { @@ -65,10 +64,9 @@ impl<'a> AssistContext<'a> { sema: Semantics<'a, RootDatabase>, config: &'a AssistConfig, frange: FileRange, - allowed: Option>, ) -> AssistContext<'a> { let source_file = sema.parse(frange.file_id); - AssistContext { config, sema, frange, source_file, allowed } + AssistContext { config, sema, frange, source_file } } pub(crate) fn db(&self) -> &RootDatabase { @@ -114,7 +112,7 @@ impl Assists { resolve: true, file: ctx.frange.file_id, buf: Vec::new(), - allowed: ctx.allowed.clone(), + allowed: ctx.config.allowed.clone(), } } @@ -123,7 +121,7 @@ impl Assists { resolve: false, file: ctx.frange.file_id, buf: Vec::new(), - allowed: ctx.allowed.clone(), + allowed: ctx.config.allowed.clone(), } } diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs index 13a283760..465b90415 100644 --- a/crates/ra_assists/src/lib.rs +++ b/crates/ra_assists/src/lib.rs @@ -86,14 +86,9 @@ impl Assist { /// /// Assists are returned in the "unresolved" state, that is only labels are /// returned, without actual edits. - pub fn unresolved( - db: &RootDatabase, - config: &AssistConfig, - range: FileRange, - allowed: Option>, - ) -> Vec { + pub fn unresolved(db: &RootDatabase, config: &AssistConfig, range: FileRange) -> Vec { let sema = Semantics::new(db); - let ctx = AssistContext::new(sema, config, range, allowed); + let ctx = AssistContext::new(sema, config, range); let mut acc = Assists::new_unresolved(&ctx); handlers::all().iter().for_each(|handler| { handler(&mut acc, &ctx); @@ -109,10 +104,9 @@ impl Assist { db: &RootDatabase, config: &AssistConfig, range: FileRange, - allowed: Option>, ) -> Vec { let sema = Semantics::new(db); - let ctx = AssistContext::new(sema, config, range, allowed); + let ctx = AssistContext::new(sema, config, range); let mut acc = Assists::new_resolved(&ctx); handlers::all().iter().for_each(|handler| { handler(&mut acc, &ctx); diff --git a/crates/ra_assists/src/tests.rs b/crates/ra_assists/src/tests.rs index 861622d86..18fcb9049 100644 --- a/crates/ra_assists/src/tests.rs +++ b/crates/ra_assists/src/tests.rs @@ -35,14 +35,14 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) { let before = db.file_text(file_id).to_string(); let frange = FileRange { file_id, range: selection.into() }; - let mut assist = Assist::resolved(&db, &AssistConfig::default(), frange, None) + let mut assist = Assist::resolved(&db, &AssistConfig::default(), frange) .into_iter() .find(|assist| assist.assist.id.0 == assist_id) .unwrap_or_else(|| { panic!( "\n\nAssist is not applicable: {}\nAvailable assists: {}", assist_id, - Assist::resolved(&db, &AssistConfig::default(), frange, None) + Assist::resolved(&db, &AssistConfig::default(), frange) .into_iter() .map(|assist| assist.assist.id.0) .collect::>() @@ -73,7 +73,7 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult) { let sema = Semantics::new(&db); let config = AssistConfig::default(); - let ctx = AssistContext::new(sema, &config, frange, None); + let ctx = AssistContext::new(sema, &config, frange); let mut acc = Assists::new_resolved(&ctx); handler(&mut acc, &ctx); let mut res = acc.finish_resolved(); @@ -105,7 +105,7 @@ fn assist_order_field_struct() { let (before_cursor_pos, before) = extract_offset(before); let (db, file_id) = with_single_file(&before); let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) }; - let assists = Assist::resolved(&db, &AssistConfig::default(), frange, None); + let assists = Assist::resolved(&db, &AssistConfig::default(), frange); let mut assists = assists.iter(); assert_eq!( @@ -128,7 +128,7 @@ fn assist_order_if_expr() { let (range, before) = extract_range(before); let (db, file_id) = with_single_file(&before); let frange = FileRange { file_id, range }; - let assists = Assist::resolved(&db, &AssistConfig::default(), frange, None); + let assists = Assist::resolved(&db, &AssistConfig::default(), frange); let mut assists = assists.iter(); assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); @@ -150,9 +150,10 @@ fn assist_filter_works() { let frange = FileRange { file_id, range }; { - let allowed = Some(vec![AssistKind::Refactor]); + let mut cfg = AssistConfig::default(); + cfg.allowed = Some(vec![AssistKind::Refactor]); - let assists = Assist::resolved(&db, &AssistConfig::default(), frange, allowed); + let assists = Assist::resolved(&db, &cfg, frange); let mut assists = assists.iter(); assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); @@ -160,8 +161,9 @@ fn assist_filter_works() { } { - let allowed = Some(vec![AssistKind::RefactorExtract]); - let assists = Assist::resolved(&db, &AssistConfig::default(), frange, allowed); + let mut cfg = AssistConfig::default(); + cfg.allowed = Some(vec![AssistKind::RefactorExtract]); + let assists = Assist::resolved(&db, &cfg, frange); assert_eq!(assists.len(), 1); let mut assists = assists.iter(); @@ -169,8 +171,9 @@ fn assist_filter_works() { } { - let allowed = Some(vec![AssistKind::QuickFix]); - let assists = Assist::resolved(&db, &AssistConfig::default(), frange, allowed); + let mut cfg = AssistConfig::default(); + cfg.allowed = Some(vec![AssistKind::QuickFix]); + let assists = Assist::resolved(&db, &cfg, frange); assert!(assists.is_empty(), "All asserts but quickfixes should be filtered out"); } } -- cgit v1.2.3