about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2020-12-20 20:13:06 +0100
committerLukas Wirth <lukastw97@gmail.com>2020-12-20 20:13:06 +0100
commit33ecad4407e1345cd662f535c2ae7a04e4bee52b (patch)
treeedd613981e78ac6b9f4ea23b511cb2922d79c67f
parenta5874a38cb1bbaee685ff92a40b66f9d5bcf34f6 (diff)
downloadrust-33ecad4407e1345cd662f535c2ae7a04e4bee52b.tar.gz
rust-33ecad4407e1345cd662f535c2ae7a04e4bee52b.zip
Create non-exhaustive patterns for non_exhaustive attributed items
-rw-r--r--crates/completion/src/render/pattern.rs8
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)?;