Cleanup formatting
This commit is contained in:
parent
9d7165fcb1
commit
1531fbe9be
7 changed files with 37 additions and 79 deletions
|
@ -429,7 +429,7 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
|
||||||
intercrate: None,
|
intercrate: None,
|
||||||
inferred_obligations: SnapshotVec::new(),
|
inferred_obligations: SnapshotVec::new(),
|
||||||
intercrate_ambiguity_causes: None,
|
intercrate_ambiguity_causes: None,
|
||||||
allow_negative_impls: false
|
allow_negative_impls: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
|
||||||
intercrate: Some(mode),
|
intercrate: Some(mode),
|
||||||
inferred_obligations: SnapshotVec::new(),
|
inferred_obligations: SnapshotVec::new(),
|
||||||
intercrate_ambiguity_causes: None,
|
intercrate_ambiguity_causes: None,
|
||||||
allow_negative_impls: false
|
allow_negative_impls: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
|
||||||
intercrate: None,
|
intercrate: None,
|
||||||
inferred_obligations: SnapshotVec::new(),
|
inferred_obligations: SnapshotVec::new(),
|
||||||
intercrate_ambiguity_causes: None,
|
intercrate_ambiguity_causes: None,
|
||||||
allow_negative_impls
|
allow_negative_impls,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
|
|
||||||
// Due to the way projections are handled by SelectionContext, we need to run
|
// Due to the way projections are handled by SelectionContext, we need to run
|
||||||
// evaluate_predicates twice: once on the original param env, and once on the result of
|
// evaluate_predicates twice: once on the original param env, and once on the result of
|
||||||
// the first evaluate_predicates call
|
// the first evaluate_predicates call.
|
||||||
//
|
//
|
||||||
// The problem is this: most of rustc, including SelectionContext and traits::project,
|
// The problem is this: most of rustc, including SelectionContext and traits::project,
|
||||||
// are designed to work with a concrete usage of a type (e.g. Vec<u8>
|
// are designed to work with a concrete usage of a type (e.g. Vec<u8>
|
||||||
|
@ -338,7 +338,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
// We fix the first assumption by manually clearing out all of the InferCtxt's caches
|
// We fix the first assumption by manually clearing out all of the InferCtxt's caches
|
||||||
// in between calls to SelectionContext.select. This allows us to keep all of the
|
// in between calls to SelectionContext.select. This allows us to keep all of the
|
||||||
// intermediate types we create bound to the 'tcx lifetime, rather than needing to lift
|
// intermediate types we create bound to the 'tcx lifetime, rather than needing to lift
|
||||||
// them between calls
|
// them between calls.
|
||||||
//
|
//
|
||||||
// We fix the second assumption by reprocessing the result of our first call to
|
// We fix the second assumption by reprocessing the result of our first call to
|
||||||
// evaluate_predicates. Using the example of '<T as SomeTrait>::SomeItem = K', our first
|
// evaluate_predicates. Using the example of '<T as SomeTrait>::SomeItem = K', our first
|
||||||
|
@ -457,13 +457,8 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
infcx.freshen(p)
|
infcx.freshen(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn evaluate_nested_obligations<
|
fn evaluate_nested_obligations<'b, 'c, 'd, 'cx,
|
||||||
'b,
|
T: Iterator<Item = Obligation<'cx, ty::Predicate<'cx>>>>(
|
||||||
'c,
|
|
||||||
'd,
|
|
||||||
'cx,
|
|
||||||
T: Iterator<Item = Obligation<'cx, ty::Predicate<'cx>>>,
|
|
||||||
>(
|
|
||||||
&self,
|
&self,
|
||||||
ty: ty::Ty,
|
ty: ty::Ty,
|
||||||
nested: T,
|
nested: T,
|
||||||
|
@ -732,8 +727,8 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is very simiiar to handle_lifetimes. Instead of matching ty::Region's to ty::Region's,
|
// This is very similar to handle_lifetimes. However, instead of matching ty::Region's
|
||||||
// however, we match ty::RegionVid's to ty::Region's
|
// to each other, we match ty::RegionVid's to ty::Region's
|
||||||
fn map_vid_to_region<'cx>(
|
fn map_vid_to_region<'cx>(
|
||||||
&self,
|
&self,
|
||||||
regions: &RegionConstraintData<'cx>,
|
regions: &RegionConstraintData<'cx>,
|
||||||
|
@ -843,7 +838,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
// with determining if a given set up constraints/predicates *are* met, given some
|
// with determining if a given set up constraints/predicates *are* met, given some
|
||||||
// starting conditions (e.g. user-provided code). For this reason, it's easier
|
// starting conditions (e.g. user-provided code). For this reason, it's easier
|
||||||
// to perform the calculations we need on our own, rather than trying to make
|
// to perform the calculations we need on our own, rather than trying to make
|
||||||
// existing inference/solver code do what we want
|
// existing inference/solver code do what we want.
|
||||||
fn handle_lifetimes<'cx>(
|
fn handle_lifetimes<'cx>(
|
||||||
&self,
|
&self,
|
||||||
regions: &RegionConstraintData<'cx>,
|
regions: &RegionConstraintData<'cx>,
|
||||||
|
@ -852,8 +847,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
// Our goal is to 'flatten' the list of constraints by eliminating
|
// Our goal is to 'flatten' the list of constraints by eliminating
|
||||||
// all intermediate RegionVids. At the end, all constraints should
|
// all intermediate RegionVids. At the end, all constraints should
|
||||||
// be between Regions (aka region variables). This gives us the information
|
// be between Regions (aka region variables). This gives us the information
|
||||||
// we need to create the Generics
|
// we need to create the Generics.
|
||||||
//
|
|
||||||
let mut finished = FxHashMap();
|
let mut finished = FxHashMap();
|
||||||
|
|
||||||
let mut vid_map: FxHashMap<RegionTarget, RegionDeps> = FxHashMap();
|
let mut vid_map: FxHashMap<RegionTarget, RegionDeps> = FxHashMap();
|
||||||
|
@ -1021,7 +1015,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
ty_to_fn: FxHashMap<Type, (Option<PolyTrait>, Option<Type>)>,
|
ty_to_fn: FxHashMap<Type, (Option<PolyTrait>, Option<Type>)>,
|
||||||
lifetime_to_bounds: FxHashMap<Lifetime, FxHashSet<Lifetime>>,
|
lifetime_to_bounds: FxHashMap<Lifetime, FxHashSet<Lifetime>>,
|
||||||
) -> Vec<WherePredicate> {
|
) -> Vec<WherePredicate> {
|
||||||
let final_predicates = ty_to_bounds
|
ty_to_bounds
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.flat_map(|(ty, mut bounds)| {
|
.flat_map(|(ty, mut bounds)| {
|
||||||
if let Some(data) = ty_to_fn.get(&ty) {
|
if let Some(data) = ty_to_fn.get(&ty) {
|
||||||
|
@ -1096,9 +1090,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
bounds: bounds.into_iter().collect(),
|
bounds: bounds.into_iter().collect(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.collect();
|
.collect()
|
||||||
|
|
||||||
final_predicates
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converts the calculated ParamEnv and lifetime information to a clean::Generics, suitable for
|
// Converts the calculated ParamEnv and lifetime information to a clean::Generics, suitable for
|
||||||
|
@ -1380,7 +1372,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is an ugly hack, but it's the simplest way to handle synthetic impls without greatly
|
// This is an ugly hack, but it's the simplest way to handle synthetic impls without greatly
|
||||||
// refactorying either librustdoc or librustc. In particular, allowing new DefIds to be
|
// refactoring either librustdoc or librustc. In particular, allowing new DefIds to be
|
||||||
// registered after the AST is constructed would require storing the defid mapping in a
|
// registered after the AST is constructed would require storing the defid mapping in a
|
||||||
// RefCell, decreasing the performance for normal compilation for very little gain.
|
// RefCell, decreasing the performance for normal compilation for very little gain.
|
||||||
//
|
//
|
||||||
|
|
|
@ -120,7 +120,6 @@ pub fn load_attrs(cx: &DocContext, did: DefId) -> clean::Attributes {
|
||||||
cx.tcx.get_attrs(did).clean(cx)
|
cx.tcx.get_attrs(did).clean(cx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Record an external fully qualified name in the external_paths cache.
|
/// Record an external fully qualified name in the external_paths cache.
|
||||||
///
|
///
|
||||||
/// These names are used later on by HTML rendering to generate things like
|
/// These names are used later on by HTML rendering to generate things like
|
||||||
|
@ -267,7 +266,6 @@ pub fn build_impls(cx: &DocContext, did: DefId, auto_traits: bool) -> Vec<clean:
|
||||||
|
|
||||||
cx.populated_all_crate_impls.set(true);
|
cx.populated_all_crate_impls.set(true);
|
||||||
|
|
||||||
|
|
||||||
for &cnum in tcx.crates().iter() {
|
for &cnum in tcx.crates().iter() {
|
||||||
for did in tcx.all_trait_implementations(cnum).iter() {
|
for did in tcx.all_trait_implementations(cnum).iter() {
|
||||||
build_impl(cx, *did, &mut impls);
|
build_impl(cx, *did, &mut impls);
|
||||||
|
@ -373,7 +371,7 @@ pub fn build_impl(cx: &DocContext, did: DefId, ret: &mut Vec<clean::Item>) {
|
||||||
for_,
|
for_,
|
||||||
items: trait_items,
|
items: trait_items,
|
||||||
polarity: Some(polarity.clean(cx)),
|
polarity: Some(polarity.clean(cx)),
|
||||||
synthetic: false
|
synthetic: false,
|
||||||
}),
|
}),
|
||||||
source: tcx.def_span(did).clean(cx),
|
source: tcx.def_span(did).clean(cx),
|
||||||
name: None,
|
name: None,
|
||||||
|
|
|
@ -3077,7 +3077,7 @@ impl Path {
|
||||||
params: PathParameters::AngleBracketed {
|
params: PathParameters::AngleBracketed {
|
||||||
lifetimes: Vec::new(),
|
lifetimes: Vec::new(),
|
||||||
types: Vec::new(),
|
types: Vec::new(),
|
||||||
bindings: Vec::new()
|
bindings: Vec::new(),
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -3152,23 +3152,23 @@ fn strip_type(ty: Type) -> Type {
|
||||||
match ty {
|
match ty {
|
||||||
Type::ResolvedPath { path, typarams, did, is_generic } => {
|
Type::ResolvedPath { path, typarams, did, is_generic } => {
|
||||||
Type::ResolvedPath { path: strip_path(&path), typarams, did, is_generic }
|
Type::ResolvedPath { path: strip_path(&path), typarams, did, is_generic }
|
||||||
},
|
}
|
||||||
Type::Tuple(inner_tys) => {
|
Type::Tuple(inner_tys) => {
|
||||||
Type::Tuple(inner_tys.iter().map(|t| strip_type(t.clone())).collect())
|
Type::Tuple(inner_tys.iter().map(|t| strip_type(t.clone())).collect())
|
||||||
},
|
}
|
||||||
Type::Slice(inner_ty) => Type::Slice(Box::new(strip_type(*inner_ty))),
|
Type::Slice(inner_ty) => Type::Slice(Box::new(strip_type(*inner_ty))),
|
||||||
Type::Array(inner_ty, s) => Type::Array(Box::new(strip_type(*inner_ty)), s),
|
Type::Array(inner_ty, s) => Type::Array(Box::new(strip_type(*inner_ty)), s),
|
||||||
Type::Unique(inner_ty) => Type::Unique(Box::new(strip_type(*inner_ty))),
|
Type::Unique(inner_ty) => Type::Unique(Box::new(strip_type(*inner_ty))),
|
||||||
Type::RawPointer(m, inner_ty) => Type::RawPointer(m, Box::new(strip_type(*inner_ty))),
|
Type::RawPointer(m, inner_ty) => Type::RawPointer(m, Box::new(strip_type(*inner_ty))),
|
||||||
Type::BorrowedRef { lifetime, mutability, type_ } => {
|
Type::BorrowedRef { lifetime, mutability, type_ } => {
|
||||||
Type::BorrowedRef { lifetime, mutability, type_: Box::new(strip_type(*type_)) }
|
Type::BorrowedRef { lifetime, mutability, type_: Box::new(strip_type(*type_)) }
|
||||||
},
|
}
|
||||||
Type::QPath { name, self_type, trait_ } => {
|
Type::QPath { name, self_type, trait_ } => {
|
||||||
Type::QPath {
|
Type::QPath {
|
||||||
name,
|
name,
|
||||||
self_type: Box::new(strip_type(*self_type)), trait_: Box::new(strip_type(*trait_))
|
self_type: Box::new(strip_type(*self_type)), trait_: Box::new(strip_type(*trait_))
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => ty
|
_ => ty
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3180,7 +3180,7 @@ fn strip_path(path: &Path) -> Path {
|
||||||
params: PathParameters::AngleBracketed {
|
params: PathParameters::AngleBracketed {
|
||||||
lifetimes: Vec::new(),
|
lifetimes: Vec::new(),
|
||||||
types: Vec::new(),
|
types: Vec::new(),
|
||||||
bindings: Vec::new()
|
bindings: Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).collect();
|
}).collect();
|
||||||
|
@ -3188,7 +3188,7 @@ fn strip_path(path: &Path) -> Path {
|
||||||
Path {
|
Path {
|
||||||
global: path.global,
|
global: path.global,
|
||||||
def: path.def.clone(),
|
def: path.def.clone(),
|
||||||
segments
|
segments,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3361,7 +3361,6 @@ pub fn get_auto_traits_with_node_id(cx: &DocContext, id: ast::NodeId, name: Stri
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_auto_traits_with_def_id(cx: &DocContext, id: DefId) -> Vec<Item> {
|
pub fn get_auto_traits_with_def_id(cx: &DocContext, id: DefId) -> Vec<Item> {
|
||||||
|
|
||||||
let finder = AutoTraitFinder {
|
let finder = AutoTraitFinder {
|
||||||
cx,
|
cx,
|
||||||
};
|
};
|
||||||
|
@ -3404,7 +3403,7 @@ impl Clean<Vec<Item>> for doctree::Impl {
|
||||||
for_: self.for_.clean(cx),
|
for_: self.for_.clean(cx),
|
||||||
items,
|
items,
|
||||||
polarity: Some(self.polarity.clean(cx)),
|
polarity: Some(self.polarity.clean(cx)),
|
||||||
synthetic: false
|
synthetic: false,
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
ret
|
ret
|
||||||
|
@ -3819,8 +3818,6 @@ impl Clean<TypeBinding> for hir::TypeBinding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub fn def_id_to_path(cx: &DocContext, did: DefId, name: Option<String>) -> Vec<String> {
|
pub fn def_id_to_path(cx: &DocContext, did: DefId, name: Option<String>) -> Vec<String> {
|
||||||
let crate_name = name.unwrap_or_else(|| cx.tcx.crate_name(did.krate).to_string());
|
let crate_name = name.unwrap_or_else(|| cx.tcx.crate_name(did.krate).to_string());
|
||||||
let relative = cx.tcx.def_path(did).data.into_iter().filter_map(|elem| {
|
let relative = cx.tcx.def_path(did).data.into_iter().filter_map(|elem| {
|
||||||
|
@ -3835,15 +3832,14 @@ pub fn def_id_to_path(cx: &DocContext, did: DefId, name: Option<String>) -> Vec<
|
||||||
once(crate_name).chain(relative).collect()
|
once(crate_name).chain(relative).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Start of code copied from rust-clippy
|
// Start of code copied from rust-clippy
|
||||||
|
|
||||||
pub fn get_trait_def_id(tcx: &TyCtxt, path: &[&str], use_local: bool) -> Option<DefId> {
|
pub fn get_trait_def_id(tcx: &TyCtxt, path: &[&str], use_local: bool) -> Option<DefId> {
|
||||||
return if use_local {
|
if use_local {
|
||||||
path_to_def_local(tcx, path)
|
path_to_def_local(tcx, path)
|
||||||
} else {
|
} else {
|
||||||
path_to_def(tcx, path)
|
path_to_def(tcx, path)
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_to_def_local(tcx: &TyCtxt, path: &[&str]) -> Option<DefId> {
|
pub fn path_to_def_local(tcx: &TyCtxt, path: &[&str]) -> Option<DefId> {
|
||||||
|
@ -3878,7 +3874,6 @@ pub fn path_to_def_local(tcx: &TyCtxt, path: &[&str]) -> Option<DefId> {
|
||||||
pub fn path_to_def(tcx: &TyCtxt, path: &[&str]) -> Option<DefId> {
|
pub fn path_to_def(tcx: &TyCtxt, path: &[&str]) -> Option<DefId> {
|
||||||
let crates = tcx.crates();
|
let crates = tcx.crates();
|
||||||
|
|
||||||
|
|
||||||
let krate = crates
|
let krate = crates
|
||||||
.iter()
|
.iter()
|
||||||
.find(|&&krate| tcx.crate_name(krate) == path[0]);
|
.find(|&&krate| tcx.crate_name(krate) == path[0]);
|
||||||
|
@ -3902,7 +3897,7 @@ pub fn path_to_def(tcx: &TyCtxt, path: &[&str]) -> Option<DefId> {
|
||||||
if path_it.peek().is_none() {
|
if path_it.peek().is_none() {
|
||||||
return match item.def {
|
return match item.def {
|
||||||
def::Def::Trait(did) => Some(did),
|
def::Def::Trait(did) => Some(did),
|
||||||
_ => None
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3942,7 +3937,7 @@ fn get_path_for_type(tcx: TyCtxt, def_id: DefId, def_ctor: fn(DefId) -> Def) ->
|
||||||
segments: hir::HirVec::from_vec(apb.names.iter().map(|s| hir::PathSegment {
|
segments: hir::HirVec::from_vec(apb.names.iter().map(|s| hir::PathSegment {
|
||||||
name: ast::Name::intern(&s),
|
name: ast::Name::intern(&s),
|
||||||
parameters: None,
|
parameters: None,
|
||||||
infer_types: false
|
infer_types: false,
|
||||||
}).collect())
|
}).collect())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3970,24 +3965,20 @@ enum SimpleBound {
|
||||||
|
|
||||||
enum AutoTraitResult {
|
enum AutoTraitResult {
|
||||||
ExplicitImpl,
|
ExplicitImpl,
|
||||||
|
|
||||||
PositiveImpl(Generics),
|
PositiveImpl(Generics),
|
||||||
|
|
||||||
NegativeImpl,
|
NegativeImpl,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AutoTraitResult {
|
impl AutoTraitResult {
|
||||||
|
|
||||||
fn is_auto(&self) -> bool {
|
fn is_auto(&self) -> bool {
|
||||||
match *self {
|
match *self {
|
||||||
AutoTraitResult::PositiveImpl(_) | AutoTraitResult::NegativeImpl => true,
|
AutoTraitResult::PositiveImpl(_) | AutoTraitResult::NegativeImpl => true,
|
||||||
_ => false
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<TyParamBound> for SimpleBound {
|
impl From<TyParamBound> for SimpleBound {
|
||||||
|
|
||||||
fn from(bound: TyParamBound) -> Self {
|
fn from(bound: TyParamBound) -> Self {
|
||||||
match bound.clone() {
|
match bound.clone() {
|
||||||
TyParamBound::RegionBound(l) => SimpleBound::RegionBound(l),
|
TyParamBound::RegionBound(l) => SimpleBound::RegionBound(l),
|
||||||
|
@ -4001,7 +3992,7 @@ impl From<TyParamBound> for SimpleBound {
|
||||||
t.generic_params,
|
t.generic_params,
|
||||||
mod_)
|
mod_)
|
||||||
},
|
},
|
||||||
_ => panic!("Unexpected bound {:?}", bound)
|
_ => panic!("Unexpected bound {:?}", bound),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,13 +239,11 @@ pub fn run_core(search_paths: SearchPaths,
|
||||||
.collect()
|
.collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
let send_trait;
|
let send_trait = if crate_name == Some("core".to_string()) {
|
||||||
|
clean::get_trait_def_id(&tcx, &["marker", "Send"], true)
|
||||||
if crate_name == Some("core".to_string()) {
|
|
||||||
send_trait = clean::get_trait_def_id(&tcx, &["marker", "Send"], true);
|
|
||||||
} else {
|
} else {
|
||||||
send_trait = clean::get_trait_def_id(&tcx, &["core", "marker", "Send"], false)
|
clean::get_trait_def_id(&tcx, &["core", "marker", "Send"], false)
|
||||||
}
|
};
|
||||||
|
|
||||||
let ctxt = DocContext {
|
let ctxt = DocContext {
|
||||||
tcx,
|
tcx,
|
||||||
|
@ -262,7 +260,7 @@ pub fn run_core(search_paths: SearchPaths,
|
||||||
send_trait: send_trait,
|
send_trait: send_trait,
|
||||||
fake_def_ids: RefCell::new(FxHashMap()),
|
fake_def_ids: RefCell::new(FxHashMap()),
|
||||||
all_fake_def_ids: RefCell::new(FxHashSet()),
|
all_fake_def_ids: RefCell::new(FxHashSet()),
|
||||||
generated_synthetics: RefCell::new(FxHashSet())
|
generated_synthetics: RefCell::new(FxHashSet()),
|
||||||
};
|
};
|
||||||
debug!("crate: {:?}", tcx.hir.krate());
|
debug!("crate: {:?}", tcx.hir.krate());
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,6 @@ pub enum ExternalLocation {
|
||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Metadata about implementations for a type or trait.
|
/// Metadata about implementations for a type or trait.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Impl {
|
pub struct Impl {
|
||||||
|
@ -523,7 +522,6 @@ pub fn run(mut krate: clean::Crate,
|
||||||
themes,
|
themes,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// If user passed in `--playground-url` arg, we fill in crate name here
|
// If user passed in `--playground-url` arg, we fill in crate name here
|
||||||
if let Some(url) = playground_url {
|
if let Some(url) = playground_url {
|
||||||
markdown::PLAYGROUND.with(|slot| {
|
markdown::PLAYGROUND.with(|slot| {
|
||||||
|
@ -2512,22 +2510,6 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
|
||||||
}
|
}
|
||||||
write!(w, "</ul>")?;
|
write!(w, "</ul>")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
write!(w, r#"<script type="text/javascript">
|
|
||||||
window.inlined_types=new Set();"#)?;
|
|
||||||
|
|
||||||
write!(w, r#"<script type="text/javascript" async
|
|
||||||
src="{root_path}/implementors/{path}/{ty}.{name}.js">
|
|
||||||
</script>"#,
|
|
||||||
root_path = vec![".."; cx.current.len()].join("/"),
|
|
||||||
path = if it.def_id.is_local() {
|
|
||||||
cx.current.join("/")
|
|
||||||
} else {
|
|
||||||
let (ref path, _) = cache.external_paths[&it.def_id];
|
|
||||||
path[..path.len() - 1].join("/")
|
|
||||||
},
|
|
||||||
ty = it.type_().css_class(),
|
|
||||||
name = *it.name.as_ref().unwrap())?;
|
|
||||||
} else {
|
} else {
|
||||||
// even without any implementations to write in, we still want the heading and list, so the
|
// even without any implementations to write in, we still want the heading and list, so the
|
||||||
// implementors javascript file pulled in below has somewhere to write the impls into
|
// implementors javascript file pulled in below has somewhere to write the impls into
|
||||||
|
|
|
@ -1569,20 +1569,17 @@
|
||||||
for (var i = 0; i < libs.length; ++i) {
|
for (var i = 0; i < libs.length; ++i) {
|
||||||
if (libs[i] === currentCrate) { continue; }
|
if (libs[i] === currentCrate) { continue; }
|
||||||
var structs = imp[libs[i]];
|
var structs = imp[libs[i]];
|
||||||
|
|
||||||
|
struct_loop:
|
||||||
for (var j = 0; j < structs.length; ++j) {
|
for (var j = 0; j < structs.length; ++j) {
|
||||||
var struct = structs[j];
|
var struct = structs[j];
|
||||||
var list = struct.synthetic ? synthetic_implementors : implementors;
|
var list = struct.synthetic ? synthetic_implementors : implementors;
|
||||||
|
|
||||||
var bail = false;
|
|
||||||
for (var k = 0; k < struct.types.length; k++) {
|
for (var k = 0; k < struct.types.length; k++) {
|
||||||
if (window.inlined_types.has(struct.types[k])) {
|
if (window.inlined_types.has(struct.types[k])) {
|
||||||
bail = true;
|
continue struct_loop;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bail) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var code = document.createElement('code');
|
var code = document.createElement('code');
|
||||||
code.innerHTML = struct.text;
|
code.innerHTML = struct.text;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue