diff --git a/pre_commit_hooks/check_builtin_literals.py b/pre_commit_hooks/check_builtin_literals.py
index 874c68c..4ddaa8c 100644
--- a/pre_commit_hooks/check_builtin_literals.py
+++ b/pre_commit_hooks/check_builtin_literals.py
@@ -21,22 +21,23 @@
 }
 
 
-BuiltinTypeCall = collections.namedtuple('BuiltinTypeCall', ['name', 'line', 'column'])
+Call = collections.namedtuple('Call', ['name', 'line', 'column'])
 
 
-class BuiltinTypeVisitor(ast.NodeVisitor):
+class Visitor(ast.NodeVisitor):
     def __init__(self, ignore=None, allow_dict_kwargs=True):
         # type: (Optional[Sequence[str]], bool) -> None
-        self.builtin_type_calls = []  # type: List[BuiltinTypeCall]
+        self.builtin_type_calls = []  # type: List[Call]
         self.ignore = set(ignore) if ignore else set()
         self.allow_dict_kwargs = allow_dict_kwargs
 
     def _check_dict_call(self, node):  # type: (ast.Call) -> bool
-
-        return self.allow_dict_kwargs and (getattr(node, 'kwargs', None) or getattr(node, 'keywords', None))
+        return (
+            self.allow_dict_kwargs and
+            (getattr(node, 'kwargs', None) or getattr(node, 'keywords', None))
+        )
 
     def visit_Call(self, node):  # type: (ast.Call) -> None
-
         if not isinstance(node.func, ast.Name):
             # Ignore functions that are object attributes (`foo.bar()`).
             # Assume that if the user calls `builtins.list()`, they know what
@@ -49,15 +50,15 @@
         elif node.args:
             return
         self.builtin_type_calls.append(
-            BuiltinTypeCall(node.func.id, node.lineno, node.col_offset),
+            Call(node.func.id, node.lineno, node.col_offset),
         )
 
 
-def check_file_for_builtin_type_constructors(filename, ignore=None, allow_dict_kwargs=True):
-    # type: (str, Optional[Sequence[str]], bool) -> List[BuiltinTypeCall]
+def check_file(filename, ignore=None, allow_dict_kwargs=True):
+    # type: (str, Optional[Sequence[str]], bool) -> List[Call]
     with open(filename, 'rb') as f:
         tree = ast.parse(f.read(), filename=filename)
-    visitor = BuiltinTypeVisitor(ignore=ignore, allow_dict_kwargs=allow_dict_kwargs)
+    visitor = Visitor(ignore=ignore, allow_dict_kwargs=allow_dict_kwargs)
     visitor.visit(tree)
     return visitor.builtin_type_calls
 
@@ -73,14 +74,17 @@
 
     mutex = parser.add_mutually_exclusive_group(required=False)
     mutex.add_argument('--allow-dict-kwargs', action='store_true')
-    mutex.add_argument('--no-allow-dict-kwargs', dest='allow_dict_kwargs', action='store_false')
+    mutex.add_argument(
+        '--no-allow-dict-kwargs',
+        dest='allow_dict_kwargs', action='store_false',
+    )
     mutex.set_defaults(allow_dict_kwargs=True)
 
     args = parser.parse_args(argv)
 
     rc = 0
     for filename in args.filenames:
