From d84b3ff6a1c42df0e349dc8ec3fc08e8c1251777 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 25 Jun 2020 14:39:27 +0200 Subject: Collect field/variant attrs in ItemTree --- crates/ra_hir_def/src/item_tree/lower.rs | 23 +++++++++++++---------- crates/ra_hir_def/src/item_tree/tests.rs | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) (limited to 'crates/ra_hir_def/src/item_tree') diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index e2e00323c..230e1f768 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs @@ -126,15 +126,15 @@ impl Ctx { if !attrs.is_empty() { for item in items.iter().flat_map(|items| &items.0) { - self.add_attrs(*item, attrs.clone()); + self.add_attrs((*item).into(), attrs.clone()); } } items } - fn add_attrs(&mut self, item: ModItem, attrs: Attrs) { - match self.tree.attrs.entry(AttrOwner::ModItem(item)) { + fn add_attrs(&mut self, item: AttrOwner, attrs: Attrs) { + match self.tree.attrs.entry(item) { Entry::Occupied(mut entry) => { *entry.get_mut() = entry.get().merge(attrs); } @@ -200,7 +200,8 @@ impl Ctx { let start = self.next_field_idx(); for field in fields.fields() { if let Some(data) = self.lower_record_field(&field) { - self.data().fields.alloc(data); + let idx = self.data().fields.alloc(data); + self.add_attrs(idx.into(), Attrs::new(&field, &self.hygiene)); } } let end = self.next_field_idx(); @@ -219,7 +220,8 @@ impl Ctx { let start = self.next_field_idx(); for (i, field) in fields.fields().enumerate() { if let Some(data) = self.lower_tuple_field(i, &field) { - self.data().fields.alloc(data); + let idx = self.data().fields.alloc(data); + self.add_attrs(idx.into(), Attrs::new(&field, &self.hygiene)); } } let end = self.next_field_idx(); @@ -266,7 +268,8 @@ impl Ctx { let start = self.next_variant_idx(); for variant in variants.variants() { if let Some(data) = self.lower_variant(&variant) { - self.data().variants.alloc(data); + let idx = self.data().variants.alloc(data); + self.add_attrs(idx.into(), Attrs::new(&variant, &self.hygiene)); } } let end = self.next_variant_idx(); @@ -419,7 +422,7 @@ impl Ctx { let attrs = Attrs::new(&item, &this.hygiene); this.collect_inner_items(item.syntax()); this.lower_assoc_item(&item).map(|item| { - this.add_attrs(item.into(), attrs); + this.add_attrs(ModItem::from(item).into(), attrs); item }) }) @@ -453,7 +456,7 @@ impl Ctx { self.collect_inner_items(item.syntax()); let assoc = self.lower_assoc_item(&item)?; let attrs = Attrs::new(&item, &self.hygiene); - self.add_attrs(assoc.into(), attrs); + self.add_attrs(ModItem::from(assoc).into(), attrs); Some(assoc) }) .collect(); @@ -539,7 +542,7 @@ impl Ctx { .filter_map(|item| { self.collect_inner_items(item.syntax()); let attrs = Attrs::new(&item, &self.hygiene); - let id = match item { + let id: ModItem = match item { ast::ExternItem::FnDef(ast) => { let func = self.lower_function(&ast)?; func.into() @@ -549,7 +552,7 @@ impl Ctx { statik.into() } }; - self.add_attrs(id, attrs); + self.add_attrs(id.into(), attrs); Some(id) }) .collect() diff --git a/crates/ra_hir_def/src/item_tree/tests.rs b/crates/ra_hir_def/src/item_tree/tests.rs index fd7ffee24..18df42050 100644 --- a/crates/ra_hir_def/src/item_tree/tests.rs +++ b/crates/ra_hir_def/src/item_tree/tests.rs @@ -92,7 +92,7 @@ fn print_item_tree(ra_fixture: &str) -> String { } fn fmt_mod_item(out: &mut String, tree: &ItemTree, item: ModItem) { - let attrs = tree.attrs(item); + let attrs = tree.attrs(item.into()); if !attrs.is_empty() { format_to!(out, "#[{:?}]\n", attrs); } -- cgit v1.2.3