diff --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp --- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp @@ -8,6 +8,7 @@ #include "ClangTidyOptions.h" #include "ClangTidyModuleRegistry.h" +#include "GlobList.h" #include "clang/Basic/LLVM.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/Debug.h" @@ -117,11 +118,25 @@ } } +static void mapGlobList(IO &IO, StringRef Key, Optional &Item) { + if (!IO.outputting()) { + IO.mapOptional(Key.data(), Item); + return; + } + if (Item) { + std::string Expanded; + llvm::raw_string_ostream OS(Expanded); + clang::tidy::GlobList(*Item).print(OS); + OS.flush(); + IO.mapRequired(Key.data(), Expanded); + } +} + template <> struct MappingTraits { static void mapping(IO &IO, ClangTidyOptions &Options) { bool Ignored = false; - IO.mapOptional("Checks", Options.Checks); - IO.mapOptional("WarningsAsErrors", Options.WarningsAsErrors); + mapGlobList(IO, "Checks", Options.Checks); + mapGlobList(IO, "WarningsAsErrors", Options.WarningsAsErrors); IO.mapOptional("HeaderFilterRegex", Options.HeaderFilterRegex); IO.mapOptional("AnalyzeTemporaryDtors", Ignored); // legacy compatibility IO.mapOptional("FormatStyle", Options.FormatStyle); diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy b/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy --- a/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy +++ b/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy @@ -1,2 +1,2 @@ -Checks: 'from-parent' +Checks: '-*,from-parent' HeaderFilterRegex: 'parent' diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy b/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy --- a/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy +++ b/clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy @@ -1,2 +1,2 @@ -Checks: 'from-child1' +Checks: '-*,from-child1' HeaderFilterRegex: 'child1' diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp --- a/clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp +++ b/clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp @@ -1,8 +1,10 @@ // RUN: clang-tidy -config-file=%S/Inputs/config-file/config-file -dump-config -- | FileCheck %s -check-prefix=CHECK-BASE -// CHECK-BASE: Checks: {{.*}}hicpp-uppercase-literal-suffix +// CHECK-BASE: Checks: hicpp-uppercase-literal-suffix // RUN: clang-tidy -config-file=%S/Inputs/config-file/config-file-spaces --list-checks -- | FileCheck %s -check-prefix=CHECK-SPACES // CHECK-SPACES: Enabled checks: // CHECK-SPACES-NEXT: hicpp-uppercase-literal-suffix // CHECK-SPACES-NEXT: hicpp-use-auto // CHECK-SPACES-NEXT: hicpp-use-emplace // CHECK-SPACES-EMPTY: +// RUN: clang-tidy -config-file=%S/Inputs/config-file/config-file-spaces -dump-config -- | FileCheck %s -check-prefix=CHECK-DUMP-SPACES +// CHECK-DUMP-SPACES: Checks: hicpp-uppercase-literal-suffix,hicpp-use-auto,hicpp-use-emplace diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp --- a/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp +++ b/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp @@ -1,17 +1,17 @@ // RUN: clang-tidy -dump-config %S/Inputs/config-files/- -- | FileCheck %s -check-prefix=CHECK-BASE -// CHECK-BASE: Checks: {{.*}}from-parent +// CHECK-BASE: Checks: from-parent // CHECK-BASE: HeaderFilterRegex: parent // RUN: clang-tidy -dump-config %S/Inputs/config-files/1/- -- | FileCheck %s -check-prefix=CHECK-CHILD1 -// CHECK-CHILD1: Checks: {{.*}}from-child1 +// CHECK-CHILD1: Checks: from-child1 // CHECK-CHILD1: HeaderFilterRegex: child1 // RUN: clang-tidy -dump-config %S/Inputs/config-files/2/- -- | FileCheck %s -check-prefix=CHECK-CHILD2 -// CHECK-CHILD2: Checks: {{.*}}from-parent +// CHECK-CHILD2: Checks: from-parent // CHECK-CHILD2: HeaderFilterRegex: parent // RUN: clang-tidy -dump-config %S/Inputs/config-files/3/- -- | FileCheck %s -check-prefix=CHECK-CHILD3 -// CHECK-CHILD3: Checks: {{.*}}from-parent,from-child3 +// CHECK-CHILD3: Checks: from-parent,from-child3 // CHECK-CHILD3: HeaderFilterRegex: child3 // RUN: clang-tidy -dump-config -checks='from-command-line' -header-filter='from command line' %S/Inputs/config-files/- -- | FileCheck %s -check-prefix=CHECK-COMMAND-LINE -// CHECK-COMMAND-LINE: Checks: {{.*}}from-parent,from-command-line +// CHECK-COMMAND-LINE: Checks: from-parent,from-command-line // CHECK-COMMAND-LINE: HeaderFilterRegex: from command line // For this test we have to use names of the real checks because otherwise values are ignored. @@ -20,7 +20,7 @@ // Running with the new : syntax // RUN: clang-tidy -dump-config %S/Inputs/config-files/4/key-dict/- -- | FileCheck %s -check-prefix=CHECK-CHILD4 -// CHECK-CHILD4: Checks: {{.*}}modernize-loop-convert,modernize-use-using,llvm-qualified-auto +// CHECK-CHILD4: Checks: modernize-loop-convert,modernize-use-using,llvm-qualified-auto // CHECK-CHILD4-DAG: llvm-qualified-auto.AddConstToQualified: 'true' // CHECK-CHILD4-DAG: modernize-loop-convert.MaxCopySize: '20' // CHECK-CHILD4-DAG: modernize-loop-convert.MinConfidence: reasonable @@ -43,14 +43,14 @@ // RUN: CheckOptions: {modernize-loop-convert.MaxCopySize: 21}}' \ // RUN: %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-CHILD5 -// CHECK-CHILD5: Checks: {{.*}}modernize-loop-convert,modernize-use-using,llvm-qualified-auto,-llvm-qualified-auto +// CHECK-CHILD5: Checks: modernize-loop-convert,modernize-use-using,llvm-qualified-auto,-llvm-qualified-auto // CHECK-CHILD5-DAG: modernize-loop-convert.MaxCopySize: '21' // CHECK-CHILD5-DAG: modernize-loop-convert.MinConfidence: reasonable // CHECK-CHILD5-DAG: modernize-use-using.IgnoreMacros: 'false' // RUN: clang-tidy -dump-config \ // RUN: --config='{InheritParentConfig: false, \ -// RUN: Checks: -llvm-qualified-auto}' \ +// RUN: Checks: "-*,-llvm-qualified-auto"}' \ // RUN: %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-CHILD6 -// CHECK-CHILD6: Checks: {{.*-llvm-qualified-auto'? *$}} +// CHECK-CHILD6: Checks: '-llvm-qualified-auto' // CHECK-CHILD6-NOT: modernize-use-using.IgnoreMacros