14 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.11.1 - 2021-01-18
Added
- Add
Chars::{box_drawing, ascii}
functions, the latter supporting a rustc-style of output that only uses ASCII characters (not above U+007F) for use cases that do not allow for box drawing characters, e.g. terminals that do not support them.
Changed
Diagnostic::with_labels
andDiagnostic::with_notes
now append additional labels rather tan overwriting them, meaning that the documentation and behaviour match more closely. The behaviour will only differ if you call the same builder methods multiple times. If you call every builder method once only, nothing should change.config::Chars::snippet_start
is now a String instead of a singlechar
.
0.11.0 - 2020-11-30
There is now a code of conduct and a contributing guide.
Some versions were skipped to sync up with the codespan-lsp
crate. The release
process has been changed so this should not happen again.
Added
- If a label spans over multiple lines, not all lines are rendered. The number of lines rendered at beginning and end is configurable separately.
- There is now a custom error type.
- There now is a medium rendering mode that is like the short rendering mode but also shows notes from the diagnostic.
PartialEq
andEq
implementations for thediagnostic::{Diagnostic, Label, Severity}
types.
Changed
- All errors now use the error type
codespan_reporting::file::Error
. This type also replaces the custom error type forcodespan-lsp
.
Fixed
- Empty error codes are not rendered.
- The locus ("location of the diagnostic") is now computed so it is always at the first primary label, or at the first secondary label if no primary labels are available.
- All
unwrap
s outside of tests and examples have been removed. - Some internal improvements, including various code style improvements by using Clippy.
- Improved documentation, also mentioning how the ordering of labels is handled.
0.9.5 - 2020-06-24
Changed
-
Sections of source code that are marked with primary labels are now rendered using the primary highlight color.
-
Tab stops are now rendered properly.
We used to just render
\t
characters in source snippets with the same number of spaces.Example
For example, when rendering with a tab width of
3
we would print:warning: tab test ┌─ tab_columns:1:2 │ 1 │ hello │ ^^^^^ 2 │ ∙ hello │ ^^^^^ 3 │ ∙∙ hello │ ^^^^^ 4 │ ∙∙∙ hello │ ^^^^^ 5 │ ∙∙∙∙ hello │ ^^^^^ 6 │ ∙∙∙∙∙ hello │ ^^^^^ 7 │ ∙∙∙∙∙∙ hello │ ^^^^^
Now we properly take into account the column of the tab character:
warning: tab test ┌─ tab_columns:1:2 │ 1 │ hello │ ^^^^^ 2 │ ∙ hello │ ^^^^^ 3 │ ∙∙ hello │ ^^^^^ 4 │ ∙∙∙ hello │ ^^^^^ 5 │ ∙∙∙∙ hello │ ^^^^^ 6 │ ∙∙∙∙∙ hello │ ^^^^^ 7 │ ∙∙∙∙∙∙ hello │ ^^^^^
0.9.4 - 2020-05-18
Changed
-
We have made the caret rendering easier to read when there are multiple labels on the same line. We also avoid printing trailing borders on the final source source snippet if no notes are present.
Example
Instead of this:
┌─ one_line.rs:3:5 │ 3 │ v.push(v.pop().unwrap()); │ - first borrow later used by call │ ---- first mutable borrow occurs here │ ^ second mutable borrow occurs here │
…we now render the following:
┌─ one_line.rs:3:5 │ 3 │ v.push(v.pop().unwrap()); │ - ---- ^ second mutable borrow occurs here │ │ │ │ │ first mutable borrow occurs here │ first borrow later used by call
Fixed
- Diagnostic rendering no longer panics if label ranges are between UTF-8 character boundaries.
0.9.3 - 2020-04-29
Changed
-
Some panics were fixed when invalid unicode boundaries are supplied.
-
Labels that marked the same span were originally rendered in reverse order. This was a mistake! We've now fixed this.
Example
For example, this diagnostic:
┌─ same_range:1:7 │ 1 │ ::S { } │ - Expected '(' │ ^ Unexpected '{' │
…will now be rendered as:
┌─ same_range:1:7 │ 1 │ ::S { } │ ^ Unexpected '{' │ - Expected '(' │
-
We've reduced the prominence of the 'locus' on source snippets by simplifying the border and reducing the spacing around it. This is to help focus attention on the underlined source snippet and error messages, rather than the location, which should be a secondary focus.
Example
For example we originally rendered this:
error: unknown builtin: `NATRAL` ┌── Data/Nat.fun:7:13 ─── │ 7 │ {-# BUILTIN NATRAL Nat #-} │ ^^^^^^ unknown builtin │ = there is a builtin with a similar name: `NATURAL`
…and now we render this:
error: unknown builtin: `NATRAL` ┌─ Data/Nat.fun:7:13 │ 7 │ {-# BUILTIN NATRAL Nat #-} │ ^^^^^^ unknown builtin │ = there is a builtin with a similar name: `NATURAL`
0.9.2 - 2020-03-29
Changed
-
Render overlapping multiline marks on the same lines of source code.
Example
For example:
error[E0308]: match arms have incompatible types ┌── codespan/src/file.rs:1:9 ─── │ 1 │ ╭ match line_index.compare(self.last_line_index()) { 2 │ │ Ordering::Less => Ok(self.line_starts()[line_index.to_usize()]), 3 │ │ Ordering::Equal => Ok(self.source_span().end()), 4 │ │ Ordering::Greater => LineIndexOutOfBoundsError { 5 │ │ given: line_index, 6 │ │ max: self.last_line_index(), 7 │ │ }, 8 │ │ } │ ╰─────────' `match` arms have incompatible types · 2 │ Ordering::Less => Ok(self.line_starts()[line_index.to_usize()]), │ --------------------------------------------- this is found to be of type `Result<ByteIndex, LineIndexOutOfBoundsError>` 3 │ Ordering::Equal => Ok(self.source_span().end()), │ ---------------------------- this is found to be of type `Result<ByteIndex, LineIndexOutOfBoundsError>` 4 │ Ordering::Greater => LineIndexOutOfBoundsError { │ ╭──────────────────────────────────^ 5 │ │ given: line_index, 6 │ │ max: self.last_line_index(), 7 │ │ }, │ ╰─────────────^ expected enum `Result`, found struct `LineIndexOutOfBoundsError` │ = expected type `Result<ByteIndex, LineIndexOutOfBoundsError>` found type `LineIndexOutOfBoundsError`
…is now rendered as:
error[E0308]: match arms have incompatible types ┌── codespan/src/file.rs:1:9 ─── │ 1 │ ╭ match line_index.compare(self.last_line_index()) { 2 │ │ Ordering::Less => Ok(self.line_starts()[line_index.to_usize()]), │ │ --------------------------------------------- this is found to be of type `Result<ByteIndex, LineIndexOutOfBoundsError>` 3 │ │ Ordering::Equal => Ok(self.source_span().end()), │ │ ---------------------------- this is found to be of type `Result<ByteIndex, LineIndexOutOfBoundsError>` 4 │ │ Ordering::Greater => LineIndexOutOfBoundsError { │ ╭─│──────────────────────────────────^ 5 │ │ │ given: line_index, 6 │ │ │ max: self.last_line_index(), 7 │ │ │ }, │ ╰─│─────────────^ expected enum `Result`, found struct `LineIndexOutOfBoundsError` 8 │ │ } │ ╰─────────' `match` arms have incompatible types │ = expected type `Result<ByteIndex, LineIndexOutOfBoundsError>` found type `LineIndexOutOfBoundsError`
0.9.1 - 2020-03-23
Added
codespan_reporting::diagnostic::Diagnostic
now implementsDebug
.
Changed
-
Single-line labels are now rendered together, under the same source line.
Example
For example:
┌── one_line.rs:3:5 ─── │ 3 │ v.push(v.pop().unwrap()); │ - first borrow later used by call · 3 │ v.push(v.pop().unwrap()); │ ---- first mutable borrow occurs here · 3 │ v.push(v.pop().unwrap()); │ ^ second mutable borrow occurs here │
…is now rendered as:
┌── one_line.rs:3:5 ─── │ 3 │ v.push(v.pop().unwrap()); │ - first borrow later used by call │ ---- first mutable borrow occurs here │ ^ second mutable borrow occurs here │
0.9.0 - 2020-03-11
Added
- The
codespan_reporting::files
module was added as a way to decouplecodespan_reporting
fromcodespan
.codespan_reporting::files::Files
allows users to implement custom file databases that work withcodespan_reporting
. This should make it easier to integrate with libraries like Salsa, and also makes it less invasive to usecodespan_reporting
on existing projects.codespan_reporting::files::SimpleFile
is a simple implementation ofcodespan_reporting::files::Files
where only a single file is needed.codespan_reporting::files::SimpleFiles
is a simple implementation ofcodespan_reporting::files::Files
where multiple files are needed.
Changed
- The
codespan_reporting::diagnostic
module has been greatly revamped, making the builder API format more nicely with rustfmt, and allowing for multiple primary labels. - The output of
codespan_reporting::term::emit
was improved, with the following changes:- labels on consecutive lines no longer render breaks between them
- source lines are rendered when there is only one line between labels
- the inner gutter of code snippets is now aligned consistently
- the outer gutter of consecutive code snippets are now aligned consistently
codespan_reporting::term::emit
now takes writers as a trait object (rather than using static dispatch) in order to reduce coda bloat and improve compile times.- The field names in
codespan_reporting::term::Chars
were tweaked for consistency.
Removed
codespan_reporting
no longer depends oncodespan
. Note thatcodespan
can still be used withcodespan_reporting
, ascodespan::Files
now implementscodespan_reporting::files::Files
.