22 个版本
0.11.1 | 2021 年 2 月 25 日 |
---|---|
0.11.0 | 2020 年 11 月 29 日 |
0.9.5 | 2020 年 6 月 24 日 |
0.9.2 | 2020 年 3 月 29 日 |
0.1.3 | 2018 年 4 月 18 日 |
#6 in 命令行界面
1,445,578 个月下载量
在 2,327 个 crate 中使用 (173 直接使用)
97KB
1.5K SLoC
codespan-reporting
为基于文本的编程语言提供美观的诊断报告。
如 Rust 和 Elm 等语言已经支持美观的错误报告输出,但为新的编程语言实现此功能可能需要大量工作!codespan-reporting
crate 的目标是让美观的错误诊断变得简单且相对容易!
我们仍在改进该 crate 以支持更广泛的使用案例,并提高诊断渲染的质量,请关注更新,并在您有反馈时请告诉我们。我们也非常欢迎贡献!
示例
use codespan_reporting::diagnostic::{Diagnostic, Label};
use codespan_reporting::files::SimpleFiles;
use codespan_reporting::term::termcolor::{ColorChoice, StandardStream};
// `files::SimpleFile` and `files::SimpleFiles` help you get up and running with
// `codespan-reporting` quickly! More complicated use cases can be supported
// by creating custom implementations of the `files::Files` trait.
let mut files = SimpleFiles::new();
let file_id = files.add(
"FizzBuzz.fun",
unindent::unindent(
r#"
module FizzBuzz where
fizz₁ : Nat → String
fizz₁ num = case (mod num 5) (mod num 3) of
0 0 => "FizzBuzz"
0 _ => "Fizz"
_ 0 => "Buzz"
_ _ => num
fizz₂ : Nat → String
fizz₂ num =
case (mod num 5) (mod num 3) of
0 0 => "FizzBuzz"
0 _ => "Fizz"
_ 0 => "Buzz"
_ _ => num
"#,
),
);
// We normally recommend creating a custom diagnostic data type for your
// application, and then converting that to `codespan-reporting`'s diagnostic
// type, but for the sake of this example we construct it directly.
let diagnostic = Diagnostic::error()
.with_message("`case` clauses have incompatible types")
.with_code("E0308")
.with_labels(vec![
Label::primary(file_id, 328..331).with_message("expected `String`, found `Nat`"),
Label::secondary(file_id, 211..331).with_message("`case` clauses have incompatible types"),
Label::secondary(file_id, 258..268).with_message("this is found to be of type `String`"),
Label::secondary(file_id, 284..290).with_message("this is found to be of type `String`"),
Label::secondary(file_id, 306..312).with_message("this is found to be of type `String`"),
Label::secondary(file_id, 186..192).with_message("expected type `String` found here"),
])
.with_notes(vec![unindent::unindent(
"
expected type `String`
found type `Nat`
",
)]);
// We now set up the writer and configuration, and then finally render the
// diagnostic to standard error.
let writer = StandardStream::stderr(ColorChoice::Always);
let config = codespan_reporting::term::Config::default();
term::emit(&mut writer.lock(), &config, &files, &diagnostic)?;
运行 CLI 示例
要了解彩色 CLI 输出的样子,克隆仓库并运行以下 shell 命令
cargo run --example term
更多使用 codespan-reporting
的示例可以在示例目录中找到。
使用 codespan-reporting 的项目
codespan-reporting
目前在以下项目中使用
codespan-reporting 的替代方案
有多个 codespan-reporting
的替代方案,包括
- annotate-snippets
- codemap
- language-reporting (codespan 的分支)
这些都是受 rustc 优秀的 错误报告基础设施 启发的。
贡献
关于为 codespan-reporting 贡献的指南,您可以在此找到:贡献指南。
行为准则
请注意,本项目遵循行为准则。参与本项目即表示您同意遵守其条款。
lib.rs
:
codespancrate的诊断报告支持。
依赖项
~0.4–7.5MB
~44K SLoC