X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fshape.rs;h=5868f0b85fdff2b1c89ce79219e0c55aa152defe;hb=cbd568083d87a90dfe5ab0e90f404454946c9f20;hp=c6a183216b80c2c53e12b91524ea414308980f85;hpb=124f03b1fcad4265df627980626fcd1785705946;p=rust.git diff --git a/src/shape.rs b/src/shape.rs index c6a183216b8..5868f0b85fd 100644 --- a/src/shape.rs +++ b/src/shape.rs @@ -27,6 +27,7 @@ pub struct Indent { const INDENT_BUFFER_LEN: usize = 80; const INDENT_BUFFER: &str = "\n "; + impl Indent { pub fn new(block_indent: usize, alignment: usize) -> Indent { Indent { @@ -90,7 +91,7 @@ fn to_string_inner(&self, config: &Config, offset: usize) -> Cow<'static, str> { }; let num_chars = num_tabs + num_spaces; if num_tabs == 0 && num_chars + offset <= INDENT_BUFFER_LEN { - Cow::from(&INDENT_BUFFER[offset..num_chars + 1]) + Cow::from(&INDENT_BUFFER[offset..=num_chars]) } else { let mut indent = String::with_capacity(num_chars + if offset == 0 { 1 } else { 0 }); if offset == 0 { @@ -181,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, } @@ -189,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 { @@ -274,20 +264,22 @@ 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() - .checked_sub(self.indent.width()) - .unwrap_or(0), + 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) + } } #[cfg(test)]