aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/assists/raw_string.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-10-27 08:45:59 +0000
committerAleksey Kladov <[email protected]>2019-10-27 08:53:01 +0000
commit61349a3d18353ddfbd992a3bf51a88f5f0cfcddd (patch)
tree3ba7cd2af94b8e8d9795e19165f1339213ce7cde /crates/ra_assists/src/assists/raw_string.rs
parent384032442965b70001d7c15ec0db65bfe5634ee9 (diff)
extract assist helper for getting a specific token
Diffstat (limited to 'crates/ra_assists/src/assists/raw_string.rs')
-rw-r--r--crates/ra_assists/src/assists/raw_string.rs17
1 files changed, 5 insertions, 12 deletions
diff --git a/crates/ra_assists/src/assists/raw_string.rs b/crates/ra_assists/src/assists/raw_string.rs
index 9c996c902..ea756d1ca 100644
--- a/crates/ra_assists/src/assists/raw_string.rs
+++ b/crates/ra_assists/src/assists/raw_string.rs
@@ -3,17 +3,14 @@
3use hir::db::HirDatabase; 3use hir::db::HirDatabase;
4use ra_syntax::{ 4use ra_syntax::{
5 SyntaxKind::{RAW_STRING, STRING}, 5 SyntaxKind::{RAW_STRING, STRING},
6 SyntaxToken, TextRange, TextUnit, 6 TextRange, TextUnit,
7}; 7};
8use rustc_lexer; 8use rustc_lexer;
9 9
10use crate::{Assist, AssistCtx, AssistId}; 10use crate::{Assist, AssistCtx, AssistId};
11 11
12pub(crate) fn make_raw_string(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { 12pub(crate) fn make_raw_string(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
13 let token = ctx.token_at_offset().right_biased()?; 13 let token = ctx.find_token_at_offset(STRING)?;
14 if token.kind() != STRING {
15 return None;
16 }
17 let text = token.text().as_str(); 14 let text = token.text().as_str();
18 let usual_string_range = find_usual_string_range(text)?; 15 let usual_string_range = find_usual_string_range(text)?;
19 let start_of_inside = usual_string_range.start().to_usize() + 1; 16 let start_of_inside = usual_string_range.start().to_usize() + 1;
@@ -44,7 +41,7 @@ pub(crate) fn make_raw_string(mut ctx: AssistCtx<impl HirDatabase>) -> Option<As
44} 41}
45 42
46pub(crate) fn make_usual_string(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { 43pub(crate) fn make_usual_string(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
47 let token = raw_string_token(&ctx)?; 44 let token = ctx.find_token_at_offset(RAW_STRING)?;
48 let text = token.text().as_str(); 45 let text = token.text().as_str();
49 let usual_string_range = find_usual_string_range(text)?; 46 let usual_string_range = find_usual_string_range(text)?;
50 ctx.add_action(AssistId("make_usual_string"), "make usual string", |edit| { 47 ctx.add_action(AssistId("make_usual_string"), "make usual string", |edit| {
@@ -60,7 +57,7 @@ pub(crate) fn make_usual_string(mut ctx: AssistCtx<impl HirDatabase>) -> Option<
60} 57}
61 58
62pub(crate) fn add_hash(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { 59pub(crate) fn add_hash(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
63 let token = raw_string_token(&ctx)?; 60 let token = ctx.find_token_at_offset(RAW_STRING)?;
64 ctx.add_action(AssistId("add_hash"), "add hash to raw string", |edit| { 61 ctx.add_action(AssistId("add_hash"), "add hash to raw string", |edit| {
65 edit.target(token.text_range()); 62 edit.target(token.text_range());
66 edit.insert(token.text_range().start() + TextUnit::of_char('r'), "#"); 63 edit.insert(token.text_range().start() + TextUnit::of_char('r'), "#");
@@ -70,7 +67,7 @@ pub(crate) fn add_hash(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
70} 67}
71 68
72pub(crate) fn remove_hash(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> { 69pub(crate) fn remove_hash(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist> {
73 let token = raw_string_token(&ctx)?; 70 let token = ctx.find_token_at_offset(RAW_STRING)?;
74 let text = token.text().as_str(); 71 let text = token.text().as_str();
75 if text.starts_with("r\"") { 72 if text.starts_with("r\"") {
76 // no hash to remove 73 // no hash to remove
@@ -91,10 +88,6 @@ pub(crate) fn remove_hash(mut ctx: AssistCtx<impl HirDatabase>) -> Option<Assist
91 ctx.build() 88 ctx.build()
92} 89}
93 90
94fn raw_string_token(ctx: &AssistCtx<impl HirDatabase>) -> Option<SyntaxToken> {
95 ctx.token_at_offset().right_biased().filter(|it| it.kind() == RAW_STRING)
96}
97
98fn count_hashes(s: &str) -> usize { 91fn count_hashes(s: &str) -> usize {
99 let mut max_hash_streak = 0usize; 92 let mut max_hash_streak = 0usize;
100 for idx in s.match_indices("\"#").map(|(i, _)| i) { 93 for idx in s.match_indices("\"#").map(|(i, _)| i) {