diff options
| author | Aleksey Kladov <aleksey.kladov@gmail.com> | 2020-07-18 14:48:28 +0200 |
|---|---|---|
| committer | Aleksey Kladov <aleksey.kladov@gmail.com> | 2020-07-18 14:48:28 +0200 |
| commit | a28aa175d43d9f2db3e18cc83005601cf8a26c8d (patch) | |
| tree | f4b3545ea041829809e65b026ac034d726d0783f | |
| parent | 2777f8c2950f3d204b7ecbf40785fe8fc3523fc1 (diff) | |
| download | rust-a28aa175d43d9f2db3e18cc83005601cf8a26c8d.tar.gz rust-a28aa175d43d9f2db3e18cc83005601cf8a26c8d.zip | |
Add turbo-fish works after `()`
| -rw-r--r-- | crates/ra_assists/src/handlers/add_turbo_fish.rs | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/crates/ra_assists/src/handlers/add_turbo_fish.rs b/crates/ra_assists/src/handlers/add_turbo_fish.rs index f7e1a7b05df..0c565e89af8 100644 --- a/crates/ra_assists/src/handlers/add_turbo_fish.rs +++ b/crates/ra_assists/src/handlers/add_turbo_fish.rs @@ -25,7 +25,14 @@ use crate::{ // } // ``` pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { - let ident = ctx.find_token_at_offset(SyntaxKind::IDENT)?; + let ident = ctx.find_token_at_offset(SyntaxKind::IDENT).or_else(|| { + let arg_list = ctx.find_node_at_offset::<ast::ArgList>()?; + if arg_list.args().count() > 0 { + return None; + } + mark::hit!(add_turbo_fish_after_call); + arg_list.l_paren_token()?.prev_token().filter(|it| it.kind() == SyntaxKind::IDENT) + })?; let next_token = ident.next_token()?; if next_token.kind() == T![::] { mark::hit!(add_turbo_fish_one_fish_is_enough); @@ -83,6 +90,26 @@ fn main() { } #[test] + fn add_turbo_fish_after_call() { + mark::check!(add_turbo_fish_after_call); + check_assist( + add_turbo_fish, + r#" +fn make<T>() -> T {} +fn main() { + make()<|>; +} +"#, + r#" +fn make<T>() -> T {} +fn main() { + make::<${0:_}>(); +} +"#, + ); + } + + #[test] fn add_turbo_fish_method() { check_assist( add_turbo_fish, |
