| # Changelog |
| |
| All notable changes to this project will be documented in this file. |
| |
| The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), |
| and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| |
| ## [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` and `Diagnostic::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 single `char`. |
| |
| ## [0.11.0] - 2020-11-30 |
| |
| There is now a [code of conduct](https://github.com/brendanzab/codespan/blob/master/CODE_OF_CONDUCT.md) |
| and a [contributing guide](https://github.com/brendanzab/codespan/blob/master/CONTRIBUTING.md). |
| |
| 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` and `Eq` implementations for the `diagnostic::{Diagnostic, Label, Severity}` types. |
| |
| ### Changed |
| |
| - All errors now use the error type `codespan_reporting::file::Error`. |
| This type also replaces the custom error type for `codespan-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. |
| |
| <details> |
| <summary>Example</summary> |
| |
| For example, when rendering with a tab width of `3` we |
| would print: |
| |
| ```text |
| 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: |
| |
| ```text |
| warning: tab test |
| ┌─ tab_columns:1:2 |
| │ |
| 1 │ hello |
| │ ^^^^^ |
| 2 │ ∙ hello |
| │ ^^^^^ |
| 3 │ ∙∙ hello |
| │ ^^^^^ |
| 4 │ ∙∙∙ hello |
| │ ^^^^^ |
| 5 │ ∙∙∙∙ hello |
| │ ^^^^^ |
| 6 │ ∙∙∙∙∙ hello |
| │ ^^^^^ |
| 7 │ ∙∙∙∙∙∙ hello |
| │ ^^^^^ |
| ``` |
| |
| </details> |
| |
| ## [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. |
| |
| <details> |
| <summary>Example</summary> |
| |
| Instead of this: |
| |
| ```text |
| ┌─ 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: |
| |
| ```text |
| ┌─ 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 |
| ``` |
| |
| </details> |
| |
| ### 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. |
| |
| <details> |
| <summary>Example</summary> |
| |
| For example, this diagnostic: |
| |
| ```text |
| ┌─ same_range:1:7 |
| │ |
| 1 │ ::S { } |
| │ - Expected '(' |
| │ ^ Unexpected '{' |
| │ |
| ``` |
| |
| …will now be rendered as: |
| |
| ```text |
| ┌─ same_range:1:7 |
| │ |
| 1 │ ::S { } |
| │ ^ Unexpected '{' |
| │ - Expected '(' |
| │ |
| ``` |
| |
| </details> |
| |
| - 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. |
| |
| <details> |
| <summary>Example</summary> |
| |
| For example we originally rendered this: |
| |
| ```text |
| 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: |
| |
| ```text |
| error: unknown builtin: `NATRAL` |
| ┌─ Data/Nat.fun:7:13 |
| │ |
| 7 │ {-# BUILTIN NATRAL Nat #-} |
| │ ^^^^^^ unknown builtin |
| │ |
| = there is a builtin with a similar name: `NATURAL` |
| |
| ``` |
| |
| </details> |
| |
| ## [0.9.2] - 2020-03-29 |
| |
| ### Changed |
| |
| - Render overlapping multiline marks on the same lines of source code. |
| |
| <details> |
| <summary>Example</summary> |
| |
| For example: |
| |
| ```text |
| 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: |
| |
| ```text |
| 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` |
| ``` |
| |
| </details> |
| |
| ## [0.9.1] - 2020-03-23 |
| |
| ### Added |
| |
| - `codespan_reporting::diagnostic::Diagnostic` now implements `Debug`. |
| |
| ### Changed |
| |
| - Single-line labels are now rendered together, under the same source line. |
| |
| <details> |
| <summary>Example</summary> |
| |
| For example: |
| |
| ```text |
| ┌── 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: |
| |
| ```text |
| ┌── 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 |
| │ |
| ``` |
| |
| </details> |
| |
| ## [0.9.0] - 2020-03-11 |
| |
| ### Added |
| |
| - The `codespan_reporting::files` module was added as a way to decouple |
| `codespan_reporting` from `codespan`. |
| - `codespan_reporting::files::Files` allows users to implement custom file |
| databases that work with `codespan_reporting`. This should make it |
| easier to integrate with libraries like Salsa, and also makes it less |
| invasive to use `codespan_reporting` on existing projects. |
| - `codespan_reporting::files::SimpleFile` is a simple implementation of |
| `codespan_reporting::files::Files` where only a single file is needed. |
| - `codespan_reporting::files::SimpleFiles` is a simple implementation of |
| `codespan_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 on `codespan`. |
| Note that `codespan` can _still_ be used with `codespan_reporting`, |
| as `codespan::Files` now implements `codespan_reporting::files::Files`. |
| |
| ## [0.8.0] - 2020-02-24 |
| ## [0.7.0] - 2020-01-06 |
| ## [0.6.0] - 2019-12-18 |
| ## [0.5.0] - 2019-10-02 |
| ## [0.4.1] - 2019-08-25 |
| ## [0.4.0] - 2019-08-22 |
| ## [0.3.0] - 2019-05-01 |
| ## [0.2.1] - 2019-02-26 |
| ## [0.2.0] - 2018-10-11 |
| |
| [Unreleased]: https://github.com/brendanzab/codespan/compare/v0.11.1...HEAD |
| [0.11.1]: https://github.com/brendanzab/codespan/compare/v0.11.0..v0.11.1 |
| [0.11.0]: https://github.com/brendanzab/codespan/compare/v0.9.5...v0.11.0 |
| [0.9.5]: https://github.com/brendanzab/codespan/compare/v0.9.4...v0.9.5 |
| [0.9.4]: https://github.com/brendanzab/codespan/compare/v0.9.3...v0.9.4 |
| [0.9.3]: https://github.com/brendanzab/codespan/compare/v0.9.2...v0.9.3 |
| [0.9.2]: https://github.com/brendanzab/codespan/compare/v0.9.1...v0.9.2 |
| [0.9.1]: https://github.com/brendanzab/codespan/compare/v0.9.0...v0.9.1 |
| [0.9.0]: https://github.com/brendanzab/codespan/compare/v0.8.0...v0.9.0 |
| [0.8.0]: https://github.com/brendanzab/codespan/compare/v0.7.0...v0.8.0 |
| [0.7.0]: https://github.com/brendanzab/codespan/compare/v0.6.0...v0.7.0 |
| [0.6.0]: https://github.com/brendanzab/codespan/compare/v0.5.0...v0.6.0 |
| [0.5.0]: https://github.com/brendanzab/codespan/compare/v0.4.1...v0.5.0 |
| [0.4.1]: https://github.com/brendanzab/codespan/compare/v0.4.0...v0.4.1 |
| [0.4.0]: https://github.com/brendanzab/codespan/compare/v0.3.0...v0.4.0 |
| [0.3.0]: https://github.com/brendanzab/codespan/compare/v0.2.1...v0.3.0 |
| [0.2.1]: https://github.com/brendanzab/codespan/compare/v0.2.0...v0.2.1 |
| [0.2.0]: https://github.com/brendanzab/codespan/releases/tag/v0.2.0 |