cjdb created this revision. cjdb added a reviewer: aaron.ballman. Herald added subscribers: usaxena95, arphaman. Herald added a project: All. cjdb requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Building on D126796 <https://reviews.llvm.org/D126796>, this commit adds the infrastructure for being able to print out descriptions of what each warning does. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D126832 Files: clang/include/clang/Basic/DiagnosticCategories.h clang/include/clang/Basic/DiagnosticIDs.h clang/lib/Basic/DiagnosticIDs.cpp clang/tools/diagtool/DiagnosticNames.cpp clang/utils/TableGen/ClangDiagnosticsEmitter.cpp
Index: clang/utils/TableGen/ClangDiagnosticsEmitter.cpp =================================================================== --- clang/utils/TableGen/ClangDiagnosticsEmitter.cpp +++ clang/utils/TableGen/ClangDiagnosticsEmitter.cpp @@ -1534,14 +1534,24 @@ const bool hasSubGroups = !SubGroups.empty() || (IsPedantic && !GroupsInPedantic.empty()); if (hasSubGroups) { - OS << "/* DiagSubGroup" << I.second.IDNo << " */ " << SubGroupIndex; + OS << "/* DiagSubGroup" << I.second.IDNo << " */ " << SubGroupIndex + << ", "; if (IsPedantic) SubGroupIndex += GroupsInPedantic.size(); SubGroupIndex += SubGroups.size() + 1; } else { - OS << "0"; + OS << "0, "; } + std::string Documentation = I.second.Defs.back() + ->getValue("Documentation") + ->getValue() + ->getAsUnquotedString(); + if (!Documentation.empty()) + OS << "R\"(" << StringRef(Documentation).trim() << ")\""; + else + OS << R"("")"; + OS << ")\n"; } OS << "#endif // DIAG_ENTRY\n\n"; Index: clang/tools/diagtool/DiagnosticNames.cpp =================================================================== --- clang/tools/diagtool/DiagnosticNames.cpp +++ clang/tools/diagtool/DiagnosticNames.cpp @@ -66,7 +66,7 @@ // Second the table of options, sorted by name for fast binary lookup. static const GroupRecord OptionTable[] = { -#define DIAG_ENTRY(GroupName, FlagNameOffset, Members, SubGroups) \ +#define DIAG_ENTRY(GroupName, FlagNameOffset, Members, SubGroups, Docs) \ {FlagNameOffset, Members, SubGroups}, #include "clang/Basic/DiagnosticGroups.inc" #undef DIAG_ENTRY Index: clang/lib/Basic/DiagnosticIDs.cpp =================================================================== --- clang/lib/Basic/DiagnosticIDs.cpp +++ clang/lib/Basic/DiagnosticIDs.cpp @@ -607,6 +607,7 @@ uint16_t NameOffset; uint16_t Members; uint16_t SubGroups; + StringRef Documentation; // String is stored with a pascal-style length byte. StringRef getName() const { @@ -618,12 +619,17 @@ // Second the table of options, sorted by name for fast binary lookup. static const WarningOption OptionTable[] = { -#define DIAG_ENTRY(GroupName, FlagNameOffset, Members, SubGroups) \ - {FlagNameOffset, Members, SubGroups}, +#define DIAG_ENTRY(GroupName, FlagNameOffset, Members, SubGroups, Docs) \ + {FlagNameOffset, Members, SubGroups, Docs}, #include "clang/Basic/DiagnosticGroups.inc" #undef DIAG_ENTRY }; +/// getDocumentation Given a diagnostic group ID, return its documentation. +StringRef DiagnosticIDs::getWarningOptionDocumentation(diag::Group Group) { + return OptionTable[static_cast<int>(Group)].Documentation; +} + StringRef DiagnosticIDs::getWarningOptionForGroup(diag::Group Group) { return OptionTable[static_cast<int>(Group)].getName(); } Index: clang/include/clang/Basic/DiagnosticIDs.h =================================================================== --- clang/include/clang/Basic/DiagnosticIDs.h +++ clang/include/clang/Basic/DiagnosticIDs.h @@ -231,6 +231,9 @@ /// "deprecated-declarations". static StringRef getWarningOptionForGroup(diag::Group); + /// Given a diagnostic group ID, return its documentation. + static StringRef getWarningOptionDocumentation(diag::Group GroupID); + /// Given a group ID, returns the flag that toggles the group. /// For example, for "deprecated-declarations", returns /// Group::DeprecatedDeclarations. Index: clang/include/clang/Basic/DiagnosticCategories.h =================================================================== --- clang/include/clang/Basic/DiagnosticCategories.h +++ clang/include/clang/Basic/DiagnosticCategories.h @@ -21,7 +21,8 @@ }; enum class Group { -#define DIAG_ENTRY(GroupName, FlagNameOffset, Members, SubGroups) GroupName, +#define DIAG_ENTRY(GroupName, FlagNameOffset, Members, SubGroups, Docs) \ + GroupName, #include "clang/Basic/DiagnosticGroups.inc" #undef CATEGORY #undef DIAG_ENTRY
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits