allow deref patterns to participate in exhaustiveness analysis by dianne · Pull Request #140106 · rust-lang/rust (original) (raw)
Per this proposal, this PR allows deref patterns to participate in exhaustiveness analysis. Currently all deref patterns enforce DerefPure
bounds on their scrutinees, so this assumes all patterns it's analyzing are well-behaved. This also doesn't support mixed exhaustiveness, and instead emits an error if deref patterns are used together with normal constructors. I think mixed exhaustiveness would be nice to have (especially if we eventually want to support arbitrary Deref
impls1), but it'd require more work to get reasonable diagnostics2.
Tracking issue for deref patterns: #87121
r? @Nadrieril
Footnotes
- Regardless of whether we support limited exhaustiveness checking for untrusted
Deref
or always require other arms to be exhaustive, I think it'd be useful to allow mixed matching for user-defined smart pointers. And it'd be strange if it worked there but not forCow
. ↩ - I think listing out witnesses of non-exhaustiveness can be confusing when they're not necessarily disjoint, and when you only need to cover some of them, so we'd probably want special formatting and/or explanatory subdiagnostics. And if it's implemented similarly to unions, we'd probably also want some way of merging witnesses; the way witnesses for unions can appear duplicated is pretty unfortunate. I'm not sure yet how the diagnostics should look, especially for deeply nested patterns. ↩