.collect()
};
- let get_span =
- |attr: &ast::NestedMetaItem| Some(attr.meta_item()?.name_value_literal()?.span);
-
let as_keyword = |res: Res| {
if let Res::Def(DefKind::Mod, def_id) = res {
let attrs = cx.tcx.get_attrs(def_id).clean(cx);
for attr in attrs.lists(sym::doc) {
if attr.has_name(sym::keyword) {
if let Some(v) = attr.value_str() {
- let k = v.to_string();
- if !rustc_lexer::is_ident(&k) {
- let sp = get_span(&attr).unwrap_or_else(|| attr.span());
- cx.tcx
- .sess
- .struct_span_err(
- sp,
- &format!("`{}` is not a valid identifier", v),
- )
- .emit();
- } else {
- keyword = Some(k);
- }
+ keyword = Some(v.to_string());
break;
}
}
.iter()
.map(|t| Argument {
type_: t.clean(cx),
- name: names.next().map_or(String::new(), |name| name.to_string()),
+ name: names.next().map_or_else(|| String::new(), |name| name.to_string()),
})
.collect(),
},
}
/// Returns `None` if the type could not be normalized
-#[allow(unreachable_code, unused_variables)]
fn normalize(cx: &DocContext<'tcx>, ty: Ty<'_>) -> Option<Ty<'tcx>> {
- return None; // HACK: low-churn fix for #79459 while we wait for a trait normalization fix
+ // HACK: low-churn fix for #79459 while we wait for a trait normalization fix
+ if !cx.tcx.sess.opts.debugging_opts.normalize_docs {
+ return None;
+ }
+
use crate::rustc_trait_selection::infer::TyCtxtInferExt;
use crate::rustc_trait_selection::traits::query::normalize::AtExt;
use rustc_middle::traits::ObligationCause;
}
}
-impl Clean<Vec<Item>> for (&hir::Item<'_>, Option<Ident>) {
+impl Clean<Vec<Item>> for (&hir::Item<'_>, Option<Symbol>) {
fn clean(&self, cx: &DocContext<'_>) -> Vec<Item> {
use hir::ItemKind;
let (item, renamed) = self;
let def_id = cx.tcx.hir().local_def_id(item.hir_id).to_def_id();
- let mut name = match renamed {
- Some(ident) => ident.name,
- None => cx.tcx.hir().name(item.hir_id),
- };
+ let mut name = renamed.unwrap_or_else(|| cx.tcx.hir().name(item.hir_id));
cx.with_param_env(def_id, || {
let kind = match item.kind {
ItemKind::Static(ty, mutability, body_id) => StaticItem(Static {
def_id: crate_def_id,
visibility: krate.vis.clean(cx),
stability: None,
+ const_stability: None,
deprecation: None,
kind: ExternCrateItem(name.clean(cx), path),
}]
def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
visibility: self.vis.clean(cx),
stability: None,
+ const_stability: None,
deprecation: None,
kind: ImportItem(Import::new_simple(
self.name.clean(cx),
name: None,
attrs: self.attrs.clean(cx),
source: self.span.clean(cx),
- def_id: DefId::local(CRATE_DEF_INDEX),
+ def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
visibility: self.vis.clean(cx),
stability: None,
+ const_stability: None,
deprecation: None,
kind: ImportItem(inner),
}]
}
}
-impl Clean<Item> for (&hir::ForeignItem<'_>, Option<Ident>) {
+impl Clean<Item> for (&hir::ForeignItem<'_>, Option<Symbol>) {
fn clean(&self, cx: &DocContext<'_>) -> Item {
let (item, renamed) = self;
cx.with_param_env(cx.tcx.hir().local_def_id(item.hir_id).to_def_id(), || {
Item::from_hir_id_and_parts(
item.hir_id,
- Some(renamed.unwrap_or(item.ident).name),
+ Some(renamed.unwrap_or(item.ident.name)),
kind,
cx,
)
}
}
-impl Clean<Item> for (&hir::MacroDef<'_>, Option<Ident>) {
+impl Clean<Item> for (&hir::MacroDef<'_>, Option<Symbol>) {
fn clean(&self, cx: &DocContext<'_>) -> Item {
let (item, renamed) = self;
- let name = renamed.unwrap_or(item.ident).name;
+ let name = renamed.unwrap_or(item.ident.name);
let tts = item.ast.body.inner_tokens().trees().collect::<Vec<_>>();
// Extract the spans of all matchers. They represent the "interface" of the macro.
let matchers = tts.chunks(4).map(|arm| arm[0].span()).collect::<Vec<_>>();