Deduplicate macro_rules! from module_exports when documenting them
This can append if within the same module a `#[macro_export] macro_rules!` is declared but also a reexport of itself producing two export of the same macro in the same module. In that case we only want to document it once.
This commit is contained in:
parent
eeb16a2a89
commit
15c876db9c
@ -87,13 +87,21 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
|
|||||||
// the rexport defines the path that a user will actually see. Accordingly,
|
// the rexport defines the path that a user will actually see. Accordingly,
|
||||||
// we add the rexport as an item here, and then skip over the original
|
// we add the rexport as an item here, and then skip over the original
|
||||||
// definition in `visit_item()` below.
|
// definition in `visit_item()` below.
|
||||||
|
//
|
||||||
|
// We also skip `#[macro_export] macro_rules!` that have alredy been inserted,
|
||||||
|
// this can append if within the same module a `#[macro_export] macro_rules!`
|
||||||
|
// is declared but also a reexport of itself producing two export of the same
|
||||||
|
// macro in the same module.
|
||||||
|
let mut inserted = FxHashSet::default();
|
||||||
for export in self.cx.tcx.module_exports(CRATE_DEF_ID).unwrap_or(&[]) {
|
for export in self.cx.tcx.module_exports(CRATE_DEF_ID).unwrap_or(&[]) {
|
||||||
if let Res::Def(DefKind::Macro(_), def_id) = export.res {
|
if let Res::Def(DefKind::Macro(_), def_id) = export.res {
|
||||||
if let Some(local_def_id) = def_id.as_local() {
|
if let Some(local_def_id) = def_id.as_local() {
|
||||||
if self.cx.tcx.has_attr(def_id, sym::macro_export) {
|
if self.cx.tcx.has_attr(def_id, sym::macro_export) {
|
||||||
let hir_id = self.cx.tcx.hir().local_def_id_to_hir_id(local_def_id);
|
if !inserted.insert(def_id) {
|
||||||
let item = self.cx.tcx.hir().expect_item(hir_id);
|
let hir_id = self.cx.tcx.hir().local_def_id_to_hir_id(local_def_id);
|
||||||
top_level_module.items.push((item, None));
|
let item = self.cx.tcx.hir().expect_item(hir_id);
|
||||||
|
top_level_module.items.push((item, None));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user