From 55c74c10d95af5719f771cd1db894a57fa801ea2 Mon Sep 17 00:00:00 2001 From: Thierry Deo Date: Thu, 8 Mar 2018 09:42:32 +0100 Subject: [PATCH] Rename option to and improve output --- pre_commit/languages/pygrep.py | 22 +++++++++++++++------- tests/languages/pygrep_test.py | 25 ++++++++++++++++--------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/pre_commit/languages/pygrep.py b/pre_commit/languages/pygrep.py index 36755dd7..a1d496b5 100644 --- a/pre_commit/languages/pygrep.py +++ b/pre_commit/languages/pygrep.py @@ -30,13 +30,21 @@ def _process_filename_by_line(pattern, filename): def _process_filename_at_once(pattern, filename): retv = 0 with open(filename, 'rb') as f: - match = pattern.search(f.read()) + contents = f.read() + match = pattern.search(contents) if match: retv = 1 - output.write( - '{}:{}-{}:'.format(filename, match.start(), match.end()), + line_no = len( + re.compile('\n'.encode()).findall(contents, 0, match.start()), ) - output.write_line(match.group()) + output.write( + '{}:{}:'.format(filename, line_no + 1), + ) + + matched_lines = match.group().split('\n') + matched_lines[0] = contents.split('\n')[line_no] + + output.write_line('\n'.join(matched_lines)) return retv @@ -55,20 +63,20 @@ def main(argv=None): ), ) parser.add_argument('-i', '--ignore-case', action='store_true') - parser.add_argument('-z', '--null-data', action='store_true') + parser.add_argument('--multiline', action='store_true') parser.add_argument('pattern', help='python regex pattern.') parser.add_argument('filenames', nargs='*') args = parser.parse_args(argv) flags = re.IGNORECASE if args.ignore_case else 0 - if args.null_data: + if args.multiline: flags = flags | re.MULTILINE | re.DOTALL pattern = re.compile(args.pattern.encode(), flags) retv = 0 for filename in args.filenames: - if args.null_data: + if args.multiline: retv |= _process_filename_at_once(pattern, filename) else: retv |= _process_filename_by_line(pattern, filename) diff --git a/tests/languages/pygrep_test.py b/tests/languages/pygrep_test.py index e2063a95..d91363e2 100644 --- a/tests/languages/pygrep_test.py +++ b/tests/languages/pygrep_test.py @@ -40,22 +40,29 @@ def test_ignore_case(some_files, cap_out): assert out == 'f2:1:[INFO] hi\n' -def test_null_data(some_files, cap_out): - ret = pygrep.main(('--null-data', r'foo\nbar', 'f1', 'f2', 'f3')) +def test_multiline(some_files, cap_out): + ret = pygrep.main(('--multiline', r'foo\nbar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 - assert out == 'f1:0-7:foo\nbar\n' + assert out == 'f1:1:foo\nbar\n' -def test_null_data_dotall_flag_is_enabled(some_files, cap_out): - ret = pygrep.main(('--null-data', r'o.*bar', 'f1', 'f2', 'f3')) +def test_multiline_line_number(some_files, cap_out): + ret = pygrep.main(('--multiline', r'ar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 - assert out == 'f1:1-7:oo\nbar\n' + assert out == 'f1:2:bar\n' -def test_null_data_multiline_flag_is_enabled(some_files, cap_out): - ret = pygrep.main(('--null-data', r'foo$.*bar', 'f1', 'f2', 'f3')) +def test_multiline_dotall_flag_is_enabled(some_files, cap_out): + ret = pygrep.main(('--multiline', r'o.*bar', 'f1', 'f2', 'f3')) out = cap_out.get() assert ret == 1 - assert out == 'f1:0-7:foo\nbar\n' + assert out == 'f1:1:foo\nbar\n' + + +def test_multiline_multiline_flag_is_enabled(some_files, cap_out): + ret = pygrep.main(('--multiline', r'foo$.*bar', 'f1', 'f2', 'f3')) + out = cap_out.get() + assert ret == 1 + assert out == 'f1:1:foo\nbar\n'