-        calls = check_file_for_builtin_type_constructors(
+        calls = check_file(
             filename,
             ignore=args.ignore,
             allow_dict_kwargs=args.allow_dict_kwargs,
@@ -89,7 +93,8 @@
             rc = rc or 1
         for call in calls:
             print(
-                '{filename}:{call.line}:{call.column} - Replace {call.name}() with {replacement}'.format(
+                '{filename}:{call.line}:{call.column}: '
+                'replace {call.name}() with {replacement}'.format(
                     filename=filename,
                     call=call,
                     replacement=BUILTIN_TYPES[call.name],
diff --git a/pre_commit_hooks/check_executables_have_shebangs.py b/pre_commit_hooks/check_executables_have_shebangs.py
index c936a5d..4db2f9f 100644
--- a/pre_commit_hooks/check_executables_have_shebangs.py
+++ b/pre_commit_hooks/check_executables_have_shebangs.py
@@ -18,7 +18,8 @@
         print(
             '{path}: marked executable but has no (or invalid) shebang!\n'
             "  If it isn't supposed to be executable, try: chmod -x {quoted}\n"
-            '  If it is supposed to be executable, double-check its shebang.'.format(
+            '  If it is supposed to be executable, double-check its shebang.'
+            .format(
                 path=path,
                 quoted=pipes.quote(path),
             ),
diff --git a/pre_commit_hooks/check_json.py b/pre_commit_hooks/check_json.py
index b939350..f26e0a5 100644
--- a/pre_commit_hooks/check_json.py
+++ b/pre_commit_hooks/check_json.py
@@ -10,7 +10,7 @@
 
 def main(argv=None):  # type: (Optional[Sequence[str]]) -> int
     parser = argparse.ArgumentParser()
-    parser.add_argument('filenames', nargs='*', help='JSON filenames to check.')
+    parser.add_argument('filenames', nargs='*', help='Filenames to check.')
     args = parser.parse_args(argv)
 
     retval = 0
diff --git a/pre_commit_hooks/check_yaml.py b/pre_commit_hooks/check_yaml.py
index b638684..c8665aa 100644
--- a/pre_commit_hooks/check_yaml.py
+++ b/pre_commit_hooks/check_yaml.py
@@ -50,7 +50,7 @@
             'Implies --allow-multiple-documents'
         ),
     )
-    parser.add_argument('filenames', nargs='*', help='Yaml filenames to check.')
+    parser.add_argument('filenames', nargs='*', help='Filenames to check.')
     args = parser.parse_args(argv)
 
     load_fn = LOAD_FNS[Key(multi=args.multi, unsafe=args.unsafe)]
diff --git a/pre_commit_hooks/detect_aws_credentials.py b/pre_commit_hooks/detect_aws_credentials.py
index 3c87d11..da80ab4 100644
--- a/pre_commit_hooks/detect_aws_credentials.py
+++ b/pre_commit_hooks/detect_aws_credentials.py
@@ -12,16 +12,16 @@
 from six.moves import configparser
 
 
-def get_aws_credential_files_from_env():  # type: () -> Set[str]
+def get_aws_cred_files_from_env():  # type: () -> Set[str]
     """Extract credential file paths from environment variables."""
-    files = set()
-    for env_var in (
-        'AWS_CONFIG_FILE', 'AWS_CREDENTIAL_FILE', 'AWS_SHARED_CREDENTIALS_FILE',
-        'BOTO_CONFIG',
-    ):
-        if env_var in os.environ:
-            files.add(os.environ[env_var])
-    return files
+    return {
+        os.environ[env_var]
+        for env_var in (
+            'AWS_CONFIG_FILE', 'AWS_CREDENTIAL_FILE',
+            'AWS_SHARED_CREDENTIALS_FILE', 'BOTO_CONFIG',
+        )
+        if env_var in os.environ
+    }
 
 
 def get_aws_secrets_from_env():  # type: () -> Set[str]
@@ -115,7 +115,7 @@
 
     # Add the credentials files configured via environment variables to the set
     # of files to to gather AWS secrets from.
-    credential_files |= get_aws_credential_files_from_env()
+    credential_files |= get_aws_cred_files_from_env()
 
     keys = set()  # type: Set[str]
     for credential_file in credential_files:
diff --git a/pre_commit_hooks/fix_encoding_pragma.py b/pre_commit_hooks/fix_encoding_pragma.py
index b0b5c8e..dbe9c6c 100644
--- a/pre_commit_hooks/fix_encoding_pragma.py
+++ b/pre_commit_hooks/fix_encoding_pragma.py
@@ -110,7 +110,9 @@
 
 
 def main(argv=None):  # type: (Optional[Sequence[str]]) -> int
-    parser = argparse.ArgumentParser('Fixes the encoding pragma of python files')
+    parser = argparse.ArgumentParser(
+        'Fixes the encoding pragma of python files',
+    )
     parser.add_argument('filenames', nargs='*', help='Filenames to fix')
     parser.add_argument(
         '--pragma', default=DEFAULT_PRAGMA, type=_normalize_pragma,
diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py
index de7f8d7..e734ca8 100644
--- a/pre_commit_hooks/pretty_format_json.py
+++ b/pre_commit_hooks/pretty_format_json.py
@@ -15,8 +15,9 @@
 from six import text_type
 
 
-def _get_pretty_format(contents, indent, ensure_ascii=True, sort_keys=True, top_keys=()):
-    # type: (str, str, bool, bool, Sequence[str]) -> str
+def _get_pretty_format(
+        contents, indent, ensure_ascii=True, sort_keys=True, top_keys=(),
+):  # type: (str, str, bool, bool, Sequence[str]) -> str
     def pairs_first(pairs):
         # type: (Sequence[Tuple[str, str]]) -> Mapping[str, str]
         before = [pair for pair in pairs if pair[0] in top_keys]
@@ -29,7 +30,8 @@
         json.loads(contents, object_pairs_hook=pairs_first),
         indent=indent,
         ensure_ascii=ensure_ascii,
-        separators=(',', ': '),  # Workaround for https://bugs.python.org/issue16333
+        # Workaround for https://bugs.python.org/issue16333
+        separators=(',', ': '),
     )
     # Ensure unicode (Py2) and add the newline that dumps does not end with.
     return text_type(json_pretty) + '\n'
@@ -75,7 +77,10 @@
         action='store_true',
         dest='no_ensure_ascii',
         default=False,
-        help='Do NOT convert non-ASCII characters to Unicode escape sequences (\\uXXXX)',
+        help=(
+            'Do NOT convert non-ASCII characters to Unicode escape sequences '
+            '(\\uXXXX)'
+        ),
     )
     parser.add_argument(
         '--no-sort-keys',
diff --git a/pre_commit_hooks/requirements_txt_fixer.py b/pre_commit_hooks/requirements_txt_fixer.py
index 3f85a17..4575975 100644
--- a/pre_commit_hooks/requirements_txt_fixer.py
+++ b/pre_commit_hooks/requirements_txt_fixer.py
@@ -61,7 +61,10 @@
         # If we see a newline before any requirements, then this is a
         # top of file comment.
         if len(requirements) == 1 and line.strip() == b'':
-            if len(requirement.comments) and requirement.comments[0].startswith(b'#'):
+            if (
+                    len(requirement.comments) and
+                    requirement.comments[0].startswith(b'#')
+            ):
                 requirement.value = b'\n'
             else:
                 requirement.comments.append(line)
diff --git a/pre_commit_hooks/trailing_whitespace_fixer.py b/pre_commit_hooks/trailing_whitespace_fixer.py
index 4fe7975..b2b6418 100644
--- a/pre_commit_hooks/trailing_whitespace_fixer.py
+++ b/pre_commit_hooks/trailing_whitespace_fixer.py
@@ -60,12 +60,12 @@
     if '' in md_args:
         parser.error('--markdown-linebreak-ext requires a non-empty argument')
     all_markdown = '*' in md_args
-    # normalize all extensions; split at ',', lowercase, and force 1 leading '.'
+    # normalize extensions; split at ',', lowercase, and force 1 leading '.'
     md_exts = [
         '.' + x.lower().lstrip('.') for x in ','.join(md_args).split(',')
     ]
 
-    # reject probable "eaten" filename as extension (skip leading '.' with [1:])
+    # reject probable "eaten" filename as extension: skip leading '.' with [1:]
     for ext in md_exts:
         if any(c in ext[1:] for c in r'./\:'):
             parser.error(
diff --git a/setup.py b/setup.py
index 756500b..d61244f 100644
--- a/setup.py
+++ b/setup.py
@@ -32,34 +32,34 @@
     entry_points={
         'console_scripts': [
             'autopep8-wrapper = pre_commit_hooks.autopep8_wrapper:main',
-            'check-added-large-files = pre_commit_hooks.check_added_large_files:main',
+            'check-added-large-files = pre_commit_hooks.check_added_large_files:main',  # noqa: E501
             'check-ast = pre_commit_hooks.check_ast:main',
-            'check-builtin-literals = pre_commit_hooks.check_builtin_literals:main',
-            'check-byte-order-marker = pre_commit_hooks.check_byte_order_marker:main',
+            'check-builtin-literals = pre_commit_hooks.check_builtin_literals:main',  # noqa: E501
+            'check-byte-order-marker = pre_commit_hooks.check_byte_order_marker:main',  # noqa: E501
             'check-case-conflict = pre_commit_hooks.check_case_conflict:main',
-            'check-docstring-first = pre_commit_hooks.check_docstring_first:main',
-            'check-executables-have-shebangs = pre_commit_hooks.check_executables_have_shebangs:main',
+            'check-docstring-first = pre_commit_hooks.check_docstring_first:main',  # noqa: E501
+            'check-executables-have-shebangs = pre_commit_hooks.check_executables_have_shebangs:main',  # noqa: E501
             'check-json = pre_commit_hooks.check_json:main',
-            'check-merge-conflict = pre_commit_hooks.check_merge_conflict:main',
+            'check-merge-conflict = pre_commit_hooks.check_merge_conflict:main',  # noqa: E501
             'check-symlinks = pre_commit_hooks.check_symlinks:main',
-            'check-vcs-permalinks = pre_commit_hooks.check_vcs_permalinks:main',
+            'check-vcs-permalinks = pre_commit_hooks.check_vcs_permalinks:main',  # noqa: E501
             'check-xml = pre_commit_hooks.check_xml:main',
             'check-yaml = pre_commit_hooks.check_yaml:main',
-            'debug-statement-hook = pre_commit_hooks.debug_statement_hook:main',
-            'detect-aws-credentials = pre_commit_hooks.detect_aws_credentials:main',
+            'debug-statement-hook = pre_commit_hooks.debug_statement_hook:main',  # noqa: E501
+            'detect-aws-credentials = pre_commit_hooks.detect_aws_credentials:main',  # noqa: E501
             'detect-private-key = pre_commit_hooks.detect_private_key:main',
             'double-quote-string-fixer = pre_commit_hooks.string_fixer:main',
             'end-of-file-fixer = pre_commit_hooks.end_of_file_fixer:main',
-            'file-contents-sorter = pre_commit_hooks.file_contents_sorter:main',
+            'file-contents-sorter = pre_commit_hooks.file_contents_sorter:main',  # noqa: E501
             'fix-encoding-pragma = pre_commit_hooks.fix_encoding_pragma:main',
-            'forbid-new-submodules = pre_commit_hooks.forbid_new_submodules:main',
+            'forbid-new-submodules = pre_commit_hooks.forbid_new_submodules:main',  # noqa: E501
             'mixed-line-ending = pre_commit_hooks.mixed_line_ending:main',
             'name-tests-test = pre_commit_hooks.tests_should_end_in_test:main',
             'no-commit-to-branch = pre_commit_hooks.no_commit_to_branch:main',
             'pretty-format-json = pre_commit_hooks.pretty_format_json:main',
-            'requirements-txt-fixer = pre_commit_hooks.requirements_txt_fixer:main',
+            'requirements-txt-fixer = pre_commit_hooks.requirements_txt_fixer:main',  # noqa: E501
             'sort-simple-yaml = pre_commit_hooks.sort_simple_yaml:main',
-            'trailing-whitespace-fixer = pre_commit_hooks.trailing_whitespace_fixer:main',
+            'trailing-whitespace-fixer = pre_commit_hooks.trailing_whitespace_fixer:main',  # noqa: E501
         ],
     },
 )
diff --git a/tests/check_builtin_literals_test.py b/tests/check_builtin_literals_test.py
index d4ac30f..dbb9cc4 100644
--- a/tests/check_builtin_literals_test.py
+++ b/tests/check_builtin_literals_test.py
@@ -2,9 +2,9 @@
 
 import pytest
 
-from pre_commit_hooks.check_builtin_literals import BuiltinTypeCall
-from pre_commit_hooks.check_builtin_literals import BuiltinTypeVisitor
+from pre_commit_hooks.check_builtin_literals import Call
 from pre_commit_hooks.check_builtin_literals import main
+from pre_commit_hooks.check_builtin_literals import Visitor
 
 BUILTIN_CONSTRUCTORS = '''\
 from six.moves import builtins
@@ -38,7 +38,7 @@
 
 @pytest.fixture
 def visitor():
-    return BuiltinTypeVisitor()
+    return Visitor()
 
 
 @pytest.mark.parametrize(
@@ -48,35 +48,35 @@
         ('x[0]()', []),
         # complex
         ("0j", []),
-        ("complex()", [BuiltinTypeCall('complex', 1, 0)]),
+        ("complex()", [Call('complex', 1, 0)]),
         ("complex(0, 0)", []),
         ("complex('0+0j')", []),
         ('builtins.complex()', []),
         # float
         ("0.0", []),
-        ("float()", [BuiltinTypeCall('float', 1, 0)]),
+        ("float()", [Call('float', 1, 0)]),
         ("float('0.0')", []),
         ('builtins.float()', []),
         # int
         ("0", []),
-        ("int()", [BuiltinTypeCall('int', 1, 0)]),
+        ("int()", [Call('int', 1, 0)]),
         ("int('0')", []),
         ('builtins.int()', []),
         # list
         ("[]", []),
-        ("list()", [BuiltinTypeCall('list', 1, 0)]),
+        ("list()", [Call('list', 1, 0)]),
         ("list('abc')", []),
         ("list([c for c in 'abc'])", []),
         ("list(c for c in 'abc')", []),
         ('builtins.list()', []),
         # str
         ("''", []),
-        ("str()", [BuiltinTypeCall('str', 1, 0)]),
+        ("str()", [Call('str', 1, 0)]),
         ("str('0')", []),
         ('builtins.str()', []),
         # tuple
         ("()", []),
-        ("tuple()", [BuiltinTypeCall('tuple', 1, 0)]),
+        ("tuple()", [Call('tuple', 1, 0)]),
         ("tuple('abc')", []),
         ("tuple([c for c in 'abc'])", []),
         ("tuple(c for c in 'abc')", []),
@@ -92,7 +92,7 @@
     ('expression', 'calls'),
     [
         ("{}", []),
-        ("dict()", [BuiltinTypeCall('dict', 1, 0)]),
+        ("dict()", [Call('dict', 1, 0)]),
         ("dict(a=1, b=2, c=3)", []),
         ("dict(**{'a': 1, 'b': 2, 'c': 3})", []),
         ("dict([(k, v) for k, v in [('a', 1), ('b', 2), ('c', 3)]])", []),
@@ -108,20 +108,22 @@
 @pytest.mark.parametrize(
     ('expression', 'calls'),
     [
-        ("dict()", [BuiltinTypeCall('dict', 1, 0)]),
-        ("dict(a=1, b=2, c=3)", [BuiltinTypeCall('dict', 1, 0)]),
-        ("dict(**{'a': 1, 'b': 2, 'c': 3})", [BuiltinTypeCall('dict', 1, 0)]),
+        ("dict()", [Call('dict', 1, 0)]),
+        ("dict(a=1, b=2, c=3)", [Call('dict', 1, 0)]),
+        ("dict(**{'a': 1, 'b': 2, 'c': 3})", [Call('dict', 1, 0)]),
         ('builtins.dict()', []),
     ],
 )
 def test_dict_no_allow_kwargs_exprs(expression, calls):
-    visitor = BuiltinTypeVisitor(allow_dict_kwargs=False)
+    visitor = Visitor(allow_dict_kwargs=False)
     visitor.visit(ast.parse(expression))
     assert visitor.builtin_type_calls == calls
 
 
 def test_ignore_constructors():
-    visitor = BuiltinTypeVisitor(ignore=('complex', 'dict', 'float', 'int', 'list', 'str', 'tuple'))
+    visitor = Visitor(ignore=(
+        'complex', 'dict', 'float', 'int', 'list', 'str', 'tuple',
+    ))
     visitor.visit(ast.parse(BUILTIN_CONSTRUCTORS))
     assert visitor.builtin_type_calls == []
 
diff --git a/tests/detect_aws_credentials_test.py b/tests/detect_aws_credentials_test.py
index f1bd7d4..31ba33e 100644
--- a/tests/detect_aws_credentials_test.py
+++ b/tests/detect_aws_credentials_test.py
@@ -1,7 +1,7 @@
 import pytest
 from mock import patch
 
-from pre_commit_hooks.detect_aws_credentials import get_aws_credential_files_from_env
+from pre_commit_hooks.detect_aws_credentials import get_aws_cred_files_from_env
 from pre_commit_hooks.detect_aws_credentials import get_aws_secrets_from_env
 from pre_commit_hooks.detect_aws_credentials import get_aws_secrets_from_file
 from pre_commit_hooks.detect_aws_credentials import main
@@ -35,9 +35,8 @@
     ),
 )
 def test_get_aws_credentials_file_from_env(env_vars, values):
-    """Test that reading credential files names from environment variables works."""
     with patch.dict('os.environ', env_vars, clear=True):
-        assert get_aws_credential_files_from_env() == values
+        assert get_aws_cred_files_from_env() == values
 
 
 @pytest.mark.parametrize(
@@ -107,12 +106,11 @@
     ),
 )
 def test_detect_aws_credentials(filename, expected_retval):
-    """Test if getting configured AWS secrets from files to be checked in works."""
-
     # with a valid credentials file
     ret = main((
         get_resource_path(filename),
-        "--credentials-file=testing/resources/aws_config_with_multiple_sections.ini",
+        '--credentials-file',
+        'testing/resources/aws_config_with_multiple_sections.ini',
     ))
     assert ret == expected_retval
 
@@ -138,8 +136,9 @@
 
 @patch('pre_commit_hooks.detect_aws_credentials.get_aws_secrets_from_file')
 @patch('pre_commit_hooks.detect_aws_credentials.get_aws_secrets_from_env')
-def test_non_existent_credentials_with_allow_flag(mock_secrets_env, mock_secrets_file):
-    """Test behavior with no configured AWS secrets and flag to allow when missing."""
+def test_non_existent_credentials_with_allow_flag(
+        mock_secrets_env, mock_secrets_file,
+):
     mock_secrets_env.return_value = set()
     mock_secrets_file.return_value = set()
     ret = main((
diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py
index 8d82d74..bf7a16f 100644
--- a/tests/pretty_format_json_test.py
+++ b/tests/pretty_format_json_test.py
@@ -57,7 +57,10 @@
 
 
 def test_non_ascii_main():
-    ret = main(['--no-ensure-ascii', get_resource_path('non_ascii_pretty_formatted_json.json')])
+    ret = main((
+        '--no-ensure-ascii',
+        get_resource_path('non_ascii_pretty_formatted_json.json'),
+    ))
     assert ret == 0
 
 
@@ -79,17 +82,23 @@
 
 
 def test_orderfile_get_pretty_format():
-    ret = main(['--top-keys=alist', get_resource_path('pretty_formatted_json.json')])
+    ret = main((
+        '--top-keys=alist', get_resource_path('pretty_formatted_json.json'),
+    ))
     assert ret == 0
 
 
 def test_not_orderfile_get_pretty_format():
-    ret = main(['--top-keys=blah', get_resource_path('pretty_formatted_json.json')])
+    ret = main((
+        '--top-keys=blah', get_resource_path('pretty_formatted_json.json'),
+    ))
     assert ret == 1
 
 
 def test_top_sorted_get_pretty_format():
-    ret = main(['--top-keys=01-alist,alist', get_resource_path('top_sorted_json.json')])
+    ret = main((
+        '--top-keys=01-alist,alist', get_resource_path('top_sorted_json.json'),
+    ))
     assert ret == 0
 
 
diff --git a/tests/requirements_txt_fixer_test.py b/tests/requirements_txt_fixer_test.py
index b3a7942..c7c6e47 100644
--- a/tests/requirements_txt_fixer_test.py
+++ b/tests/requirements_txt_fixer_test.py
@@ -15,13 +15,25 @@
         (b'foo\n# comment at end\n', PASS, b'foo\n# comment at end\n'),
         (b'foo\nbar\n', FAIL, b'bar\nfoo\n'),
         (b'bar\nfoo\n', PASS, b'bar\nfoo\n'),
-        (b'#comment1\nfoo\n#comment2\nbar\n', FAIL, b'#comment2\nbar\n#comment1\nfoo\n'),
-        (b'#comment1\nbar\n#comment2\nfoo\n', PASS, b'#comment1\nbar\n#comment2\nfoo\n'),
+        (
+            b'#comment1\nfoo\n#comment2\nbar\n',
+            FAIL,
+            b'#comment2\nbar\n#comment1\nfoo\n',
+        ),
+        (
+            b'#comment1\nbar\n#comment2\nfoo\n',
+            PASS,
+            b'#comment1\nbar\n#comment2\nfoo\n',
+        ),
         (b'#comment\n\nfoo\nbar\n', FAIL, b'#comment\n\nbar\nfoo\n'),
         (b'#comment\n\nbar\nfoo\n', PASS, b'#comment\n\nbar\nfoo\n'),
         (b'\nfoo\nbar\n', FAIL, b'bar\n\nfoo\n'),
         (b'\nbar\nfoo\n', PASS, b'\nbar\nfoo\n'),
-        (b'pyramid==1\npyramid-foo==2\n', PASS, b'pyramid==1\npyramid-foo==2\n'),
+        (
+            b'pyramid==1\npyramid-foo==2\n',
+            PASS,
+            b'pyramid==1\npyramid-foo==2\n',
+        ),
         (b'ocflib\nDjango\nPyMySQL\n', FAIL, b'Django\nocflib\nPyMySQL\n'),
         (
             b'-e git+ssh://git_url@tag#egg=ocflib\nDjango\nPyMySQL\n',
diff --git a/tests/tests_should_end_in_test_test.py b/tests/tests_should_end_in_test_test.py
index 4eb98e7..2acfa17 100644
--- a/tests/tests_should_end_in_test_test.py
+++ b/tests/tests_should_end_in_test_test.py
@@ -12,7 +12,10 @@
 
 
 def test_main_django_all_pass():
-    ret = main(['--django', 'tests.py', 'test_foo.py', 'test_bar.py', 'tests/test_baz.py'])
+    ret = main((
+        '--django', 'tests.py', 'test_foo.py', 'test_bar.py',
+        'tests/test_baz.py',
+    ))
     assert ret == 0
 
 
diff --git a/tox.ini b/tox.ini
index d1e6a79..3020bc0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -17,8 +17,5 @@
     pre-commit install -f --install-hooks
     pre-commit run --all-files
 
-[flake8]
-max-line-length=131
-
 [pep8]
 ignore=E265,E501,W504
