@@ -517,13 +517,16 @@ TEST(DiagnosticTest, ClangTidyWarningAsError) {
517
517
diagSeverity (DiagnosticsEngine::Error)))));
518
518
}
519
519
520
- TidyProvider addClangArgs (std::vector<llvm::StringRef> ExtraArgs) {
521
- return [ExtraArgs = std::move (ExtraArgs)](tidy::ClangTidyOptions &Opts,
522
- llvm::StringRef) {
520
+ TidyProvider addClangArgs (std::vector<llvm::StringRef> ExtraArgs,
521
+ llvm::StringRef Checks) {
522
+ return [ExtraArgs = std::move (ExtraArgs), Checks = Checks.str ()](
523
+ tidy::ClangTidyOptions &Opts, llvm::StringRef) {
523
524
if (!Opts.ExtraArgs )
524
525
Opts.ExtraArgs .emplace ();
525
526
for (llvm::StringRef Arg : ExtraArgs)
526
527
Opts.ExtraArgs ->emplace_back (Arg);
528
+ if (!Checks.empty ())
529
+ Opts.Checks = Checks;
527
530
};
528
531
}
529
532
@@ -541,53 +544,78 @@ TEST(DiagnosticTest, ClangTidyEnablesClangWarning) {
541
544
// Check the -Wunused warning isn't initially on.
542
545
EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
543
546
544
- // We enable warnings based on clang-tidy extra args.
545
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" });
547
+ // We enable warnings based on clang-tidy extra args, if the matching
548
+ // clang-diagnostic- is there.
549
+ TU.ClangTidyProvider =
550
+ addClangArgs ({" -Wunused" }, " clang-diagnostic-unused-function" );
551
+ EXPECT_THAT (*TU.build ().getDiagnostics (), ElementsAre (UnusedFooWarning));
552
+
553
+ // clang-diagnostic-* is acceptable
554
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused" }, " clang-diagnostic-*" );
546
555
EXPECT_THAT (*TU.build ().getDiagnostics (), ElementsAre (UnusedFooWarning));
556
+ // And plain *
557
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused" }, " *" );
558
+ EXPECT_THAT (*TU.build ().getDiagnostics (), ElementsAre (UnusedFooWarning));
559
+ // And we can explicitly exclude a category too.
560
+ TU.ClangTidyProvider =
561
+ addClangArgs ({" -Wunused" }, " *,-clang-diagnostic-unused-function" );
562
+ EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
547
563
548
- // But we don't respect other args.
549
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" , " -Dfoo=bar" });
564
+ // Without the exact check specified, the warnings are not enabled.
565
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused" }, " clang-diagnostic-unused" );
566
+ EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
567
+
568
+ // We don't respect other args.
569
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused" , " -Dfoo=bar" },
570
+ " clang-diagnostic-unused-function" );
550
571
EXPECT_THAT (*TU.build ().getDiagnostics (), ElementsAre (UnusedFooWarning))
551
572
<< " Not unused function 'bar'!" ;
552
573
553
574
// -Werror doesn't apply to warnings enabled by clang-tidy extra args.
554
575
TU.ExtraArgs = {" -Werror" };
555
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" });
576
+ TU.ClangTidyProvider =
577
+ addClangArgs ({" -Wunused" }, " clang-diagnostic-unused-function" );
556
578
EXPECT_THAT (*TU.build ().getDiagnostics (),
557
579
ElementsAre (diagSeverity (DiagnosticsEngine::Warning)));
558
580
559
581
// But clang-tidy extra args won't *downgrade* errors to warnings either.
560
582
TU.ExtraArgs = {" -Wunused" , " -Werror" };
561
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" });
583
+ TU.ClangTidyProvider =
584
+ addClangArgs ({" -Wunused" }, " clang-diagnostic-unused-function" );
562
585
EXPECT_THAT (*TU.build ().getDiagnostics (),
563
586
ElementsAre (diagSeverity (DiagnosticsEngine::Error)));
564
587
565
588
// FIXME: we're erroneously downgrading the whole group, this should be Error.
566
589
TU.ExtraArgs = {" -Wunused-function" , " -Werror" };
567
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" });
590
+ TU.ClangTidyProvider =
591
+ addClangArgs ({" -Wunused" }, " clang-diagnostic-unused-label" );
568
592
EXPECT_THAT (*TU.build ().getDiagnostics (),
569
593
ElementsAre (diagSeverity (DiagnosticsEngine::Warning)));
570
594
571
595
// This looks silly, but it's the typical result if a warning is enabled by a
572
596
// high-level .clang-tidy file and disabled by a low-level one.
573
597
TU.ExtraArgs = {};
574
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" , " -Wno-unused" });
598
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused" , " -Wno-unused" },
599
+ " clang-diagnostic-unused-function" );
575
600
EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
576
601
577
602
// Overriding only works in the proper order.
578
- TU.ClangTidyProvider = addClangArgs ({" -Wno-unused" , " -Wunused" });
603
+ TU.ClangTidyProvider =
604
+ addClangArgs ({" -Wunused" }, {" clang-diagnostic-unused-function" });
579
605
EXPECT_THAT (*TU.build ().getDiagnostics (), SizeIs (1 ));
580
606
581
607
// More specific vs less-specific: match clang behavior
582
- TU.ClangTidyProvider = addClangArgs ({" -Wunused" , " -Wno-unused-function" });
608
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused" , " -Wno-unused-function" },
609
+ {" clang-diagnostic-unused-function" });
583
610
EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
584
- TU.ClangTidyProvider = addClangArgs ({" -Wunused-function" , " -Wno-unused" });
611
+ TU.ClangTidyProvider = addClangArgs ({" -Wunused-function" , " -Wno-unused" },
612
+ {" clang-diagnostic-unused-function" });
585
613
EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
586
614
587
- // We do allow clang-tidy config to disable warnings from the compile command.
588
- // It's unclear this is ideal, but it's hard to avoid.
615
+ // We do allow clang-tidy config to disable warnings from the compile
616
+ // command. It's unclear this is ideal, but it's hard to avoid.
589
617
TU.ExtraArgs = {" -Wunused" };
590
- TU.ClangTidyProvider = addClangArgs ({" -Wno-unused" });
618
+ TU.ClangTidyProvider = addClangArgs ({" -Wno-unused" }, {} );
591
619
EXPECT_THAT (*TU.build ().getDiagnostics (), IsEmpty ());
592
620
}
593
621
0 commit comments