Merge pull request #398 from sezna/master
Fix https://github.com/nrc/rustfmt/issues/389
This commit is contained in:
commit
251af6e161
@ -39,6 +39,7 @@ pub fn rewrite_string<'a>(s: &str, fmt: &StringFormat<'a>) -> Option<String> {
|
||||
|
||||
let graphemes = UnicodeSegmentation::graphemes(&*stripped_str, false).collect::<Vec<&str>>();
|
||||
let indent = fmt.offset.to_string(fmt.config);
|
||||
let punctuation = ":,;.";
|
||||
|
||||
let mut cur_start = 0;
|
||||
let mut result = String::with_capacity(round_up_to_power_of_two(s.len()));
|
||||
@ -62,12 +63,19 @@ pub fn rewrite_string<'a>(s: &str, fmt: &StringFormat<'a>) -> Option<String> {
|
||||
while !graphemes[cur_end - 1].trim().is_empty() {
|
||||
cur_end -= 1;
|
||||
if cur_end - cur_start < MIN_STRING {
|
||||
// We can't break at whitespace, fall back to splitting
|
||||
// anywhere that doesn't break an escape sequence.
|
||||
cur_end = cur_start + max_chars;
|
||||
while graphemes[cur_end - 1] == "\\" {
|
||||
// Look for punctuation to break on.
|
||||
while (!punctuation.contains(graphemes[cur_end - 1])) && cur_end > 1 {
|
||||
cur_end -= 1;
|
||||
}
|
||||
// We can't break at whitespace or punctuation, fall back to splitting
|
||||
// anywhere that doesn't break an escape sequence.
|
||||
if cur_end < cur_start + MIN_STRING {
|
||||
cur_end = cur_start + max_chars;
|
||||
while graphemes[cur_end - 1] == "\\" && cur_end > 1 {
|
||||
cur_end -= 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
5
tests/source/string_punctuation.rs
Normal file
5
tests/source/string_punctuation.rs
Normal file
@ -0,0 +1,5 @@
|
||||
fn main() {
|
||||
println!("ThisIsAReallyLongStringWithNoSpaces.It_should_prefer_to_break_onpunctuation:Likethisssssssssssss");
|
||||
format!("{}__{}__{}ItShouldOnlyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyNoticeSemicolonsPeriodsColonsAndCommasAndResortToMid-CharBreaksAfterPunctuation{}{}",x,y,z,a,b);
|
||||
println!("aaaaaaaaaaaaaaaaaaaaaaaaaaaaalhijalfhiigjapdighjapdigjapdighdapighapdighpaidhg;adopgihadoguaadbadgad,qeoihapethae8t0aet8haetadbjtaeg;ooeouthaoeutgadlgajduabgoiuadogabudogubaodugbadgadgadga;adoughaoeugbaouea");
|
||||
}
|
14
tests/target/string_punctuation.rs
Normal file
14
tests/target/string_punctuation.rs
Normal file
@ -0,0 +1,14 @@
|
||||
fn main() {
|
||||
println!("ThisIsAReallyLongStringWithNoSpaces.It_should_prefer_to_break_onpunctuation:\
|
||||
Likethisssssssssssss");
|
||||
format!("{}__{}__{}ItShouldOnlyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyNoticeSemicolonsPeriodsColo\
|
||||
nsAndCommasAndResortToMid-CharBreaksAfterPunctuation{}{}",
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
a,
|
||||
b);
|
||||
println!("aaaaaaaaaaaaaaaaaaaaaaaaaaaaalhijalfhiigjapdighjapdigjapdighdapighapdighpaidhg;\
|
||||
adopgihadoguaadbadgad,qeoihapethae8t0aet8haetadbjtaeg;\
|
||||
ooeouthaoeutgadlgajduabgoiuadogabudogubaodugbadgadgadga;adoughaoeugbaouea");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user