|
1 | 1 | use rustc::lint as lint;
|
2 | 2 | use rustc::hir;
|
3 | 3 | use rustc::hir::def::Def;
|
| 4 | +use rustc::hir::def_id::DefId; |
4 | 5 | use rustc::ty;
|
5 | 6 | use syntax;
|
6 | 7 | use syntax::ast::{self, Ident, NodeId};
|
@@ -126,6 +127,17 @@ impl<'a, 'tcx, 'rcx> LinkCollector<'a, 'tcx, 'rcx> {
|
126 | 127 | path = name.clone();
|
127 | 128 | }
|
128 | 129 | }
|
| 130 | + if let Some(prim) = is_primitive(&path, false) { |
| 131 | + let did = primitive_impl(cx, &path).ok_or(())?; |
| 132 | + return cx.tcx.associated_items(did) |
| 133 | + .find(|item| item.ident.name == item_name) |
| 134 | + .and_then(|item| match item.kind { |
| 135 | + ty::AssociatedKind::Method => Some("method"), |
| 136 | + _ => None, |
| 137 | + }) |
| 138 | + .map(|out| (prim, Some(format!("{}#{}.{}", path, out, item_name)))) |
| 139 | + .ok_or(()); |
| 140 | + } |
129 | 141 |
|
130 | 142 | // FIXME: `with_scope` requires the `NodeId` of a module.
|
131 | 143 | let ty = cx.resolver.borrow_mut()
|
@@ -589,3 +601,26 @@ fn is_primitive(path_str: &str, is_val: bool) -> Option<Def> {
|
589 | 601 | PRIMITIVES.iter().find(|x| x.0 == path_str).map(|x| x.1)
|
590 | 602 | }
|
591 | 603 | }
|
| 604 | + |
| 605 | +fn primitive_impl(cx: &DocContext<'_, '_, '_>, path_str: &str) -> Option<DefId> { |
| 606 | + let tcx = cx.tcx; |
| 607 | + match path_str { |
| 608 | + "u8" => tcx.lang_items().u8_impl(), |
| 609 | + "u16" => tcx.lang_items().u16_impl(), |
| 610 | + "u32" => tcx.lang_items().u32_impl(), |
| 611 | + "u64" => tcx.lang_items().u64_impl(), |
| 612 | + "u128" => tcx.lang_items().u128_impl(), |
| 613 | + "usize" => tcx.lang_items().usize_impl(), |
| 614 | + "i8" => tcx.lang_items().i8_impl(), |
| 615 | + "i16" => tcx.lang_items().i16_impl(), |
| 616 | + "i32" => tcx.lang_items().i32_impl(), |
| 617 | + "i64" => tcx.lang_items().i64_impl(), |
| 618 | + "i128" => tcx.lang_items().i128_impl(), |
| 619 | + "isize" => tcx.lang_items().isize_impl(), |
| 620 | + "f32" => tcx.lang_items().f32_impl(), |
| 621 | + "f64" => tcx.lang_items().f64_impl(), |
| 622 | + "str" => tcx.lang_items().str_impl(), |
| 623 | + "char" => tcx.lang_items().char_impl(), |
| 624 | + _ => None, |
| 625 | + } |
| 626 | +} |
0 commit comments