From 3126152a84e08a80659d49d735d03628154564ed Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Sat, 26 Oct 2019 17:37:04 +0300
Subject: [PATCH] document a couple of assists

---
 .../src/assists/change_visibility.rs          | 13 ++++-
 .../ra_assists/src/assists/fill_match_arms.rs | 24 +++++++++
 crates/ra_assists/src/doc_tests/generated.rs  | 39 ++++++++++++++
 docs/user/assists.md                          | 37 ++++++++++++++
 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 df92c6b67c9..88118cdf7c0 100644
--- a/crates/ra_assists/src/assists/change_visibility.rs
+++ b/crates/ra_assists/src/assists/change_visibility.rs
@@ -1,5 +1,3 @@
-//! FIXME: write short doc here
-
 use hir::db::HirDatabase;
 use ra_syntax::{
     ast::{self, NameOwner, VisibilityOwner},
@@ -13,6 +11,17 @@ use ra_syntax::{
 
 use crate::{Assist, AssistCtx, AssistId};
 
+// Assist: change_visibility
+//
+// Adds or changes existing visibility specifier.
+//
+// ```
+// fn<|> frobnicate() {}
+// ```
+// ->
+// ```
+// pub(crate) fn frobnicate() {}
+// ```
 pub(crate) fn change_visibility(ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
     if let Some(vis) = ctx.node_at_offset::<ast::Visibility>() {
         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 e3f30b5defc..13b98d03335 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};
 
 use crate::{Assist, AssistCtx, AssistId};
 
+// Assist: fill_match_arms
+//
+// Adds missing clauses to a `match` expression.
+//
+// ```
+// enum Action { Move { distance: u32 }, Stop }
+//
+// fn handle(action: Action) {
+//     match action {
+//         <|>
+//     }
+// }
+// ```
+// ->
+// ```
+// enum Action { Move { distance: u32 }, Stop }
+//
+// fn handle(action: Action) {
+//     match action {
+//         Action::Move{ distance } => (),
+//         Action::Stop => (),
+//     }
+// }
+// ```
 pub(crate) fn fill_match_arms(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
     let match_expr = ctx.node_at_offset::<ast::MatchExpr>()?;
     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 76d86b93dad..2f36c3baa31 100644
--- a/crates/ra_assists/src/doc_tests/generated.rs
+++ b/crates/ra_assists/src/doc_tests/generated.rs
@@ -141,6 +141,19 @@ fn main() {
     )
 }
 
+#[test]
+fn doctest_change_visibility() {
+    check(
+        "change_visibility",
+        r#####"
+fn<|> frobnicate() {}
+"#####,
+        r#####"
+pub(crate) fn frobnicate() {}
+"#####,
+    )
+}
+
 #[test]
 fn doctest_convert_to_guarded_return() {
     check(
@@ -164,3 +177,29 @@ fn main() {
 "#####,
     )
 }
+
+#[test]
+fn doctest_fill_match_arms() {
+    check(
+        "fill_match_arms",
+        r#####"
+enum Action { Move { distance: u32 }, Stop }
+
+fn handle(action: Action) {
+    match action {
+        <|>
+    }
+}
+"#####,
+        r#####"
+enum Action { Move { distance: u32 }, Stop }
+
+fn handle(action: Action) {
+    match action {
+        Action::Move{ distance } => (),
+        Action::Stop => (),
+    }
+}
+"#####,
+    )
+}
diff --git a/docs/user/assists.md b/docs/user/assists.md
index eeb48683217..7a64c80ad59 100644
--- a/docs/user/assists.md
+++ b/docs/user/assists.md
@@ -137,6 +137,18 @@ fn main() {
 }
 ```
 
+## `change_visibility`
+
+Adds or changes existing visibility specifier.
+
+```rust
+// BEFORE
+fn<|> frobnicate() {}
+
+// AFTER
+pub(crate) fn frobnicate() {}
+```
+
 ## `convert_to_guarded_return`
 
 Replace a large conditional with a guarded return.
@@ -159,3 +171,28 @@ fn main() {
     bar();
 }
 ```
+
+## `fill_match_arms`
+
+Adds missing clauses to a `match` expression.
+
+```rust
+// BEFORE
+enum Action { Move { distance: u32 }, Stop }
+
+fn handle(action: Action) {
+    match action {
+        <|>
+    }
+}
+
+// AFTER
+enum Action { Move { distance: u32 }, Stop }
+
+fn handle(action: Action) {
+    match action {
+        Action::Move{ distance } => (),
+        Action::Stop => (),
+    }
+}
+```
diff --git a/docs/user/features.md b/docs/user/features.md
index acf092cec1b..39dab710dd2 100644
--- a/docs/user/features.md
+++ b/docs/user/features.md
@@ -118,57 +118,6 @@ impl Debug<|> for Foo {
 }
 ```
 
-- Change Visibility
-
-```rust
-// before:
-<|>fn foo() {}
-
-// after:
-<|>pub(crate) fn foo() {}
-
-// after:
-<|>pub fn foo() {}
-```
-
-- Fill match arms
-
-```rust
-// before:
-enum A {
-    As,
-    Bs,
-    Cs(String),
-    Ds(String, String),
-    Es{x: usize, y: usize}
-}
-
-fn main() {
-    let a = A::As;
-    match a<|> {}
-}
-
-// after:
-enum A {
-    As,
-    Bs,
-    Cs(String),
-    Ds(String, String),
-    Es{x: usize, y: usize}
-}
-
-fn main() {
-    let a = A::As;
-    match <|>a {
-        A::As => (),
-        A::Bs => (),
-        A::Cs(_) => (),
-        A::Ds(_, _) => (),
-        A::Es{x, y} => (),
-    }
-}
-```
-
 - Fill struct fields
 
 ```rust