njames93 created this revision.
njames93 added reviewers: aaron.ballman, alexfh, LegalizeAdulthood.
Herald added subscribers: carlosgalvezp, xazax.hun.
Herald added a project: All.
njames93 requested review of this revision.
Herald added subscribers: cfe-commits, aheejin.
Herald added a project: clang-tools-extra.

When dumping the options, canonicalize the GlobList style options before we 
serialize them.
This improves formatting as it prevents mixup when newlines and commas are used 
in different config files as seperators.
It also removes any glob items that appear before a match all as they are 
disregarded.

Depends on D129706 <https://reviews.llvm.org/D129706>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D130005

Files:
  clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
  
clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy
  
clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy
  clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp
  clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp

Index: clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp
+++ 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 <key>: <value> 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
Index: clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/infrastructure/config-file.cpp
+++ 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
Index: clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy
===================================================================
--- clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/1/.clang-tidy
+++ 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'
Index: clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy
===================================================================
--- clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy
+++ clang-tools-extra/test/clang-tidy/infrastructure/Inputs/config-files/.clang-tidy
@@ -1,2 +1,2 @@
-Checks: 'from-parent'
+Checks: '-*,from-parent'
 HeaderFilterRegex: 'parent'
Index: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ 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<std::string> &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<ClangTidyOptions> {
   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);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to