diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2018-08-31 10:10:57 +1200 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2018-08-31 10:10:57 +1200 |
| commit | 6aafd7adc6f882fcb1f9b60fd90ad5af9e391a0a (patch) | |
| tree | 2e637eafd20f1ecd6bf82f8c1d032b959d62b02b | |
| parent | f8d34596ff74da91e0877212a9979cb9ca13eb7e (diff) | |
| download | rust-6aafd7adc6f882fcb1f9b60fd90ad5af9e391a0a.tar.gz rust-6aafd7adc6f882fcb1f9b60fd90ad5af9e391a0a.zip | |
save-analysis: record info for the types in `where` clauses
cc https://github.com/rust-lang-nursery/rls/issues/987
| -rw-r--r-- | src/librustc_save_analysis/dump_visitor.rs | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index dc9310cdcda..eee6dca9f98 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -1362,6 +1362,14 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { } } } + + fn process_bounds(&mut self, bounds: &'l ast::GenericBounds) { + for bound in bounds { + if let ast::GenericBound::Trait(ref trait_ref, _) = *bound { + self.process_path(trait_ref.trait_ref.ref_id, &trait_ref.trait_ref.path) + } + } + } } impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, O> { @@ -1527,20 +1535,19 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc fn visit_generics(&mut self, generics: &'l ast::Generics) { for param in &generics.params { - match param.kind { - ast::GenericParamKind::Lifetime { .. } => {} - ast::GenericParamKind::Type { ref default, .. } => { - for bound in ¶m.bounds { - if let ast::GenericBound::Trait(ref trait_ref, _) = *bound { - self.process_path(trait_ref.trait_ref.ref_id, &trait_ref.trait_ref.path) - } - } - if let Some(ref ty) = default { - self.visit_ty(&ty); - } + if let ast::GenericParamKind::Type { ref default, .. } = param.kind { + self.process_bounds(¶m.bounds); + if let Some(ref ty) = default { + self.visit_ty(&ty); } } } + for pred in &generics.where_clause.predicates { + if let ast::WherePredicate::BoundPredicate(ref wbp) = *pred { + self.process_bounds(&wbp.bounds); + self.visit_ty(&wbp.bounded_ty); + } + } } fn visit_ty(&mut self, t: &'l ast::Ty) { |
