Add trailing whitespace fixer.
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 89bae15..e5ccd34 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,11 +1,14 @@
 
 -
     repo: git@github.com:pre-commit/pre-commit-hooks
-    sha: 5e713f8878b7d100c0e059f8cc34be4fc2e8f897
+    sha: 10c042c99c061b90e4ea11d52e3c5fc93f94b373
     hooks:
         -
             id: pyflakes
             files: '\.py$'
+        -
+            id: debug-statements
+            files: '\.py$'
 
 -
     repo: git@github.com:pre-commit/pre-commit
diff --git a/manifest.yaml b/manifest.yaml
index f7e7e47..9202184 100644
--- a/manifest.yaml
+++ b/manifest.yaml
@@ -11,3 +11,9 @@
     description: This hook checks that debug statements (pdb, ipdb, pudb) are not imported on commit.
     entry: debug-statement-hook
     language: python
+-
+    id: trailing-whitespace
+    name: Trim Trailing Whitespace
+    description: This hook trims trailing whitespace.
+    entry: trailing-whitespace-fixer
+    language: python
diff --git a/pre_commit_hooks/debug_statement_hook.py b/pre_commit_hooks/debug_statement_hook.py
index 7e088ef..5f16727 100644
--- a/pre_commit_hooks/debug_statement_hook.py
+++ b/pre_commit_hooks/debug_statement_hook.py
@@ -46,7 +46,7 @@
 def debug_statement_hook(argv):
     parser = argparse.ArgumentParser()
     parser.add_argument('filenames', nargs='*', help='Filenames to run')
-    args = parser.parse_args()
+    args = parser.parse_args(argv)
 
     retv = 0
     for filename in args.filenames:
diff --git a/pre_commit_hooks/trailing_whitespace_fixer.py b/pre_commit_hooks/trailing_whitespace_fixer.py
new file mode 100644
index 0000000..5038e6e
--- /dev/null
+++ b/pre_commit_hooks/trailing_whitespace_fixer.py
@@ -0,0 +1,30 @@
+
+import argparse
+import sys
+from plumbum import local
+
+
+def fix_trailing_whitespace(argv):
+    parser = argparse.ArgumentParser()
+    parser.add_argument('filenames', nargs='*', help='Filenames to fix')
+    args = parser.parse_args(argv)
+
+    bad_whitespace_files = filter(bool, local['grep'][
+        ('-l', '[[:space:]]$') + tuple(args.filenames)
+    ](retcode=None).splitlines())
+
+    if bad_whitespace_files:
+        for bad_whitespace_file in bad_whitespace_files:
+            print 'Fixing {0}'.format(bad_whitespace_file)
+            local['sed']['-i', '-e', 's/[[:space:]]*$//', bad_whitespace_file]()
+        return 1
+    else:
+        return 0
+
+
+def entry():
+    fix_trailing_whitespace(sys.argv[1:])
+
+
+if __name__ == '__main__':
+    sys.exit(entry())
diff --git a/requirements.txt b/requirements.txt
index 0c043a5..118c89c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,5 @@
 argparse
+plumbum
 pyflakes
 simplejson
 
diff --git a/setup.py b/setup.py
index ccca970..ba930a3 100644
--- a/setup.py
+++ b/setup.py
@@ -7,12 +7,14 @@
     packages=find_packages('.', exclude=('tests*', 'testing*')),
     install_requires=[
         'argparse',
+        'plumbum',
         'pyflakes',
         'simplejson',
     ],
     entry_points={
         'console_scripts': [
             'debug-statement-hook = pre_commit_hooks.debug_statement_hook:entry',
+            'trailing-whitespace-fixer = pre_commit_hooks.railing_whitespace_fixer:entry',
         ],
     },
 )