Touch up print_string

This commit is contained in:
David Tolnay 2022-01-19 18:46:49 -08:00
parent d5f15a8c18
commit 65dd67096e
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -137,6 +137,7 @@
use ring::RingBuffer;
use std::borrow::Cow;
use std::collections::VecDeque;
use std::iter;
/// How to break. Described in more detail in the module docs.
#[derive(Clone, Copy, PartialEq)]
@ -425,10 +426,6 @@ fn print_break(&mut self, token: BreakToken, size: isize) {
}
fn print_string(&mut self, string: &str) {
let len = string.len() as isize;
// assert!(len <= space);
self.space -= len;
// Write the pending indent. A more concise way of doing this would be:
//
// write!(self.out, "{: >n$}", "", n = self.pending_indentation as usize)?;
@ -436,9 +433,11 @@ fn print_string(&mut self, string: &str) {
// But that is significantly slower. This code is sufficiently hot, and indents can get
// sufficiently large, that the difference is significant on some workloads.
self.out.reserve(self.pending_indentation as usize);
self.out.extend(std::iter::repeat(' ').take(self.pending_indentation as usize));
self.out.extend(iter::repeat(' ').take(self.pending_indentation as usize));
self.pending_indentation = 0;
self.out.push_str(string);
self.space -= string.len() as isize;
}
// Convenience functions to talk to the printer.