aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/lib.rs')
-rw-r--r--crates/ra_assists/src/lib.rs31
1 files changed, 28 insertions, 3 deletions
diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs
index 3d61fbded..13a283760 100644
--- a/crates/ra_assists/src/lib.rs
+++ b/crates/ra_assists/src/lib.rs
@@ -37,6 +37,25 @@ pub enum AssistKind {
37 RefactorRewrite, 37 RefactorRewrite,
38} 38}
39 39
40impl AssistKind {
41 pub fn contains(self, other: AssistKind) -> bool {
42 if self == other {
43 return true;
44 }
45
46 match self {
47 AssistKind::None | AssistKind::Generate => return true,
48 AssistKind::Refactor => match other {
49 AssistKind::RefactorExtract
50 | AssistKind::RefactorInline
51 | AssistKind::RefactorRewrite => return true,
52 _ => return false,
53 },
54 _ => return false,
55 }
56 }
57}
58
40/// Unique identifier of the assist, should not be shown to the user 59/// Unique identifier of the assist, should not be shown to the user
41/// directly. 60/// directly.
42#[derive(Debug, Clone, Copy, PartialEq, Eq)] 61#[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -67,9 +86,14 @@ impl Assist {
67 /// 86 ///
68 /// Assists are returned in the "unresolved" state, that is only labels are 87 /// Assists are returned in the "unresolved" state, that is only labels are
69 /// returned, without actual edits. 88 /// returned, without actual edits.
70 pub fn unresolved(db: &RootDatabase, config: &AssistConfig, range: FileRange) -> Vec<Assist> { 89 pub fn unresolved(
90 db: &RootDatabase,
91 config: &AssistConfig,
92 range: FileRange,
93 allowed: Option<Vec<AssistKind>>,
94 ) -> Vec<Assist> {
71 let sema = Semantics::new(db); 95 let sema = Semantics::new(db);
72 let ctx = AssistContext::new(sema, config, range); 96 let ctx = AssistContext::new(sema, config, range, allowed);
73 let mut acc = Assists::new_unresolved(&ctx); 97 let mut acc = Assists::new_unresolved(&ctx);
74 handlers::all().iter().for_each(|handler| { 98 handlers::all().iter().for_each(|handler| {
75 handler(&mut acc, &ctx); 99 handler(&mut acc, &ctx);
@@ -85,9 +109,10 @@ impl Assist {
85 db: &RootDatabase, 109 db: &RootDatabase,
86 config: &AssistConfig, 110 config: &AssistConfig,
87 range: FileRange, 111 range: FileRange,
112 allowed: Option<Vec<AssistKind>>,
88 ) -> Vec<ResolvedAssist> { 113 ) -> Vec<ResolvedAssist> {
89 let sema = Semantics::new(db); 114 let sema = Semantics::new(db);
90 let ctx = AssistContext::new(sema, config, range); 115 let ctx = AssistContext::new(sema, config, range, allowed);
91 let mut acc = Assists::new_resolved(&ctx); 116 let mut acc = Assists::new_resolved(&ctx);
92 handlers::all().iter().for_each(|handler| { 117 handlers::all().iter().for_each(|handler| {
93 handler(&mut acc, &ctx); 118 handler(&mut acc, &ctx);