[PATCH] clang-format-diff.py: Support more filename extensions

Alp Toker alp at nuanti.com
Mon Dec 9 13:01:50 PST 2013


Hi Daniel,

The attached patch adds support for more filename extensions based on 
the list in the clang frontend plus JavaScript.

Also adds a -regex option so users can override defaults if they have 
unusual file extensions or want to format everything in the diff.

Keeping with tradition the flag is modelled on Unix conventions, this 
time matching the semantics of find(1) -regex.

Alp.

-- 
http://www.nuanti.com
the browser experts

-------------- next part --------------
diff --git a/docs/ClangFormat.rst b/docs/ClangFormat.rst
index d760bbb..3f8499b 100644
--- a/docs/ClangFormat.rst
+++ b/docs/ClangFormat.rst
@@ -158,17 +158,18 @@ a unified diff and reformats all contained lines with :program:`clang-format`.
 
 .. code-block:: console
 
-  usage: clang-format-diff.py [-h] [-i] [-p P] [-style STYLE]
+  usage: clang-format-diff.py [-h] [-i] [-p NUM] [-regex PATTERN] [-style STYLE]
 
   Reformat changed lines in diff. Without -i option just output the diff that
   would be introduced.
 
   optional arguments:
-    -h, --help    show this help message and exit
-    -i            apply edits to files instead of displaying a diff
-    -p P          strip the smallest prefix containing P slashes
-    -style STYLE  formatting style to apply (LLVM, Google, Chromium, Mozilla,
-                  WebKit)
+    -h, --help      show this help message and exit
+    -i              apply edits to files instead of displaying a diff
+    -p NUM          strip the smallest prefix containing P slashes
+    -regex PATTERN  custom pattern selecting file paths to reformat
+    -style STYLE    formatting style to apply (LLVM, Google, Chromium, Mozilla,
+                    WebKit)
 
 So to reformat all the lines in the latest :program:`git` commit, just do:
 
diff --git a/tools/clang-format/clang-format-diff.py b/tools/clang-format/clang-format-diff.py
index a62cae8..23d3da9 100755
--- a/tools/clang-format/clang-format-diff.py
+++ b/tools/clang-format/clang-format-diff.py
@@ -41,8 +41,11 @@ def main():
                                    'introduced.')
   parser.add_argument('-i', action='store_true', default=False,
                       help='apply edits to files instead of displaying a diff')
-  parser.add_argument('-p', default=0,
+  parser.add_argument('-p', metavar='NUM', default=0,
                       help='strip the smallest prefix containing P slashes')
+  parser.add_argument('-regex', metavar='PATTERN', default=
+                      r'.*\.(cpp|cc|CPP|C|c\+\+|cxx|c|h|hpp|m|mm|td|inc|js)',
+                      help='custom pattern selecting file paths to reformat')
   parser.add_argument(
       '-style',
       help=
@@ -59,9 +62,7 @@ def main():
     if filename == None:
       continue
 
-    # FIXME: Add other types containing C++/ObjC code.
-    if not (filename.endswith(".cpp") or filename.endswith(".cc") or
-            filename.endswith(".h")):
+    if not re.match(args.regex, filename):
       continue
 
     match = re.search('^@@.*\+(\d+)(,(\d+))?', line)


More information about the cfe-commits mailing list