From 0d57e307b2fea541a9ee368873431fe224e5c982 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Fri, 28 Aug 2020 21:40:51 +0200 Subject: typing: fully annotate tools --- tools/build_website.py | 4 ++-- tools/cmake2meson.py | 19 ++++++++++--------- tools/dircondenser.py | 4 ++-- tools/regenerate_docs.py | 16 ++++++++-------- 4 files changed, 22 insertions(+), 21 deletions(-) (limited to 'tools') diff --git a/tools/build_website.py b/tools/build_website.py index 5486b6937..baf81db99 100755 --- a/tools/build_website.py +++ b/tools/build_website.py @@ -6,14 +6,14 @@ assert(os.getcwd() == '/home/jpakkane') from glob import glob -def purge(fname): +def purge(fname: str) -> None: if not os.path.exists(fname): return if os.path.isdir(fname): shutil.rmtree(fname) os.unlink(fname) -def update(): +def update() -> None: webdir = 'mesonweb' repodir = 'mesonwebbuild' docdir = os.path.join(repodir, 'docs') diff --git a/tools/cmake2meson.py b/tools/cmake2meson.py index 05acd8f68..e19ef682d 100755 --- a/tools/cmake2meson.py +++ b/tools/cmake2meson.py @@ -34,7 +34,7 @@ class Statement: self.args = args class Lexer: - def __init__(self): + def __init__(self) -> None: self.token_specification = [ # Need to be sorted longest to shortest. ('ignore', re.compile(r'[ \t]')), @@ -87,11 +87,11 @@ class Lexer: raise ValueError('Lexer got confused line %d column %d' % (lineno, col)) class Parser: - def __init__(self, code: str): + def __init__(self, code: str) -> None: self.stream = Lexer().lex(code) self.getsym() - def getsym(self): + def getsym(self) -> None: try: self.current = next(self.stream) except StopIteration: @@ -118,8 +118,8 @@ class Parser: self.expect('rparen') return Statement(cur.value, args) - def arguments(self) -> list: - args = [] + def arguments(self) -> T.List[T.Union[Token, T.Any]]: + args = [] # type: T.List[T.Union[Token, T.Any]] if self.accept('lparen'): args.append(self.arguments()) self.expect('rparen') @@ -139,7 +139,7 @@ class Parser: while not self.accept('eof'): yield(self.statement()) -def token_or_group(arg): +def token_or_group(arg: T.Union[Token, T.List[Token]]) -> str: if isinstance(arg, Token): return ' ' + arg.value elif isinstance(arg, list): @@ -148,6 +148,7 @@ def token_or_group(arg): line += ' ' + token_or_group(a) line += ' )' return line + raise RuntimeError('Conversion error in token_or_group') class Converter: ignored_funcs = {'cmake_minimum_required': True, @@ -183,7 +184,7 @@ class Converter: return res[0] return '' - def write_entry(self, outfile: T.TextIO, t: Statement): + def write_entry(self, outfile: T.TextIO, t: Statement) -> None: if t.name in Converter.ignored_funcs: return preincrement = 0 @@ -274,7 +275,7 @@ class Converter: outfile.write('\n') self.indent_level += postincrement - def convert(self, subdir: Path = None): + def convert(self, subdir: Path = None) -> None: if not subdir: subdir = self.cmake_root cfile = Path(subdir).expanduser() / 'CMakeLists.txt' @@ -297,7 +298,7 @@ class Converter: if subdir == self.cmake_root and len(self.options) > 0: self.write_options() - def write_options(self): + def write_options(self) -> None: filename = self.cmake_root / 'meson_options.txt' with filename.open('w') as optfile: for o in self.options: diff --git a/tools/dircondenser.py b/tools/dircondenser.py index 0e28becca..8da0ce292 100755 --- a/tools/dircondenser.py +++ b/tools/dircondenser.py @@ -53,7 +53,7 @@ def get_entries() -> T.List[T.Tuple[int, str]]: entries.sort() return entries -def replace_source(sourcefile: str, replacements: T.List[T.Tuple[str, str]]): +def replace_source(sourcefile: str, replacements: T.List[T.Tuple[str, str]]) -> None: with open(sourcefile, 'r') as f: contents = f.read() for old_name, new_name in replacements: @@ -61,7 +61,7 @@ def replace_source(sourcefile: str, replacements: T.List[T.Tuple[str, str]]): with open(sourcefile, 'w') as f: f.write(contents) -def condense(dirname: str): +def condense(dirname: str) -> None: curdir = os.getcwd() os.chdir(dirname) entries = get_entries() diff --git a/tools/regenerate_docs.py b/tools/regenerate_docs.py index d44357036..74a8b0c0c 100755 --- a/tools/regenerate_docs.py +++ b/tools/regenerate_docs.py @@ -31,21 +31,21 @@ from pathlib import Path PathLike = T.Union[Path,str] -def _get_meson_output(root_dir: Path, args: T.List): +def _get_meson_output(root_dir: Path, args: T.List) -> str: env = os.environ.copy() env['COLUMNS'] = '80' return subprocess.run([str(sys.executable), str(root_dir/'meson.py')] + args, check=True, capture_output=True, text=True, env=env).stdout.strip() -def get_commands_data(root_dir: Path): +def get_commands_data(root_dir: Path) -> T.Dict[str, T.Any]: usage_start_pattern = re.compile(r'^usage: ', re.MULTILINE) positional_start_pattern = re.compile(r'^positional arguments:[\t ]*[\r\n]+', re.MULTILINE) options_start_pattern = re.compile(r'^optional arguments:[\t ]*[\r\n]+', re.MULTILINE) commands_start_pattern = re.compile(r'^[A-Za-z ]*[Cc]ommands:[\t ]*[\r\n]+', re.MULTILINE) - def get_next_start(iterators, end): + def get_next_start(iterators: T.Sequence[T.Any], end: T.Optional[int]) -> int: return next((i.start() for i in iterators if i), end) - def normalize_text(text): + def normalize_text(text: str) -> str: # clean up formatting out = text out = re.sub(r'\r\n', r'\r', out, flags=re.MULTILINE) # replace newlines with a linux EOL @@ -53,7 +53,7 @@ def get_commands_data(root_dir: Path): out = re.sub(r'(?:^\n+|\n+$)', '', out) # remove trailing empty lines return out - def parse_cmd(cmd): + def parse_cmd(cmd: str) -> T.Dict[str, str]: cmd_len = len(cmd) usage = usage_start_pattern.search(cmd) positionals = positional_start_pattern.search(cmd) @@ -72,7 +72,7 @@ def get_commands_data(root_dir: Path): 'arguments': normalize_text(cmd[arguments_start:cmd_len]), } - def clean_dir_arguments(text): + def clean_dir_arguments(text: str) -> str: # Remove platform specific defaults args = [ 'prefix', @@ -127,7 +127,7 @@ def regenerate_docs(output_dir: PathLike, dummy_output_file: T.Optional[PathLike]) -> None: if not output_dir: raise ValueError(f'Output directory value is not set') - + output_dir = Path(output_dir).resolve() output_dir.mkdir(parents=True, exist_ok=True) @@ -143,7 +143,7 @@ if __name__ == '__main__': parser = argparse.ArgumentParser(description='Generate meson docs') parser.add_argument('--output-dir', required=True) parser.add_argument('--dummy-output-file', type=str) - + args = parser.parse_args() regenerate_docs(output_dir=args.output_dir, -- cgit v1.2.1