Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/stdx/src/lib.rs')
-rw-r--r--crates/stdx/src/lib.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs
index a1af4cc6be..275e0e5ac8 100644
--- a/crates/stdx/src/lib.rs
+++ b/crates/stdx/src/lib.rs
@@ -1,5 +1,6 @@
//! Missing batteries for standard libraries.
+use std::borrow::Cow;
use std::io as sio;
use std::process::Command;
use std::{cmp::Ordering, ops, time::Instant};
@@ -250,6 +251,24 @@ pub fn dedent_by(spaces: usize, text: &str) -> String {
.collect()
}
+/// Indent non empty lines, including the first line
+#[must_use]
+pub fn indent_string(s: &str, indent_level: u8) -> String {
+ if indent_level == 0 || s.is_empty() {
+ return s.to_owned();
+ }
+ let indent_str = " ".repeat(indent_level as usize);
+ s.split_inclusive("\n")
+ .map(|line| {
+ if line.trim_end().is_empty() {
+ Cow::Borrowed(line)
+ } else {
+ format!("{indent_str}{line}").into()
+ }
+ })
+ .collect()
+}
+
pub fn equal_range_by<T, F>(slice: &[T], mut key: F) -> ops::Range<usize>
where
F: FnMut(&T) -> Ordering,