mirror of https://github.com/zkat/miette.git
feat(json): causes support
This commit is contained in:
parent
e286c705fd
commit
f2ee17ffb9
|
|
@ -1,6 +1,8 @@
|
||||||
use std::fmt::{self, Write};
|
use std::fmt::{self, Write};
|
||||||
|
|
||||||
use crate::{protocol::Diagnostic, ReportHandler, Severity, SourceCode};
|
use crate::{
|
||||||
|
diagnostic_chain::DiagnosticChain, protocol::Diagnostic, ReportHandler, Severity, SourceCode,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
[`ReportHandler`] that renders JSON output. It's a machine-readable output.
|
[`ReportHandler`] that renders JSON output. It's a machine-readable output.
|
||||||
|
|
@ -79,6 +81,25 @@ impl JSONReportHandler {
|
||||||
Some(Severity::Advice) => "advice",
|
Some(Severity::Advice) => "advice",
|
||||||
};
|
};
|
||||||
write!(f, r#""severity": "{:}","#, severity)?;
|
write!(f, r#""severity": "{:}","#, severity)?;
|
||||||
|
if let Some(cause_iter) = diagnostic
|
||||||
|
.diagnostic_source()
|
||||||
|
.map(DiagnosticChain::from_diagnostic)
|
||||||
|
.or_else(|| diagnostic.source().map(DiagnosticChain::from_stderror))
|
||||||
|
{
|
||||||
|
write!(f, r#""causes": ["#)?;
|
||||||
|
let mut add_comma = false;
|
||||||
|
for error in cause_iter {
|
||||||
|
if add_comma {
|
||||||
|
write!(f, ",")?;
|
||||||
|
} else {
|
||||||
|
add_comma = true;
|
||||||
|
}
|
||||||
|
write!(f, r#""{}""#, escape(&error.to_string()))?;
|
||||||
|
}
|
||||||
|
write!(f, "],")?
|
||||||
|
} else {
|
||||||
|
write!(f, r#""causes": [],"#)?;
|
||||||
|
}
|
||||||
if let Some(url) = diagnostic.url() {
|
if let Some(url) = diagnostic.url() {
|
||||||
write!(f, r#""url": "{}","#, &url.to_string())?;
|
write!(f, r#""url": "{}","#, &url.to_string())?;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
mod json_report_handler {
|
mod json_report_handler {
|
||||||
|
|
||||||
use miette::{Diagnostic, MietteError, NamedSource, Report, SourceSpan};
|
use miette::{Diagnostic, MietteError, NamedSource, Report, SourceSpan};
|
||||||
|
|
||||||
use miette::JSONReportHandler;
|
use miette::JSONReportHandler;
|
||||||
|
|
@ -38,6 +37,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -83,6 +83,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -128,6 +129,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -173,6 +175,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -218,6 +221,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -262,6 +266,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -313,6 +318,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -372,6 +378,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -427,6 +434,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -500,6 +508,10 @@ mod json_report_handler {
|
||||||
"message": "wtf?!\nit broke :(",
|
"message": "wtf?!\nit broke :(",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [
|
||||||
|
"something went wrong\n\nHere's a more detailed explanation of everything that actually went wrong because it's actually important.\n",
|
||||||
|
"very much went wrong"
|
||||||
|
],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -554,6 +566,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -609,6 +622,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -664,6 +678,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -706,6 +721,7 @@ mod json_report_handler {
|
||||||
{
|
{
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"url": "https://example.com",
|
"url": "https://example.com",
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"labels": [],
|
"labels": [],
|
||||||
|
|
@ -757,6 +773,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -772,6 +789,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file2.rs",
|
"filename": "bad_file2.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -788,6 +806,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file3.rs",
|
"filename": "bad_file3.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -852,6 +871,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -867,6 +887,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
@ -883,6 +904,7 @@ mod json_report_handler {
|
||||||
"message": "oops!",
|
"message": "oops!",
|
||||||
"code": "oops::my::bad",
|
"code": "oops::my::bad",
|
||||||
"severity": "error",
|
"severity": "error",
|
||||||
|
"causes": [],
|
||||||
"help": "try doing it better next time?",
|
"help": "try doing it better next time?",
|
||||||
"filename": "bad_file.rs",
|
"filename": "bad_file.rs",
|
||||||
"labels": [
|
"labels": [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue