[PATCH] D41102: Setup clang-doc frontend framework
Jonas Toth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 13 00:39:25 PST 2017
JonasToth added a comment.
You can erase some namespace prefix in code, e.g. llvm or clang, because you are working in them and/or had `using namespace clang`. Imo this is not required only if you find it ok to shorten the code.
================
Comment at: tools/clang-doc/ClangDoc.cpp:30
+bool ClangDocVisitor::VisitNamedDecl(const NamedDecl *D) {
+ SourceManager &Manager = Context->getSourceManager();
+ if (!IsNewComment(D->getLocation(), Manager))
----------------
Here manager can be const& if it is on the other places too
================
Comment at: tools/clang-doc/ClangDoc.cpp:50
+void ClangDocVisitor::ParseUnattachedComments() {
+ SourceManager &Manager = Context->getSourceManager();
+ for (RawComment *Comment : Context->getRawCommentList().getComments()) {
----------------
I think Manager can be const&. Looks like only read methods were called.
================
Comment at: tools/clang-doc/ClangDoc.cpp:61
+bool ClangDocVisitor::IsNewComment(SourceLocation Loc,
+ SourceManager &Manager) const {
+ if (!Loc.isValid())
----------------
Manager could be const&.
================
Comment at: tools/clang-doc/ClangDoc.h:38
+
+ virtual bool VisitNamedDecl(const NamedDecl *D);
+
----------------
Not sure if this method should be virtual. `RecursiveASTVisitor` uses the crtp to not need virtual methods but still behaving the same.
================
Comment at: tools/clang-doc/ClangDocReporter.cpp:155
+ CurrentCI->SelfClosing = C->isSelfClosing();
+ if (C->getNumAttrs() != 0) {
+ for (unsigned i = 0, e = C->getNumAttrs(); i != e; ++i) {
----------------
The condition for this if might trigger unexpected behaviour if `getNumAttrs` returns negative values. To be safe you could use > 0 instead != 0
================
Comment at: tools/clang-doc/ClangDocReporter.cpp:170
+ CurrentCI->Name = getCommandName(C->getCommandID());
+ for (unsigned i = 0, e = C->getNumArgs(); i != e; ++i)
+ CurrentCI->Args.push_back(C->getArgText(i));
----------------
Similar here. If e is negative you will execute the loop until I wraps around. Not sure if this is a real issue, depending on the postcondition of getNumArgs.
================
Comment at: tools/clang-doc/ClangDocReporter.cpp:188
+ if (C->isPositionValid()) {
+ for (unsigned i = 0, e = C->getDepth(); i != e; ++i)
+ CurrentCI->Position.push_back(C->getIndex(i));
----------------
Similar thing.
================
Comment at: tools/clang-doc/ClangDocReporter.cpp:228
+ for (comments::Comment *Child :
+ llvm::make_range(C->child_begin(), C->child_end())) {
+ CommentInfo ChildCI;
----------------
Extract range into utility method of `Comment`
================
Comment at: tools/clang-doc/ClangDocReporter.cpp:249
+const char *ClangDocReporter::getCommandName(unsigned CommandID) {
+ ;
+ const CommandInfo *Info = CommandTraits::getBuiltinCommandInfo(CommandID);
----------------
Empty Statement
================
Comment at: tools/clang-doc/ClangDocReporter.h:51
+ llvm::SmallVector<int, 8> Position;
+ std::vector<CommentInfo> Children;
+};
----------------
Here a short `children()` method return llvm::make_range shortens the code in a later loop and might benefit in the future for iterations over children.
https://reviews.llvm.org/D41102
More information about the cfe-commits
mailing list