From c4aa73525bbfef6895612599170a5b297e1625ba Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 27 Jul 2021 13:52:15 +0200 Subject: [PATCH] Add explanations for why we use Variant::Struct instead of Variant::Tuple for tuple structs in enums --- src/librustdoc/clean/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index a5ad8dfeb6b96..cf837024a8ed3 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1730,6 +1730,12 @@ impl Clean for hir::VariantData<'_> { fn clean(&self, cx: &mut DocContext<'_>) -> Variant { match self { hir::VariantData::Struct(..) => Variant::Struct(self.clean(cx)), + // Important note here: `Variant::Tuple` is used on tuple structs which are not in an + // enum (so where converting from `ty::VariantDef`). In case we are in an enum, the kind + // is provided by the `Variant` wrapper directly, and since we need the fields' name + // (even for a tuple struct variant!), it's simpler to just store it as a + // `Variant::Struct` instead of a `Variant::Tuple` (otherwise it would force us to make + // a lot of changes when rendering them to generate the name as well). hir::VariantData::Tuple(..) => Variant::Struct(self.clean(cx)), hir::VariantData::Unit(..) => Variant::CLike, }