Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support multi-span errors and warnings (#4892)
## Description A new `Diagnostic` type is introduced for detail description of compile errors and warnings. The change is backward compatible. The existing `CompileWarning`s and `CompileError`s will continue render as they had before. The `Diagnostic` is formed out of a: - _Level_: Error or Warning. - _Code_: Unique error or warning code. Placeholder for future. Not used at the moment. - _Reason_: Short description of the diagnostic, not related to a specific error/warning. Answers the question "Why is this an error/warning?" E.g., Because - "Constants cannot be shadowed". - _Issue_: Short description of the concrete case that the compiler has found. E.g., "Variable "X" shadows imported constant with the same name" - _Hints_: Detailed description of the diagnostic placed in the source code. - _Help_: Additional friendly information that helps understanding and solving the issue, but which is not related to a place in code. ![07C Constant shadowing - Alias - After 02 - Terminology](https://github.com/FuelLabs/sway/assets/4142833/50c639a1-43f5-4bc2-afa2-5717652f0172) The `Diagnostic`s are defined imperatively in code right now, pretty much the sam way we do `CompilWarning`s at the moment. Development of a proc-macro that should make de definitions declarative is out of scope of #21. ## Known Limitations The `annotate-snippets` library has a bug and a missing functionality for which I opened issues: - Wrong display of line numbers when using folding of lines of code. This issue is fixed but there is no patch release provided: rust-lang/annotate-snippets-rs#52 (comment) - No possibility to remove the "note:" prefix as shown on the image above: rust-lang/annotate-snippets-rs#59 These two issues are not blocking. Proposal is to wait for the official support in the library, or contribute or in the worst case make a workaround in our code. ## Demo (Before and After) ### Errors ![07A Constant shadowing - Alias - Before](https://github.com/FuelLabs/sway/assets/4142833/5d67c5e5-d456-4762-b7c7-6fcf7340d6b3) ![07C Constant shadowing - Alias - After 02](https://github.com/FuelLabs/sway/assets/4142833/02691b39-3d08-4776-ba93-5ffeca4546ed) ### Warnings ![06A NonScreamingSnakeCaseConstName - Before](https://github.com/FuelLabs/sway/assets/4142833/c27279d4-0e6c-4d05-9b00-da7121bb60ad) ![06B NonScreamingSnakeCaseConstName - After](https://github.com/FuelLabs/sway/assets/4142833/483044f3-f190-4506-9e9e-2d03d70cb3f2) Closes #21 ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [x] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
- Loading branch information