34 StringRef QueryStringRef{V.
Query};
35 while (!QueryStringRef.empty()) {
39 const auto &MatchQuery = cast<query::MatchQuery>(*Q);
40 Matchers.push_back(MatchQuery.Matcher);
44 const auto &LetQuery = cast<query::LetQuery>(*Q);
45 LetQuery.run(llvm::errs(), QS);
49 const auto &NoOpQuery = cast<query::NoOpQuery>(*Q);
50 NoOpQuery.run(llvm::errs(), QS);
54 const auto &InvalidQuery = cast<query::InvalidQuery>(*Q);
65 Context,
"unsupported query kind 'DisableOutputKind'", V.
Name);
70 Context,
"unsupported query kind 'EnableOutputKind'", V.
Name);
80 Context,
"unsupported query kind 'SetTraversalKind'", V.
Name);
97 QueryStringRef = Q->RemainingContent;
127 const auto Emit = [
this](
128 const DiagMaps &DiagMaps,
const std::string &BindName,
129 const DynTypedNode &Node, DiagnosticIDs::Level Level) {
130 const DiagMaps::const_iterator DiagMapIt = DiagMaps.find(Level);
131 if (DiagMapIt == DiagMaps.end())
133 const BindNameMapToDiagMessage &BindNameMap = DiagMapIt->second;
134 const BindNameMapToDiagMessage::const_iterator BindNameMapIt =
135 BindNameMap.find(BindName);
136 if (BindNameMapIt == BindNameMap.end())
138 for (
const std::string &Message : BindNameMapIt->second)
139 diag(Node.getSourceRange().getBegin(), Message, Level);
141 for (
const auto &[Name, Node] : Result.Nodes.getMap())
142 Emit(Diags, Name, Node, DiagnosticIDs::Warning);
144 for (
const auto &[Name, Node] : Result.Nodes.getMap())
145 Emit(Diags, Name, Node, DiagnosticIDs::Note);
Every ClangTidyCheck reports errors through a DiagnosticsEngine provided by this context.
DiagnosticBuilder configurationDiag(StringRef Message, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
Report any errors to do with reading the configuration using this method.