mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 13:03:31 +00:00
document a couple of assists
This commit is contained in:
parent
394e474479
commit
3126152a84
5 changed files with 111 additions and 53 deletions
|
@ -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);
|
||||
|
|
|
@ -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()?;
|
||||
|
|
|
@ -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 => (),
|
||||
}
|
||||
}
|
||||
"#####,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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 => (),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue