80 lines
2.0 KiB
Python
Executable File
80 lines
2.0 KiB
Python
Executable File
#! /usr/bin/env python
|
|
|
|
"""
|
|
Checks for TODO comments and makes sure they have an associated issue. Formats that are
|
|
accepted are:
|
|
|
|
TODO (#1)
|
|
TODO (#1)
|
|
TODO (project#1)
|
|
TODO (namespace/project#1)
|
|
TODO (namespace/namespace/project#1)
|
|
|
|
Additionally, the TODO can be postfixed with ``:``.
|
|
"""
|
|
|
|
import re
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Pattern
|
|
|
|
from termcolor import cprint
|
|
|
|
todo_re = re.compile(r"\s*#\s*TODO:?\s*")
|
|
accounted_for_todo = re.compile(r"\s*#\s*TODO:?\s*\(([\w-]+(/[\w-]+)*)?#\d+\)")
|
|
|
|
|
|
def noqa_re(error_id: str = "") -> Pattern:
|
|
return re.compile(rf"#\s*noqa(:\s*{error_id})?\s*\n$")
|
|
|
|
|
|
def eprint(*strings):
|
|
cprint(" ".join(strings), "red", end="", attrs=["bold"])
|
|
|
|
|
|
def check_file(path: Path) -> bool:
|
|
print(f"Checking {path.absolute()}...") # noqa: T001
|
|
file = path.open()
|
|
valid = True
|
|
|
|
for i, line in enumerate(file, start=1):
|
|
if todo_re.match(line) and not accounted_for_todo.match(line):
|
|
eprint(f"{i}: {line}")
|
|
valid = False
|
|
|
|
file.close()
|
|
return valid
|
|
|
|
|
|
valid = True
|
|
for path in Path("sublime_music").glob("**/*.py"):
|
|
valid &= check_file(path)
|
|
|
|
for path in Path("tests").glob("**/*.py"):
|
|
valid &= check_file(path)
|
|
|
|
"""
|
|
Checks that the version in the CHANGELOG is the same as the version in ``__init__.py``.
|
|
"""
|
|
with open(Path("sublime_music/__init__.py")) as f:
|
|
for line in f:
|
|
if line.startswith("__version__"):
|
|
version = eval(line.split()[-1])
|
|
break
|
|
else: # nobreak
|
|
raise AssertionError("No version in sublime_music/__init__.py")
|
|
|
|
with open(Path("pyproject.toml")) as f:
|
|
for line in f:
|
|
if line.startswith("version ="):
|
|
assert eval(line.split()[-1]) == version, "Version mismatch: pyproject.toml"
|
|
break
|
|
else: # nobreak
|
|
raise AssertionError("No version in pyproject.toml")
|
|
|
|
with open(Path("CHANGELOG.rst")) as f:
|
|
assert f.readline().strip() == f"v{version}", "Version mismatch: CHANGELOG"
|
|
|
|
|
|
sys.exit(0 if valid else 1)
|