Add an --extensions flag to change valid file extensions.

The valid cpplint extensions are .h, .cpp, .cc, .cuh and .cu. It is
common for .hpp to be a valid extension to check, the --extensions flag
allows the user to specify which extensions they think are valid.

Patch by Matt Clarkson <mattyclarkson@gmail.com>
diff --git a/cpplint/cpplint.py b/cpplint/cpplint.py
index b5493b6..76d0735 100755
--- a/cpplint/cpplint.py
+++ b/cpplint/cpplint.py
@@ -71,7 +71,8 @@
   suppresses errors of all categories on that line.
 
   The files passed in will be linted; at least one file must be provided.
-  Linted extensions are .cc, .cpp, and .h.  Other file types will be ignored.
+  Default linted extensions are .cc, .cpp, .cu, .cuh and .h.  Change the
+  extensions with the --extensions flag.
 
   Flags:
 
@@ -126,6 +127,12 @@
 
       Examples:
         --linelength=120
+
+    extensions=extension,extension,...
+      The allowed file extensions that cpplint will check
+
+      Examples:
+        --extensions=hpp,cpp
 """
 
 # We categorize each error message we print.  Here are the categories.
@@ -440,6 +447,10 @@
 # This is set by --linelength flag.
 _line_length = 80
 
+# The allowed extensions for file names
+# This is set by --extensions flag.
+_valid_extensions = set(['cc', 'h', 'cpp', 'cu', 'cuh'])
+
 def ParseNolintSuppressions(filename, raw_line, linenum, error):
   """Updates the global list of error-suppressions.
 
@@ -4612,10 +4623,9 @@
 
   # When reading from stdin, the extension is unknown, so no cpplint tests
   # should rely on the extension.
-  valid_extensions = ['cc', 'h', 'cpp', 'cu', 'cuh']
-  if filename != '-' and file_extension not in valid_extensions:
+  if filename != '-' and file_extension not in _valid_extensions:
     sys.stderr.write('Ignoring %s; not a valid file name '
-                     '(.cc, .h, .cpp, .cu, .cuh)\n' % filename)
+                     '(%s)\n' % (filename, ', '.join(_valid_extensions)))
   else:
     ProcessFileData(filename, file_extension, lines, Error,
                     extra_check_functions)
@@ -4667,7 +4677,8 @@
                                                  'counting=',
                                                  'filter=',
                                                  'root=',
-                                                 'linelength='])
+                                                 'linelength=',
+                                                 'extensions='])
   except getopt.GetoptError:
     PrintUsage('Invalid arguments.')
 
@@ -4702,6 +4713,12 @@
           _line_length = int(val)
       except ValueError:
           PrintUsage('Line length must be digits.')
+    elif opt == '--extensions':
+      global _valid_extensions
+      try:
+          _valid_extensions = set(val.split(','))
+      except ValueError:
+          PrintUsage('Extensions must be comma seperated list.')
 
   if not filenames:
     PrintUsage('No files were specified.')