Skip to content

Commit

Permalink
Rollup merge of #83356 - camelid:rustdoc-option-to-enum, r=GuillaumeG…
Browse files Browse the repository at this point in the history
…omez

rustdoc: Replace pair of `Option`s with an enum

They are never both `None` or both `Some`, so it makes more sense to use
an enum so that we "make impossible states impossible".
  • Loading branch information
JohnTitor committed Mar 23, 2021
2 parents a34cc6b + f820fd2 commit 20006b1
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions src/librustdoc/html/markdown.rs
Original file line number Diff line number Diff line change
Expand Up @@ -690,25 +690,29 @@ crate fn find_testable_code<T: doctest::Tester>(
}

crate struct ExtraInfo<'tcx> {
hir_id: Option<HirId>,
item_did: Option<DefId>,
id: ExtraInfoId,
sp: Span,
tcx: TyCtxt<'tcx>,
}

enum ExtraInfoId {
Hir(HirId),
Def(DefId),
}

impl<'tcx> ExtraInfo<'tcx> {
crate fn new(tcx: TyCtxt<'tcx>, hir_id: HirId, sp: Span) -> ExtraInfo<'tcx> {
ExtraInfo { hir_id: Some(hir_id), item_did: None, sp, tcx }
ExtraInfo { id: ExtraInfoId::Hir(hir_id), sp, tcx }
}

crate fn new_did(tcx: TyCtxt<'tcx>, did: DefId, sp: Span) -> ExtraInfo<'tcx> {
ExtraInfo { hir_id: None, item_did: Some(did), sp, tcx }
ExtraInfo { id: ExtraInfoId::Def(did), sp, tcx }
}

fn error_invalid_codeblock_attr(&self, msg: &str, help: &str) {
let hir_id = match (self.hir_id, self.item_did) {
(Some(h), _) => h,
(None, Some(item_did)) => {
let hir_id = match self.id {
ExtraInfoId::Hir(hir_id) => hir_id,
ExtraInfoId::Def(item_did) => {
match item_did.as_local() {
Some(item_did) => self.tcx.hir().local_def_id_to_hir_id(item_did),
None => {
Expand All @@ -717,7 +721,6 @@ impl<'tcx> ExtraInfo<'tcx> {
}
}
}
(None, None) => return,
};
self.tcx.struct_span_lint_hir(
crate::lint::INVALID_CODEBLOCK_ATTRIBUTES,
Expand Down

0 comments on commit 20006b1

Please sign in to comment.