feat: add a panic hook, present issue link
This commit is contained in:
parent
b79437f596
commit
44e066f907
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
N/A
|
- **aiken**: added panic hook to present a link to make a bug report
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ use aiken::{
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use owo_colors::OwoColorize;
|
||||||
|
|
||||||
/// Aiken: a smart-contract language and toolchain for Cardano
|
/// Aiken: a smart-contract language and toolchain for Cardano
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
|
@ -45,7 +46,8 @@ impl Default for Cmd {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> miette::Result<()> {
|
fn main() -> miette::Result<()> {
|
||||||
miette::set_panic_hook();
|
panic_handler();
|
||||||
|
|
||||||
match Cmd::default() {
|
match Cmd::default() {
|
||||||
Cmd::New(args) => new::exec(args),
|
Cmd::New(args) => new::exec(args),
|
||||||
Cmd::Fmt(args) => fmt::exec(args),
|
Cmd::Fmt(args) => fmt::exec(args),
|
||||||
|
@ -72,3 +74,39 @@ fn version() -> String {
|
||||||
built_info::GIT_COMMIT_HASH_SHORT.unwrap_or(&nix_git_rev)
|
built_info::GIT_COMMIT_HASH_SHORT.unwrap_or(&nix_git_rev)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn panic_handler() {
|
||||||
|
std::panic::set_hook(Box::new(move |info| {
|
||||||
|
let message = info
|
||||||
|
.payload()
|
||||||
|
.downcast_ref::<&str>()
|
||||||
|
.map(|s| (*s).to_string())
|
||||||
|
.or_else(|| {
|
||||||
|
info.payload()
|
||||||
|
.downcast_ref::<String>()
|
||||||
|
.map(|s| s.to_string())
|
||||||
|
})
|
||||||
|
.unwrap_or_else(|| "unknown error".to_string());
|
||||||
|
|
||||||
|
let location = info.location().map_or_else(
|
||||||
|
|| "".into(),
|
||||||
|
|location| format!("{}:{}\n\n ", location.file(), location.line()),
|
||||||
|
);
|
||||||
|
|
||||||
|
let error_message = indoc::formatdoc! {
|
||||||
|
r#"{fatal}
|
||||||
|
|
||||||
|
Whoops! You found a bug in the Aiken compiler.
|
||||||
|
|
||||||
|
Please report this error at https://github.com/aiken-lang/aiken/issues/new.
|
||||||
|
In your bug report please provide the information below and if possible the code
|
||||||
|
that produced it.
|
||||||
|
|
||||||
|
{location}{message}"#,
|
||||||
|
fatal = "aiken::fatal::error".red().bold(),
|
||||||
|
location = location.purple(),
|
||||||
|
};
|
||||||
|
|
||||||
|
println!("{error_message}")
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue