Merge pull request #215 from pre-commit/add_trailing_comma

Use asottile/add-trailing-comma
This commit is contained in:
Anthony Sottile 2017-07-12 19:06:20 -07:00 committed by GitHub
commit ea227f024b
19 changed files with 48 additions and 43 deletions

View file

@ -23,6 +23,10 @@
- id: reorder-python-imports - id: reorder-python-imports
language_version: python2.7 language_version: python2.7
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
sha: v1.0.0 sha: v1.1.2
hooks: hooks:
- id: pyupgrade - id: pyupgrade
- repo: https://github.com/asottile/add-trailing-comma
sha: v0.3.0
hooks:
- id: add-trailing-comma

View file

@ -51,7 +51,7 @@ def main(argv=None):
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument( parser.add_argument(
'filenames', nargs='*', 'filenames', nargs='*',
help='Filenames pre-commit believes are changed.' help='Filenames pre-commit believes are changed.',
) )
parser.add_argument( parser.add_argument(
'--maxkb', type=int, default=500, '--maxkb', type=int, default=500,

View file

@ -26,7 +26,7 @@ def check_ast(argv=None):
sys.version.partition(' ')[0], sys.version.partition(' ')[0],
)) ))
print('\n{}'.format( print('\n{}'.format(
' ' + traceback.format_exc().replace('\n', '\n ') ' ' + traceback.format_exc().replace('\n', '\n '),
)) ))
retval = 1 retval = 1
return retval return retval

View file

@ -45,7 +45,7 @@ def main(argv=None):
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument( parser.add_argument(
'filenames', nargs='*', 'filenames', nargs='*',
help='Filenames pre-commit believes are changed.' help='Filenames pre-commit believes are changed.',
) )
args = parser.parse_args(argv) args = parser.parse_args(argv)

View file

@ -1,4 +1,5 @@
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals from __future__ import unicode_literals
import argparse import argparse
@ -30,7 +31,7 @@ def check_docstring_first(src, filename='<unknown>'):
'{}:{} Multiple module docstrings ' '{}:{} Multiple module docstrings '
'(first docstring on line {}).'.format( '(first docstring on line {}).'.format(
filename, sline, found_docstring_line, filename, sline, found_docstring_line,
) ),
) )
return 1 return 1
elif found_code_line is not None: elif found_code_line is not None:
@ -38,7 +39,7 @@ def check_docstring_first(src, filename='<unknown>'):
'{}:{} Module docstring appears after code ' '{}:{} Module docstring appears after code '
'(code seen on line {}).'.format( '(code seen on line {}).'.format(
filename, sline, found_code_line, filename, sline, found_code_line,
) ),
) )
return 1 return 1
else: else:

View file

@ -7,7 +7,7 @@ CONFLICT_PATTERNS = [
b'<<<<<<< ', b'<<<<<<< ',
b'======= ', b'======= ',
b'=======\n', b'=======\n',
b'>>>>>>> ' b'>>>>>>> ',
] ]
WARNING_MSG = 'Merge conflict string "{0}" found in {1}:{2}' WARNING_MSG = 'Merge conflict string "{0}" found in {1}:{2}'

View file

@ -29,7 +29,7 @@ class ImportStatementParser(ast.NodeVisitor):
def visit_ImportFrom(self, node): def visit_ImportFrom(self, node):
if node.module in DEBUG_STATEMENTS: if node.module in DEBUG_STATEMENTS:
self.debug_import_statements.append( self.debug_import_statements.append(
DebugStatement(node.module, node.lineno, node.col_offset) DebugStatement(node.module, node.lineno, node.col_offset),
) )
@ -52,7 +52,7 @@ def check_file_for_debug_statements(filename):
debug_statement.line, debug_statement.line,
debug_statement.col, debug_statement.col,
debug_statement.name, debug_statement.name,
) ),
) )
return 1 return 1
else: else:

View file

