Added a flag which, when enabled, documents only those methods and fields which have a Public attribute.
Details
Diff Detail
- Repository
- rCTE Clang Tools Extra
Event Timeline
So on seeing this, all of the plumbing needed to get that particular value where you need it is a bit ugly. I'm inclined to suggest wrapping it in a ClangDocContext, containing it and the ExecutionContext in the ClangDoc.h file:
struct ClangDocContext { ExecutionContext &ECtx; bool PublicOnly; }
and then basically just replace everywhere the ECtx is plumbed through with the new context object.
clang-tools-extra/clang-doc/Serialize.cpp | ||
---|---|---|
307 ↗ | (On Diff #152169) | You also want to check access here (records can be private to a class). |
334 ↗ | (On Diff #152169) | Move this to the top of the function and do the check before you set the value on I -- if we're not going to return anything, you should exit quickly before you do all of the allocation. |
340 ↗ | (On Diff #152169) | Also check here |
clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | ||
68 ↗ | (On Diff #152169) | Can we make the flag just --public? |
clang-tools-extra/test/clang-doc/yaml-record-public-only.cpp | ||
10 ↗ | (On Diff #152169) | Add a test case for a function. |
- addressed Julie's comments
- updated logic to consider both access specifier & linkage
- added tests for each type of linkage
Updated the tests to more accurately check that the files that we expect to not be generated by clang-doc with the public flag are in fact not being created.
The tests now run clang-doc over the test files with and without the public flag, outputting yaml files into two different directories.
File-check then diffs those directories and verifies that the files we expect to be absent in the directory created from running clang-doc with the public flag are in fact absent.
clang-tools-extra/clang-doc/ClangDoc.h | ||
---|---|---|
27 ↗ | (On Diff #153790) | Can we put this in Representation.h? Here, you have a potential circular include with Mapper.h. |
clang-tools-extra/clang-doc/Mapper.cpp | ||
37–40 ↗ | (On Diff #153790) | Since the emitInfos are returning "" if they're being passed over, the results container is still storing them -- move the emission outside of this call, and only report if it returns a non-empty string. |
clang-tools-extra/clang-doc/Mapper.h | ||
23 ↗ | (On Diff #153790) | See above, I don't love the potential for circular includes (since Mapper.h is included in the implementation file for ClangDoc |
clang-tools-extra/clang-doc/Serialize.cpp | ||
174 ↗ | (On Diff #153790) | For readability, it's usually better to use positives (i.e. isPublic). Then, if we ever want to check for internal only, isPublic() is much more readable than !shouldNotBePublic(). |
311–313 ↗ | (On Diff #153790) | You can inline this. |
clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | ||
69 ↗ | (On Diff #153790) | s/structures/declarations |
clang-tools-extra/test/clang-doc/yaml-module.cpp | ||
14 ↗ | (On Diff #153790) | I'm working on making these less brittle (so changing the USR schema doesn't require changing all these tests and just check the length with a regex, so let's just do that here (see D48341's tests for an example). |
18 ↗ | (On Diff #153790) | To be system-agnostic, make this {{.*}} to match regardless of from where the test is run. |
clang-tools-extra/test/clang-doc/yaml-public-module.cpp | ||
11–15 ↗ | (On Diff #153790) | Unnecessary whitespace |
Please run clang-format and clang-tidy on the patch.
clang-tools-extra/clang-doc/ClangDoc.cpp | ||
---|---|---|
25 ↗ | (On Diff #153825) | Sort includes (this should be at the top) |
clang-tools-extra/clang-doc/Mapper.cpp | ||
13 ↗ | (On Diff #153825) | Sort includes alphabetically, but you shouldn't need this here? |
clang-tools-extra/clang-doc/Mapper.h | ||
23 ↗ | (On Diff #153825) | Sort includes (this should be at the top) |
clang-tools-extra/clang-doc/Serialize.cpp | ||
174 ↗ | (On Diff #153825) | clang-tidy will tell you to capitalize these in llvm world (as -> AS, link -> Link) |
322–324 ↗ | (On Diff #153825) | Since this is the same for Record/Function/Enum, can we move this to populateSymbolInfo()? Also, elide braces on single-line ifs. |
clang-tools-extra/clang-doc/Serialize.cpp | ||
---|---|---|
322–324 ↗ | (On Diff #153825) | I don't see a good way to put it into populateSymbolInfo because if the condition passes then the emitInfo method needs to bail out and I don't see a clean way to do that if the check is in populateSymbolInfo. A clunky way to do this would be to either have populateSymbolInfo set a flag that emitInfo checks or emitInfo can assume that populateSymbolInfo bailed if all the info is unpopulated, but that seems like a worse way to do it. Am I missing something? I can refactor the condition into a function if that would be better for understandability / maintainability. |
clang-tools-extra/clang-doc/Serialize.cpp | ||
---|---|---|
322–324 ↗ | (On Diff #153825) | Hmm I suppose this is fine then. Still elide braces on single-line ifs. |
Remember to mark comments as done when they are. Otherwise, LGTM unless @ioeric has any concerns.
No concern if this looks good to Julie.
clang-tools-extra/test/clang-doc/yaml-module.cpp | ||
---|---|---|
14 ↗ | (On Diff #154470) | This could be [0-9A-Z]{N} where N = length(USR), right? |
clang-tools-extra/test/clang-doc/yaml-module.cpp | ||
---|---|---|
14 ↗ | (On Diff #154470) | The {n} syntax doesn't work with FileCheck. |