Skip to content

Commit 1bc696b

Browse files
Move args parsing into separate functions and fix typos in --only-matching.
1 parent 5686969 commit 1bc696b

1 file changed

Lines changed: 24 additions & 15 deletions

File tree

Lib/re/grep.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ def findall(patterns, line):
2525
m = pat.search(line, i)
2626
if m is not None:
2727
# Find the longest of the first matches.
28-
best_span = min(best_span, (m.begin(), -m.end()))
28+
best_span = min(best_span, (m.start(), -m.end()))
2929
if best_span == (i, -len(line)):
3030
# Matches the rest of line.
3131
break
32-
begin = best_span[0]
32+
start = best_span[0]
3333
end = -best_span[1]
3434
if end < 0:
3535
break
36-
yield line[begin:end]
36+
yield line[start:end]
3737
i = end
38-
if begin == end:
38+
if start == end:
3939
i += 1
4040

4141
def grep(opts, patterns, file, filename):
@@ -98,7 +98,7 @@ def read_from_file(filename):
9898
errors=sys.stdin.errors) as f:
9999
return [line.removesuffix('\n') for line in f.readlines()]
100100

101-
def main():
101+
def make_parser():
102102
parser = argparse.ArgumentParser(add_help=False)
103103
# Add --help option explicitly to avoid conflict in the -h option.
104104
parser.add_argument('--help',
@@ -188,19 +188,12 @@ def main():
188188
grp.add_argument('-C', '--context',
189189
type=int, default=0, metavar='NUM',
190190
help='Print NUM lines of output context.')
191+
return parser
191192

193+
def parse_args():
194+
parser = make_parser()
192195
opts = parser.parse_args()
193196

194-
patterns = opts.patterns or []
195-
if opts.fixed_strings:
196-
patterns = [re.escape(pat) for pat in patterns]
197-
if opts.line_regexp:
198-
patterns = [fr'\A(?:{pat})\Z' for pat in patterns]
199-
elif opts.word_regexp:
200-
patterns = [fr'\b(?:{pat})\b' for pat in patterns]
201-
flags = re.IGNORECASE if opts.ignore_case else 0
202-
patterns = [re.compile(pat, flags) for pat in patterns]
203-
204197
# By default print filenames only if more than one file is specified.
205198
if opts.filename is None:
206199
opts.filename = len(opts.files) > 1
@@ -223,6 +216,22 @@ def main():
223216
# Only print group separator for non-zero context.
224217
if not (opts.after_context or opts.before_context):
225218
opts.group_separator = None
219+
return opts
220+
221+
def compile_patterns(opts):
222+
patterns = opts.patterns or []
223+
if opts.fixed_strings:
224+
patterns = [re.escape(pat) for pat in patterns]
225+
if opts.line_regexp:
226+
patterns = [fr'\A(?:{pat})\Z' for pat in patterns]
227+
elif opts.word_regexp:
228+
patterns = [fr'\b(?:{pat})\b' for pat in patterns]
229+
flags = re.IGNORECASE if opts.ignore_case else 0
230+
return [re.compile(pat, flags) for pat in patterns]
231+
232+
def main():
233+
opts = parse_args()
234+
patterns = compile_patterns(opts)
226235

227236
found = False
228237
for filename in opts.files or ['-']:

0 commit comments

Comments
 (0)