@ -12,7 +12,7 @@ def get_aws_credential_files_from_env():
files = set() files = set()
for env_var in ( for env_var in (
'AWS_CONFIG_FILE', 'AWS_CREDENTIAL_FILE', 'AWS_SHARED_CREDENTIALS_FILE', 'AWS_CONFIG_FILE', 'AWS_CREDENTIAL_FILE', 'AWS_SHARED_CREDENTIALS_FILE',
'BOTO_CONFIG' 'BOTO_CONFIG',
): ):
if env_var in os.environ: if env_var in os.environ:
files.add(os.environ[env_var]) files.add(os.environ[env_var])
@ -23,7 +23,7 @@ def get_aws_secrets_from_env():
"""Extract AWS secrets from environment variables.""" """Extract AWS secrets from environment variables."""
keys = set() keys = set()
for env_var in ( for env_var in (
'AWS_SECRET_ACCESS_KEY', 'AWS_SECURITY_TOKEN', 'AWS_SESSION_TOKEN' 'AWS_SECRET_ACCESS_KEY', 'AWS_SECURITY_TOKEN', 'AWS_SESSION_TOKEN',
): ):
if env_var in os.environ: if env_var in os.environ:
keys.add(os.environ[env_var]) keys.add(os.environ[env_var])
@ -50,7 +50,7 @@ def get_aws_secrets_from_file(credentials_file):
for section in parser.sections(): for section in parser.sections():
for var in ( for var in (
'aws_secret_access_key', 'aws_security_token', 'aws_secret_access_key', 'aws_security_token',
'aws_session_token' 'aws_session_token',
): ):
try: try:
keys.add(parser.get(section, var)) keys.add(parser.get(section, var))
@ -93,13 +93,13 @@ def main(argv=None):
help=( help=(
'Location of additional AWS credential files from which to get ' 'Location of additional AWS credential files from which to get '
'secret keys from' 'secret keys from'
) ),
) )
parser.add_argument( parser.add_argument(
'--allow-missing-credentials', '--allow-missing-credentials',
dest='allow_missing_credentials', dest='allow_missing_credentials',
action='store_true', action='store_true',
help='Allow hook to pass when no credentials are detected.' help='Allow hook to pass when no credentials are detected.',
) )
args = parser.parse_args(argv) args = parser.parse_args(argv)
@ -124,7 +124,7 @@ def main(argv=None):
print( print(
'No AWS keys were found in the configured credential files and ' 'No AWS keys were found in the configured credential files and '
'environment variables.\nPlease ensure you have the correct ' 'environment variables.\nPlease ensure you have the correct '
'setting for --credentials-file' 'setting for --credentials-file',
) )
return 2 return 2

View file

@ -120,7 +120,7 @@ def pretty_format_json(argv=None):
except simplejson.JSONDecodeError: except simplejson.JSONDecodeError:
print( print(
"Input File {} is not a valid JSON, consider using check-json" "Input File {} is not a valid JSON, consider using check-json"
.format(json_file) .format(json_file),
) )
return 1 return 1

View file

@ -11,7 +11,7 @@ def validate_files(argv=None):
parser.add_argument('filenames', nargs='*') parser.add_argument('filenames', nargs='*')
parser.add_argument( parser.add_argument(
'--django', default=False, action='store_true', '--django', default=False, action='store_true',
help='Use Django-style test naming pattern (test*.py)' help='Use Django-style test naming pattern (test*.py)',
) )
args = parser.parse_args(argv) args = parser.parse_args(argv)
@ -27,8 +27,8 @@ def validate_files(argv=None):
retcode = 1 retcode = 1
print( print(
'{} does not match pattern "{}"'.format( '{} does not match pattern "{}"'.format(
filename, test_name_pattern filename, test_name_pattern,
) ),
) )
return retcode return retcode

View file

