From 9ba772657950cb8353f37bc2576b78c4f0c8996f Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 25 Jun 2020 13:50:27 +0200 Subject: Allow iterating fields in the ItemTree --- crates/ra_hir_def/src/item_tree/lower.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'crates/ra_hir_def/src/item_tree/lower.rs') diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index f10ad25f7..e2e00323c 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs @@ -196,7 +196,7 @@ impl Ctx { } } - fn lower_record_fields(&mut self, fields: &ast::RecordFieldDefList) -> Range> { + fn lower_record_fields(&mut self, fields: &ast::RecordFieldDefList) -> FieldIds { let start = self.next_field_idx(); for field in fields.fields() { if let Some(data) = self.lower_record_field(&field) { @@ -204,7 +204,7 @@ impl Ctx { } } let end = self.next_field_idx(); - start..end + FieldIds::new(start..end) } fn lower_record_field(&mut self, field: &ast::RecordFieldDef) -> Option { @@ -215,7 +215,7 @@ impl Ctx { Some(res) } - fn lower_tuple_fields(&mut self, fields: &ast::TupleFieldDefList) -> Range> { + fn lower_tuple_fields(&mut self, fields: &ast::TupleFieldDefList) -> FieldIds { let start = self.next_field_idx(); for (i, field) in fields.fields().enumerate() { if let Some(data) = self.lower_tuple_field(i, &field) { @@ -223,7 +223,7 @@ impl Ctx { } } let end = self.next_field_idx(); - start..end + FieldIds::new(start..end) } fn lower_tuple_field(&mut self, idx: usize, field: &ast::TupleFieldDef) -> Option { @@ -242,7 +242,7 @@ impl Ctx { Some(record_field_def_list) => { self.lower_fields(&StructKind::Record(record_field_def_list)) } - None => Fields::Record(self.next_field_idx()..self.next_field_idx()), + None => Fields::Record(FieldIds::new(self.next_field_idx()..self.next_field_idx())), }; let ast_id = self.source_ast_id_map.ast_id(union); let res = Union { name, visibility, generic_params, fields, ast_id }; -- cgit v1.2.3 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 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'crates/ra_hir_def/src/item_tree/lower.rs') 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() -- cgit v1.2.3 From b06214d16408e0b699f9d6051ba244e5fe766578 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 25 Jun 2020 16:42:59 +0200 Subject: Generalize FieldIds -> IdRange --- crates/ra_hir_def/src/item_tree/lower.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'crates/ra_hir_def/src/item_tree/lower.rs') diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index 230e1f768..93e8cc0c8 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs @@ -196,7 +196,7 @@ impl Ctx { } } - fn lower_record_fields(&mut self, fields: &ast::RecordFieldDefList) -> FieldIds { + fn lower_record_fields(&mut self, fields: &ast::RecordFieldDefList) -> IdRange { let start = self.next_field_idx(); for field in fields.fields() { if let Some(data) = self.lower_record_field(&field) { @@ -205,7 +205,7 @@ impl Ctx { } } let end = self.next_field_idx(); - FieldIds::new(start..end) + IdRange::new(start..end) } fn lower_record_field(&mut self, field: &ast::RecordFieldDef) -> Option { @@ -216,7 +216,7 @@ impl Ctx { Some(res) } - fn lower_tuple_fields(&mut self, fields: &ast::TupleFieldDefList) -> FieldIds { + fn lower_tuple_fields(&mut self, fields: &ast::TupleFieldDefList) -> IdRange { let start = self.next_field_idx(); for (i, field) in fields.fields().enumerate() { if let Some(data) = self.lower_tuple_field(i, &field) { @@ -225,7 +225,7 @@ impl Ctx { } } let end = self.next_field_idx(); - FieldIds::new(start..end) + IdRange::new(start..end) } fn lower_tuple_field(&mut self, idx: usize, field: &ast::TupleFieldDef) -> Option { @@ -244,7 +244,7 @@ impl Ctx { Some(record_field_def_list) => { self.lower_fields(&StructKind::Record(record_field_def_list)) } - None => Fields::Record(FieldIds::new(self.next_field_idx()..self.next_field_idx())), + None => Fields::Record(IdRange::new(self.next_field_idx()..self.next_field_idx())), }; let ast_id = self.source_ast_id_map.ast_id(union); let res = Union { name, visibility, generic_params, fields, ast_id }; -- cgit v1.2.3 From 563d58559400c4e5b67377bd10f40fee7695ea46 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 25 Jun 2020 16:47:21 +0200 Subject: Use IdRange for variants --- crates/ra_hir_def/src/item_tree/lower.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'crates/ra_hir_def/src/item_tree/lower.rs') diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index 93e8cc0c8..5149dd141 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs @@ -257,14 +257,14 @@ impl Ctx { let generic_params = self.lower_generic_params(GenericsOwner::Enum, enum_); let variants = match &enum_.variant_list() { Some(variant_list) => self.lower_variants(variant_list), - None => self.next_variant_idx()..self.next_variant_idx(), + None => IdRange::new(self.next_variant_idx()..self.next_variant_idx()), }; let ast_id = self.source_ast_id_map.ast_id(enum_); let res = Enum { name, visibility, generic_params, variants, ast_id }; Some(id(self.data().enums.alloc(res))) } - fn lower_variants(&mut self, variants: &ast::EnumVariantList) -> Range> { + fn lower_variants(&mut self, variants: &ast::EnumVariantList) -> IdRange { let start = self.next_variant_idx(); for variant in variants.variants() { if let Some(data) = self.lower_variant(&variant) { @@ -273,7 +273,7 @@ impl Ctx { } } let end = self.next_variant_idx(); - start..end + IdRange::new(start..end) } fn lower_variant(&mut self, variant: &ast::EnumVariant) -> Option { -- cgit v1.2.3