Skip to content

Commit 287e588

Browse files
authored
fix: group overloads per access level
1 parent 1e8d691 commit 287e588

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+1059
-243
lines changed

include/mrdocs/Metadata/Info/Overloads.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
#define MRDOCS_API_METADATA_OVERLOADS_HPP
1313

1414
#include <mrdocs/Platform.hpp>
15-
#include <ranges>
15+
#include <mrdocs/Metadata/Info.hpp>
16+
#include <mrdocs/Metadata/Info/Function.hpp>
1617

1718
namespace clang::mrdocs {
1819

@@ -41,7 +42,7 @@ struct OverloadsInfo final
4142
}
4243

4344
explicit
44-
OverloadsInfo(SymbolID const& Parent, std::string_view Name) noexcept;
45+
OverloadsInfo(SymbolID const& Parent, std::string_view Name, AccessKind Access, bool isStatic) noexcept;
4546
};
4647

4748
MRDOCS_DECL

include/mrdocs/Metadata/Javadoc.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,8 @@ struct Brief final : Paragraph
891891
operator=(text);
892892
}
893893

894+
Brief(Brief const& other) = default;
895+
894896
Brief&
895897
operator=(Brief const& other) = default;
896898

src/lib/Metadata/Finalizers/OverloadsFinalizer.cpp

+11-10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//
1010

1111
#include "OverloadsFinalizer.hpp"
12+
#include <mrdocs/Support/Assert.hpp>
1213

1314
namespace clang::mrdocs {
1415

@@ -93,7 +94,7 @@ findBaseClassPermutation(
9394

9495
void
9596
OverloadsFinalizer::
96-
foldOverloads(SymbolID const& contextId, std::vector<SymbolID>& functionIds)
97+
foldOverloads(SymbolID const& contextId, std::vector<SymbolID>& functionIds, bool isStatic)
9798
{
9899
for (auto functionIdIt = functionIds.begin();
99100
functionIdIt != functionIds.end();
@@ -153,7 +154,7 @@ foldOverloads(SymbolID const& contextId, std::vector<SymbolID>& functionIds)
153154
// FunctionInfo is not unique and there's no equivalent
154155
// overload set in base classes, so we merge it with the
155156
// other FunctionInfos into a new OverloadsInfo
156-
OverloadsInfo O(contextId, function->Name);
157+
OverloadsInfo O(contextId, function->Name, function->Access, isStatic);
157158
addMember(O, *function);
158159
*functionIdIt = O.id;
159160
auto const itOffset = functionIdIt - functionIds.begin();
@@ -170,15 +171,15 @@ foldOverloads(SymbolID const& contextId, std::vector<SymbolID>& functionIds)
170171
}
171172
}
172173
functionIdIt = functionIds.begin() + itOffset;
173-
corpus_.info_.emplace(std::make_unique<OverloadsInfo>(std::move(O)));
174+
MRDOCS_ASSERT(corpus_.info_.emplace(std::make_unique<OverloadsInfo>(std::move(O))).second);
174175
}
175176
}
176177

177178
void
178179
OverloadsFinalizer::
179180
operator()(NamespaceInfo& I)
180181
{
181-
foldOverloads(I.id, I.Members.Functions);
182+
foldOverloads(I.id, I.Members.Functions, true);
182183
foldRecordMembers(I.Members.Records);
183184
foldNamespaceMembers(I.Members.Namespaces);
184185
}
@@ -203,12 +204,12 @@ operator()(RecordInfo& I)
203204
MRDOCS_CHECK_OR(baseRecord);
204205
operator()(*baseRecord);
205206
}
206-
foldOverloads(I.id, I.Interface.Public.Functions);
207-
foldOverloads(I.id, I.Interface.Protected.Functions);
208-
foldOverloads(I.id, I.Interface.Private.Functions);
209-
foldOverloads(I.id, I.Interface.Public.StaticFunctions);
210-
foldOverloads(I.id, I.Interface.Protected.StaticFunctions);
211-
foldOverloads(I.id, I.Interface.Private.StaticFunctions);
207+
foldOverloads(I.id, I.Interface.Public.Functions, false);
208+
foldOverloads(I.id, I.Interface.Protected.Functions, false);
209+
foldOverloads(I.id, I.Interface.Private.Functions, false);
210+
foldOverloads(I.id, I.Interface.Public.StaticFunctions, true);
211+
foldOverloads(I.id, I.Interface.Protected.StaticFunctions, true);
212+
foldOverloads(I.id, I.Interface.Private.StaticFunctions, true);
212213
foldRecordMembers(I.Interface.Public.Records);
213214
foldRecordMembers(I.Interface.Protected.Records);
214215
foldRecordMembers(I.Interface.Private.Records);

src/lib/Metadata/Finalizers/OverloadsFinalizer.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class OverloadsFinalizer
3838
void
3939
foldOverloads(
4040
SymbolID const& contextId,
41-
std::vector<SymbolID>& functionIds);
41+
std::vector<SymbolID>& functionIds,
42+
bool isStatic);
4243

4344
public:
4445
OverloadsFinalizer(CorpusImpl& corpus)

src/lib/Metadata/Info/Overloads.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
namespace clang::mrdocs {
2222

2323
OverloadsInfo::
24-
OverloadsInfo(SymbolID const& Parent, std::string_view Name) noexcept
24+
OverloadsInfo(SymbolID const& Parent, std::string_view Name, AccessKind access, bool isStatic) noexcept
2525
: InfoCommonBase(
2626
SymbolID::createFromString(
27-
fmt::format("{}-{}", toBase16(Parent), Name)))
27+
fmt::format("{}-{}-{}-{}", toBase16(Parent), Name, toString(access), isStatic)))
2828
{
2929
this->Parent = Parent;
3030
}

test-files/golden-tests/config/overloads/const-mutable.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ class C;
3030
|===
3131
| Name
3232
| Description
33-
| <<C-foo-01,`foo`>>
33+
| <<C-foo-0e,`foo`>>
3434
|
3535
|===
3636

37-
[#C-foo-01]
37+
[#C-foo-0e]
3838
== <<C,C>>::foo
3939

4040
=== Synopses

test-files/golden-tests/config/overloads/const-mutable.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ <h2>Member Functions</h2>
4747
</thead>
4848
<tbody>
4949
<tr>
50-
<td><a href="#C-foo-01"><code>foo</code></a> </td><td><span></span></td></tr>
50+
<td><a href="#C-foo-0e"><code>foo</code></a> </td><td><span></span></td></tr>
5151
</tbody>
5252
</table>
5353

@@ -56,7 +56,7 @@ <h2>Member Functions</h2>
5656
</div>
5757
<div>
5858
<div>
59-
<h2 id="C-foo-01"><a href="#C">C</a>::foo</h2>
59+
<h2 id="C-foo-0e"><a href="#C">C</a>::foo</h2>
6060
</div>
6161
<div>
6262
<h3>Synopses</h3>

0 commit comments

Comments
 (0)