@ -36,7 +36,7 @@ def fix_trailing_whitespace(argv=None):
const=[], const=[],
default=argparse.SUPPRESS, default=argparse.SUPPRESS,
dest='markdown_linebreak_ext', dest='markdown_linebreak_ext',
help='Do not preserve linebreak spaces in Markdown' help='Do not preserve linebreak spaces in Markdown',
) )
parser.add_argument( parser.add_argument(
'--markdown-linebreak-ext', '--markdown-linebreak-ext',
@ -45,7 +45,7 @@ def fix_trailing_whitespace(argv=None):
default=['md,markdown'], default=['md,markdown'],
metavar='*|EXT[,EXT,...]', metavar='*|EXT[,EXT,...]',
nargs='?', nargs='?',
help='Markdown extensions (or *) for linebreak spaces' help='Markdown extensions (or *) for linebreak spaces',
) )
parser.add_argument('filenames', nargs='*', help='Filenames to fix') parser.add_argument('filenames', nargs='*', help='Filenames to fix')
args = parser.parse_args(argv) args = parser.parse_args(argv)
@ -69,7 +69,7 @@ def fix_trailing_whitespace(argv=None):
parser.error( parser.error(
"bad --markdown-linebreak-ext extension '{}' (has . / \\ :)\n" "bad --markdown-linebreak-ext extension '{}' (has . / \\ :)\n"
" (probably filename; use '--markdown-linebreak-ext=EXT')" " (probably filename; use '--markdown-linebreak-ext=EXT')"
.format(ext) .format(ext),
) )
return_code = 0 return_code = 0

View file

