From f820fd2bc05afa4f5a7d6003c2c847bf85725cca Mon Sep 17 00:00:00 2001 From: Camelid Date: Sun, 21 Mar 2021 14:40:08 -0700 Subject: [PATCH] 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". --- src/librustdoc/html/markdown.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index 1505fe0369d..b39f9f87892 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -690,25 +690,29 @@ fn next(&mut self) -> Option { } crate struct ExtraInfo<'tcx> { - hir_id: Option, - item_did: Option, + 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 => { @@ -717,7 +721,6 @@ fn error_invalid_codeblock_attr(&self, msg: &str, help: &str) { } } } - (None, None) => return, }; self.tcx.struct_span_lint_hir( crate::lint::INVALID_CODEBLOCK_ATTRIBUTES,