document a couple of assists

This commit is contained in:
Aleksey Kladov 2019-10-26 17:37:04 +03:00
parent 394e474479
commit 3126152a84
5 changed files with 111 additions and 53 deletions

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use hir::db::HirDatabase; use hir::db::HirDatabase;
use ra_syntax::{ use ra_syntax::{
ast::{self, NameOwner, VisibilityOwner}, ast::{self, NameOwner, VisibilityOwner},
@ -13,6 +11,17 @@ use ra_syntax::{
use crate::{Assist, AssistCtx, AssistId}; 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> { pub(crate) fn change_visibility(ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
if let Some(vis) = ctx.node_at_offset::<ast::Visibility>() { if let Some(vis) = ctx.node_at_offset::<ast::Visibility>() {
return change_vis(ctx, vis); return change_vis(ctx, vis);

View file

@ -7,6 +7,30 @@ use ra_syntax::ast::{self, edit::IndentLevel, make, AstNode, NameOwner};
use crate::{Assist, AssistCtx, AssistId}; 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> { pub(crate) fn fill_match_arms(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
let match_expr = ctx.node_at_offset::<ast::MatchExpr>()?; let match_expr = ctx.node_at_offset::<ast::MatchExpr>()?;
let match_arm_list = match_expr.match_arm_list()?; let match_arm_list = match_expr.match_arm_list()?;

View file

@ -141,6 +141,19 @@ fn main() {
) )
} }
#[test]
fn doctest_change_visibility() {
check(
"change_visibility",
r#####"
fn<|> frobnicate() {}
"#####,
r#####"
pub(crate) fn frobnicate() {}
"#####,
)
}
#[test] #[test]
fn doctest_convert_to_guarded_return() { fn doctest_convert_to_guarded_return() {
check( 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 => (),
}
}
"#####,
)
}

View file

@ -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` ## `convert_to_guarded_return`
Replace a large conditional with a guarded return. Replace a large conditional with a guarded return.
@ -159,3 +171,28 @@ fn main() {
bar(); 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 => (),
}
}
```

View file

@ -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 - Fill struct fields
```rust ```rust