@ -19,7 +19,7 @@ TESTS = (
'"foo"\n', '"foo"\n',
1, 1,
'{filename}:2 Module docstring appears after code ' '{filename}:2 Module docstring appears after code '
'(code seen on line 1).\n' '(code seen on line 1).\n',
), ),
# Test double docstring # Test double docstring
( (
@ -28,7 +28,7 @@ TESTS = (
'"fake docstring"\n', '"fake docstring"\n',
1, 1,
'{filename}:3 Multiple module docstrings ' '{filename}:3 Multiple module docstrings '
'(first docstring on line 1).\n' '(first docstring on line 1).\n',
), ),
# Test multiple lines of code above # Test multiple lines of code above
( (

View file

@ -45,7 +45,7 @@ def f1_is_a_conflict_file(tmpdir):
'child\n' 'child\n'
'=======\n' '=======\n'
'parent\n' 'parent\n'
'>>>>>>>' '>>>>>>>',
) or f1.startswith( ) or f1.startswith(
'<<<<<<< HEAD\n' '<<<<<<< HEAD\n'
'child\n' 'child\n'
@ -53,7 +53,7 @@ def f1_is_a_conflict_file(tmpdir):
'||||||| merged common ancestors\n' '||||||| merged common ancestors\n'
'=======\n' '=======\n'
'parent\n' 'parent\n'
'>>>>>>>' '>>>>>>>',
) or f1.startswith( ) or f1.startswith(
# .gitconfig with [pull] rebase = preserve causes a rebase which # .gitconfig with [pull] rebase = preserve causes a rebase which
# flips parent / child # flips parent / child
@ -61,7 +61,7 @@ def f1_is_a_conflict_file(tmpdir):
'parent\n' 'parent\n'
'=======\n' '=======\n'
'child\n' 'child\n'
'>>>>>>>' '>>>>>>>',
) )
assert os.path.exists(os.path.join('.git', 'MERGE_MSG')) assert os.path.exists(os.path.join('.git', 'MERGE_MSG'))
yield yield

View file

@ -46,7 +46,7 @@ def test_returns_one_form_1(ast_with_debug_import_form_1):
visitor = ImportStatementParser() visitor = ImportStatementParser()
visitor.visit(ast_with_debug_import_form_1) visitor.visit(ast_with_debug_import_form_1)
assert visitor.debug_import_statements == [ assert visitor.debug_import_statements == [
DebugStatement('ipdb', 3, 0) DebugStatement('ipdb', 3, 0),
] ]
@ -54,7 +54,7 @@ def test_returns_one_form_2(ast_with_debug_import_form_2):
visitor = ImportStatementParser() visitor = ImportStatementParser()
visitor.visit(ast_with_debug_import_form_2) visitor.visit(ast_with_debug_import_form_2)
assert visitor.debug_import_statements == [ assert visitor.debug_import_statements == [
DebugStatement('pudb', 3, 0) DebugStatement('pudb', 3, 0),
] ]

View file

@ -21,14 +21,14 @@ from testing.util import get_resource_path
( (
{ {
'AWS_DUMMY_KEY': '/foo', 'AWS_CONFIG_FILE': '/bar', 'AWS_DUMMY_KEY': '/foo', 'AWS_CONFIG_FILE': '/bar',
'AWS_CREDENTIAL_FILE': '/baz' 'AWS_CREDENTIAL_FILE': '/baz',
}, },
{'/bar', '/baz'} {'/bar', '/baz'}
), ),
( (
{ {
'AWS_CONFIG_FILE': '/foo', 'AWS_CREDENTIAL_FILE': '/bar', 'AWS_CONFIG_FILE': '/foo', 'AWS_CREDENTIAL_FILE': '/bar',
'AWS_SHARED_CREDENTIALS_FILE': '/baz' 'AWS_SHARED_CREDENTIALS_FILE': '/baz',
}, },
{'/foo', '/bar', '/baz'} {'/foo', '/bar', '/baz'}
), ),
@ -51,7 +51,7 @@ def test_get_aws_credentials_file_from_env(env_vars, values):
({'AWS_DUMMY_KEY': 'foo', 'AWS_SECRET_ACCESS_KEY': 'bar'}, {'bar'}), ({'AWS_DUMMY_KEY': 'foo', 'AWS_SECRET_ACCESS_KEY': 'bar'}, {'bar'}),
( (
{'AWS_SECRET_ACCESS_KEY': 'foo', 'AWS_SECURITY_TOKEN': 'bar'}, {'AWS_SECRET_ACCESS_KEY': 'foo', 'AWS_SECURITY_TOKEN': 'bar'},
{'foo', 'bar'} {'foo', 'bar'},
), ),
), ),
) )
@ -66,7 +66,7 @@ def test_get_aws_secrets_from_env(env_vars, values):
( (
( (
'aws_config_with_secret.ini', 'aws_config_with_secret.ini',
{'z2rpgs5uit782eapz5l1z0y2lurtsyyk6hcfozlb'} {'z2rpgs5uit782eapz5l1z0y2lurtsyyk6hcfozlb'},
), ),
('aws_config_with_session_token.ini', {'foo'}), ('aws_config_with_session_token.ini', {'foo'}),
('aws_config_with_secret_and_session_token.ini', ('aws_config_with_secret_and_session_token.ini',
@ -77,8 +77,8 @@ def test_get_aws_secrets_from_env(env_vars, values):
'7xebzorgm5143ouge9gvepxb2z70bsb2rtrh099e', '7xebzorgm5143ouge9gvepxb2z70bsb2rtrh099e',
'z2rpgs5uit782eapz5l1z0y2lurtsyyk6hcfozlb', 'z2rpgs5uit782eapz5l1z0y2lurtsyyk6hcfozlb',
'ixswosj8gz3wuik405jl9k3vdajsnxfhnpui38ez', 'ixswosj8gz3wuik405jl9k3vdajsnxfhnpui38ez',
'foo' 'foo',
} },
), ),
('aws_config_without_secrets.ini', set()), ('aws_config_without_secrets.ini', set()),
('nonsense.txt', set()), ('nonsense.txt', set()),
@ -121,7 +121,7 @@ def test_non_existent_credentials(mock_secrets_env, mock_secrets_file, capsys):
mock_secrets_file.return_value = set() mock_secrets_file.return_value = set()
ret = main(( ret = main((
get_resource_path('aws_config_without_secrets.ini'), get_resource_path('aws_config_without_secrets.ini'),
"--credentials-file=testing/resources/credentailsfilethatdoesntexist" "--credentials-file=testing/resources/credentailsfilethatdoesntexist",
)) ))
assert ret == 2 assert ret == 2
out, _ = capsys.readouterr() out, _ = capsys.readouterr()
@ -141,6 +141,6 @@ def test_non_existent_credentials_with_allow_flag(mock_secrets_env, mock_secrets
ret = main(( ret = main((
get_resource_path('aws_config_without_secrets.ini'), get_resource_path('aws_config_without_secrets.ini'),
"--credentials-file=testing/resources/credentailsfilethatdoesntexist", "--credentials-file=testing/resources/credentailsfilethatdoesntexist",
"--allow-missing-credentials" "--allow-missing-credentials",
)) ))
assert ret == 0 assert ret == 0

View file

@ -21,7 +21,7 @@ from pre_commit_hooks.file_contents_sorter import PASS
(b'@\n-\n_\n#\n', FAIL, b'#\n-\n@\n_\n'), (b'@\n-\n_\n#\n', FAIL, b'#\n-\n@\n_\n'),
(b'extra\n\n\nwhitespace\n', FAIL, b'extra\nwhitespace\n'), (b'extra\n\n\nwhitespace\n', FAIL, b'extra\nwhitespace\n'),
(b'whitespace\n\n\nextra\n', FAIL, b'extra\nwhitespace\n'), (b'whitespace\n\n\nextra\n', FAIL, b'extra\nwhitespace\n'),
) ),
) )
def test_integration(input_s, expected_retval, output, tmpdir): def test_integration(input_s, expected_retval, output, tmpdir):
path = tmpdir.join('file.txt') path = tmpdir.join('file.txt')

