diff options
author | Benjamin Coenen <[email protected]> | 2020-10-17 15:08:25 +0100 |
---|---|---|
committer | Benjamin Coenen <[email protected]> | 2020-10-20 14:57:50 +0100 |
commit | c22c0395780c548d7b7fb557b1879e998921b01d (patch) | |
tree | c0dc9fa0a4ce3879f7fa34daab264e01b20da349 /crates/assists/src/handlers | |
parent | 62192cede3567df632c819656cc28ec3b2d2f5d6 (diff) |
Assist: replace string with char
Signed-off-by: Benjamin Coenen <[email protected]>
Diffstat (limited to 'crates/assists/src/handlers')
-rw-r--r-- | crates/assists/src/handlers/replace_string_with_char.rs | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/crates/assists/src/handlers/replace_string_with_char.rs b/crates/assists/src/handlers/replace_string_with_char.rs index 3dc19431c..8408e4463 100644 --- a/crates/assists/src/handlers/replace_string_with_char.rs +++ b/crates/assists/src/handlers/replace_string_with_char.rs | |||
@@ -1,18 +1,14 @@ | |||
1 | use std::borrow::Cow; | ||
2 | |||
3 | use syntax::{ | 1 | use syntax::{ |
4 | ast::{self, HasQuotes, HasStringValue}, | 2 | ast::{self, HasStringValue}, |
5 | AstToken, | 3 | AstToken, |
6 | SyntaxKind::{RAW_STRING, STRING}, | 4 | SyntaxKind::STRING, |
7 | TextRange, TextSize, | ||
8 | }; | 5 | }; |
9 | use test_utils::mark; | ||
10 | 6 | ||
11 | use crate::{AssistContext, AssistId, AssistKind, Assists}; | 7 | use crate::{AssistContext, AssistId, AssistKind, Assists}; |
12 | 8 | ||
13 | // Assist: replace_string_with_char | 9 | // Assist: replace_string_with_char |
14 | // | 10 | // |
15 | // Replace string with char | 11 | // Replace string with char. |
16 | // | 12 | // |
17 | // ``` | 13 | // ``` |
18 | // fn main() { | 14 | // fn main() { |
@@ -29,7 +25,8 @@ pub(crate) fn replace_string_with_char(acc: &mut Assists, ctx: &AssistContext) - | |||
29 | let token = ctx.find_token_at_offset(STRING).and_then(ast::String::cast)?; | 25 | let token = ctx.find_token_at_offset(STRING).and_then(ast::String::cast)?; |
30 | let value = token.value()?; | 26 | let value = token.value()?; |
31 | let target = token.syntax().text_range(); | 27 | let target = token.syntax().text_range(); |
32 | if value.len() > 1 || value.is_empty() { | 28 | |
29 | if value.is_empty() || value.chars().count() > 1 { | ||
33 | return None; | 30 | return None; |
34 | } | 31 | } |
35 | 32 | ||
@@ -80,6 +77,23 @@ mod tests { | |||
80 | } | 77 | } |
81 | 78 | ||
82 | #[test] | 79 | #[test] |
80 | fn replace_string_with_char_assist_with_emoji() { | ||
81 | check_assist( | ||
82 | replace_string_with_char, | ||
83 | r#" | ||
84 | fn f() { | ||
85 | let s = "<|>😀"; | ||
86 | } | ||
87 | "#, | ||
88 | r##" | ||
89 | fn f() { | ||
90 | let s = '😀'; | ||
91 | } | ||
92 | "##, | ||
93 | ) | ||
94 | } | ||
95 | |||
96 | #[test] | ||
83 | fn replace_string_with_char_assist_not_applicable() { | 97 | fn replace_string_with_char_assist_not_applicable() { |
84 | check_assist_not_applicable( | 98 | check_assist_not_applicable( |
85 | replace_string_with_char, | 99 | replace_string_with_char, |