mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-04-15 18:11:48 +04:00
Rename option to and improve output
This commit is contained in:
parent
19075371fa
commit
55c74c10d9
2 changed files with 31 additions and 16 deletions
|
|
@ -30,13 +30,21 @@ def _process_filename_by_line(pattern, filename):
|
||||||
def _process_filename_at_once(pattern, filename):
|
def _process_filename_at_once(pattern, filename):
|
||||||
retv = 0
|
retv = 0
|
||||||
with open(filename, 'rb') as f:
|
with open(filename, 'rb') as f:
|
||||||
match = pattern.search(f.read())
|
contents = f.read()
|
||||||
|
match = pattern.search(contents)
|
||||||
if match:
|
if match:
|
||||||
retv = 1
|
retv = 1
|
||||||
output.write(
|
line_no = len(
|
||||||
'{}:{}-{}:'.format(filename, match.start(), match.end()),
|
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
|
return retv
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -55,20 +63,20 @@ def main(argv=None):
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
parser.add_argument('-i', '--ignore-case', action='store_true')
|
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('pattern', help='python regex pattern.')
|
||||||
parser.add_argument('filenames', nargs='*')
|
parser.add_argument('filenames', nargs='*')
|
||||||
args = parser.parse_args(argv)
|
args = parser.parse_args(argv)
|
||||||
|
|
||||||
flags = re.IGNORECASE if args.ignore_case else 0
|
flags = re.IGNORECASE if args.ignore_case else 0
|
||||||
if args.null_data:
|
if args.multiline:
|
||||||
flags = flags | re.MULTILINE | re.DOTALL
|
flags = flags | re.MULTILINE | re.DOTALL
|
||||||
|
|
||||||
pattern = re.compile(args.pattern.encode(), flags)
|
pattern = re.compile(args.pattern.encode(), flags)
|
||||||
|
|
||||||
retv = 0
|
retv = 0
|
||||||
for filename in args.filenames:
|
for filename in args.filenames:
|
||||||
if args.null_data:
|
if args.multiline:
|
||||||
retv |= _process_filename_at_once(pattern, filename)
|
retv |= _process_filename_at_once(pattern, filename)
|
||||||
else:
|
else:
|
||||||
retv |= _process_filename_by_line(pattern, filename)
|
retv |= _process_filename_by_line(pattern, filename)
|
||||||
|
|
|
||||||
|
|
@ -40,22 +40,29 @@ def test_ignore_case(some_files, cap_out):
|
||||||
assert out == 'f2:1:[INFO] hi\n'
|
assert out == 'f2:1:[INFO] hi\n'
|
||||||
|
|
||||||
|
|
||||||
def test_null_data(some_files, cap_out):
|
def test_multiline(some_files, cap_out):
|
||||||
ret = pygrep.main(('--null-data', r'foo\nbar', 'f1', 'f2', 'f3'))
|
ret = pygrep.main(('--multiline', r'foo\nbar', 'f1', 'f2', 'f3'))
|
||||||
out = cap_out.get()
|
out = cap_out.get()
|
||||||
assert ret == 1
|
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):
|
def test_multiline_line_number(some_files, cap_out):
|
||||||
ret = pygrep.main(('--null-data', r'o.*bar', 'f1', 'f2', 'f3'))
|
ret = pygrep.main(('--multiline', r'ar', 'f1', 'f2', 'f3'))
|
||||||
out = cap_out.get()
|
out = cap_out.get()
|
||||||
assert ret == 1
|
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):
|
def test_multiline_dotall_flag_is_enabled(some_files, cap_out):
|
||||||
ret = pygrep.main(('--null-data', r'foo$.*bar', 'f1', 'f2', 'f3'))
|
ret = pygrep.main(('--multiline', r'o.*bar', 'f1', 'f2', 'f3'))
|
||||||
out = cap_out.get()
|
out = cap_out.get()
|
||||||
assert ret == 1
|
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'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue