diff options
Diffstat (limited to 'crates/ra_hir_ty/src')
-rw-r--r-- | crates/ra_hir_ty/src/display.rs | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/crates/ra_hir_ty/src/display.rs b/crates/ra_hir_ty/src/display.rs index a6ef44a31..13ecd537a 100644 --- a/crates/ra_hir_ty/src/display.rs +++ b/crates/ra_hir_ty/src/display.rs | |||
@@ -159,20 +159,13 @@ impl HirDisplay for ApplicationTy { | |||
159 | } | 159 | } |
160 | TypeCtor::FnDef(def) => { | 160 | TypeCtor::FnDef(def) => { |
161 | let sig = f.db.callable_item_signature(def).subst(&self.parameters); | 161 | let sig = f.db.callable_item_signature(def).subst(&self.parameters); |
162 | let name = match def { | 162 | match def { |
163 | CallableDef::FunctionId(ff) => f.db.function_data(ff).name.clone(), | 163 | CallableDef::FunctionId(ff) => write!(f, "fn {}", f.db.function_data(ff).name)?, |
164 | CallableDef::StructId(s) => f.db.struct_data(s).name.clone(), | 164 | CallableDef::StructId(s) => write!(f, "{}", f.db.struct_data(s).name)?, |
165 | CallableDef::EnumVariantId(e) => { | 165 | CallableDef::EnumVariantId(e) => { |
166 | let enum_data = f.db.enum_data(e.parent); | 166 | write!(f, "{}", f.db.enum_data(e.parent).variants[e.local_id].name)? |
167 | enum_data.variants[e.local_id].name.clone() | ||
168 | } | 167 | } |
169 | }; | 168 | }; |
170 | match def { | ||
171 | CallableDef::FunctionId(_) => write!(f, "fn {}", name)?, | ||
172 | CallableDef::StructId(_) | CallableDef::EnumVariantId(_) => { | ||
173 | write!(f, "{}", name)? | ||
174 | } | ||
175 | } | ||
176 | if self.parameters.len() > 0 { | 169 | if self.parameters.len() > 0 { |
177 | let generics = generics(f.db.upcast(), def.into()); | 170 | let generics = generics(f.db.upcast(), def.into()); |
178 | let (parent_params, self_param, type_params, _impl_trait_params) = | 171 | let (parent_params, self_param, type_params, _impl_trait_params) = |
@@ -197,8 +190,6 @@ impl HirDisplay for ApplicationTy { | |||
197 | }; | 190 | }; |
198 | write!(f, "{}", name)?; | 191 | write!(f, "{}", name)?; |
199 | if self.parameters.len() > 0 { | 192 | if self.parameters.len() > 0 { |
200 | write!(f, "<")?; | ||
201 | |||
202 | let mut non_default_parameters = Vec::with_capacity(self.parameters.len()); | 193 | let mut non_default_parameters = Vec::with_capacity(self.parameters.len()); |
203 | let parameters_to_write = if f.omit_verbose_types() { | 194 | let parameters_to_write = if f.omit_verbose_types() { |
204 | match self | 195 | match self |
@@ -207,8 +198,8 @@ impl HirDisplay for ApplicationTy { | |||
207 | .map(|generic_def_id| f.db.generic_defaults(generic_def_id)) | 198 | .map(|generic_def_id| f.db.generic_defaults(generic_def_id)) |
208 | .filter(|defaults| !defaults.is_empty()) | 199 | .filter(|defaults| !defaults.is_empty()) |
209 | { | 200 | { |
210 | Option::None => self.parameters.0.as_ref(), | 201 | None => self.parameters.0.as_ref(), |
211 | Option::Some(default_parameters) => { | 202 | Some(default_parameters) => { |
212 | for (i, parameter) in self.parameters.iter().enumerate() { | 203 | for (i, parameter) in self.parameters.iter().enumerate() { |
213 | match (parameter, default_parameters.get(i)) { | 204 | match (parameter, default_parameters.get(i)) { |
214 | (&Ty::Unknown, _) | (_, None) => { | 205 | (&Ty::Unknown, _) | (_, None) => { |
@@ -228,7 +219,7 @@ impl HirDisplay for ApplicationTy { | |||
228 | } else { | 219 | } else { |
229 | self.parameters.0.as_ref() | 220 | self.parameters.0.as_ref() |
230 | }; | 221 | }; |
231 | 222 | write!(f, "<")?; | |
232 | f.write_joined(parameters_to_write, ", ")?; | 223 | f.write_joined(parameters_to_write, ", ")?; |
233 | write!(f, ">")?; | 224 | write!(f, ">")?; |
234 | } | 225 | } |
@@ -238,9 +229,9 @@ impl HirDisplay for ApplicationTy { | |||
238 | AssocContainerId::TraitId(it) => it, | 229 | AssocContainerId::TraitId(it) => it, |
239 | _ => panic!("not an associated type"), | 230 | _ => panic!("not an associated type"), |
240 | }; | 231 | }; |
241 | let trait_name = f.db.trait_data(trait_).name.clone(); | 232 | let trait_ = f.db.trait_data(trait_); |
242 | let name = f.db.type_alias_data(type_alias).name.clone(); | 233 | let type_alias = f.db.type_alias_data(type_alias); |
243 | write!(f, "{}::{}", trait_name, name)?; | 234 | write!(f, "{}::{}", trait_.name, type_alias.name)?; |
244 | if self.parameters.len() > 0 { | 235 | if self.parameters.len() > 0 { |
245 | write!(f, "<")?; | 236 | write!(f, "<")?; |
246 | f.write_joined(&*self.parameters.0, ", ")?; | 237 | f.write_joined(&*self.parameters.0, ", ")?; |
@@ -273,8 +264,8 @@ impl HirDisplay for ProjectionTy { | |||
273 | return write!(f, "{}", TYPE_HINT_TRUNCATION); | 264 | return write!(f, "{}", TYPE_HINT_TRUNCATION); |
274 | } | 265 | } |
275 | 266 | ||
276 | let trait_name = f.db.trait_data(self.trait_(f.db)).name.clone(); | 267 | let trait_ = f.db.trait_data(self.trait_(f.db)); |
277 | write!(f, "<{} as {}", self.parameters[0].display(f.db), trait_name,)?; | 268 | write!(f, "<{} as {}", self.parameters[0].display(f.db), trait_.name)?; |
278 | if self.parameters.len() > 1 { | 269 | if self.parameters.len() > 1 { |
279 | write!(f, "<")?; | 270 | write!(f, "<")?; |
280 | f.write_joined(&self.parameters[1..], ", ")?; | 271 | f.write_joined(&self.parameters[1..], ", ")?; |
@@ -319,7 +310,7 @@ impl HirDisplay for Ty { | |||
319 | Ty::Opaque(_) => write!(f, "impl ")?, | 310 | Ty::Opaque(_) => write!(f, "impl ")?, |
320 | _ => unreachable!(), | 311 | _ => unreachable!(), |
321 | }; | 312 | }; |
322 | write_bounds_like_dyn_trait(&predicates, f)?; | 313 | write_bounds_like_dyn_trait(predicates, f)?; |
323 | } | 314 | } |
324 | Ty::Unknown => write!(f, "{{unknown}}")?, | 315 | Ty::Unknown => write!(f, "{{unknown}}")?, |
325 | Ty::Infer(..) => write!(f, "_")?, | 316 | Ty::Infer(..) => write!(f, "_")?, |
@@ -352,7 +343,7 @@ fn write_bounds_like_dyn_trait( | |||
352 | // We assume that the self type is $0 (i.e. the | 343 | // We assume that the self type is $0 (i.e. the |
353 | // existential) here, which is the only thing that's | 344 | // existential) here, which is the only thing that's |
354 | // possible in actual Rust, and hence don't print it | 345 | // possible in actual Rust, and hence don't print it |
355 | write!(f, "{}", f.db.trait_data(trait_ref.trait_).name.clone())?; | 346 | write!(f, "{}", f.db.trait_data(trait_ref.trait_).name)?; |
356 | if trait_ref.substs.len() > 1 { | 347 | if trait_ref.substs.len() > 1 { |
357 | write!(f, "<")?; | 348 | write!(f, "<")?; |
358 | f.write_joined(&trait_ref.substs[1..], ", ")?; | 349 | f.write_joined(&trait_ref.substs[1..], ", ")?; |
@@ -369,9 +360,8 @@ fn write_bounds_like_dyn_trait( | |||
369 | write!(f, "<")?; | 360 | write!(f, "<")?; |
370 | angle_open = true; | 361 | angle_open = true; |
371 | } | 362 | } |
372 | let name = | 363 | let type_alias = f.db.type_alias_data(projection_pred.projection_ty.associated_ty); |
373 | f.db.type_alias_data(projection_pred.projection_ty.associated_ty).name.clone(); | 364 | write!(f, "{} = ", type_alias.name)?; |
374 | write!(f, "{} = ", name)?; | ||
375 | projection_pred.ty.hir_fmt(f)?; | 365 | projection_pred.ty.hir_fmt(f)?; |
376 | } | 366 | } |
377 | GenericPredicate::Error => { | 367 | GenericPredicate::Error => { |
@@ -405,7 +395,7 @@ impl TraitRef { | |||
405 | } else { | 395 | } else { |
406 | write!(f, ": ")?; | 396 | write!(f, ": ")?; |
407 | } | 397 | } |
408 | write!(f, "{}", f.db.trait_data(self.trait_).name.clone())?; | 398 | write!(f, "{}", f.db.trait_data(self.trait_).name)?; |
409 | if self.substs.len() > 1 { | 399 | if self.substs.len() > 1 { |
410 | write!(f, "<")?; | 400 | write!(f, "<")?; |
411 | f.write_joined(&self.substs[1..], ", ")?; | 401 | f.write_joined(&self.substs[1..], ", ")?; |