From c22c0395780c548d7b7fb557b1879e998921b01d Mon Sep 17 00:00:00 2001 From: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> Date: Sat, 17 Oct 2020 16:08:25 +0200 Subject: Assist: replace string with char Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com> --- .../src/handlers/replace_string_with_char.rs | 30 ++++++++++++++++------ crates/assists/src/tests/generated.rs | 17 ++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) (limited to 'crates/assists/src') 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 @@ -use std::borrow::Cow; - use syntax::{ - ast::{self, HasQuotes, HasStringValue}, + ast::{self, HasStringValue}, AstToken, - SyntaxKind::{RAW_STRING, STRING}, - TextRange, TextSize, + SyntaxKind::STRING, }; -use test_utils::mark; use crate::{AssistContext, AssistId, AssistKind, Assists}; // Assist: replace_string_with_char // -// Replace string with char +// Replace string with char. // // ``` // fn main() { @@ -29,7 +25,8 @@ pub(crate) fn replace_string_with_char(acc: &mut Assists, ctx: &AssistContext) - let token = ctx.find_token_at_offset(STRING).and_then(ast::String::cast)?; let value = token.value()?; let target = token.syntax().text_range(); - if value.len() > 1 || value.is_empty() { + + if value.is_empty() || value.chars().count() > 1 { return None; } @@ -79,6 +76,23 @@ mod tests { ) } + #[test] + fn replace_string_with_char_assist_with_emoji() { + check_assist( + replace_string_with_char, + r#" + fn f() { + let s = "<|>😀"; + } + "#, + r##" + fn f() { + let s = '😀'; + } + "##, + ) + } + #[test] fn replace_string_with_char_assist_not_applicable() { check_assist_not_applicable( diff --git a/crates/assists/src/tests/generated.rs b/crates/assists/src/tests/generated.rs index 41f536574..6fb2a7cac 100644 --- a/crates/assists/src/tests/generated.rs +++ b/crates/assists/src/tests/generated.rs @@ -881,6 +881,23 @@ fn process(map: HashMap) {} ) } +#[test] +fn doctest_replace_string_with_char() { + check_doc_test( + "replace_string_with_char", + r#####" +fn main() { + find("{<|>"); +} +"#####, + r#####" +fn main() { + find('{'); +} +"#####, + ) +} + #[test] fn doctest_replace_unwrap_with_match() { check_doc_test( -- cgit v1.2.3