parent
be1c83017e
commit
282561a461
@ -1,138 +0,0 @@
|
|||||||
# codespan-reporting
|
|
||||||
|
|
||||||
[![Continuous integration][actions-badge]][actions-url]
|
|
||||||
[![Crates.io][crate-badge]][crate-url]
|
|
||||||
[![Docs.rs][docs-badge]][docs-url]
|
|
||||||
[![Gitter][gitter-badge]][gitter-lobby]
|
|
||||||
|
|
||||||
[actions-badge]: https://img.shields.io/github/workflow/status/brendanzab/codespan/Continuous%20integration
|
|
||||||
[actions-url]: https://github.com/brendanzab/codespan/actions
|
|
||||||
[crate-url]: https://crates.io/crates/codespan-reporting
|
|
||||||
[crate-badge]: https://img.shields.io/crates/v/codespan-reporting.svg
|
|
||||||
[docs-url]: https://docs.rs/codespan-reporting
|
|
||||||
[docs-badge]: https://docs.rs/codespan-reporting/badge.svg
|
|
||||||
[gitter-badge]: https://badges.gitter.im/codespan-rs/codespan.svg
|
|
||||||
[gitter-lobby]: https://gitter.im/codespan-rs/Lobby
|
|
||||||
|
|
||||||
Beautiful diagnostic reporting for text-based programming languages.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Languages like Rust and Elm already support beautiful error reporting output,
|
|
||||||
but it can take a significant amount work to implement this for new programming
|
|
||||||
languages! The `codespan-reporting` crate aims to make beautiful error
|
|
||||||
diagnostics easy and relatively painless for everyone!
|
|
||||||
|
|
||||||
We're still working on improving the crate to help it support broader use cases,
|
|
||||||
and improving the quality of the diagnostic rendering, so stay tuned for
|
|
||||||
updates and please give us feedback if you have it. Contributions are also very
|
|
||||||
welcome!
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
```rust
|
|
||||||
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)?;
|
|
||||||
```
|
|
||||||
|
|
||||||
## Running the CLI example
|
|
||||||
|
|
||||||
To get an idea of what the colored CLI output looks like,
|
|
||||||
clone the [repository](https://github.com/brendanzab/codespan)
|
|
||||||
and run the following shell command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cargo run --example term
|
|
||||||
```
|
|
||||||
|
|
||||||
More examples of using `codespan-reporting` can be found in the
|
|
||||||
[examples directory](./codespan-reporting/examples).
|
|
||||||
|
|
||||||
## Projects using codespan-reporting
|
|
||||||
|
|
||||||
`codespan-reporting` is currently used in the following projects:
|
|
||||||
|
|
||||||
- [Arret](https://arret-lang.org)
|
|
||||||
- [cargo-deny](https://github.com/EmbarkStudios/cargo-deny)
|
|
||||||
- [CXX](https://github.com/dtolnay/cxx)
|
|
||||||
- [Gleam](https://github.com/lpil/gleam/)
|
|
||||||
- [Gluon](https://github.com/gluon-lang/gluon)
|
|
||||||
- [MDBook LinkCheck](https://github.com/Michael-F-Bryan/mdbook-linkcheck)
|
|
||||||
- [Nushell](https://www.nushell.sh/)
|
|
||||||
- [Pikelet](https://github.com/pikelet-lang/pikelet)
|
|
||||||
|
|
||||||
## Alternatives to codespan-reporting
|
|
||||||
|
|
||||||
There are a number of alternatives to `codespan-reporting`, including:
|
|
||||||
|
|
||||||
- [annotate-snippets][annotate-snippets]
|
|
||||||
- [codemap][codemap]
|
|
||||||
- [language-reporting][language-reporting] (a fork of codespan)
|
|
||||||
|
|
||||||
These are all ultimately inspired by rustc's excellent [error reporting infrastructure][librustc_errors].
|
|
||||||
|
|
||||||
[annotate-snippets]: https://crates.io/crates/annotate-snippets
|
|
||||||
[codemap]: https://crates.io/crates/codemap
|
|
||||||
[language-reporting]: https://crates.io/crates/language-reporting
|
|
||||||
[librustc_errors]: https://github.com/rust-lang/rust/tree/master/src/librustc_errors
|
|
Loading…
Reference in new issue