alexfh created this revision.
alexfh added a reviewer: klimek.
alexfh added a subscriber: cfe-commits.

This patch depends on http://reviews.llvm.org/D14191

http://reviews.llvm.org/D14192

Files:
  clang-tidy/ClangTidy.cpp
  clang-tidy/ClangTidyOptions.cpp
  clang-tidy/ClangTidyOptions.h
  modularize/Modularize.cpp
  test/clang-tidy/custom-diagnostics.cpp

Index: test/clang-tidy/custom-diagnostics.cpp
===================================================================
--- /dev/null
+++ test/clang-tidy/custom-diagnostics.cpp
@@ -0,0 +1,10 @@
+// RUN: clang-tidy -checks='-*,modernize-use-override,clang-diagnostic-shadow' %s -- | count 0
+// RUN: clang-tidy -checks='-*,modernize-use-override,clang-diagnostic-shadow' \
+// RUN:   -config='{ExtraArgs: ["-Wshadow"]}' %s -- \
+// RUN:   | FileCheck -implicit-check-not='{{warning:|error:}}' %s
+
+void f() {
+  int a;
+  { int a; }
+  // CHECK: :[[@LINE-1]]:9: warning: declaration shadows a local variable [clang-diagnostic-shadow]
+}
Index: modularize/Modularize.cpp
===================================================================
--- modularize/Modularize.cpp
+++ modularize/Modularize.cpp
@@ -356,7 +356,8 @@
 // if no other "-x" option is present.
 static ArgumentsAdjuster
 getModularizeArgumentsAdjuster(DependencyMap &Dependencies) {
-  return [&Dependencies](const CommandLineArguments &Args) {
+  return [&Dependencies](const CommandLineArguments &Args,
+                         StringRef /*unused*/) {
     std::string InputFile = findInputFile(Args);
     DependentsVector &FileDependents = Dependencies[InputFile];
     CommandLineArguments NewArgs(Args);
Index: clang-tidy/ClangTidyOptions.h
===================================================================
--- clang-tidy/ClangTidyOptions.h
+++ clang-tidy/ClangTidyOptions.h
@@ -83,6 +83,14 @@
 
   /// \brief Key-value mapping used to store check-specific options.
   OptionMap CheckOptions;
+
+  typedef std::vector<std::string> ArgList;
+
+  /// \brief Add extra compilation arguments to the end of the list.
+  llvm::Optional<ArgList> ExtraArgs;
+
+  /// \brief Add extra compilation arguments to the start of the list.
+  llvm::Optional<ArgList> ExtraArgsBefore;
 };
 
 /// \brief Abstract interface for retrieving various ClangTidy options.
Index: clang-tidy/ClangTidyOptions.cpp
===================================================================
--- clang-tidy/ClangTidyOptions.cpp
+++ clang-tidy/ClangTidyOptions.cpp
@@ -27,6 +27,7 @@
 LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(FileFilter)
 LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(FileFilter::LineRange)
 LLVM_YAML_IS_SEQUENCE_VECTOR(ClangTidyOptions::StringPair)
+LLVM_YAML_IS_SEQUENCE_VECTOR(std::string)
 
 namespace llvm {
 namespace yaml {
@@ -88,6 +89,8 @@
     IO.mapOptional("AnalyzeTemporaryDtors", Options.AnalyzeTemporaryDtors);
     IO.mapOptional("User", Options.User);
     IO.mapOptional("CheckOptions", NOpts->Options);
+    IO.mapOptional("ExtraArgs", Options.ExtraArgs);
+    IO.mapOptional("ExtraArgsBefore", Options.ExtraArgsBefore);
   }
 };
 
@@ -129,6 +132,10 @@
     Result.AnalyzeTemporaryDtors = Other.AnalyzeTemporaryDtors;
   if (Other.User)
     Result.User = Other.User;
+  if (Other.ExtraArgs)
+    Result.ExtraArgs = Other.ExtraArgs;
+  if (Other.ExtraArgsBefore)
+    Result.ExtraArgsBefore = Other.ExtraArgsBefore;
 
   for (const auto &KeyValue : Other.CheckOptions)
     Result.CheckOptions[KeyValue.first] = KeyValue.second;
Index: clang-tidy/ClangTidy.cpp
===================================================================
--- clang-tidy/ClangTidy.cpp
+++ clang-tidy/ClangTidy.cpp
@@ -42,6 +42,9 @@
 #include <algorithm>
 #include <utility>
 
+
+#include "llvm/ADT/StringExtras.h"
+
 using namespace clang::ast_matchers;
 using namespace clang::driver;
 using namespace clang::tooling;
@@ -376,6 +379,20 @@
              std::vector<ClangTidyError> *Errors, ProfileData *Profile) {
   ClangTool Tool(Compilations, InputFiles);
   clang::tidy::ClangTidyContext Context(std::move(OptionsProvider));
+  ArgumentsAdjuster PerFileExtraArgumentsInserter = [&Context](
+      const CommandLineArguments &Args, StringRef Filename) {
+    Context.setCurrentFile(Filename);
+    const ClangTidyOptions &Opts = Context.getOptions();
+    CommandLineArguments AdjustedArgs;
+    if (Opts.ExtraArgsBefore)
+      AdjustedArgs = *Opts.ExtraArgsBefore;
+    AdjustedArgs.insert(AdjustedArgs.begin(), Args.begin(), Args.end());
+    if (Opts.ExtraArgs)
+      AdjustedArgs.insert(AdjustedArgs.end(), Opts.ExtraArgs->begin(),
+                          Opts.ExtraArgs->end());
+    return AdjustedArgs;
+  };
+  Tool.appendArgumentsAdjuster(PerFileExtraArgumentsInserter);
   if (Profile)
     Context.setCheckProfileData(Profile);
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to