mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 07:04:49 +00:00
![]() 1034: HIR diagnostics API r=matklad a=matklad This PR introduces diagnostics API for HIR, so we can now start issuing errors and warnings! Here are requirements that this solution aims to fulfill: * structured diagnostics: rather than immediately rendering error to string, we provide a well-typed blob of data with error-description. These data is used by IDE to provide fixes * open set diagnostics: there's no single enum with all possible diagnostics, which hopefully should result in better modularity The `Diagnostic` trait describes "a diagnostic", which can be downcast to a specific diagnostic kind. Diagnostics are expressed in terms of macro-expanded syntax tree: they store pointers to syntax nodes. Diagnostics are self-contained: you don't need any context, besides `db`, to fully understand the meaning of a diagnostic. Because diagnostics are tied to the source, we can't store them in salsa. So subsystems like type-checking produce subsystem-local diagnostic (which is a closed `enum`), which is expressed in therms of subsystem IR. A separate step converts these proto-diagnostics into `Diagnostic`, by merging them with source-maps. Note that this PR stresses type-system quite a bit: we now type-check every function in open files to compute errors! Discussion on Zulip: https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/Diagnostics.20API Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com> |
||
---|---|---|
.. | ||
completion | ||
snapshots | ||
assists.rs | ||
call_info.rs | ||
change.rs | ||
completion.rs | ||
db.rs | ||
diagnostics.rs | ||
extend_selection.rs | ||
folding_ranges.rs | ||
goto_definition.rs | ||
hover.rs | ||
impls.rs | ||
join_lines.rs | ||
lib.rs | ||
line_index.rs | ||
line_index_utils.rs | ||
marks.rs | ||
matching_brace.rs | ||
mock_analysis.rs | ||
navigation_target.rs | ||
parent_module.rs | ||
references.rs | ||
runnables.rs | ||
status.rs | ||
structure.rs | ||
symbol_index.rs | ||
syntax_highlighting.rs | ||
syntax_tree.rs | ||
test_utils.rs | ||
typing.rs |