Author: Carlos Galvez Date: 2023-05-07T16:36:30Z New Revision: 26f476286fbcb5cde51176abb2d3c6c0986bc410
URL: https://github.com/llvm/llvm-project/commit/26f476286fbcb5cde51176abb2d3c6c0986bc410 DIFF: https://github.com/llvm/llvm-project/commit/26f476286fbcb5cde51176abb2d3c6c0986bc410.diff LOG: [clang-tidy] Support SystemHeaders in .clang-tidy A previous patch update the clang-tidy documentation incorrectly claiming that SystemHeaders can be provided in the .clang-tidy configuration file. This patch adds support for it, together with tests. Differential Revision: https://reviews.llvm.org/D149899 Added: clang-tools-extra/test/clang-tidy/infrastructure/Inputs/system-headers/system_header.h clang-tools-extra/test/clang-tidy/infrastructure/system-headers.cpp Modified: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/index.rst clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp index afa88cb4f80d1..bc2ecc6b54553 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp @@ -172,6 +172,7 @@ template <> struct MappingTraits<ClangTidyOptions> { IO.mapOptional("ExtraArgsBefore", Options.ExtraArgsBefore); IO.mapOptional("InheritParentConfig", Options.InheritParentConfig); IO.mapOptional("UseColor", Options.UseColor); + IO.mapOptional("SystemHeaders", Options.SystemHeaders); } }; diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index 2bed6dfda3a0a..74340e1b06cb0 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -134,10 +134,13 @@ option in .clang-tidy file, if any. cl::init(""), cl::cat(ClangTidyCategory)); -static cl::opt<bool> - SystemHeaders("system-headers", - desc("Display the errors from system headers."), - cl::init(false), cl::cat(ClangTidyCategory)); +static cl::opt<bool> SystemHeaders("system-headers", desc(R"( +Display the errors from system headers. +This option overrides the 'SystemHeaders' option +in .clang-tidy file, if any. +)"), + cl::init(false), cl::cat(ClangTidyCategory)); + static cl::opt<std::string> LineFilter("line-filter", desc(R"( List of files with line ranges to filter the warnings. Can be used together with diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 6b2c36975b80c..f2393a4156548 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -103,6 +103,9 @@ Improvements to clang-tidy - Fix a potential crash when using the `--dump-config` option. +- Support specifying `SystemHeaders` in the `.clang-tidy` configuration file, + with the same functionality as the command-line option `--system-headers`. + New checks ^^^^^^^^^^ diff --git a/clang-tools-extra/docs/clang-tidy/index.rst b/clang-tools-extra/docs/clang-tidy/index.rst index 444d03d6cb08a..41fde5064b8ee 100644 --- a/clang-tools-extra/docs/clang-tidy/index.rst +++ b/clang-tools-extra/docs/clang-tidy/index.rst @@ -211,6 +211,8 @@ An overview of all the command-line options: format to stderr. When this option is passed, these per-TU profiles are instead stored as JSON. --system-headers - Display the errors from system headers. + This option overrides the 'SystemHeaders' option + in .clang-tidy file, if any. --use-color - Use colors in diagnostics. If not set, colors will be used if the terminal connected to standard output supports colors. diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/system-headers/system_header.h b/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/system-headers/system_header.h new file mode 100644 index 0000000000000..1a3014e83745d --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/system-headers/system_header.h @@ -0,0 +1 @@ +class Foo { Foo(int); }; diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/system-headers.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/system-headers.cpp new file mode 100644 index 0000000000000..9fa990b6aac8c --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/infrastructure/system-headers.cpp @@ -0,0 +1,24 @@ +// RUN: clang-tidy -dump-config -system-headers=true | FileCheck -check-prefix=CHECK-CONFIG-SYSTEM-HEADERS %s +// RUN: clang-tidy -dump-config -system-headers=false | FileCheck -check-prefix=CHECK-CONFIG-NO-SYSTEM-HEADERS %s +// RUN: clang-tidy -config='SystemHeaders: true' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-SYSTEM-HEADERS %s +// RUN: clang-tidy -config='SystemHeaders: false' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-NO-SYSTEM-HEADERS %s + +// RUN: clang-tidy -system-headers=true -config='SystemHeaders: true' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-SYSTEM-HEADERS %s +// RUN: clang-tidy -system-headers=true -config='SystemHeaders: false' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-SYSTEM-HEADERS %s +// RUN: clang-tidy -system-headers=false -config='SystemHeaders: true' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-NO-SYSTEM-HEADERS %s +// RUN: clang-tidy -system-headers=false -config='SystemHeaders: false' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-NO-SYSTEM-HEADERS %s + +// RUN: clang-tidy -help | FileCheck -check-prefix=CHECK-OPT-PRESENT %s + +// RUN: clang-tidy -checks='-*,google-explicit-constructor' -header-filter='.*' -system-headers=true %s -- -isystem %S/Inputs/system-headers 2>&1 | FileCheck -check-prefix=CHECK-SYSTEM-HEADERS %s +// RUN: clang-tidy -checks='-*,google-explicit-constructor' -header-filter='.*' -system-headers=false %s -- -isystem %S/Inputs/system-headers 2>&1 | FileCheck -check-prefix=CHECK-NO-SYSTEM-HEADERS %s +// RUN: clang-tidy -checks='-*,google-explicit-constructor' -header-filter='.*' -config='SystemHeaders: true' %s -- -isystem %S/Inputs/system-headers 2>&1 | FileCheck -check-prefix=CHECK-SYSTEM-HEADERS %s +// RUN: clang-tidy -checks='-*,google-explicit-constructor' -header-filter='.*' -config='SystemHeaders: false' %s -- -isystem %S/Inputs/system-headers 2>&1 | FileCheck -check-prefix=CHECK-NO-SYSTEM-HEADERS %s + +#include <system_header.h> +// CHECK-SYSTEM-HEADERS: system_header.h:1:13: warning: single-argument constructors must be marked explicit +// CHECK-NO-SYSTEM-HEADERS-NOT: system_header.h:1:13: warning: single-argument constructors must be marked explicit + +// CHECK-CONFIG-NO-SYSTEM-HEADERS: SystemHeaders: false +// CHECK-CONFIG-SYSTEM-HEADERS: SystemHeaders: true +// CHECK-OPT-PRESENT: --system-headers diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp index 06f27d86dea22..89d8f4400fca8 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp @@ -120,6 +120,7 @@ TEST(ParseConfiguration, MergeConfigurations) { ExtraArgs: ['arg1', 'arg2'] ExtraArgsBefore: ['arg-before1', 'arg-before2'] UseColor: false + SystemHeaders: false )", "Options1")); ASSERT_TRUE(!!Options1); @@ -134,6 +135,7 @@ TEST(ParseConfiguration, MergeConfigurations) { ExtraArgs: ['arg3', 'arg4'] ExtraArgsBefore: ['arg-before3', 'arg-before4'] UseColor: true + SystemHeaders: true )", "Options2")); ASSERT_TRUE(!!Options2); @@ -154,6 +156,9 @@ TEST(ParseConfiguration, MergeConfigurations) { Options.ExtraArgsBefore->end(), ",")); ASSERT_TRUE(Options.UseColor.has_value()); EXPECT_TRUE(*Options.UseColor); + + ASSERT_TRUE(Options.SystemHeaders.has_value()); + EXPECT_TRUE(*Options.SystemHeaders); } namespace { @@ -249,6 +254,17 @@ TEST(ParseConfiguration, CollectDiags) { DiagKind(llvm::SourceMgr::DK_Error), DiagPos(Options.range().Begin), DiagRange(Options.range())))); + + Options = llvm::Annotations(R"( + SystemHeaders: [[NotABool]] + )"); + ParsedOpt = ParseWithDiags(Options.code()); + EXPECT_TRUE(!ParsedOpt); + EXPECT_THAT(Collector.getDiags(), + testing::ElementsAre(AllOf(DiagMessage("invalid boolean"), + DiagKind(llvm::SourceMgr::DK_Error), + DiagPos(Options.range().Begin), + DiagRange(Options.range())))); } namespace { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits