aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_ty/src/utils.rs')
-rw-r--r--crates/ra_hir_ty/src/utils.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/crates/ra_hir_ty/src/utils.rs b/crates/ra_hir_ty/src/utils.rs
index 2c458867f..936cfe25e 100644
--- a/crates/ra_hir_ty/src/utils.rs
+++ b/crates/ra_hir_ty/src/utils.rs
@@ -117,13 +117,14 @@ impl Generics {
117 .map(|(i, (_local_id, p))| (i as u32, p)) 117 .map(|(i, (_local_id, p))| (i as u32, p))
118 } 118 }
119 119
120 pub(crate) fn count_parent_params(&self) -> usize { 120 pub(crate) fn len(&self) -> usize {
121 self.parent_generics.as_ref().map_or(0, |p| p.count_params_including_parent()) 121 self.len_split().0
122 } 122 }
123 123 /// (total, parents, child)
124 pub(crate) fn count_params_including_parent(&self) -> usize { 124 pub(crate) fn len_split(&self) -> (usize, usize, usize) {
125 let parent_count = self.count_parent_params(); 125 let parent = self.parent_generics.as_ref().map_or(0, |p| p.len());
126 parent_count + self.params.params.len() 126 let child = self.params.params.len();
127 (parent + child, parent, child)
127 } 128 }
128 pub(crate) fn param_idx(&self, param: GenericParamId) -> u32 { 129 pub(crate) fn param_idx(&self, param: GenericParamId) -> u32 {
129 self.find_param(param).0 130 self.find_param(param).0
@@ -140,8 +141,8 @@ impl Generics {
140 .enumerate() 141 .enumerate()
141 .find(|(_, (idx, _))| *idx == param.local_id) 142 .find(|(_, (idx, _))| *idx == param.local_id)
142 .unwrap(); 143 .unwrap();
143 144 let (_total, parent_len, _child) = self.len_split();
144 return ((self.count_parent_params() + idx) as u32, data); 145 return ((parent_len + idx) as u32, data);
145 } 146 }
146 self.parent_generics.as_ref().unwrap().find_param(param) 147 self.parent_generics.as_ref().unwrap().find_param(param)
147 } 148 }