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 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);
|
||||||
|
|
|
@ -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()?;
|
||||||
|
|
|
@ -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 => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#####,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
@ -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 => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue