diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2020-12-20 20:13:06 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2020-12-20 20:13:06 +0100 |
| commit | 33ecad4407e1345cd662f535c2ae7a04e4bee52b (patch) | |
| tree | edd613981e78ac6b9f4ea23b511cb2922d79c67f | |
| parent | a5874a38cb1bbaee685ff92a40b66f9d5bcf34f6 (diff) | |
| download | rust-33ecad4407e1345cd662f535c2ae7a04e4bee52b.tar.gz rust-33ecad4407e1345cd662f535c2ae7a04e4bee52b.zip | |
Create non-exhaustive patterns for non_exhaustive attributed items
| -rw-r--r-- | crates/completion/src/render/pattern.rs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/crates/completion/src/render/pattern.rs b/crates/completion/src/render/pattern.rs index cfe2116bd2c..2d16001053b 100644 --- a/crates/completion/src/render/pattern.rs +++ b/crates/completion/src/render/pattern.rs @@ -1,6 +1,6 @@ //! Renderer for patterns. -use hir::{db::HirDatabase, HasVisibility, Name, StructKind}; +use hir::{db::HirDatabase, HasAttrs, HasVisibility, Name, StructKind}; use itertools::Itertools; use crate::{ @@ -27,7 +27,8 @@ pub(crate) fn render_struct_pat( // Matching a struct without matching its fields is pointless, unlike matching a Variant without its fields return None; } - let fields_omitted = n_fields - fields.len() > 0; + let fields_omitted = + n_fields - fields.len() > 0 || strukt.attrs(ctx.db()).by_key("non_exhaustive").exists(); let name = local_name.unwrap_or_else(|| strukt.name(ctx.db())).to_string(); let pat = render_pat(&ctx, &name, strukt.kind(ctx.db()), &fields, fields_omitted)?; @@ -60,7 +61,8 @@ pub(crate) fn render_variant_pat( .filter(|field| field.is_visible_from(ctx.db(), module)) .collect::<Vec<_>>(); - let fields_omitted = n_fields - fields.len() > 0; + let fields_omitted = + n_fields - fields.len() > 0 || variant.attrs(ctx.db()).by_key("non_exhaustive").exists(); let name = local_name.unwrap_or_else(|| variant.name(ctx.db())).to_string(); let pat = render_pat(&ctx, &name, variant.kind(ctx.db()), &fields, fields_omitted)?; |
