Reset ansi more often when showing errors (#425)

This commit is contained in:
JT 2021-12-04 18:02:57 +13:00 committed by GitHub
parent df5ac9b71c
commit 8cf4402e6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 110 additions and 33 deletions

101
Cargo.lock generated
View file

@ -396,6 +396,16 @@ dependencies = [
"chrono", "chrono",
] ]
[[package]]
name = "chrono-tz"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2554a3155fec064362507487171dcc4edc3df60cb10f3a1fb10ed8094822b120"
dependencies = [
"chrono",
"parse-zoneinfo",
]
[[package]] [[package]]
name = "chrono-tz" name = "chrono-tz"
version = "0.6.0" version = "0.6.0"
@ -669,6 +679,19 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
[[package]]
name = "dtparse"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13276c5dbd7f365e00efe6631242772fe6615e1899df84d1f6ce3ae7b48209f6"
dependencies = [
"chrono",
"chrono-tz 0.5.3",
"lazy_static",
"num-traits",
"rust_decimal",
]
[[package]] [[package]]
name = "dunce" name = "dunce"
version = "1.0.2" version = "1.0.2"
@ -1434,10 +1457,11 @@ dependencies = [
"calamine", "calamine",
"chrono", "chrono",
"chrono-humanize", "chrono-humanize",
"chrono-tz", "chrono-tz 0.6.0",
"crossterm", "crossterm",
"csv", "csv",
"dialoguer", "dialoguer",
"dtparse",
"eml-parser", "eml-parser",
"glob", "glob",
"ical", "ical",
@ -1454,7 +1478,7 @@ dependencies = [
"nu-protocol", "nu-protocol",
"nu-table", "nu-table",
"nu-term-grid", "nu-term-grid",
"num", "num 0.4.0",
"polars", "polars",
"rand", "rand",
"rayon", "rayon",
@ -1581,17 +1605,42 @@ dependencies = [
"semver", "semver",
] ]
[[package]]
name = "num"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
dependencies = [
"num-bigint 0.2.6",
"num-complex 0.2.4",
"num-integer",
"num-iter",
"num-rational 0.2.4",
"num-traits",
]
[[package]] [[package]]
name = "num" name = "num"
version = "0.4.0" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
dependencies = [ dependencies = [
"num-bigint", "num-bigint 0.4.3",
"num-complex", "num-complex 0.4.0",
"num-integer", "num-integer",
"num-iter", "num-iter",
"num-rational", "num-rational 0.4.0",
"num-traits",
]
[[package]]
name = "num-bigint"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
dependencies = [
"autocfg",
"num-integer",
"num-traits", "num-traits",
] ]
@ -1606,6 +1655,16 @@ dependencies = [
"num-traits", "num-traits",
] ]
[[package]]
name = "num-complex"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
dependencies = [
"autocfg",
"num-traits",
]
[[package]] [[package]]
name = "num-complex" name = "num-complex"
version = "0.4.0" version = "0.4.0"
@ -1636,6 +1695,18 @@ dependencies = [
"num-traits", "num-traits",
] ]
[[package]]
name = "num-rational"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
dependencies = [
"autocfg",
"num-bigint 0.2.6",
"num-integer",
"num-traits",
]
[[package]] [[package]]
name = "num-rational" name = "num-rational"
version = "0.4.0" version = "0.4.0"
@ -1643,7 +1714,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"num-bigint", "num-bigint 0.4.3",
"num-integer", "num-integer",
"num-traits", "num-traits",
] ]
@ -1861,7 +1932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cc4488d2f2d6b901bb6e5728e58966013a272cae48861070b676215a79b4a99" checksum = "1cc4488d2f2d6b901bb6e5728e58966013a272cae48861070b676215a79b4a99"
dependencies = [ dependencies = [
"arrow2", "arrow2",
"num", "num 0.4.0",
"thiserror", "thiserror",
] ]
@ -1878,7 +1949,7 @@ dependencies = [
"hashbrown", "hashbrown",
"itertools", "itertools",
"lazy_static", "lazy_static",
"num", "num 0.4.0",
"num_cpus", "num_cpus",
"polars-arrow", "polars-arrow",
"prettytable-rs", "prettytable-rs",
@ -1905,7 +1976,7 @@ dependencies = [
"lexical", "lexical",
"memchr", "memchr",
"memmap2", "memmap2",
"num", "num 0.4.0",
"num_cpus", "num_cpus",
"polars-arrow", "polars-arrow",
"polars-core", "polars-core",
@ -2203,6 +2274,18 @@ dependencies = [
"crossbeam-utils", "crossbeam-utils",
] ]
[[package]]
name = "rust_decimal"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a93c95e3d5c1d997e6e4ba9bda898f4e1d73934cd05510c972f10087d0ef00c1"
dependencies = [
"byteorder",
"lazy_static",
"num 0.2.1",
"serde",
]
[[package]] [[package]]
name = "rustc-demangle" name = "rustc-demangle"
version = "0.1.21" version = "0.1.21"

View file

@ -6,9 +6,9 @@ use thiserror::Error;
/// forwards most methods, except for `.source_code()`, which we provide. /// forwards most methods, except for `.source_code()`, which we provide.
#[derive(Error)] #[derive(Error)]
#[error("{0}")] #[error("{0}")]
struct CliError<'src>( pub struct CliError<'src>(
&'src (dyn miette::Diagnostic + Send + Sync + 'static), pub &'src (dyn miette::Diagnostic + Send + Sync + 'static),
&'src StateWorkingSet<'src>, pub &'src StateWorkingSet<'src>,
); );
impl std::fmt::Debug for CliError<'_> { impl std::fmt::Debug for CliError<'_> {
@ -44,10 +44,3 @@ impl<'src> miette::Diagnostic for CliError<'src> {
Some(&self.1) Some(&self.1)
} }
} }
pub fn report_error(
working_set: &StateWorkingSet,
error: &(dyn miette::Diagnostic + Send + Sync + 'static),
) {
eprintln!("Error: {:?}", CliError(error, working_set));
}

View file

@ -5,7 +5,7 @@ mod syntax_highlight;
mod validation; mod validation;
pub use completions::NuCompleter; pub use completions::NuCompleter;
pub use errors::report_error; pub use errors::CliError;
pub use prompt::NushellPrompt; pub use prompt::NushellPrompt;
pub use syntax_highlight::NuHighlighter; pub use syntax_highlight::NuHighlighter;
pub use validation::NuValidator; pub use validation::NuValidator;

View file

@ -6,7 +6,7 @@ use dialoguer::{
Select, Select,
}; };
use miette::{IntoDiagnostic, Result}; use miette::{IntoDiagnostic, Result};
use nu_cli::{report_error, NuCompleter, NuHighlighter, NuValidator, NushellPrompt}; use nu_cli::{CliError, NuCompleter, NuHighlighter, NuValidator, NushellPrompt};
use nu_command::create_default_context; use nu_command::create_default_context;
use nu_engine::eval_block; use nu_engine::eval_block;
use nu_parser::parse; use nu_parser::parse;
@ -457,12 +457,6 @@ fn eval_source(
report_error(&working_set, &err); report_error(&working_set, &err);
// reset vt processing, aka ansi because illbehaved externals can break it
#[cfg(windows)]
{
let _ = enable_vt_processing();
}
return false; return false;
} }
@ -477,11 +471,6 @@ fn eval_source(
report_error(&working_set, &err); report_error(&working_set, &err);
// reset vt processing, aka ansi because illbehaved externals can break it
#[cfg(windows)]
{
let _ = enable_vt_processing();
}
return false; return false;
} }
} }
@ -490,7 +479,7 @@ fn eval_source(
} }
#[cfg(windows)] #[cfg(windows)]
fn enable_vt_processing() -> Result<(), ShellError> { pub fn enable_vt_processing() -> Result<(), ShellError> {
pub const ENABLE_PROCESSED_OUTPUT: u32 = 0x0001; pub const ENABLE_PROCESSED_OUTPUT: u32 = 0x0001;
pub const ENABLE_VIRTUAL_TERMINAL_PROCESSING: u32 = 0x0004; pub const ENABLE_VIRTUAL_TERMINAL_PROCESSING: u32 = 0x0004;
// let mask = ENABLE_VIRTUAL_TERMINAL_PROCESSING; // let mask = ENABLE_VIRTUAL_TERMINAL_PROCESSING;
@ -509,3 +498,15 @@ fn enable_vt_processing() -> Result<(), ShellError> {
Ok(()) Ok(())
} }
pub fn report_error(
working_set: &StateWorkingSet,
error: &(dyn miette::Diagnostic + Send + Sync + 'static),
) {
eprintln!("Error: {:?}", CliError(error, working_set));
// reset vt processing, aka ansi because illbehaved externals can break it
#[cfg(windows)]
{
let _ = enable_vt_processing();
}
}