Skip to content

Commit 3a223ab

Browse files
committed
chore: make extract options private
1 parent 7f3d4ae commit 3a223ab

File tree

5 files changed

+80
-90
lines changed

5 files changed

+80
-90
lines changed

include/mrdox/Config.hpp

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -42,60 +42,9 @@ class MRDOX_DECL
4242
Config() noexcept;
4343

4444
public:
45-
struct ExtractOptions
46-
{
47-
enum class Policy
48-
{
49-
Always,
50-
Dependency,
51-
Never
52-
};
53-
54-
/** Extraction policy for references to external declarations.
55-
56-
This determines how declarations which are referenced by
57-
explicitly extracted declarations are extracted.
58-
59-
Given a function parameter of type `std::string`, `std::string`
60-
would be extracted if this option is set to `Policy::Always`.
61-
*/
62-
Policy referencedDeclarations = Policy::Dependency;
63-
64-
/** Extraction policy for anonymous namespace.
65-
66-
@li `Policy::Always`: anonymous namespaces and their
67-
members will always be extracted.
68-
69-
@li `Policy::Dependency`: members of anonymous namespaces will only
70-
be extracted via dependency.
71-
72-
@li `Policy::Never`: members of anonymous namespace will
73-
never be extracted, regardless of how they are referenced.
74-
*/
75-
Policy anonymousNamespaces = Policy::Always;
76-
77-
/** Extraction policy for inaccessible members.
78-
79-
@li `Policy::Always`: all `private` and `protected` members
80-
will be extracted.
81-
82-
@li `Policy::Dependency`: `private` and `protected` members will only
83-
be extracted via dependency.
84-
85-
@li `Policy::Never`: `private` and `protected` will never be extracted.
86-
*/
87-
Policy inaccessibleMembers = Policy::Always;
88-
89-
Policy inaccessibleBases = Policy::Always;
90-
};
9145

