diff --git a/include/mrdocs/Metadata.hpp b/include/mrdocs/Metadata.hpp index 27af52d3d0..92e0f518f8 100644 --- a/include/mrdocs/Metadata.hpp +++ b/include/mrdocs/Metadata.hpp @@ -14,16 +14,10 @@ #include -// All headers related to -// metadata extracted from AST - -#include -#include #include #include #include #include -#include #include #include #include @@ -33,6 +27,9 @@ #include #include #include +#include + +#include #include #include #include diff --git a/include/mrdocs/Metadata/Info/Field.hpp b/include/mrdocs/Metadata/Info/Field.hpp deleted file mode 100644 index 711cab72d0..0000000000 --- a/include/mrdocs/Metadata/Info/Field.hpp +++ /dev/null @@ -1,117 +0,0 @@ -// -// This is a derivative work. originally part of the LLVM Project. -// Licensed under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -// Copyright (c) 2023 Vinnie Falco (vinnie.falco@gmail.com) -// Copyright (c) 2023 Krystian Stasiowski (sdkrystian@gmail.com) -// Copyright (c) 2024 Alan de Freitas (alandefreitas@gmail.com) -// -// Official repository: https://github.com/cppalliance/mrdocs -// - -#ifndef MRDOCS_API_METADATA_FIELD_HPP -#define MRDOCS_API_METADATA_FIELD_HPP - -#include -#include -#include -#include -#include - -namespace clang::mrdocs { - -/** Info for fields (i.e. non-static data members) - - Non-static data members cannot be redeclared. -*/ -struct FieldInfo final - : InfoCommonBase -{ - /** Type of the field */ - Polymorphic Type; - - /** The default member initializer, if any. - */ - ExprInfo Default; - - /** Whether the field is a variant member */ - bool IsVariant = false; - - /** Whether the field is declared mutable */ - bool IsMutable = false; - - /** Whether the field is a bitfield */ - bool IsBitfield = false; - - /** The width of the bitfield */ - ConstantExprInfo BitfieldWidth; - - // KRYSTIAN FIXME: nodiscard cannot be applied to fields; this should - // instead be IsMaybeUnused. we should also store the spelling - bool IsMaybeUnused = false; - - bool IsDeprecated = false; - - bool HasNoUniqueAddress = false; - - std::vector Attributes; - - //-------------------------------------------- - - explicit FieldInfo(SymbolID ID) noexcept - : InfoCommonBase(ID) - { - } -}; - -MRDOCS_DECL -void -merge(FieldInfo& I, FieldInfo&& Other); - -/** Map a FieldInfo to a dom::Object. - */ -template -void -tag_invoke( - dom::LazyObjectMapTag t, - IO& io, - FieldInfo const& I, - DomCorpus const* domCorpus) -{ - tag_invoke(t, io, dynamic_cast(I), domCorpus); - io.map("type", I.Type); - if (!I.Default.Written.empty()) - { - io.map("default", I.Default.Written); - } - io.map("isMaybeUnused", I.IsMaybeUnused); - io.map("isDeprecated", I.IsDeprecated); - io.map("isVariant", I.IsVariant); - io.map("isMutable", I.IsMutable); - io.map("isBitfield", I.IsBitfield); - io.map("hasNoUniqueAddress", I.HasNoUniqueAddress); - if (I.IsBitfield) - { - io.map("bitfieldWidth", I.BitfieldWidth.Written); - } - io.map("attributes", dom::LazyArray(I.Attributes)); -} - -/** Map the FieldInfo to a @ref dom::Value object. - */ -inline -void -tag_invoke( - dom::ValueFromTag, - dom::Value& v, - FieldInfo const& I, - DomCorpus const* domCorpus) -{ - v = dom::LazyObject(I, domCorpus); -} - -} // clang::mrdocs - -#endif diff --git a/include/mrdocs/Metadata/Info/Variable.hpp b/include/mrdocs/Metadata/Info/Variable.hpp index c8d8ece54b..6aa462a81a 100644 --- a/include/mrdocs/Metadata/Info/Variable.hpp +++ b/include/mrdocs/Metadata/Info/Variable.hpp @@ -25,7 +25,7 @@ namespace clang::mrdocs { /** A variable. This includes variables at namespace - scope, and static variables at class scope. + or record scope. */ struct VariableInfo final : InfoCommonBase @@ -35,6 +35,8 @@ struct VariableInfo final std::optional Template; + /** The default member initializer, if any. + */ ExprInfo Initializer; StorageClassKind StorageClass = StorageClassKind::None; @@ -49,6 +51,28 @@ struct VariableInfo final std::vector Attributes; + bool IsMaybeUnused = false; + + bool IsDeprecated = false; + + bool HasNoUniqueAddress = false; + + //-------------------------------------------- + // Record fields + bool IsRecordField = false; + + /** Whether the field is declared mutable */ + bool IsMutable = false; + + /** Whether the field is a variant member */ + bool IsVariant = false; + + /** Whether the field is a bitfield */ + bool IsBitfield = false; + + /** The width of the bitfield */ + ConstantExprInfo BitfieldWidth; + //-------------------------------------------- explicit VariableInfo(SymbolID const &ID) noexcept @@ -90,6 +114,18 @@ tag_invoke( io.map("initializer", I.Initializer.Written); } io.map("attributes", dom::LazyArray(I.Attributes)); + io.map("isRecordField", I.IsRecordField); + io.map("isMaybeUnused", I.IsMaybeUnused); + io.map("isDeprecated", I.IsDeprecated); + io.map("isVariant", I.IsVariant); + io.map("isMutable", I.IsMutable); + io.map("isBitfield", I.IsBitfield); + if (I.IsBitfield) + { + io.map("bitfieldWidth", I.BitfieldWidth.Written); + } + io.map("hasNoUniqueAddress", I.HasNoUniqueAddress); + io.map("attributes", dom::LazyArray(I.Attributes)); } /** Map the VariableInfo to a @ref dom::Value object. diff --git a/mrdocs.rnc b/mrdocs.rnc index 4c3fef2c49..440b8853bf 100644 --- a/mrdocs.rnc +++ b/mrdocs.rnc @@ -166,30 +166,14 @@ grammar #--------------------------------------------- - Field = - element (field|bitfield) - { - Name, - Access ?, - ID, - attribute width { text } ?, - attribute default { text } ?, - Location, - ( - Attr * & - TypeInfo & - Javadoc ? - ) - } - - #--------------------------------------------- - Variable = element variable { Name, Access ?, ID, + attribute width { text } ?, + attribute default { text } ?, Location *, ( Attr * & @@ -367,7 +351,6 @@ grammar Function | Typedef | Enum | - Field | Variable | Guide | Template | diff --git a/share/mrdocs/addons/generator/common/partials/symbol/signature/field.hbs b/share/mrdocs/addons/generator/common/partials/symbol/signature/field.hbs deleted file mode 100644 index e43274dc59..0000000000 --- a/share/mrdocs/addons/generator/common/partials/symbol/signature/field.hbs +++ /dev/null @@ -1,8 +0,0 @@ -{{#if attributes}}{{ str "[[" }}{{join ", " attributes}}{{ str "]]" }} -{{/if}} -{{#if isMutable}}mutable -{{/if~}} -{{>type/declarator-prefix type}} {{>symbol/name symbol~}} -{{#if isBitfield}} : {{bitfieldWidth}}{{/if~}} -{{#if default}} = {{default}}{{/if~}} -{{>type/declarator-suffix type}}; \ No newline at end of file diff --git a/share/mrdocs/addons/generator/common/partials/symbol/signature/variable.hbs b/share/mrdocs/addons/generator/common/partials/symbol/signature/variable.hbs index 77caeb6a15..a055a959a8 100644 --- a/share/mrdocs/addons/generator/common/partials/symbol/signature/variable.hbs +++ b/share/mrdocs/addons/generator/common/partials/symbol/signature/variable.hbs @@ -1,5 +1,9 @@ +{{#if attributes}}{{ str "[[" }}{{join ", " attributes}}{{ str "]]" }} +{{/if}} {{#if template}}{{>template/head template}} {{/if~}} +{{#if isMutable}}mutable +{{/if~}} {{#if isInline}}inline {{/if~}} {{#if isConstexpr}}constexpr {{/if~}} {{#if storageClass}}{{storageClass}} @@ -7,5 +11,7 @@ {{#if isThreadLocal}}thread_local {{/if~}} {{>type/declarator-prefix type}} {{>symbol/name symbol link=(select link link template.primary)~}} +{{#if isBitfield}} : {{bitfieldWidth}}{{/if~}} +{{#if default}} = {{default}}{{/if~}} {{>type/declarator-suffix type~}} {{#if initializer}} = {{initializer}}{{/if}}; \ No newline at end of file diff --git a/share/mrdocs/addons/generator/common/partials/symbol/special-function-suffix.hbs b/share/mrdocs/addons/generator/common/partials/symbol/special-function-suffix.hbs index 6aff727240..8e9b2262bc 100644 --- a/share/mrdocs/addons/generator/common/partials/symbol/special-function-suffix.hbs +++ b/share/mrdocs/addons/generator/common/partials/symbol/special-function-suffix.hbs @@ -26,7 +26,7 @@ {{~#if isDeleted~}} {{str ' '}}{{#>markup/span class="small"}}[deleted]{{/markup/span}} {{~/if~}} -{{else if (eq kind "field")~}} +{{else if (eq kind "variable")~}} {{~#if isVariant~}} {{#>markup/span class="small"}}[variant member]{{/markup/span}} {{~/if~}} diff --git a/src/lib/AST/ASTVisitor.cpp b/src/lib/AST/ASTVisitor.cpp index 75404c987f..e30510312b 100644 --- a/src/lib/AST/ASTVisitor.cpp +++ b/src/lib/AST/ASTVisitor.cpp @@ -1085,16 +1085,17 @@ populate(VariableInfo& I, VarTemplatePartialSpecializationDecl const* D) void ASTVisitor:: populate( - FieldInfo& I, + VariableInfo& I, FieldDecl const* D) { + I.IsRecordField = true; I.Type = toTypeInfo(D->getType()); - I.IsVariant = D->getParent()->isUnion(); - I.IsMutable = D->isMutable(); if (Expr const* E = D->getInClassInitializer()) { - populate(I.Default, E); + populate(I.Initializer, E); } + I.IsVariant = D->getParent()->isUnion(); + I.IsMutable = D->isMutable(); if(D->isBitField()) { I.IsBitfield = true; @@ -1756,14 +1757,16 @@ addMember(RecordTranche& T, Info const& Member) } return; } - if (auto const* U = Member.asFieldPtr()) - { - addMember(T.Variables, *U); - return; - } if (auto const* U = Member.asVariablePtr()) { - addMember(T.StaticVariables, *U); + if (U->StorageClass != StorageClassKind::Static) + { + addMember(T.Variables, *U); + } + else + { + addMember(T.StaticVariables, *U); + } return; } if (auto const* U = Member.asConceptPtr()) diff --git a/src/lib/AST/ASTVisitor.hpp b/src/lib/AST/ASTVisitor.hpp index 0769082214..45b0d55f34 100644 --- a/src/lib/AST/ASTVisitor.hpp +++ b/src/lib/AST/ASTVisitor.hpp @@ -573,7 +573,7 @@ class ASTVisitor populate(VariableInfo& I, VarTemplatePartialSpecializationDecl const* D); void - populate(FieldInfo& I, FieldDecl const* D); + populate(VariableInfo& I, FieldDecl const* D); void populate(FriendInfo& I, FriendDecl const* D); diff --git a/src/lib/AST/ClangHelpers.hpp b/src/lib/AST/ClangHelpers.hpp index f30c7ca328..0fc713eca3 100644 --- a/src/lib/AST/ClangHelpers.hpp +++ b/src/lib/AST/ClangHelpers.hpp @@ -165,10 +165,9 @@ template <> struct InfoTypeFor : std::type_identity {}; -// Extract FieldInfo from FieldDecl template <> struct InfoTypeFor - : std::type_identity {}; + : std::type_identity {}; // Extract FriendInfo from FriendDecl template <> diff --git a/src/lib/Gen/xml/XMLWriter.cpp b/src/lib/Gen/xml/XMLWriter.cpp index c41a5240a8..e91b9e8972 100644 --- a/src/lib/Gen/xml/XMLWriter.cpp +++ b/src/lib/Gen/xml/XMLWriter.cpp @@ -556,26 +556,26 @@ writeTypedef( void XMLWriter:: -writeField( - FieldInfo const& I) +writeVariable( + VariableInfo const& I) { - std::string_view tag_name = dataMemberTagName; + openTemplate(I.Template); + std::string bit_width; if(I.IsBitfield) { - tag_name = bitfieldTagName; bit_width = I.BitfieldWidth.Value ? std::to_string(*I.BitfieldWidth.Value) : I.BitfieldWidth.Written; } - tags_.open(tag_name, { + tags_.open(varTagName, { { "name", I.Name }, { I.Access }, { I.id }, - { "width", bit_width, I.IsBitfield }, - { "default", I.Default.Written, ! I.Default.Written.empty() } - }); + { "width", bit_width, I.IsBitfield }, + { "default", I.Initializer.Written, ! I.Initializer.Written.empty() } + }); writeSourceInfo(I); @@ -584,39 +584,17 @@ writeField( {"id", "is-mutable"} }); - writeAttr(I.IsVariant, "is-variant", tags_); - writeAttr(I.IsMaybeUnused, "maybe-unused", tags_); - writeAttr(I.IsDeprecated, "deprecated", tags_); - writeAttr(I.HasNoUniqueAddress, "no-unique-address", tags_); - - writeType(I.Type, tags_); - - writeJavadoc(I.javadoc); - - tags_.close(tag_name); -} - -void -XMLWriter:: -writeVariable( - VariableInfo const& I) -{ - openTemplate(I.Template); - - tags_.open(varTagName, { - { "name", I.Name }, - { I.Access }, - { I.id } - }); - - writeSourceInfo(I); - writeAttr(I.StorageClass, "storage-class", tags_); writeAttr(I.IsInline, "is-inline", tags_); writeAttr(I.IsConstexpr, "is-constexpr", tags_); writeAttr(I.IsConstinit, "is-constinit", tags_); writeAttr(I.IsThreadLocal, "is-thread-local", tags_); + // writeAttr(I.IsVariant, "is-variant", tags_); + // writeAttr(I.IsMaybeUnused, "maybe-unused", tags_); + // writeAttr(I.IsDeprecated, "deprecated", tags_); + // writeAttr(I.HasNoUniqueAddress, "no-unique-address", tags_); + writeType(I.Type, tags_); writeJavadoc(I.javadoc); diff --git a/src/lib/Lib/CorpusImpl.cpp b/src/lib/Lib/CorpusImpl.cpp index 64ab59e5e4..22233d535b 100644 --- a/src/lib/Lib/CorpusImpl.cpp +++ b/src/lib/Lib/CorpusImpl.cpp @@ -827,16 +827,35 @@ build( corpus->info_ = std::move(results); corpus->undocumented_ = std::move(undocumented); - report::info( - "Extracted {} declarations in {}", - corpus->info_.size(), - format_duration(clock_type::now() - start_time)); - // ------------------------------------------ // Finalize corpus // ------------------------------------------ corpus->finalize(); + report::info( + "Extracted {} declarations in {}", + corpus->info_.size(), + format_duration(clock_type::now() - start_time)); + if (report::getMinimumLevel() <= report::Level::info) + { + for (ExtractionMode m: + { ExtractionMode::Regular, + ExtractionMode::SeeBelow, + ExtractionMode::ImplementationDefined, + ExtractionMode::Dependency }) + { + std::size_t const count = std::ranges:: + count_if(corpus->info_, [m](auto const& info) { + return info && info->Extraction == m; + }); + MRDOCS_CHECK_OR_CONTINUE(count); + report::info( + " - {} symbols: {}", + toString(m), + count); + } + } + return corpus; } @@ -925,44 +944,45 @@ qualifiedName( void CorpusImpl::finalize() { + report::info("Finalizing corpus"); + { - report::debug("Finalizing namespaces"); + report::debug(" - Finalizing namespaces"); NamespacesFinalizer finalizer(*this); finalizer.build(); } if (config->inheritBaseMembers != PublicSettings::BaseMemberInheritance::Never) { - report::debug("Finalizing base members"); + report::debug(" - Finalizing base members"); BaseMembersFinalizer finalizer(*this); finalizer.build(); } if (config->overloads) { - report::debug("Finalizing overloads"); + report::debug(" - Finalizing overloads"); OverloadsFinalizer finalizer(*this); finalizer.build(); } { - report::debug("Finalizing auto-relates"); + report::debug(" - Finalizing auto-relates"); DerivedFinalizer finalizer(*this); finalizer.build(); } if (config->sortMembers) { - report::debug("Finalizing sorted members"); + report::debug(" - Finalizing sorted members"); SortMembersFinalizer finalizer(*this); finalizer.build(); } // Finalize javadoc - report::debug("Finalizing javadoc"); + report::debug(" - Finalizing javadoc"); JavadocFinalizer finalizer(*this); finalizer.build(); } - } // clang::mrdocs diff --git a/src/lib/Lib/CorpusImpl.hpp b/src/lib/Lib/CorpusImpl.hpp index 21dbdeb9a0..9adb1fab39 100644 --- a/src/lib/Lib/CorpusImpl.hpp +++ b/src/lib/Lib/CorpusImpl.hpp @@ -14,7 +14,7 @@ #include "lib/AST/ParseRef.hpp" #include "lib/Lib/ConfigImpl.hpp" -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include "lib/Support/Debug.hpp" #include #include diff --git a/src/lib/Lib/ExecutionContext.hpp b/src/lib/Lib/ExecutionContext.hpp index 95ddf33648..533d49b058 100644 --- a/src/lib/Lib/ExecutionContext.hpp +++ b/src/lib/Lib/ExecutionContext.hpp @@ -15,7 +15,7 @@ #include "ConfigImpl.hpp" #include "Diagnostics.hpp" -#include "Info.hpp" +#include "InfoSet.hpp" #include #include #include diff --git a/src/lib/Lib/Info.cpp b/src/lib/Lib/InfoSet.cpp similarity index 91% rename from src/lib/Lib/Info.cpp rename to src/lib/Lib/InfoSet.cpp index 17ceabdbf8..23b1a2f35a 100644 --- a/src/lib/Lib/Info.cpp +++ b/src/lib/Lib/InfoSet.cpp @@ -1,8 +1,7 @@ -#include "Info.hpp" +#include "InfoSet.hpp" -namespace clang { -namespace mrdocs { +namespace clang::mrdocs { std::size_t InfoPtrHasher:: @@ -56,5 +55,4 @@ operator()( return b->id == a; } -} // mrdocs -} // clang +} // clang::mrdocs diff --git a/src/lib/Lib/Info.hpp b/src/lib/Lib/InfoSet.hpp similarity index 98% rename from src/lib/Lib/Info.hpp rename to src/lib/Lib/InfoSet.hpp index d592aa58cd..2eac80105c 100644 --- a/src/lib/Lib/Info.hpp +++ b/src/lib/Lib/InfoSet.hpp @@ -10,8 +10,8 @@ // Official repository: https://github.com/cppalliance/mrdocs // -#ifndef MRDOCS_LIB_TOOL_INFO_HPP -#define MRDOCS_LIB_TOOL_INFO_HPP +#ifndef MRDOCS_LIB_TOOL_INFOSET_HPP +#define MRDOCS_LIB_TOOL_INFOSET_HPP #include #include diff --git a/src/lib/Metadata/Finalizers/BaseMembersFinalizer.hpp b/src/lib/Metadata/Finalizers/BaseMembersFinalizer.hpp index efd2b774ce..94861deec3 100644 --- a/src/lib/Metadata/Finalizers/BaseMembersFinalizer.hpp +++ b/src/lib/Metadata/Finalizers/BaseMembersFinalizer.hpp @@ -11,7 +11,7 @@ #ifndef MRDOCS_LIB_METADATA_FINALIZER_BASEMEMBERSFINALIZER_HPP #define MRDOCS_LIB_METADATA_FINALIZER_BASEMEMBERSFINALIZER_HPP -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include "lib/Lib/CorpusImpl.hpp" namespace clang::mrdocs { diff --git a/src/lib/Metadata/Finalizers/DerivedFinalizer.hpp b/src/lib/Metadata/Finalizers/DerivedFinalizer.hpp index 8726800a0f..49f611ce62 100644 --- a/src/lib/Metadata/Finalizers/DerivedFinalizer.hpp +++ b/src/lib/Metadata/Finalizers/DerivedFinalizer.hpp @@ -13,7 +13,7 @@ #define MRDOCS_LIB_METADATA_FINALIZER_DERIVEDFINALIZER_HPP #include "lib/Lib/CorpusImpl.hpp" -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include namespace clang::mrdocs { diff --git a/src/lib/Metadata/Finalizers/Javadoc/Function.hpp b/src/lib/Metadata/Finalizers/Javadoc/Function.hpp index 1560ae0d54..3b7f440d89 100644 --- a/src/lib/Metadata/Finalizers/Javadoc/Function.hpp +++ b/src/lib/Metadata/Finalizers/Javadoc/Function.hpp @@ -12,7 +12,7 @@ #define MRDOCS_LIB_METADATA_FINALIZER_JAVADOCFINALIZER_FUNCTION_HPP #include "lib/Lib/CorpusImpl.hpp" -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include #include diff --git a/src/lib/Metadata/Finalizers/Javadoc/Overloads.hpp b/src/lib/Metadata/Finalizers/Javadoc/Overloads.hpp index 9bfa06d7e3..fd01105d25 100644 --- a/src/lib/Metadata/Finalizers/Javadoc/Overloads.hpp +++ b/src/lib/Metadata/Finalizers/Javadoc/Overloads.hpp @@ -12,7 +12,7 @@ #define MRDOCS_LIB_METADATA_FINALIZER_JAVADOCFINALIZER_OVERLOADS_HPP #include "lib/Lib/CorpusImpl.hpp" -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include "Function.hpp" #include diff --git a/src/lib/Metadata/Finalizers/JavadocFinalizer.hpp b/src/lib/Metadata/Finalizers/JavadocFinalizer.hpp index 5cc9ff1ef1..d45665a765 100644 --- a/src/lib/Metadata/Finalizers/JavadocFinalizer.hpp +++ b/src/lib/Metadata/Finalizers/JavadocFinalizer.hpp @@ -13,7 +13,7 @@ #define MRDOCS_LIB_METADATA_FINALIZER_JAVADOCFINALIZER_HPP #include "lib/Lib/CorpusImpl.hpp" -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include #include #include diff --git a/src/lib/Metadata/Finalizers/NamespacesFinalizer.hpp b/src/lib/Metadata/Finalizers/NamespacesFinalizer.hpp index 1b62047fbb..55963dadca 100644 --- a/src/lib/Metadata/Finalizers/NamespacesFinalizer.hpp +++ b/src/lib/Metadata/Finalizers/NamespacesFinalizer.hpp @@ -11,7 +11,7 @@ #ifndef MRDOCS_LIB_METADATA_FINALIZER_NAMESPACESFINALIZER_HPP #define MRDOCS_LIB_METADATA_FINALIZER_NAMESPACESFINALIZER_HPP -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include "lib/Lib/CorpusImpl.hpp" namespace clang::mrdocs { diff --git a/src/lib/Metadata/Finalizers/OverloadsFinalizer.hpp b/src/lib/Metadata/Finalizers/OverloadsFinalizer.hpp index 9fe914cdd7..98d5ae6fe0 100644 --- a/src/lib/Metadata/Finalizers/OverloadsFinalizer.hpp +++ b/src/lib/Metadata/Finalizers/OverloadsFinalizer.hpp @@ -11,7 +11,7 @@ #ifndef MRDOCS_LIB_METADATA_FINALIZER_OVERLOADSFINALIZER_HPP #define MRDOCS_LIB_METADATA_FINALIZER_OVERLOADSFINALIZER_HPP -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include "lib/Lib/CorpusImpl.hpp" namespace clang::mrdocs { diff --git a/src/lib/Metadata/Finalizers/SortMembersFinalizer.hpp b/src/lib/Metadata/Finalizers/SortMembersFinalizer.hpp index f9bcbc8f5e..d39b5dd0c6 100644 --- a/src/lib/Metadata/Finalizers/SortMembersFinalizer.hpp +++ b/src/lib/Metadata/Finalizers/SortMembersFinalizer.hpp @@ -11,7 +11,7 @@ #ifndef MRDOCS_LIB_METADATA_FINALIZER_SORTMEMBERSFINALIZER_HPP #define MRDOCS_LIB_METADATA_FINALIZER_SORTMEMBERSFINALIZER_HPP -#include "lib/Lib/Info.hpp" +#include "lib/Lib/InfoSet.hpp" #include "lib/Lib/CorpusImpl.hpp" namespace clang::mrdocs { diff --git a/src/lib/Metadata/Info/Field.cpp b/src/lib/Metadata/Info/Field.cpp deleted file mode 100644 index b6ba7f364f..0000000000 --- a/src/lib/Metadata/Info/Field.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// -// This is a derivative work. originally part of the LLVM Project. -// Licensed under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -// Copyright (c) 2025 Alan de Freitas (alandefreitas@gmail.com) -// -// Official repository: https://github.com/cppalliance/mrdocs -// - -#include -#include -#include - -namespace clang::mrdocs { - -void -merge(FieldInfo& I, FieldInfo&& Other) -{ - MRDOCS_ASSERT(canMerge(I, Other)); - merge(I.asInfo(), std::move(Other.asInfo())); - if (!I.Type) - { - I.Type = std::move(Other.Type); - } - if (I.Default.Written.empty()) - { - I.Default = std::move(Other.Default); - } - I.IsBitfield |= Other.IsBitfield; - merge(I.BitfieldWidth, std::move(Other.BitfieldWidth)); - I.IsVariant |= Other.IsVariant; - I.IsMutable |= Other.IsMutable; - I.IsMaybeUnused |= Other.IsMaybeUnused; - I.IsDeprecated |= Other.IsDeprecated; - I.HasNoUniqueAddress |= Other.HasNoUniqueAddress; -} - -} // clang::mrdocs - diff --git a/src/lib/Metadata/Info/Variable.cpp b/src/lib/Metadata/Info/Variable.cpp index f31a0052ed..76474bcaf0 100644 --- a/src/lib/Metadata/Info/Variable.cpp +++ b/src/lib/Metadata/Info/Variable.cpp @@ -90,6 +90,13 @@ merge(VariableInfo& I, VariableInfo&& Other) I.Attributes.push_back(otherAttr); } } + I.IsBitfield |= Other.IsBitfield; + merge(I.BitfieldWidth, std::move(Other.BitfieldWidth)); + I.IsVariant |= Other.IsVariant; + I.IsMutable |= Other.IsMutable; + I.IsMaybeUnused |= Other.IsMaybeUnused; + I.IsDeprecated |= Other.IsDeprecated; + I.HasNoUniqueAddress |= Other.HasNoUniqueAddress; } } // clang::mrdocs diff --git a/src/lib/Metadata/InfoNodes.json b/src/lib/Metadata/InfoNodes.json index 928c742a01..6bc4297ae3 100644 --- a/src/lib/Metadata/InfoNodes.json +++ b/src/lib/Metadata/InfoNodes.json @@ -31,10 +31,6 @@ "name": "variable", "brief": "The symbol is a variable" }, - { - "name": "field", - "brief": "The symbol is a field" - }, { "name": "friend", "brief": "The symbol is a friend declaration" diff --git a/src/tool/GenerateAction.cpp b/src/tool/GenerateAction.cpp index 776329c1f0..1b527d1cc3 100644 --- a/src/tool/GenerateAction.cpp +++ b/src/tool/GenerateAction.cpp @@ -209,7 +209,7 @@ DoGenerateAction( // -------------------------------------------------------------- // Normalize outputPath path MRDOCS_CHECK(settings.output, "The output path argument is missing"); - report::info("Generating docs\n"); + report::info("Generating docs"); MRDOCS_TRY(generator.build(*corpus)); // -------------------------------------------------------------- diff --git a/test-files/golden-tests/config/auto-relates/remove-friend.adoc b/test-files/golden-tests/config/auto-relates/remove-friend.adoc index 0f35e0da8b..9a1462ff3c 100644 --- a/test-files/golden-tests/config/auto-relates/remove-friend.adoc +++ b/test-files/golden-tests/config/auto-relates/remove-friend.adoc @@ -46,7 +46,7 @@ class A; |=== | Name | Description -| <> +| <> | Friend function not listed as non‐member |=== @@ -60,7 +60,7 @@ class A; | Non‐member function of A |=== -[#A-09friend] +[#A-08friend] == operator== Friend function not listed as non‐member diff --git a/test-files/golden-tests/config/auto-relates/remove-friend.html b/test-files/golden-tests/config/auto-relates/remove-friend.html index 026ab58e92..f4e3802499 100644 --- a/test-files/golden-tests/config/auto-relates/remove-friend.html +++ b/test-files/golden-tests/config/auto-relates/remove-friend.html @@ -67,7 +67,7 @@

Friends

-operator== Friend function not listed as non-member +operator== Friend function not listed as non-member @@ -90,7 +90,7 @@

Non-Member Functions

-

operator==

+

operator==

Friend function not listed as non-member diff --git a/test-files/golden-tests/filters/symbol-name/impl-defined-member.xml b/test-files/golden-tests/filters/symbol-name/impl-defined-member.xml index 458803aab4..fc7d9b5302 100644 --- a/test-files/golden-tests/filters/symbol-name/impl-defined-member.xml +++ b/test-files/golden-tests/filters/symbol-name/impl-defined-member.xml @@ -12,12 +12,12 @@ - + - + diff --git a/test-files/golden-tests/javadoc/returns/returns.xml b/test-files/golden-tests/javadoc/returns/returns.xml index 15efff74c0..e90d929443 100644 --- a/test-files/golden-tests/javadoc/returns/returns.xml +++ b/test-files/golden-tests/javadoc/returns/returns.xml @@ -12,14 +12,14 @@ g - + - - + + - + diff --git a/test-files/golden-tests/symbols/concept/concept.xml b/test-files/golden-tests/symbols/concept/concept.xml index 953a72be03..4cf58ad325 100644 --- a/test-files/golden-tests/symbols/concept/concept.xml +++ b/test-files/golden-tests/symbols/concept/concept.xml @@ -8,7 +8,7 @@ - + diff --git a/test-files/golden-tests/symbols/friend/friend-1.adoc b/test-files/golden-tests/symbols/friend/friend-1.adoc index 04d2b1965a..d16e7cc572 100644 --- a/test-files/golden-tests/symbols/friend/friend-1.adoc +++ b/test-files/golden-tests/symbols/friend/friend-1.adoc @@ -40,11 +40,11 @@ struct T; |=== | Name | Description -| <> +| <> | f |=== -[#T-09friend] +[#T-08friend] == f f diff --git a/test-files/golden-tests/symbols/friend/friend-1.html b/test-files/golden-tests/symbols/friend/friend-1.html index 8c5e5a6ce1..2706e21c72 100644 --- a/test-files/golden-tests/symbols/friend/friend-1.html +++ b/test-files/golden-tests/symbols/friend/friend-1.html @@ -61,7 +61,7 @@

Friends

-f f +f f @@ -70,7 +70,7 @@

Friends

-

f

+

f

f diff --git a/test-files/golden-tests/symbols/friend/friend-2.adoc b/test-files/golden-tests/symbols/friend/friend-2.adoc index e6e3f2877e..7d45b7c188 100644 --- a/test-files/golden-tests/symbols/friend/friend-2.adoc +++ b/test-files/golden-tests/symbols/friend/friend-2.adoc @@ -40,11 +40,11 @@ struct T; |=== | Name | Description -| <> +| <> | f |=== -[#T-09friend] +[#T-08friend] == f f diff --git a/test-files/golden-tests/symbols/friend/friend-2.html b/test-files/golden-tests/symbols/friend/friend-2.html index 6ffeda9245..d19e261117 100644 --- a/test-files/golden-tests/symbols/friend/friend-2.html +++ b/test-files/golden-tests/symbols/friend/friend-2.html @@ -61,7 +61,7 @@

Friends

-f f +f f @@ -70,7 +70,7 @@

Friends

-

f

+

f

f diff --git a/test-files/golden-tests/symbols/friend/friend-3.adoc b/test-files/golden-tests/symbols/friend/friend-3.adoc index 7479a8bdec..2f8e1ad497 100644 --- a/test-files/golden-tests/symbols/friend/friend-3.adoc +++ b/test-files/golden-tests/symbols/friend/friend-3.adoc @@ -41,11 +41,11 @@ struct T; |=== | Name | Description -| <> +| <> | T::f |=== -[#T-09friend] +[#T-08friend] == f T::f @@ -78,10 +78,10 @@ struct U; [cols=1] |=== | Name -| <> +| <> |=== -[#U-09friend] +[#U-08friend] == f === Synopsis diff --git a/test-files/golden-tests/symbols/friend/friend-3.html b/test-files/golden-tests/symbols/friend/friend-3.html index 3bb0666896..8400973c09 100644 --- a/test-files/golden-tests/symbols/friend/friend-3.html +++ b/test-files/golden-tests/symbols/friend/friend-3.html @@ -62,7 +62,7 @@

Friends

-f T::f +f T::f @@ -71,7 +71,7 @@

Friends

-

f

+

f

T::f @@ -113,7 +113,7 @@

Friends

-f +f @@ -122,7 +122,7 @@

Friends

-

f

+

f

Synopsis

diff --git a/test-files/golden-tests/symbols/friend/friend-4.adoc b/test-files/golden-tests/symbols/friend/friend-4.adoc index a6c3a63262..df8f3f1467 100644 --- a/test-files/golden-tests/symbols/friend/friend-4.adoc +++ b/test-files/golden-tests/symbols/friend/friend-4.adoc @@ -40,10 +40,10 @@ struct T; [cols=1] |=== | Name -| <> +| <> |=== -[#T-09friend] +[#T-08friend] == f === Synopsis @@ -75,11 +75,11 @@ struct U; |=== | Name | Description -| <> +| <> | U::f |=== -[#U-09friend] +[#U-08friend] == f U::f diff --git a/test-files/golden-tests/symbols/friend/friend-4.html b/test-files/golden-tests/symbols/friend/friend-4.html index 8976b26996..a120c4ac3b 100644 --- a/test-files/golden-tests/symbols/friend/friend-4.html +++ b/test-files/golden-tests/symbols/friend/friend-4.html @@ -61,7 +61,7 @@

Friends

-f +f @@ -70,7 +70,7 @@

Friends

-

f

+

f

Synopsis

@@ -109,7 +109,7 @@

Friends

-f U::f +f U::f @@ -118,7 +118,7 @@

Friends

-

f

+

f

U::f diff --git a/test-files/golden-tests/symbols/friend/friend-5.adoc b/test-files/golden-tests/symbols/friend/friend-5.adoc index 9a2c96d078..d685614313 100644 --- a/test-files/golden-tests/symbols/friend/friend-5.adoc +++ b/test-files/golden-tests/symbols/friend/friend-5.adoc @@ -40,10 +40,10 @@ struct T; [cols=1] |=== | Name -| <> +| <> |=== -[#T-09friend] +[#T-08friend] == f === Synopsis @@ -74,10 +74,10 @@ struct U; [cols=1] |=== | Name -| <> +| <> |=== -[#U-09friend] +[#U-08friend] == f === Synopsis diff --git a/test-files/golden-tests/symbols/friend/friend-5.html b/test-files/golden-tests/symbols/friend/friend-5.html index a9cafb0739..4307f6710e 100644 --- a/test-files/golden-tests/symbols/friend/friend-5.html +++ b/test-files/golden-tests/symbols/friend/friend-5.html @@ -61,7 +61,7 @@

Friends

-f +f @@ -70,7 +70,7 @@

Friends

-

f

+

f

Synopsis

@@ -108,7 +108,7 @@

Friends

-f +f @@ -117,7 +117,7 @@

Friends

-

f

+

f

Synopsis

diff --git a/test-files/golden-tests/symbols/friend/friend-6.adoc b/test-files/golden-tests/symbols/friend/friend-6.adoc index a2e041f2bd..9ff805d52e 100644 --- a/test-files/golden-tests/symbols/friend/friend-6.adoc +++ b/test-files/golden-tests/symbols/friend/friend-6.adoc @@ -40,13 +40,13 @@ struct T; |=== | Name | Description -| <> +| <> | Friend class Z brief -| <> +| <> | Friend int brief |=== -[#T-09friend-04cb] +[#T-08friend-04cb] == <> Friend class Z brief @@ -60,7 +60,7 @@ Declared in `<friend‐6.cpp>` friend <>; ---- -[#T-09friend-04ce] +[#T-08friend-04ce] == int Friend int brief @@ -94,11 +94,11 @@ struct U; |=== | Name | Description -| <> +| <> | Friend T brief |=== -[#U-09friend] +[#U-08friend] == <> Friend T brief @@ -132,11 +132,11 @@ struct V; |=== | Name | Description -| <> +| <> | Friend struct U brief |=== -[#V-09friend] +[#V-08friend] == <> Friend struct U brief diff --git a/test-files/golden-tests/symbols/friend/friend-6.html b/test-files/golden-tests/symbols/friend/friend-6.html index 6497854cba..05490c357b 100644 --- a/test-files/golden-tests/symbols/friend/friend-6.html +++ b/test-files/golden-tests/symbols/friend/friend-6.html @@ -55,8 +55,8 @@

Friends

-class Z Friend class Z brief -int Friend int brief +class Z Friend class Z brief +int Friend int brief @@ -65,7 +65,7 @@

Friends

-

Z

+

Z

Friend class Z brief @@ -84,7 +84,7 @@

Synopsis

-

int

+

int

Friend int brief @@ -129,7 +129,7 @@

Friends

-T Friend T brief +T Friend T brief @@ -138,7 +138,7 @@

Friends

-

T

+

T

Friend T brief @@ -183,7 +183,7 @@

Friends

-struct U Friend struct U brief +struct U Friend struct U brief @@ -192,7 +192,7 @@

Friends

-

U

+

U

Friend struct U brief diff --git a/test-files/golden-tests/symbols/function/noreturn.adoc b/test-files/golden-tests/symbols/function/noreturn.adoc index 083ff0b3b9..b2296746b3 100644 --- a/test-files/golden-tests/symbols/function/noreturn.adoc +++ b/test-files/golden-tests/symbols/function/noreturn.adoc @@ -53,7 +53,7 @@ struct T; [cols=1] |=== | Name -| <> +| <> |=== [#T-f3] @@ -85,7 +85,7 @@ void f2(); ---- -[#T-09friend] +[#T-08friend] == f1 === Synopsis diff --git a/test-files/golden-tests/symbols/function/noreturn.html b/test-files/golden-tests/symbols/function/noreturn.html index 3a45f33b87..70d90ead2b 100644 --- a/test-files/golden-tests/symbols/function/noreturn.html +++ b/test-files/golden-tests/symbols/function/noreturn.html @@ -85,7 +85,7 @@

Friends

-f1 +f1 @@ -129,7 +129,7 @@

Synopsis

-

f1

+

f1

Synopsis

diff --git a/test-files/golden-tests/symbols/overloads/overloads-ostream.adoc b/test-files/golden-tests/symbols/overloads/overloads-ostream.adoc index 8cffffdc22..2024a36776 100644 --- a/test-files/golden-tests/symbols/overloads/overloads-ostream.adoc +++ b/test-files/golden-tests/symbols/overloads/overloads-ostream.adoc @@ -198,10 +198,10 @@ class B; [cols=1] |=== | Name -| <> +| <> |=== -[#ostream-B-09friend] +[#ostream-B-08friend] == <>::operator<< === Synopsis diff --git a/test-files/golden-tests/symbols/overloads/overloads-ostream.html b/test-files/golden-tests/symbols/overloads/overloads-ostream.html index d4b2992a79..506f1a9aa6 100644 --- a/test-files/golden-tests/symbols/overloads/overloads-ostream.html +++ b/test-files/golden-tests/symbols/overloads/overloads-ostream.html @@ -274,7 +274,7 @@

Friends

-operator<< +operator<< @@ -283,7 +283,7 @@

Friends

-

ostream::operator<<

+

ostream::operator<<

Synopsis

diff --git a/test-files/golden-tests/symbols/overloads/overloads.adoc b/test-files/golden-tests/symbols/overloads/overloads.adoc index e33da4a1f5..a7d444fa9c 100644 --- a/test-files/golden-tests/symbols/overloads/overloads.adoc +++ b/test-files/golden-tests/symbols/overloads/overloads.adoc @@ -62,8 +62,8 @@ struct A; [cols=1] |=== | Name -| <> -| <> +| <> +| <> |=== [#A-f-00] @@ -172,7 +172,7 @@ int g(int); ---- -[#A-09friend-0a] +[#A-08friend-0a] == operator== === Synopsis @@ -188,7 +188,7 @@ operator==( <> rhs); ---- -[#A-09friend-0e] +[#A-08friend-0e] == operator== === Synopsis diff --git a/test-files/golden-tests/symbols/overloads/overloads.html b/test-files/golden-tests/symbols/overloads/overloads.html index 9ac0e7e32a..06aa6cc6d5 100644 --- a/test-files/golden-tests/symbols/overloads/overloads.html +++ b/test-files/golden-tests/symbols/overloads/overloads.html @@ -90,8 +90,8 @@

Friends

-operator== -operator== +operator== +operator== @@ -222,7 +222,7 @@

Synopsis

-

operator==

+

operator==

Synopsis

@@ -241,7 +241,7 @@

Synopsis

-

operator==

+

operator==

Synopsis

diff --git a/test-files/golden-tests/symbols/record/class-template-specializations-3.xml b/test-files/golden-tests/symbols/record/class-template-specializations-3.xml index 11ad007cf4..b4509e366d 100644 --- a/test-files/golden-tests/symbols/record/class-template-specializations-3.xml +++ b/test-files/golden-tests/symbols/record/class-template-specializations-3.xml @@ -265,66 +265,66 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/test-files/golden-tests/symbols/record/class-template.xml b/test-files/golden-tests/symbols/record/class-template.xml index 4661d7d58d..9a4ffcaf7e 100644 --- a/test-files/golden-tests/symbols/record/class-template.xml +++ b/test-files/golden-tests/symbols/record/class-template.xml @@ -8,23 +8,23 @@ - + - + - + - - + + - - + + - + @@ -33,24 +33,24 @@ - + - - + + - - + + - + - + - + - + - + diff --git a/test-files/golden-tests/symbols/record/record-data.xml b/test-files/golden-tests/symbols/record/record-data.xml index 4c9c5d512d..41c9f6d76c 100644 --- a/test-files/golden-tests/symbols/record/record-data.xml +++ b/test-files/golden-tests/symbols/record/record-data.xml @@ -4,58 +4,58 @@ - + - - + + - - + + - - + + - - + + - + - + - + - + - - + + - - + + - + - + - + diff --git a/test-files/golden-tests/symbols/record/union.xml b/test-files/golden-tests/symbols/record/union.xml index b631e8fe76..dd2386cc58 100644 --- a/test-files/golden-tests/symbols/record/union.xml +++ b/test-files/golden-tests/symbols/record/union.xml @@ -4,33 +4,29 @@ - + - - - + + - - + - + - - - + + - - - + + - + diff --git a/test-files/golden-tests/symbols/variable/no_unique_address.xml b/test-files/golden-tests/symbols/variable/no_unique_address.xml index 5172e712ca..8727692f39 100644 --- a/test-files/golden-tests/symbols/variable/no_unique_address.xml +++ b/test-files/golden-tests/symbols/variable/no_unique_address.xml @@ -7,16 +7,14 @@ - + - - - - + + - + diff --git a/test-files/golden-tests/symbols/variable/ns-variables.xml b/test-files/golden-tests/symbols/variable/ns-variables.xml index 34f2850166..d2fd2eeb44 100644 --- a/test-files/golden-tests/symbols/variable/ns-variables.xml +++ b/test-files/golden-tests/symbols/variable/ns-variables.xml @@ -5,31 +5,31 @@ - + - + - + - + - + @@ -38,18 +38,18 @@ - + - + - + diff --git a/test-files/golden-tests/symbols/variable/static-data-def-constexpr.xml b/test-files/golden-tests/symbols/variable/static-data-def-constexpr.xml index 63346ee043..3aa0744348 100644 --- a/test-files/golden-tests/symbols/variable/static-data-def-constexpr.xml +++ b/test-files/golden-tests/symbols/variable/static-data-def-constexpr.xml @@ -4,7 +4,7 @@ - + @@ -15,7 +15,7 @@ - + diff --git a/test-files/golden-tests/symbols/variable/static-data-def.xml b/test-files/golden-tests/symbols/variable/static-data-def.xml index a048dfdb87..e299f51577 100644 --- a/test-files/golden-tests/symbols/variable/static-data-def.xml +++ b/test-files/golden-tests/symbols/variable/static-data-def.xml @@ -6,20 +6,20 @@ - + - + - + @@ -27,32 +27,32 @@ - + - + - + - + - + @@ -63,14 +63,14 @@ - + - + diff --git a/test-files/golden-tests/symbols/variable/static-data-template.xml b/test-files/golden-tests/symbols/variable/static-data-template.xml index af1ca53b3c..34ba63a557 100644 --- a/test-files/golden-tests/symbols/variable/static-data-template.xml +++ b/test-files/golden-tests/symbols/variable/static-data-template.xml @@ -9,7 +9,7 @@ - + @@ -43,7 +43,7 @@ - + diff --git a/test-files/golden-tests/symbols/variable/var-template.xml b/test-files/golden-tests/symbols/variable/var-template.xml index e22ee19ebf..7f35448dad 100644 --- a/test-files/golden-tests/symbols/variable/var-template.xml +++ b/test-files/golden-tests/symbols/variable/var-template.xml @@ -6,7 +6,7 @@