Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | | Implement per-edition preludes | Jonas Schievink | 2021-06-01 | 5 | -44/+97 | |
|/ | ||||||
* | Merge #8717 | bors[bot] | 2021-05-31 | 6 | -805/+2768 | |
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 comments | Dawer | 2021-05-31 | 3 | -2/+5 | |
| | | ||||||
| * | fix: panic on extra fields in a pattern | Dawer | 2021-05-31 | 1 | -0/+25 | |
| | | ||||||
| * | Correct binding pattern's type; handle invalid records. | Dawer | 2021-05-31 | 1 | -5/+55 | |
| | | ||||||
| * | Take substitutions into account. | Dawer | 2021-05-31 | 3 | -14/+33 | |
| | | ||||||
| * | eprint panic context | Dawer | 2021-05-31 | 3 | -14/+36 | |
| | | ||||||
| * | minor: doc comment pat_util | Dawer | 2021-05-31 | 1 | -0/+4 | |
| | | ||||||
| * | Test match guards, reference patterns | Dawer | 2021-05-31 | 1 | -0/+51 | |
| | | ||||||
| * | Box field detection; test #[non-exhaustive] attribute | Dawer | 2021-05-31 | 3 | -10/+52 | |
| | | ||||||
| * | Better tests: check if match checking bails out. | Dawer | 2021-05-31 | 2 | -1/+69 | |
| | | ||||||
| * | Replace the old match checking algorithm | Dawer | 2021-05-31 | 7 | -1927/+311 | |
| | | ||||||
| * | Include old tests | Dawer | 2021-05-31 | 1 | -69/+597 | |
| | | ||||||
| * | Don't panic on a pattern of unresolved ADT variant. | Dawer | 2021-05-31 | 2 | -50/+14 | |
| | | ||||||
| * | Clean up, more docs. | Dawer | 2021-05-31 | 4 | -101/+383 | |
| | | ||||||
| * | Check pattern types. | Dawer | 2021-05-31 | 3 | -30/+85 | |
| | | ||||||
| * | Expand binding patterns. | Dawer | 2021-05-31 | 2 | -6/+110 | |
| | | ||||||
| * | Fix visibility warnings | Dawer | 2021-05-31 | 3 | -12/+12 | |
| | | ||||||
| * | Lower binding pattern | Dawer | 2021-05-31 | 2 | -9/+28 | |
| | | ||||||
| * | Lower bool literals | Dawer | 2021-05-31 | 2 | -13/+29 | |
| | | ||||||
| * | Treat ctor of unhandled type as non-exhaustive. | Dawer | 2021-05-31 | 2 | -4/+24 | |
| | | ||||||
| * | Lower Pat::Path | Dawer | 2021-05-31 | 1 | -0/+18 | |
| | | ||||||
| * | Do not do match check if lowering failed. | Dawer | 2021-05-31 | 1 | -2/+19 | |
| | | ||||||
| * | Fix panics on pattern_arena.borrow with ugly cloning | Dawer | 2021-05-31 | 2 | -16/+15 | |
| | | ||||||
| * | Basic lowering hir_def::exrp::Pat -> typed HIR. | Dawer | 2021-05-31 | 5 | -164/+387 | |
| | | | | | | | | Pattern arena is broken | |||||
| * | Handle unordered fields in struct patterns | Dawer | 2021-05-31 | 1 | -2/+12 | |
| | | ||||||
| * | Complete field replacing | Dawer | 2021-05-31 | 1 | -2/+7 | |
| | | ||||||
| * | Support bool literal patterns | Dawer | 2021-05-31 | 2 | -9/+182 | |
| | | ||||||
| * | Check enum patterns | Dawer | 2021-05-31 | 3 | -6/+124 | |
| | | ||||||
| * | Build wildcard witnesses instead of panicking | Dawer | 2021-05-31 | 1 | -8/+8 | |
| | | ||||||
| * | Implement struct ctor application | Dawer | 2021-05-31 | 4 | -68/+120 | |
| | | ||||||
| * | Add remaining Constructor variants | Dawer | 2021-05-31 | 1 | -14/+56 | |
| | | ||||||
| * | Complete usefulness::SubPatSet impl | Dawer | 2021-05-31 | 1 | -3/+71 | |
| | | ||||||
| * | List useless patterns in a useful match arm | Dawer | 2021-05-31 | 1 | -9/+58 | |
| | | ||||||
| * | Remove unneeded indirection on PatCtxt | Dawer | 2021-05-31 | 3 | -24/+24 | |
| | | ||||||
| * | Enable generation of non-exhaustiveness witnesses | Dawer | 2021-05-31 | 3 | -13/+76 | |
| | | ||||||
| * | Update match checking. | Dawer | 2021-05-31 | 6 | -1/+1471 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 resolution | cynecx | 2021-05-31 | 3 | -12/+82 | |
|/ | ||||||
* | minor: it's Parameter, not Argument | Aleksey Kladov | 2021-05-31 | 2 | -5/+5 | |
| | ||||||
* | fix: avoid panics in match case diagnostic | Aleksey Kladov | 2021-05-31 | 1 | -108/+33 | |
| | ||||||
* | Merge #8866 | bors[bot] | 2021-05-31 | 2 | -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 salsa | Jonas Schievink | 2021-05-27 | 2 | -2/+2 | |
| | | ||||||
* | | hir_ty: don't pass where clauses of associated types down to chalk (temp. ↵ | cynecx | 2021-05-30 | 2 | -11/+28 | |
| | | | | | | | | fix #9052) | |||||
* | | Merge #9062 | bors[bot] | 2021-05-30 | 1 | -3/+3 | |
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9062: internal: Bump deps r=lnicola a=lnicola Fixes #9061 bors r+ Co-authored-by: Laurențiu Nicola <[email protected]> | |||||
| * | | Bump deps | Laurențiu Nicola | 2021-05-30 | 1 | -3/+3 | |
| | | | ||||||
* | | | hir_ty: use async ret type for inference inside async bodies | cynecx | 2021-05-29 | 2 | -1/+56 | |
| | | | ||||||
* | | | Remove fragment kind knowledge from builtin macros | Jonas Schievink | 2021-05-29 | 1 | -0/+18 | |
| | | | ||||||
* | | | Move hir_ty incremental test to its own file | Jonas Schievink | 2021-05-27 | 2 | -44/+52 | |
| |/ |/| | ||||||
* | | Merge #9007 | bors[bot] | 2021-05-26 | 3 | -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 fixes | Laurențiu Nicola | 2021-05-26 | 3 | -17/+15 | |
| | | |