View file

@ -56,7 +56,7 @@ def test_integration_remove_ok(tmpdir):
b'# -*- coding: utf-8 -*-\n' b'# -*- coding: utf-8 -*-\n'
b'foo = "bar"\n' b'foo = "bar"\n'
), ),
) ),
) )
def test_ok_inputs(input_str): def test_ok_inputs(input_str):
bytesio = io.BytesIO(input_str) bytesio = io.BytesIO(input_str)
@ -100,7 +100,7 @@ def test_ok_inputs(input_str):
(b'#!/usr/bin/env python\n', b''), (b'#!/usr/bin/env python\n', b''),
(b'#!/usr/bin/env python\n#coding: utf8\n', b''), (b'#!/usr/bin/env python\n#coding: utf8\n', b''),
(b'#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n', b''), (b'#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n', b''),
) ),
) )
def test_not_ok_inputs(input_str, output): def test_not_ok_inputs(input_str, output):
bytesio = io.BytesIO(input_str) bytesio = io.BytesIO(input_str)

View file

@ -24,9 +24,9 @@ from pre_commit_hooks.requirements_txt_fixer import Requirement
( (
b'-e git+ssh://git_url@tag#egg=ocflib\nDjango\nPyMySQL\n', b'-e git+ssh://git_url@tag#egg=ocflib\nDjango\nPyMySQL\n',
FAIL, FAIL,
b'Django\n-e git+ssh://git_url@tag#egg=ocflib\nPyMySQL\n' b'Django\n-e git+ssh://git_url@tag#egg=ocflib\nPyMySQL\n',
),
), ),
)
) )
def test_integration(input_s, expected_retval, output, tmpdir): def test_integration(input_s, expected_retval, output, tmpdir):
path = tmpdir.join('file.txt') path = tmpdir.join('file.txt')

View file

@ -69,7 +69,7 @@ def test_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir):
path = tmpdir.join(filename) path = tmpdir.join(filename)
path.write(input_s) path.write(input_s)
ret = fix_trailing_whitespace(( ret = fix_trailing_whitespace((
'--markdown-linebreak-ext=TxT', path.strpath '--markdown-linebreak-ext=TxT', path.strpath,
)) ))
assert ret == 1 assert ret == 1
assert path.read() == output assert path.read() == output