| #!/usr/bin/python3 -B | |
| # © 2021 and later: Unicode, Inc. and others. | |
| # License & terms of use: http://www.unicode.org/copyright.html | |
| # This script checks .java source files for the presence of tab characters. If a tab is encountered, | |
| # the script will print the name (path) of the file. If any file(s) had tabs, the script will exit | |
| # with a non-zero status code (unless the --exit-zero option is specified, which forces a | |
| # zero/success status code return). | |
| import argparse | |
| from pathlib import Path | |
| import sys | |
| def main() -> bool: | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("ROOT_DIR", | |
| nargs='?', | |
| default=Path.cwd(), | |
| help="Top-level directory which will be recursively searched " | |
| "for .java files to be checked.") | |
| ap.add_argument('--exit-zero', | |
| action='store_true', | |
| help="Force exit with status code 0 even if there are errors.") | |
| args = ap.parse_args() | |
| root = Path(args.ROOT_DIR) | |
| if not root.exists(): | |
| print(f'{root.absolute()}: directory not found; aborting.') | |
| return False | |
| errors_found = False | |
| for p in root.rglob("*.java"): | |
| with open(p, 'r') as f: | |
| s = f.read() | |
| if '\t' in s: | |
| print(f"tabs found in {p.relative_to(root)}", flush=True) | |
| errors_found = True | |
| return args.exit_zero or not errors_found | |
| if __name__ == '__main__': | |
| ok = main() | |
| if not ok: | |
| sys.exit("Errors encountered.") |