diff options
-rw-r--r-- | crates/ra_assists/src/assists/change_visibility.rs | 13 | ||||
-rw-r--r-- | crates/ra_assists/src/assists/fill_match_arms.rs | 24 | ||||
-rw-r--r-- | crates/ra_assists/src/doc_tests/generated.rs | 39 | ||||
-rw-r--r-- | docs/user/assists.md | 37 | ||||
-rw-r--r-- | docs/user/features.md | 51 |
5 files changed, 111 insertions, 53 deletions
diff --git a/crates/ra_assists/src/assists/change_visibility.rs b/crates/ra_assists/src/assists/change_visibility.rs index df92c6b67..88118cdf7 100644 --- a/crates/ra_assists/src/assists/change_visibility.rs +++ b/crates/ra_assists/src/assists/change_visibility.rs | |||
@@ -1,5 +1,3 @@ | |||
1 | //! FIXME: write short doc here | ||
2 | |||
3 | use hir::db::HirDatabase; | 1 | use hir::db::HirDatabase; |
4 | use ra_syntax::{ | 2 | use ra_syntax::{ |
5 | ast::{self, NameOwner, VisibilityOwner}, | 3 | ast::{self, NameOwner, VisibilityOwner}, |
@@ -13,6 +11,17 @@ use ra_syntax::{ | |||
13 | 11 | ||
14 | use crate::{Assist, AssistCtx, AssistId}; | 12 | use crate::{Assist, AssistCtx, AssistId}; |
15 | 13 | ||
14 | // Assist: change_visibility | ||
15 | // | ||
16 | // Adds or changes existing visibility specifier. | ||
17 | // | ||
18 | // ``` | ||
19 | // fn<|> frobnicate() {} | ||
20 | // ``` | ||
21 | // -> | ||
22 | // ``` | ||
23 | // pub(crate) fn frobnicate() {} | ||
24 | // ``` | ||
16 | pub(crate) fn change_visibility(ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { | 25 | pub(crate) fn change_visibility(ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { |
17 | if let Some(vis) = ctx.node_at_offset::<ast::Visibility>() { | 26 | if let Some(vis) = ctx.node_at_offset::<ast::Visibility>() { |
18 | return change_vis(ctx, vis); | 27 | return change_vis(ctx, vis); |
diff --git a/crates/ra_assists/src/assists/fill_match_arms.rs b/crates/ra_assists/src/assists/fill_match_arms.rs index e3f30b5de..13b98d033 100644 --- a/crates/ra_assists/src/assists/fill_match_arms.rs +++ b/crates/ra_assists/src/assists/fill_match_arms.rs | |||
@@ -7,6 +7,30 @@ use ra_syntax::ast::{self, edit::IndentLevel, make, AstNode, NameOwner}; | |||
7 | 7 | ||
8 | use crate::{Assist, AssistCtx, AssistId}; | 8 | use crate::{Assist, AssistCtx, AssistId}; |
9 | 9 | ||
10 | // Assist: fill_match_arms | ||
11 | // | ||
12 | // Adds missing clauses to a `match` expression. | ||
13 | // | ||
14 | // ``` | ||
15 | // enum Action { Move { distance: u32 }, Stop } | ||
16 | // | ||
17 | // fn handle(action: Action) { | ||
18 | // match action { | ||
19 | // <|> | ||
20 | // } | ||
21 | // } | ||
22 | // ``` | ||
23 | // -> | ||
24 | // ``` | ||
25 | // enum Action { Move { distance: u32 }, Stop } | ||
26 | // | ||
27 | // fn handle(action: Action) { | ||
28 | // match action { | ||
29 | // Action::Move{ distance } => (), | ||
30 | // Action::Stop => (), | ||
31 | // } | ||
32 | // } | ||
33 | // ``` | ||
10 | pub(crate) fn fill_match_arms(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { | 34 | pub(crate) fn fill_match_arms(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { |
11 | let match_expr = ctx.node_at_offset::<ast::MatchExpr>()?; | 35 | let match_expr = ctx.node_at_offset::<ast::MatchExpr>()?; |
12 | let match_arm_list = match_expr.match_arm_list()?; | 36 | let match_arm_list = match_expr.match_arm_list()?; |
diff --git a/crates/ra_assists/src/doc_tests/generated.rs b/crates/ra_assists/src/doc_tests/generated.rs index 76d86b93d..2f36c3baa 100644 --- a/crates/ra_assists/src/doc_tests/generated.rs +++ b/crates/ra_assists/src/doc_tests/generated.rs | |||
@@ -142,6 +142,19 @@ fn main() { | |||
142 | } | 142 | } |
143 | 143 | ||
144 | #[test] | 144 | #[test] |
145 | fn doctest_change_visibility() { | ||
146 | check( | ||
147 | "change_visibility", | ||
148 | r#####" | ||
149 | fn<|> frobnicate() {} | ||
150 | "#####, | ||
151 | r#####" | ||
152 | pub(crate) fn frobnicate() {} | ||
153 | "#####, | ||
154 | ) | ||
155 | } | ||
156 | |||
157 | #[test] | ||
145 | fn doctest_convert_to_guarded_return() { | 158 | fn doctest_convert_to_guarded_return() { |
146 | check( | 159 | check( |
147 | "convert_to_guarded_return", | 160 | "convert_to_guarded_return", |
@@ -164,3 +177,29 @@ fn main() { | |||
164 | "#####, | 177 | "#####, |
165 | ) | 178 | ) |
166 | } | 179 | } |
180 | |||
181 | #[test] | ||
182 | fn doctest_fill_match_arms() { | ||
183 | check( | ||
184 | "fill_match_arms", | ||
185 | r#####" | ||
186 | enum Action { Move { distance: u32 }, Stop } | ||
187 | |||
188 | fn handle(action: Action) { | ||
189 | match action { | ||
190 | <|> | ||
191 | } | ||
192 | } | ||
193 | "#####, | ||
194 | r#####" | ||
195 | enum Action { Move { distance: u32 }, Stop } | ||
196 | |||
197 | fn handle(action: Action) { | ||
198 | match action { | ||
199 | Action::Move{ distance } => (), | ||
200 | Action::Stop => (), | ||
201 | } | ||
202 | } | ||
203 | "#####, | ||
204 | ) | ||
205 | } | ||
diff --git a/docs/user/assists.md b/docs/user/assists.md index eeb486832..7a64c80ad 100644 --- a/docs/user/assists.md +++ b/docs/user/assists.md | |||
@@ -137,6 +137,18 @@ fn main() { | |||
137 | } | 137 | } |
138 | ``` | 138 | ``` |
139 | 139 | ||
140 | ## `change_visibility` | ||
141 | |||
142 | Adds or changes existing visibility specifier. | ||
143 | |||
144 | ```rust | ||
145 | // BEFORE | ||
146 | fn<|> frobnicate() {} | ||
147 | |||
148 | // AFTER | ||
149 | pub(crate) fn frobnicate() {} | ||
150 | ``` | ||
151 | |||
140 | ## `convert_to_guarded_return` | 152 | ## `convert_to_guarded_return` |
141 | 153 | ||
142 | Replace a large conditional with a guarded return. | 154 | Replace a large conditional with a guarded return. |
@@ -159,3 +171,28 @@ fn main() { | |||
159 | bar(); | 171 | bar(); |
160 | } | 172 | } |
161 | ``` | 173 | ``` |
174 | |||
175 | ## `fill_match_arms` | ||
176 | |||
177 | Adds missing clauses to a `match` expression. | ||
178 | |||
179 | ```rust | ||
180 | // BEFORE | ||
181 | enum Action { Move { distance: u32 }, Stop } | ||
182 | |||
183 | fn handle(action: Action) { | ||
184 | match action { | ||
185 | <|> | ||
186 | } | ||
187 | } | ||
188 | |||
189 | // AFTER | ||
190 | enum Action { Move { distance: u32 }, Stop } | ||
191 | |||
192 | fn handle(action: Action) { | ||
193 | match action { | ||
194 | Action::Move{ distance } => (), | ||
195 | Action::Stop => (), | ||
196 | } | ||
197 | } | ||
198 | ``` | ||
diff --git a/docs/user/features.md b/docs/user/features.md index acf092cec..39dab710d 100644 --- a/docs/user/features.md +++ b/docs/user/features.md | |||
@@ -118,57 +118,6 @@ impl Debug<|> for Foo { | |||
118 | } | 118 | } |
119 | ``` | 119 | ``` |
120 | 120 | ||
121 | - Change Visibility | ||
122 | |||
123 | ```rust | ||
124 | // before: | ||
125 | <|>fn foo() {} | ||
126 | |||
127 | // after: | ||
128 | <|>pub(crate) fn foo() {} | ||
129 | |||
130 | // after: | ||
131 | <|>pub fn foo() {} | ||
132 | ``` | ||
133 | |||
134 | - Fill match arms | ||
135 | |||
136 | ```rust | ||
137 | // before: | ||
138 | enum A { | ||
139 | As, | ||
140 | Bs, | ||
141 | Cs(String), | ||
142 | Ds(String, String), | ||
143 | Es{x: usize, y: usize} | ||
144 | } | ||
145 | |||
146 | fn main() { | ||
147 | let a = A::As; | ||
148 | match a<|> {} | ||
149 | } | ||
150 | |||
151 | // after: | ||
152 | enum A { | ||
153 | As, | ||
154 | Bs, | ||
155 | Cs(String), | ||
156 | Ds(String, String), | ||
157 | Es{x: usize, y: usize} | ||
158 | } | ||
159 | |||
160 | fn main() { | ||
161 | let a = A::As; | ||
162 | match <|>a { | ||
163 | A::As => (), | ||
164 | A::Bs => (), | ||
165 | A::Cs(_) => (), | ||
166 | A::Ds(_, _) => (), | ||
167 | A::Es{x, y} => (), | ||
168 | } | ||
169 | } | ||
170 | ``` | ||
171 | |||
172 | - Fill struct fields | 121 | - Fill struct fields |
173 | 122 | ||
174 | ```rust | 123 | ```rust |