X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fshape.rs;h=12a911a19315a583d9a62e733758567725cf7ad9;hb=fc3ea494ac73aee782a903849c09bb011fe18e37;hp=22d6a096efa4b2a3d49ec389d1c7d6f2ee30dc5b;hpb=2a5b25e5dba8922510b3a13e0bedc37300ce1782;p=rust.git diff --git a/src/shape.rs b/src/shape.rs index 22d6a096efa..12a911a1931 100644 --- a/src/shape.rs +++ b/src/shape.rs @@ -9,6 +9,7 @@ // except according to those terms. use std::borrow::Cow; +use std::cmp::min; use std::ops::{Add, Sub}; use Config; @@ -22,10 +23,11 @@ pub struct Indent { pub alignment: usize, } -// INDENT_BUFFER.len() = 80 +// INDENT_BUFFER.len() = 81 const INDENT_BUFFER_LEN: usize = 80; const INDENT_BUFFER: &str = - "\n "; + "\n "; + impl Indent { pub fn new(block_indent: usize, alignment: usize) -> Indent { Indent { @@ -180,7 +182,7 @@ pub fn legacy(width: usize, indent: Indent) -> Shape { pub fn indented(indent: Indent, config: &Config) -> Shape { Shape { - width: config.max_width().checked_sub(indent.width()).unwrap_or(0), + width: config.max_width().saturating_sub(indent.width()), indent, offset: indent.alignment, } @@ -188,22 +190,11 @@ pub fn indented(indent: Indent, config: &Config) -> Shape { pub fn with_max_width(&self, config: &Config) -> Shape { Shape { - width: config - .max_width() - .checked_sub(self.indent.width()) - .unwrap_or(0), + width: config.max_width().saturating_sub(self.indent.width()), ..*self } } - pub fn offset(width: usize, indent: Indent, offset: usize) -> Shape { - Shape { - width, - indent, - offset, - } - } - pub fn visual_indent(&self, extra_width: usize) -> Shape { let alignment = self.offset + extra_width; Shape { @@ -273,8 +264,21 @@ pub fn used_width(&self) -> usize { pub fn rhs_overhead(&self, config: &Config) -> usize { config .max_width() - .checked_sub(self.used_width() + self.width) - .unwrap_or(0) + .saturating_sub(self.used_width() + self.width) + } + + pub fn comment(&self, config: &Config) -> Shape { + let width = min( + self.width, + config.comment_width().saturating_sub(self.indent.width()), + ); + Shape { width, ..*self } + } + + pub fn to_string_with_newline(&self, config: &Config) -> Cow<'static, str> { + let mut offset_indent = self.indent; + offset_indent.alignment = self.offset; + offset_indent.to_string_inner(config, 0) } }