about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <jyn514@gmail.com>2020-08-17 18:03:38 -0400
committerJoshua Nelson <jyn514@gmail.com>2020-08-19 08:18:24 -0400
commit967ec1f62360c1e9666568aaddfaf4535718d6df (patch)
tree5c983dc5bb6191ab53f00852f4afca09d13cd643
parent5b04bbfcbb79ed7325ea2b580458a80d95da6bbb (diff)
downloadrust-967ec1f62360c1e9666568aaddfaf4535718d6df.tar.gz
rust-967ec1f62360c1e9666568aaddfaf4535718d6df.zip
Refactor `impl_for_type` into a separate function
-rw-r--r--src/librustdoc/clean/utils.rs63
1 files changed, 34 insertions, 29 deletions
diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs
index a502a27948e..65dfc7b2481 100644
--- a/src/librustdoc/clean/utils.rs
+++ b/src/librustdoc/clean/utils.rs
@@ -15,7 +15,7 @@ use rustc_hir::def::{DefKind, Res};
 use rustc_hir::def_id::{DefId, LOCAL_CRATE};
 use rustc_middle::mir::interpret::{sign_extend, ConstValue, Scalar};
 use rustc_middle::ty::subst::{GenericArgKind, SubstsRef};
-use rustc_middle::ty::{self, DefIdTree, Ty};
+use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt};
 use rustc_span::symbol::{kw, sym, Symbol};
 use std::mem;
 
@@ -350,8 +350,39 @@ pub fn qpath_to_string(p: &hir::QPath<'_>) -> String {
     s
 }
 
-pub fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut Vec<Item>) {
+pub fn impl_for_type(tcx: TyCtxt<'_>, primitive: PrimitiveType) -> Option<DefId> {
     use self::PrimitiveType::*;
+
+    match primitive {
+        Isize => tcx.lang_items().isize_impl(),
+        I8 => tcx.lang_items().i8_impl(),
+        I16 => tcx.lang_items().i16_impl(),
+        I32 => tcx.lang_items().i32_impl(),
+        I64 => tcx.lang_items().i64_impl(),
+        I128 => tcx.lang_items().i128_impl(),
+        Usize => tcx.lang_items().usize_impl(),
+        U8 => tcx.lang_items().u8_impl(),
+        U16 => tcx.lang_items().u16_impl(),
+        U32 => tcx.lang_items().u32_impl(),
+        U64 => tcx.lang_items().u64_impl(),
+        U128 => tcx.lang_items().u128_impl(),
+        F32 => tcx.lang_items().f32_impl(),
+        F64 => tcx.lang_items().f64_impl(),
+        Char => tcx.lang_items().char_impl(),
+        Bool => tcx.lang_items().bool_impl(),
+        Str => tcx.lang_items().str_impl(),
+        Slice => tcx.lang_items().slice_impl(),
+        Array => tcx.lang_items().array_impl(),
+        Tuple => None,
+        Unit => None,
+        RawPointer => tcx.lang_items().const_ptr_impl(),
+        Reference => None,
+        Fn => None,
+        Never => None,
+    }
+}
+
+pub fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut Vec<Item>) {
     let tcx = cx.tcx;
 
     for item in items {
@@ -370,33 +401,7 @@ pub fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut V
                 None => continue,
             },
         };
-        let did = match primitive {
-            Isize => tcx.lang_items().isize_impl(),
-            I8 => tcx.lang_items().i8_impl(),
-            I16 => tcx.lang_items().i16_impl(),
-            I32 => tcx.lang_items().i32_impl(),
-            I64 => tcx.lang_items().i64_impl(),
-            I128 => tcx.lang_items().i128_impl(),
-            Usize => tcx.lang_items().usize_impl(),
-            U8 => tcx.lang_items().u8_impl(),
-            U16 => tcx.lang_items().u16_impl(),
-            U32 => tcx.lang_items().u32_impl(),
-            U64 => tcx.lang_items().u64_impl(),
-            U128 => tcx.lang_items().u128_impl(),
-            F32 => tcx.lang_items().f32_impl(),
-            F64 => tcx.lang_items().f64_impl(),
-            Char => tcx.lang_items().char_impl(),
-            Bool => tcx.lang_items().bool_impl(),
-            Str => tcx.lang_items().str_impl(),
-            Slice => tcx.lang_items().slice_impl(),
-            Array => tcx.lang_items().array_impl(),
-            Tuple => None,
-            Unit => None,
-            RawPointer => tcx.lang_items().const_ptr_impl(),
-            Reference => None,
-            Fn => None,
-            Never => None,
-        };
+        let did = impl_for_type(tcx, primitive);
         if let Some(did) = did {
             if !did.is_local() {
                 inline::build_impl(cx, did, None, ret);