9246
struct Settings
9347
{
94-
95-
/** Options controlling when declarations are extracted.
96-
*/
97-
ExtractOptions extract;
98-
9948
/** `true` if output should consist of multiple files.
10049
*/
10150
bool multiPage = false;

src/lib/AST/ASTVisitor.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ class ASTVisitor
233233
traverseDecl(context_.getTranslationUnitDecl());
234234

235235
// if dependency extraction is disabled, we are done
236-
if(config_->extract.referencedDeclarations ==
237-
Config::ExtractOptions::Policy::Never)
236+
if(config_->referencedDeclarations ==
237+
ConfigImpl::SettingsImpl::ExtractPolicy::Never)
238238
return;
239239

240240
// traverse the current set of dependencies,
@@ -310,12 +310,12 @@ class ASTVisitor
310310
id = extractSymbolID(D);
311311

312312
// don't register a dependency if we never extract them
313-
if(config_->extract.referencedDeclarations ==
314-
Config::ExtractOptions::Policy::Never)
313+
if(config_->referencedDeclarations ==
314+
ConfigImpl::SettingsImpl::ExtractPolicy::Never)
315315
return;
316316

317-
if(config_->extract.referencedDeclarations ==
318-
Config::ExtractOptions::Policy::Dependency)
317+
if(config_->referencedDeclarations ==
318+
ConfigImpl::SettingsImpl::ExtractPolicy::Dependency)
319319
{
320320
if(currentMode() != ExtractMode::DirectDependency)
321321
return;
@@ -2342,12 +2342,12 @@ traverse(NamespaceDecl* D)
23422342
return true;
23432343

23442344
if(D->isAnonymousNamespace() &&
2345-
config_->extract.anonymousNamespaces !=
2346-
Config::ExtractOptions::Policy::Always)
2345+
config_->anonymousNamespaces !=
2346+
ConfigImpl::SettingsImpl::ExtractPolicy::Always)
23472347
{
23482348
// always skip anonymous namespaces if so configured
2349-
if(config_->extract.anonymousNamespaces ==
2350-
Config::ExtractOptions::Policy::Never)
2349+
if(config_->anonymousNamespaces ==
2350+
ConfigImpl::SettingsImpl::ExtractPolicy::Never)
23512351
return true;
23522352

23532353
// otherwise, skip extraction if this isn't a dependency

src/lib/Lib/ConfigImpl.cpp

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,25 @@
2828
//
2929
//------------------------------------------------
3030

31+
using ConfigImpl = clang::mrdox::ConfigImpl;
32+
using SettingsImpl = ConfigImpl::SettingsImpl;
33+
3134
template<>
3235
struct llvm::yaml::MappingTraits<
33-
clang::mrdox::ConfigImpl::SettingsImpl::FileFilter>
36+
SettingsImpl::FileFilter>
3437
{
3538
static void mapping(IO& io,
36-
clang::mrdox::ConfigImpl::SettingsImpl::FileFilter& f)
39+
SettingsImpl::FileFilter& f)
3740
{
3841
io.mapOptional("include", f.include);
3942
}
4043
};
4144

4245
template<>
4346
struct llvm::yaml::ScalarEnumerationTraits<
44-
clang::mrdox::Config::ExtractOptions::Policy>
47+
SettingsImpl::ExtractPolicy>
4548
{
46-
using Policy = clang::mrdox::Config::ExtractOptions::Policy;
49+
using Policy = SettingsImpl::ExtractPolicy;
4750

4851
static void enumeration(IO& io,
4952
Policy& value)
@@ -56,24 +59,10 @@ struct llvm::yaml::ScalarEnumerationTraits<
5659

5760
template<>
5861
struct llvm::yaml::MappingTraits<
59-
clang::mrdox::Config::ExtractOptions>
62+
SettingsImpl::Filters::Category>
6063
{
6164
static void mapping(IO &io,
62-
clang::mrdox::Config::ExtractOptions& opts)
63-
{
64-
io.mapOptional("referenced-declarations", opts.referencedDeclarations);
65-
io.mapOptional("anonymous-namespaces", opts.anonymousNamespaces);
66-
io.mapOptional("inaccessible-members", opts.inaccessibleMembers);
67-
io.mapOptional("inaccessible-bases", opts.inaccessibleBases);
68-
}
69-
};
70-
71-
template<>
72-
struct llvm::yaml::MappingTraits<
73-
clang::mrdox::ConfigImpl::SettingsImpl::Filters::Category>
74-
{
75-
static void mapping(IO &io,
76-
clang::mrdox::ConfigImpl::SettingsImpl::Filters::Category& f)
65+
SettingsImpl::Filters::Category& f)
7766
{
7867
io.mapOptional("include", f.include);
7968
io.mapOptional("exclude", f.exclude);
@@ -82,26 +71,30 @@ struct llvm::yaml::MappingTraits<
8271

8372
template<>
8473
struct llvm::yaml::MappingTraits<
85-
clang::mrdox::ConfigImpl::SettingsImpl::Filters>
74+
SettingsImpl::Filters>
8675
{
8776
static void mapping(IO &io,
88-
clang::mrdox::ConfigImpl::SettingsImpl::Filters& f)
77+
SettingsImpl::Filters& f)
8978
{
9079
io.mapOptional("symbols", f.symbols);
9180
}
9281
};
9382

9483
template<>
95-
struct llvm::yaml::MappingTraits<
96-
clang::mrdox::ConfigImpl::SettingsImpl>
84+
struct llvm::yaml::MappingTraits<SettingsImpl>
9785
{
9886
static void mapping(IO& io,
99-
clang::mrdox::ConfigImpl::SettingsImpl& cfg)
87+
SettingsImpl& cfg)
10088
{
10189
io.mapOptional("defines", cfg.defines);
10290
io.mapOptional("ignore-failures", cfg.ignoreFailures);
10391

104-
io.mapOptional("extract", cfg.extract);
92+
// io.mapOptional("extract", cfg.extract);
93+
io.mapOptional("referenced-declarations", cfg.referencedDeclarations);
94+
io.mapOptional("anonymous-namespaces", cfg.anonymousNamespaces);
95+
io.mapOptional("inaccessible-members", cfg.inaccessibleMembers);
96+
io.mapOptional("inaccessible-bases", cfg.inaccessibleBases);
97+
10598

10699
io.mapOptional("multipage", cfg.multiPage);
107100
io.mapOptional("source-root", cfg.sourceRoot);

src/lib/Lib/ConfigImpl.hpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,51 @@ class ConfigImpl
4747
Category symbols;
4848
};
4949

50+
enum class ExtractPolicy
51+
{
52+
Always,
53+
Dependency,
54+
Never
55+
};
56+
57+
/** Extraction policy for references to external declarations.
58+
59+
This determines how declarations which are referenced by
60+
explicitly extracted declarations are extracted.
61+
62+
Given a function parameter of type `std::string`, `std::string`
63+
would be extracted if this option is set to `Policy::Always`.
64+
*/
65+
ExtractPolicy referencedDeclarations = ExtractPolicy::Dependency;
66+
67+
/** Extraction policy for anonymous namespace.
68+
69+
@li `ExtractPolicy::Always`: anonymous namespaces and their
70+
members will always be extracted.
71+
72+
@li `ExtractPolicy::Dependency`: members of anonymous namespaces will only
73+
be extracted via dependency.
74+
75+
@li `ExtractPolicy::Never`: members of anonymous namespace will
76+
never be extracted, regardless of how they are referenced.
77+
*/
78+
ExtractPolicy anonymousNamespaces = ExtractPolicy::Always;
79+
80+
/** Extraction policy for inaccessible members.
81+
82+
@li `ExtractPolicy::Always`: all `private` and `protected` members
83+
will be extracted.
84+
85+
@li `ExtractPolicy::Dependency`: `private` and `protected` members will only
86+
be extracted via dependency.
87+
88+
@li `ExtractPolicy::Never`: `private` and `protected` will never be extracted.
89+
*/
90+
ExtractPolicy inaccessibleMembers = ExtractPolicy::Always;
91+
92+
ExtractPolicy inaccessibleBases = ExtractPolicy::Always;
93+
94+
5095
/** Additional defines passed to the compiler.
5196
*/
5297
std::vector<std::string> defines;
@@ -81,6 +126,7 @@ class ConfigImpl
81126
a symbol should be extracted.
82127
*/
83128
FilterNode symbolFilter;
129+
84130
};
85131

86132
Settings const&

src/lib/Metadata/Interface.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// Official repository: https://github.com/cppalliance/mrdox
1010
//
1111

12+
#include "lib/Lib/ConfigImpl.hpp"
1213
#include "lib/Support/Debug.hpp"
1314
#include <mrdox/Metadata/Interface.hpp>
1415
#include <mrdox/Support/TypeTraits.hpp>
@@ -51,10 +52,11 @@ class Interface::Build
5152
Corpus const& corpus) noexcept
5253
: I_(I)
5354
, corpus_(corpus)
54-
, includePrivate_(
55-
corpus_.config->extract.inaccessibleMembers !=
56-
Config::ExtractOptions::Policy::Never)
5755
{
56+
auto& config = static_cast<
57+
ConfigImpl const&>(corpus_.config);
58+
includePrivate_ = config->inaccessibleMembers !=
59+
ConfigImpl::SettingsImpl::ExtractPolicy::Never;
5860
// treat `Derived` as a public base,
5961
append(AccessKind::Public, Derived);
6062

0 commit comments

Comments
 (0)