If a string goes over-width, give up formatting it

Logic here is that the original might be better and at best we'll only make it a different kind of bad.

Fixes #1237
This commit is contained in:
Nick Cameron 2017-01-06 16:35:28 +13:00
parent 32cb839855
commit 6ecf5b8e84
5 changed files with 47 additions and 18 deletions

View File

@ -64,7 +64,7 @@ fn format_expr(expr: &ast::Expr,
ast::ExprKind::Lit(ref l) => {
match l.node {
ast::LitKind::Str(_, ast::StrStyle::Cooked) => {
rewrite_string_lit(context, l.span, width, offset)
Some(rewrite_string_lit(context, l.span, width, offset))
}
_ => {
wrap_str(context.snippet(expr.span),
@ -1457,16 +1457,16 @@ fn rewrite_string_lit(context: &RewriteContext,
span: Span,
width: usize,
offset: Indent)
-> Option<String> {
-> String {
let string_lit = context.snippet(span);
if !context.config.format_strings && !context.config.force_format_strings {
return Some(string_lit);
return string_lit;
}
if !context.config.force_format_strings &&
!string_requires_rewrite(context, span, &string_lit, width, offset) {
return Some(string_lit);
return string_lit;
}
let fmt = StringFormat {
@ -1483,7 +1483,7 @@ fn rewrite_string_lit(context: &RewriteContext,
// Remove the quote characters.
let str_lit = &string_lit[1..string_lit.len() - 1];
rewrite_string(str_lit, &fmt)
rewrite_string(str_lit, &fmt).unwrap_or_else(|| string_lit.to_owned())
}
fn string_requires_rewrite(context: &RewriteContext,

View File

@ -15,6 +15,7 @@ use regex::Regex;
use Indent;
use config::Config;
use utils::wrap_str;
use MIN_STRING;
@ -117,7 +118,7 @@ pub fn rewrite_string<'a>(orig: &str, fmt: &StringFormat<'a>) -> Option<String>
}
result.push_str(fmt.closer);
Some(result)
wrap_str(result, fmt.config.max_width, fmt.width, fmt.offset)
}
#[cfg(test)]

View File

@ -3,8 +3,23 @@ fn main() -> &'static str {
let leave_me = "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
s
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj";
// Crappy formatting :-(
let change_me = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
s
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj";
}
fn issue_1237() {
let msg = "eedadn\n\
drvtee\n\
eandsr\n\
raavrd\n\
atevrs\n\
tsrnev\n\
sdttsa\n\
rasrtv\n\
nssdts\n\
ntnada\n\
svetve\n\
tesnvt\n\
vntsnd\n\
vrdear\n\
dvrsen\n\
enarar";
}

View File

@ -48,8 +48,7 @@ enum StructLikeVariants {
enum X {
CreateWebGLPaintTask(Size2D<i32>,
GLContextAttributes,
IpcSender<Result<(IpcSender<CanvasMsg>, usize), String>>), /* This is
* a post comment */
IpcSender<Result<(IpcSender<CanvasMsg>, usize), String>>), /* This is a post comment */
}
pub enum EnumWithAttributes {
@ -71,8 +70,7 @@ pub enum EnumWithAttributes {
pub enum SingleTuple {
// Pre Comment AAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
// AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Match(usize, usize, String), /* Post-comment
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA */
Match(usize, usize, String), /* Post-comment AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA */
}
pub enum SingleStruct {

View File

@ -3,8 +3,23 @@ fn main() -> &'static str {
let leave_me = "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
s
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj";
// Crappy formatting :-(
let change_me = "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
\
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj";
}
fn issue_1237() {
let msg = "eedadn\n\
drvtee\n\
eandsr\n\
raavrd\n\
atevrs\n\
tsrnev\n\
sdttsa\n\
rasrtv\n\
nssdts\n\
ntnada\n\
svetve\n\
tesnvt\n\
vntsnd\n\
vrdear\n\
dvrsen\n\
enarar";
}