|
1 | 1 | import argparse |
2 | 2 | import re |
3 | 3 | import sys |
| 4 | +from typing import List |
4 | 5 | from typing import Optional |
| 6 | +from typing import Pattern |
5 | 7 | from typing import Sequence |
6 | 8 |
|
7 | 9 |
|
8 | | -GITHUB_NON_PERMALINK = re.compile( |
9 | | - br'https://github.com/[^/ ]+/[^/ ]+/blob/master/[^# ]+#L\d+', |
10 | | -) |
| 10 | +def _get_pattern(domain: str) -> Pattern[bytes]: |
| 11 | + regex = rf'https://{domain}/[^/ ]+/[^/ ]+/blob/master/[^# ]+#L\d+' |
| 12 | + return re.compile(regex.encode()) |
11 | 13 |
|
12 | 14 |
|
13 | | -def _check_filename(filename: str) -> int: |
| 15 | +def _check_filename(filename: str, patterns: List[Pattern[bytes]]) -> int: |
14 | 16 | retv = 0 |
15 | 17 | with open(filename, 'rb') as f: |
16 | 18 | for i, line in enumerate(f, 1): |
17 | | - if GITHUB_NON_PERMALINK.search(line): |
18 | | - sys.stdout.write(f'{filename}:{i}:') |
19 | | - sys.stdout.flush() |
20 | | - sys.stdout.buffer.write(line) |
21 | | - retv = 1 |
| 19 | + for pattern in patterns: |
| 20 | + if pattern.search(line): |
| 21 | + sys.stdout.write(f'{filename}:{i}:') |
| 22 | + sys.stdout.flush() |
| 23 | + sys.stdout.buffer.write(line) |
| 24 | + retv = 1 |
22 | 25 | return retv |
23 | 26 |
|
24 | 27 |
|
25 | 28 | def main(argv: Optional[Sequence[str]] = None) -> int: |
26 | 29 | parser = argparse.ArgumentParser() |
27 | 30 | parser.add_argument('filenames', nargs='*') |
| 31 | + parser.add_argument( |
| 32 | + '--additional-github-domain', |
| 33 | + dest='additional_github_domains', |
| 34 | + action='append', |
| 35 | + default=['github.com'], |
| 36 | + ) |
28 | 37 | args = parser.parse_args(argv) |
29 | 38 |
|
| 39 | + patterns = [ |
| 40 | + _get_pattern(domain) |
| 41 | + for domain in args.additional_github_domains |
| 42 | + ] |
| 43 | + |
30 | 44 | retv = 0 |
| 45 | + |
31 | 46 | for filename in args.filenames: |
32 | | - retv |= _check_filename(filename) |
| 47 | + retv |= _check_filename(filename, patterns) |
33 | 48 |
|
34 | 49 | if retv: |
35 | 50 | print() |
|
0 commit comments