@@ -57,6 +57,14 @@ cl::opt<std::string> HTMLReportPath{
57
57
cl::cat (IncludeCleaner),
58
58
};
59
59
60
+ cl::opt<std::string> OnlyHeaders{
61
+ " only-headers" ,
62
+ cl::desc (" A comma-separated list of regexes to match against suffix of a "
63
+ " header. Only headers that match will be analyzed." ),
64
+ cl::init (" " ),
65
+ cl::cat (IncludeCleaner),
66
+ };
67
+
60
68
cl::opt<std::string> IgnoreHeaders{
61
69
" ignore-headers" ,
62
70
cl::desc (" A comma-separated list of regexes to match against suffix of a "
@@ -221,11 +229,12 @@ class ActionFactory : public tooling::FrontendActionFactory {
221
229
llvm::StringMap<std::string> EditedFiles;
222
230
};
223
231
224
- std::function<bool (llvm::StringRef)> headerFilter () {
232
+ // Compiles a regex list into a function that return true if any match a header.
233
+ // Prints and returns nullptr if any regexes are invalid.
234
+ std::function<bool (llvm::StringRef)> matchesAny (llvm::StringRef RegexFlag) {
225
235
auto FilterRegs = std::make_shared<std::vector<llvm::Regex>>();
226
-
227
236
llvm::SmallVector<llvm::StringRef> Headers;
228
- llvm::StringRef (IgnoreHeaders) .split (Headers, ' ,' , -1 , /* KeepEmpty=*/ false );
237
+ RegexFlag .split (Headers, ' ,' , -1 , /* KeepEmpty=*/ false );
229
238
for (auto HeaderPattern : Headers) {
230
239
std::string AnchoredPattern = " (" + HeaderPattern.str () + " )$" ;
231
240
llvm::Regex CompiledRegex (AnchoredPattern);
@@ -246,6 +255,21 @@ std::function<bool(llvm::StringRef)> headerFilter() {
246
255
};
247
256
}
248
257
258
+ std::function<bool (llvm::StringRef)> headerFilter () {
259
+ auto OnlyMatches = matchesAny (OnlyHeaders);
260
+ auto IgnoreMatches = matchesAny (IgnoreHeaders);
261
+ if (!OnlyMatches || !IgnoreMatches)
262
+ return nullptr ;
263
+
264
+ return [OnlyMatches, IgnoreMatches](llvm::StringRef Header) {
265
+ if (OnlyHeaders.getNumOccurrences () && !OnlyMatches (Header))
266
+ return true ;
267
+ if (IgnoreHeaders.getNumOccurrences () && IgnoreMatches (Header))
268
+ return true ;
269
+ return false ;
270
+ };
271
+ }
272
+
249
273
} // namespace
250
274
} // namespace include_cleaner
251
275
} // namespace clang
0 commit comments