aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src
Commit message (Collapse)AuthorAgeFilesLines
* Merge #8717bors[bot]2021-05-315-805/+2767
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8717: Update match checking algorithm r=iDawer a=iDawer I've recently got interest in the match checking to extend the current algo to support reporting witnesses of non-exhaustiveness. It appears the algo is outdated from rustc's implementation. I decided to rewrite it based on the latest rustc's version. It is a diff-based port to ra codebase. That means you can diff-compare these files to rustc. I'm striving to keep minimal ra-related changes in the algo to make it easier to backport future changes from the upstream. Based on upstream algorithm of version rust-lang/rust 1.52.0-nightly (25c15cdbe 2021-04-22) https://github.com/rust-lang/rust/blob/25c15cdbe/compiler/rustc_mir_build/src/thir/pattern/usefulness.rs The goal of this PR is to cover the current `missing-match-arm` diagnostic. What is remaining to do: - [x] Error handling. The errors that are unrelated to match checking will be handled before the check. Just like how it made in rustc. - [x] Lowering `hir_def::expr::Pat` to `hir_ty::diagnostics::match_check::Pat`. rustc's match checking works on top of `rustc_mir_build::thir::Pat`, which is lowered from `hir::Pat` and carries some extra semantics used by the check. All unrelated checks are done there. RA could use this to rule out running the check on unimplemented cases (`Pat::ConstBlock`, etc). - [x] ~~Proper~~Loose typecheck of match arm patterns (https://github.com/rust-analyzer/rust-analyzer/pull/8840, https://github.com/rust-analyzer/rust-analyzer/pull/8875). - [x] Tests from `hir_ty::diagnostics::match_check::tests`. - [x] Clean up `todo`s - [x] Test run on real repos https://github.com/rust-analyzer/rust-analyzer/pull/8717#issuecomment-847120265. Co-authored-by: Dawer <[email protected]>
| * Expand fixme commentsDawer2021-05-313-2/+5
| |
| * fix: panic on extra fields in a patternDawer2021-05-311-0/+25
| |
| * Correct binding pattern's type; handle invalid records.Dawer2021-05-311-5/+55
| |
| * Take substitutions into account.Dawer2021-05-313-14/+33
| |
| * eprint panic contextDawer2021-05-313-14/+36
| |
| * minor: doc comment pat_utilDawer2021-05-311-0/+4
| |
| * Test match guards, reference patternsDawer2021-05-311-0/+51
| |
| * Box field detection; test #[non-exhaustive] attributeDawer2021-05-313-10/+52
| |
| * Better tests: check if match checking bails out.Dawer2021-05-312-1/+69
| |
| * Replace the old match checking algorithmDawer2021-05-317-1927/+311
| |
| * Include old testsDawer2021-05-311-69/+597
| |
| * Don't panic on a pattern of unresolved ADT variant.Dawer2021-05-312-50/+14
| |
| * Clean up, more docs.Dawer2021-05-314-101/+383
| |
| * Check pattern types.Dawer2021-05-313-30/+85
| |
| * Expand binding patterns.Dawer2021-05-312-6/+110
| |
| * Fix visibility warningsDawer2021-05-313-12/+12
| |
| * Lower binding patternDawer2021-05-312-9/+28
| |
| * Lower bool literalsDawer2021-05-312-13/+29
| |
| * Treat ctor of unhandled type as non-exhaustive.Dawer2021-05-312-4/+24
| |
| * Lower Pat::PathDawer2021-05-311-0/+18
| |
| * Do not do match check if lowering failed.Dawer2021-05-311-2/+19
| |
| * Fix panics on pattern_arena.borrow with ugly cloningDawer2021-05-312-16/+15
| |
| * Basic lowering hir_def::exrp::Pat -> typed HIR.Dawer2021-05-315-164/+387
| | | | | | | | Pattern arena is broken
| * Handle unordered fields in struct patternsDawer2021-05-311-2/+12
| |
| * Complete field replacingDawer2021-05-311-2/+7
| |
| * Support bool literal patternsDawer2021-05-312-9/+182
| |
| * Check enum patternsDawer2021-05-313-6/+124
| |
| * Build wildcard witnesses instead of panickingDawer2021-05-311-8/+8
| |
| * Implement struct ctor applicationDawer2021-05-314-68/+120
| |
| * Add remaining Constructor variantsDawer2021-05-311-14/+56
| |
| * Complete usefulness::SubPatSet implDawer2021-05-311-3/+71
| |
| * List useless patterns in a useful match armDawer2021-05-311-9/+58
| |
| * Remove unneeded indirection on PatCtxtDawer2021-05-313-24/+24
| |
| * Enable generation of non-exhaustiveness witnessesDawer2021-05-313-13/+76
| |
| * Update match checking.Dawer2021-05-315-1/+1470
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fn is_useful , more skeletons Specify a lifetime on pattern references impl PatStack fill impl Matrix PatStack::pop_head_constructor Index-based approach struct PatCtxt fields construction fn Fields::wildcards split wildcard fn Constructor::is_covered_by_any(..) fn Matrix::specialize_constructor(..) impl Usefulness Initial work on witness construction Reorganize files Replace match checking diagnostic Handle types of expanded patterns unit match checking go brrr
* | hir_ty: use correct receiver_ty in method resolutioncynecx2021-05-313-12/+82
|/
* minor: it's Parameter, not ArgumentAleksey Kladov2021-05-312-5/+5
|
* fix: avoid panics in match case diagnosticAleksey Kladov2021-05-311-108/+33
|
* Merge #8866bors[bot]2021-05-312-2/+2
|\ | | | | | | | | | | | | | | 8866: Update salsa r=matklad a=jonas-schievink This updates salsa to include https://github.com/salsa-rs/salsa/pull/265, and removes all cancellation-related code from rust-analyzer Co-authored-by: Jonas Schievink <[email protected]>
| * Update salsaJonas Schievink2021-05-272-2/+2
| |
* | hir_ty: don't pass where clauses of associated types down to chalk (temp. ↵cynecx2021-05-302-11/+28
| | | | | | | | fix #9052)
* | hir_ty: use async ret type for inference inside async bodiescynecx2021-05-292-1/+56
| |
* | Remove fragment kind knowledge from builtin macrosJonas Schievink2021-05-291-0/+18
| |
* | Move hir_ty incremental test to its own fileJonas Schievink2021-05-272-44/+52
|/
* Merge #9007bors[bot]2021-05-263-17/+15
|\ | | | | | | | | | | | | | | 9007: Internal: `clippy::redundant_clone` fixes r=lnicola a=lnicola bors r+ Co-authored-by: Laurențiu Nicola <[email protected]>
| * clippy::redundant_clone fixesLaurențiu Nicola2021-05-263-17/+15
| |
* | Merge #8973bors[bot]2021-05-257-15/+125
|\ \ | | | | | | | | | | | | | | | | | | | | | 8973: internal: move diagnostics to hir r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | internal: move diagnostics to hirAleksey Kladov2021-05-257-15/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The idea here is to eventually get rid of `dyn Diagnostic` and `DiagnosticSink` infrastructure altogether, and just have a `enum hir::Diagnostic` instead. The problem with `dyn Diagnostic` is that it is defined in the lowest level of the stack (hir_expand), but is used by the highest level (ide). As a first step, we free hir_expand and hir_def from `dyn Diagnostic` and kick the can up to `hir_ty`, as an intermediate state. The plan is then to move DiagnosticSink similarly to the hir crate, and, as final third step, remove its usage from the ide. One currently unsolved problem is testing. You can notice that the test which checks precise diagnostic ranges, unresolved_import_in_use_tree, was moved to the ide layer. Logically, only IDE should have the infra to render a specific range. At the same time, the range is determined with the data produced in hir_def and hir crates, so this layering is rather unfortunate. Working on hir_def shouldn't require compiling `ide` for testing.
* | | Consider trait to be in scope for trait-implLukas Wirth2021-05-252-0/+32
| | |