@@ -20,6 +20,12 @@ using namespace clang::ast_matchers;
2020
2121namespace clang ::tidy::custom {
2222
23+ static void emitConfigurationDiag (ClangTidyContext *Context, StringRef Message,
24+ StringRef CheckName) {
25+ Context->configurationDiag (" %0 in '%1'" , DiagnosticIDs::Warning)
26+ << Message << CheckName;
27+ }
28+
2329static SmallVector<ast_matchers::dynamic::DynTypedMatcher>
2430parseQuery (const ClangTidyOptions::CustomCheckValue &V,
2531 ClangTidyContext *Context) {
@@ -39,23 +45,52 @@ parseQuery(const ClangTidyOptions::CustomCheckValue &V,
3945 LetQuery.run (llvm::errs (), QS);
4046 break ;
4147 }
48+ case query::QK_NoOp: {
49+ const auto &NoOpQuery = llvm::cast<query::NoOpQuery>(*Q);
50+ NoOpQuery.run (llvm::errs (), QS);
51+ break ;
52+ }
4253 case query::QK_Invalid: {
4354 const auto &InvalidQuery = llvm::cast<query::InvalidQuery>(*Q);
44- Context-> configurationDiag ( InvalidQuery.ErrStr , DiagnosticIDs::Error );
55+ emitConfigurationDiag (Context, InvalidQuery.ErrStr , V. Name );
4556 return {};
4657 }
4758 // FIXME: TODO
48- case query::QK_File:
49- case query::QK_DisableOutputKind:
50- case query::QK_EnableOutputKind:
51- case query::QK_SetOutputKind:
52- case query::QK_SetTraversalKind:
53- case query::QK_Help:
54- case query::QK_NoOp:
55- case query::QK_Quit:
59+ case query::QK_File: {
60+ emitConfigurationDiag (Context, " unsupported query kind 'File'" , V.Name );
61+ return {};
62+ }
63+ case query::QK_DisableOutputKind: {
64+ emitConfigurationDiag (
65+ Context, " unsupported query kind 'DisableOutputKind'" , V.Name );
66+ return {};
67+ }
68+ case query::QK_EnableOutputKind: {
69+ emitConfigurationDiag (
70+ Context, " unsupported query kind 'EnableOutputKind'" , V.Name );
71+ return {};
72+ }
73+ case query::QK_SetOutputKind: {
74+ emitConfigurationDiag (Context, " unsupported query kind 'SetOutputKind'" ,
75+ V.Name );
76+ return {};
77+ }
78+ case query::QK_SetTraversalKind: {
79+ emitConfigurationDiag (
80+ Context, " unsupported query kind 'SetTraversalKind'" , V.Name );
81+ return {};
82+ }
5683 case query::QK_SetBool: {
57- Context->configurationDiag (" unsupported query kind" ,
58- DiagnosticIDs::Error);
84+ emitConfigurationDiag (Context, " unsupported query kind 'SetBool'" ,
85+ V.Name );
86+ return {};
87+ }
88+ case query::QK_Help: {
89+ emitConfigurationDiag (Context, " unsupported query kind 'Help'" , V.Name );
90+ return {};
91+ }
92+ case query::QK_Quit: {
93+ emitConfigurationDiag (Context, " unsupported query kind 'Quit'" , V.Name );
5994 return {};
6095 }
6196 }
@@ -89,19 +124,19 @@ void QueryCheck::registerMatchers(MatchFinder *Finder) {
89124}
90125
91126void QueryCheck::check (const MatchFinder::MatchResult &Result) {
92- auto Emit = [this ](DiagMaps const &DiagMaps, std::string const &BindName,
93- DynTypedNode const &Node, DiagnosticIDs::Level Level) {
94- if (!DiagMaps.contains (Level))
127+ auto Emit = [this ](const DiagMaps &DiagMaps, const std::string &BindName,
128+ const DynTypedNode &Node, DiagnosticIDs::Level Level) {
129+ DiagMaps::const_iterator DiagMapIt = DiagMaps.find (Level);
130+ if (DiagMapIt == DiagMaps.end ())
95131 return ;
96- auto &DiagMap = DiagMaps.at (Level);
97- if (!DiagMap.contains (BindName))
132+ const BindNameMapToDiagMessage &BindNameMap = DiagMapIt->second ;
133+ BindNameMapToDiagMessage::const_iterator BindNameMapIt =
134+ BindNameMap.find (BindName);
135+ if (BindNameMapIt == BindNameMap.end ())
98136 return ;
99- for (const std::string &Message : DiagMap. at (BindName)) {
137+ for (const std::string &Message : BindNameMapIt-> second )
100138 diag (Node.getSourceRange ().getBegin (), Message, Level);
101- }
102139 };
103- for (const auto &[Name, Node] : Result.Nodes .getMap ())
104- Emit (Diags, Name, Node, DiagnosticIDs::Error);
105140 for (const auto &[Name, Node] : Result.Nodes .getMap ())
106141 Emit (Diags, Name, Node, DiagnosticIDs::Warning);
107142 // place Note last, otherwise it will not be emitted
0 commit comments