[PATCH] D29806: [clang-tidy] Add -path option to clang-tidy-diff.py

Ehsan Akhgari via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 9 18:47:42 PST 2017


ehsan created this revision.
Herald added a subscriber: JDevlieghere.

This flag allows specifying a custom path for the compilation
database.  Unfortunately we can't use the -p flag like other
clang-tidy tools because it's already taken.


https://reviews.llvm.org/D29806

Files:
  clang-tidy/tool/clang-tidy-diff.py
  test/clang-tidy/clang-tidy-diff.cpp


Index: test/clang-tidy/clang-tidy-diff.cpp
===================================================================
--- test/clang-tidy/clang-tidy-diff.cpp
+++ test/clang-tidy/clang-tidy-diff.cpp
@@ -2,6 +2,9 @@
 // RUN: clang-tidy -checks=-*,modernize-use-override %t.cpp -- -std=c++11 | FileCheck -check-prefix=CHECK-SANITY %s
 // RUN: not diff -U0 %s %t.cpp | %clang_tidy_diff -checks=-*,modernize-use-override -- -std=c++11 2>&1 | FileCheck %s
 // RUN: not diff -U0 %s %t.cpp | %clang_tidy_diff -checks=-*,modernize-use-override -quiet -- -std=c++11 2>&1 | FileCheck -check-prefix=CHECK-QUIET %s
+// RUN: mkdir -p %T/compilation-database-test/
+// RUN: echo '[{"directory": "%T", "command": "clang++ -o test.o -std=c++11 %t.cpp", "file": "%t.cpp"}]' > %T/compilation-database-test/compile_commands.json
+// RUN: not diff -U0 %s %t.cpp | %clang_tidy_diff -checks=-*,modernize-use-override -path %T/compilation-database-test 2>&1 | FileCheck -check-prefix=CHECK %s
 struct A {
   virtual void f() {}
   virtual void g() {}
Index: clang-tidy/tool/clang-tidy-diff.py
===================================================================
--- clang-tidy/tool/clang-tidy-diff.py
+++ clang-tidy/tool/clang-tidy-diff.py
@@ -26,11 +26,23 @@
 
 import argparse
 import json
+import os
 import re
 import subprocess
 import sys
 
 
+def find_compilation_database(path):
+  """Adjusts the directory until a compilation database is found."""
+  result = './'
+  while not os.path.isfile(os.path.join(result, path)):
+    if os.path.realpath(result) == '/':
+      print 'Error: could not find compilation database.'
+      sys.exit(1)
+    result += '../'
+  return os.path.realpath(result)
+
+
 def main():
   parser = argparse.ArgumentParser(description=
                                    'Run clang-tidy against changed files, and '
@@ -55,6 +67,8 @@
                       help='checks filter, when not specified, use clang-tidy '
                       'default',
                       default='')
+  parser.add_argument('-path', dest='build_path',
+                      help='Path used to read a compile command database.')
   parser.add_argument('-extra-arg', dest='extra_arg',
                       action='append', default=[],
                       help='Additional argument to append to the compiler '
@@ -73,6 +87,14 @@
 
   args = parser.parse_args(argv)
 
+  db_path = 'compile_commands.json'
+
+  if args.build_path is not None:
+    build_path = args.build_path
+  else:
+    # Find our database
+    build_path = find_compilation_database(db_path)
+
   # Extract changed lines for each file.
   filename = None
   lines_by_file = {}
@@ -124,6 +146,7 @@
     command.append('-checks=' + quote + args.checks + quote)
   if args.quiet:
     command.append('-quiet')
+  command.append('-p=%s' % build_path)
   command.extend(lines_by_file.keys())
   for arg in args.extra_arg:
       command.append('-extra-arg=%s' % arg)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29806.87938.patch
Type: text/x-patch
Size: 2923 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170210/293cc171/attachment-0001.bin>


More information about the cfe-commits mailing list