aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/item_tree.rs
diff options
context:
space:
mode:
authorJonas Schievink <[email protected]>2020-06-25 12:50:27 +0100
committerJonas Schievink <[email protected]>2020-06-25 12:50:27 +0100
commit9ba772657950cb8353f37bc2576b78c4f0c8996f (patch)
treecc63a79f90006ad761202ca7b2a38c3c16be394f /crates/ra_hir_def/src/item_tree.rs
parente2465ee2e949d81f98270c57afa17666dac6afa4 (diff)
Allow iterating fields in the ItemTree
Diffstat (limited to 'crates/ra_hir_def/src/item_tree.rs')
-rw-r--r--crates/ra_hir_def/src/item_tree.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/crates/ra_hir_def/src/item_tree.rs b/crates/ra_hir_def/src/item_tree.rs
index d7bc64e6c..f99e05432 100644
--- a/crates/ra_hir_def/src/item_tree.rs
+++ b/crates/ra_hir_def/src/item_tree.rs
@@ -682,9 +682,27 @@ pub struct Variant {
682} 682}
683 683
684#[derive(Debug, Clone, PartialEq, Eq)] 684#[derive(Debug, Clone, PartialEq, Eq)]
685pub struct FieldIds {
686 range: Range<u32>,
687}
688
689impl FieldIds {
690 fn new(range: Range<Idx<Field>>) -> Self {
691 Self { range: range.start.into_raw().into()..range.end.into_raw().into() }
692 }
693}
694
695impl Iterator for FieldIds {
696 type Item = Idx<Field>;
697 fn next(&mut self) -> Option<Self::Item> {
698 self.range.next().map(|raw| Idx::from_raw(raw.into()))
699 }
700}
701
702#[derive(Debug, Clone, PartialEq, Eq)]
685pub enum Fields { 703pub enum Fields {
686 Record(Range<Idx<Field>>), 704 Record(FieldIds),
687 Tuple(Range<Idx<Field>>), 705 Tuple(FieldIds),
688 Unit, 706 Unit,
689} 707}
690 708