summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2020-08-28 21:40:51 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2020-09-08 20:15:56 +0200
commit0d57e307b2fea541a9ee368873431fe224e5c982 (patch)
tree2ead0d7c0824a2564cc81643a4a89a1c1f6e62b5 /tools
parent449dd8e72a3ccc4c6f7ec70169515784cd687a2c (diff)
downloadmeson-0d57e307b2fea541a9ee368873431fe224e5c982.tar.gz
typing: fully annotate tools
Diffstat (limited to 'tools')
-rwxr-xr-xtools/build_website.py4
-rwxr-xr-xtools/cmake2meson.py19
-rwxr-xr-xtools/dircondenser.py4
-rwxr-xr-xtools/regenerate_docs.py16
4 files changed, 22 insertions, 21 deletions
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,