mirror of
https://github.com/nushell/nushell
synced 2024-12-30 15:03:25 +00:00
85c2035016
# Description This PR updates `strip-ansi-escapes` to support their new API. This also updates nushell to the latest reedline after the same fix https://github.com/nushell/reedline/pull/617 closes #9957 # User-Facing Changes <!-- List of all changes that impact the user experience here. This helps us keep track of breaking changes. --> # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect -A clippy::result_large_err` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass - `cargo run -- -c "use std testing; testing run-tests --path crates/nu-std"` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. -->
83 lines
2.9 KiB
Rust
83 lines
2.9 KiB
Rust
use std::borrow::Cow;
|
|
|
|
/// Removes ANSI escape codes and some ASCII control characters
|
|
///
|
|
/// Optimized for strings that rarely contain ANSI control chars.
|
|
/// Uses fast search to avoid reallocations.
|
|
///
|
|
/// Keeps `\n` removes `\r`, `\t` etc.
|
|
///
|
|
/// If parsing fails silently returns the input string
|
|
pub fn strip_ansi_unlikely(string: &str) -> Cow<str> {
|
|
// Check if any ascii control character except LF(0x0A = 10) is present,
|
|
// which will be stripped. Includes the primary start of ANSI sequences ESC
|
|
// (0x1B = decimal 27)
|
|
if string.bytes().any(|x| matches!(x, 0..=9 | 11..=31)) {
|
|
if let Ok(stripped) = String::from_utf8(strip_ansi_escapes::strip(string)) {
|
|
return Cow::Owned(stripped);
|
|
}
|
|
}
|
|
// Else case includes failures to parse!
|
|
Cow::Borrowed(string)
|
|
}
|
|
|
|
/// Removes ANSI escape codes and some ASCII control characters
|
|
///
|
|
/// Optimized for strings that likely contain ANSI control chars.
|
|
///
|
|
/// Keeps `\n` removes `\r`, `\t` etc.
|
|
///
|
|
/// If parsing fails silently returns the input string
|
|
pub fn strip_ansi_likely(string: &str) -> Cow<str> {
|
|
// Check if any ascii control character except LF(0x0A = 10) is present,
|
|
// which will be stripped. Includes the primary start of ANSI sequences ESC
|
|
// (0x1B = decimal 27)
|
|
if let Ok(stripped) = String::from_utf8(strip_ansi_escapes::strip(string)) {
|
|
return Cow::Owned(stripped);
|
|
}
|
|
// Else case includes failures to parse!
|
|
Cow::Borrowed(string)
|
|
}
|
|
|
|
/// Removes ANSI escape codes and some ASCII control characters
|
|
///
|
|
/// Optimized for strings that rarely contain ANSI control chars.
|
|
/// Uses fast search to avoid reallocations.
|
|
///
|
|
/// Keeps `\n` removes `\r`, `\t` etc.
|
|
///
|
|
/// If parsing fails silently returns the input string
|
|
pub fn strip_ansi_string_unlikely(string: String) -> String {
|
|
// Check if any ascii control character except LF(0x0A = 10) is present,
|
|
// which will be stripped. Includes the primary start of ANSI sequences ESC
|
|
// (0x1B = decimal 27)
|
|
if string
|
|
.as_str()
|
|
.bytes()
|
|
.any(|x| matches!(x, 0..=9 | 11..=31))
|
|
{
|
|
if let Ok(stripped) = String::from_utf8(strip_ansi_escapes::strip(&string)) {
|
|
return stripped;
|
|
}
|
|
}
|
|
// Else case includes failures to parse!
|
|
string
|
|
}
|
|
|
|
/// Removes ANSI escape codes and some ASCII control characters
|
|
///
|
|
/// Optimized for strings that likely contain ANSI control chars.
|
|
///
|
|
/// Keeps `\n` removes `\r`, `\t` etc.
|
|
///
|
|
/// If parsing fails silently returns the input string
|
|
pub fn strip_ansi_string_likely(string: String) -> String {
|
|
// Check if any ascii control character except LF(0x0A = 10) is present,
|
|
// which will be stripped. Includes the primary start of ANSI sequences ESC
|
|
// (0x1B = decimal 27)
|
|
if let Ok(stripped) = String::from_utf8(strip_ansi_escapes::strip(&string)) {
|
|
return stripped;
|
|
}
|
|
// Else case includes failures to parse!
|
|
string
|
|
}
|