diff options
| author | Eli Schwartz <eschwartz93@gmail.com> | 2024-07-29 01:51:20 -0400 |
|---|---|---|
| committer | Eli Schwartz <eschwartz93@gmail.com> | 2024-07-30 14:13:11 -0400 |
| commit | 433c13c5c4e72e5d04d6955b790c548bf7e2ad24 (patch) | |
| tree | 257ec2ee177204d1c71e9d1f9f56fa2e8b22bfb4 | |
| parent | 2daf5f7c9d825e9c130be9bf4c6234edf30859d9 (diff) | |
| download | meson-433c13c5c4e72e5d04d6955b790c548bf7e2ad24.tar.gz | |
various low-hanging typing fruit
ninjabackend.py goes down from 322 type errors to 253, mainly by marking
functions as returning None.
| -rw-r--r-- | mesonbuild/backend/ninjabackend.py | 112 |
1 files changed, 57 insertions, 55 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 65f6ea195..b43b8bbe4 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -45,6 +45,7 @@ if T.TYPE_CHECKING: from ..linkers.linkers import DynamicLinker, StaticLinker from ..compilers.cs import CsCompiler from ..compilers.fortran import FortranCompiler + from ..mesonlib import FileOrString CommandArgOrStr = T.List[T.Union['NinjaCommandArg', str]] RUST_EDITIONS = Literal['2015', '2018', '2021'] @@ -333,7 +334,7 @@ class NinjaBuildElement: else: self.deps.add(dep) - def add_orderdep(self, dep): + def add_orderdep(self, dep) -> None: if isinstance(dep, list): self.orderdeps.update(dep) else: @@ -351,7 +352,7 @@ class NinjaBuildElement: if name == 'DEPFILE': self.elems.append((name + '_UNQUOTED', elems)) - def _should_use_rspfile(self): + def _should_use_rspfile(self) -> bool: # 'phony' is a rule built-in to ninja if self.rulename == 'phony': return False @@ -366,14 +367,14 @@ class NinjaBuildElement: outfilenames, self.elems) >= rsp_threshold - def count_rule_references(self): + def count_rule_references(self) -> None: if self.rulename != 'phony': if self._should_use_rspfile(): self.rule.rsprefcount += 1 else: self.rule.refcount += 1 - def write(self, outfile): + def write(self, outfile: T.TextIO) -> None: if self.output_errors: raise MesonException(self.output_errors) ins = ' '.join([ninja_quote(i, True) for i in self.infilenames]) @@ -432,7 +433,7 @@ class NinjaBuildElement: outfile.write(line) outfile.write('\n') - def check_outputs(self): + def check_outputs(self) -> None: for n in self.outfilenames: if n in self.all_outputs: self.output_errors = f'Multiple producers for Ninja target "{n}". Please rename your targets.' @@ -713,7 +714,7 @@ class NinjaBackend(backends.Backend): f, indent=4) # http://clang.llvm.org/docs/JSONCompilationDatabase.html - def generate_compdb(self): + def generate_compdb(self) -> None: rules = [] # TODO: Rather than an explicit list here, rules could be marked in the # rule store as being wanted in compdb @@ -735,10 +736,10 @@ class NinjaBackend(backends.Backend): # Get all generated headers. Any source file might need them so # we need to add an order dependency to them. - def get_generated_headers(self, target): + def get_generated_headers(self, target: build.BuildTarget) -> T.List[FileOrString]: if hasattr(target, 'cached_generated_headers'): return target.cached_generated_headers - header_deps = [] + header_deps: T.List[FileOrString] = [] # XXX: Why don't we add deps to CustomTarget headers here? for genlist in target.get_generated_sources(): if isinstance(genlist, (build.CustomTarget, build.CustomTargetIndex)): @@ -798,7 +799,7 @@ class NinjaBackend(backends.Backend): return True def create_target_source_introspection(self, target: build.Target, comp: compilers.Compiler, parameters, sources, generated_sources, - unity_sources: T.Optional[T.List[mesonlib.FileOrString]] = None): + unity_sources: T.Optional[T.List[FileOrString]] = None) -> None: ''' Adds the source file introspection information for a language of a target @@ -837,7 +838,7 @@ class NinjaBackend(backends.Backend): } tgt[id_hash] = src_block - def compute_path(file: mesonlib.FileOrString) -> str: + def compute_path(file: FileOrString) -> str: """ Make source files absolute """ if isinstance(file, File): return file.absolute_path(self.source_dir, self.build_dir) @@ -848,7 +849,7 @@ class NinjaBackend(backends.Backend): if unity_sources: src_block['unity_sources'].extend(compute_path(x) for x in unity_sources) - def create_target_linker_introspection(self, target: build.Target, linker: T.Union[Compiler, StaticLinker], parameters): + def create_target_linker_introspection(self, target: build.Target, linker: T.Union[Compiler, StaticLinker], parameters) -> None: tid = target.get_id() tgt = self.introspection_data[tid] lnk_hash = tuple(parameters) @@ -868,7 +869,7 @@ class NinjaBackend(backends.Backend): } tgt[lnk_hash] = lnk_block - def generate_target(self, target): + def generate_target(self, target) -> None: if isinstance(target, build.BuildTarget): os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True) if isinstance(target, build.CustomTarget): @@ -1108,7 +1109,7 @@ class NinjaBackend(backends.Backend): compiled_sources: T.List[str], source2object: T.Dict[str, str], generated_source_files: T.List[mesonlib.File], - object_deps: T.List['mesonlib.FileOrString']) -> None: + object_deps: T.List[FileOrString]) -> None: if not self.should_use_dyndeps_for_target(target): return self._uses_dyndeps = True @@ -1152,12 +1153,12 @@ class NinjaBackend(backends.Backend): elif ext.lower() in compilers.lang_suffixes['fortran']: yield source, 'fortran' - def process_target_dependencies(self, target): + def process_target_dependencies(self, target) -> None: for t in target.get_dependencies(): if t.get_id() not in self.processed_targets: self.generate_target(t) - def custom_target_generator_inputs(self, target): + def custom_target_generator_inputs(self, target) -> None: for s in target.sources: if isinstance(s, build.GeneratedList): self.generate_genlist_for_target(s, target) @@ -1173,7 +1174,7 @@ class NinjaBackend(backends.Backend): deps.append(os.path.join(self.get_target_dir(i), output)) return deps - def generate_custom_target(self, target: build.CustomTarget): + def generate_custom_target(self, target: build.CustomTarget) -> None: self.custom_target_generator_inputs(target) (srcs, ofilenames, cmd) = self.eval_custom_target_command(target) deps = self.unwrap_dep_list(target) @@ -1215,14 +1216,14 @@ class NinjaBackend(backends.Backend): self.add_build(elem) self.processed_targets.add(target.get_id()) - def build_run_target_name(self, target): + def build_run_target_name(self, target) -> str: if target.subproject != '': subproject_prefix = f'{target.subproject}@@' else: subproject_prefix = '' return f'{subproject_prefix}{target.name}' - def generate_run_target(self, target: build.RunTarget): + def generate_run_target(self, target: build.RunTarget) -> None: target_name = self.build_run_target_name(target) if not target.command: # This is an alias target, it has no command, it just depends on @@ -1245,7 +1246,8 @@ class NinjaBackend(backends.Backend): self.add_build(elem) self.processed_targets.add(target.get_id()) - def generate_coverage_command(self, elem: NinjaBuildElement, outputs: T.List[str], gcovr_exe: T.Optional[str], llvm_cov_exe: T.Optional[str]): + def generate_coverage_command(self, elem: NinjaBuildElement, outputs: T.List[str], + gcovr_exe: T.Optional[str], llvm_cov_exe: T.Optional[str]) -> None: targets = self.build.get_targets().values() use_llvm_cov = False exe_args = [] @@ -1272,14 +1274,14 @@ class NinjaBackend(backends.Backend): exe_args + (['--use-llvm-cov'] if use_llvm_cov else [])) - def generate_coverage_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]): + def generate_coverage_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]) -> None: e = self.create_phony_target('coverage', 'CUSTOM_COMMAND', 'PHONY') self.generate_coverage_command(e, [], gcovr_exe, llvm_cov_exe) e.add_item('description', 'Generates coverage reports') self.add_build(e) self.generate_coverage_legacy_rules(gcovr_exe, gcovr_version, llvm_cov_exe) - def generate_coverage_legacy_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]): + def generate_coverage_legacy_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]) -> None: e = self.create_phony_target('coverage-html', 'CUSTOM_COMMAND', 'PHONY') self.generate_coverage_command(e, ['--html'], gcovr_exe, llvm_cov_exe) e.add_item('description', 'Generates HTML coverage report') @@ -1302,7 +1304,7 @@ class NinjaBackend(backends.Backend): e.add_item('description', 'Generates Sonarqube XML coverage report') self.add_build(e) - def generate_install(self): + def generate_install(self) -> None: self.create_install_data_files() elem = self.create_phony_target('install', 'CUSTOM_COMMAND', 'PHONY') elem.add_dep('all') @@ -1311,7 +1313,7 @@ class NinjaBackend(backends.Backend): elem.add_item('pool', 'console') self.add_build(elem) - def generate_tests(self): + def generate_tests(self) -> None: self.serialize_tests() cmd = self.environment.get_build_command(True) + ['test', '--no-rebuild'] if not self.environment.coredata.get_option(OptionKey('stdsplit')): @@ -1334,7 +1336,7 @@ class NinjaBackend(backends.Backend): elem.add_item('pool', 'console') self.add_build(elem) - def generate_rules(self): + def generate_rules(self) -> None: self.rules = [] self.ruledict = {} @@ -1409,7 +1411,7 @@ class NinjaBackend(backends.Backend): elem = NinjaBuildElement(self.all_outputs, 'PHONY', 'phony', '') self.add_build(elem) - def generate_jar_target(self, target: build.Jar): + def generate_jar_target(self, target: build.Jar) -> None: fname = target.get_filename() outname_rel = os.path.join(self.get_target_dir(target), fname) src_list = target.get_sources() @@ -1463,7 +1465,7 @@ class NinjaBackend(backends.Backend): # Create introspection information self.create_target_source_introspection(target, compiler, compile_args, src_list, gen_src_list) - def generate_cs_resource_tasks(self, target): + def generate_cs_resource_tasks(self, target) -> T.Tuple[T.List[str], T.List[str]]: args = [] deps = [] for r in target.resources: @@ -1484,7 +1486,7 @@ class NinjaBackend(backends.Backend): args.append(a) return args, deps - def generate_cs_target(self, target: build.BuildTarget): + def generate_cs_target(self, target: build.BuildTarget) -> None: fname = target.get_filename() outname_rel = os.path.join(self.get_target_dir(target), fname) src_list = target.get_sources() @@ -1529,7 +1531,7 @@ class NinjaBackend(backends.Backend): self.generate_generator_list_rules(target) self.create_target_source_introspection(target, compiler, commands, rel_srcs, generated_rel_srcs) - def determine_java_compile_args(self, target, compiler): + def determine_java_compile_args(self, target, compiler) -> T.List[str]: args = [] args = self.generate_basic_compiler_args(target, compiler) args += target.get_java_args() @@ -1569,13 +1571,13 @@ class NinjaBackend(backends.Backend): self.add_build(element) return plain_class_paths - def generate_java_link(self): + def generate_java_link(self) -> None: rule = 'java_LINKER' command = ['jar', '$ARGS'] description = 'Creating JAR $out' self.add_rule(NinjaRule(rule, command, [], description)) - def determine_dep_vapis(self, target): + def determine_dep_vapis(self, target) -> T.List[str]: """ Peek into the sources of BuildTargets we're linking with, and if any of them was built with Vala, assume that it also generated a .vapi file of @@ -1838,7 +1840,7 @@ class NinjaBackend(backends.Backend): return static_sources, generated_sources, cython_sources - def _generate_copy_target(self, src: 'mesonlib.FileOrString', output: Path) -> None: + def _generate_copy_target(self, src: FileOrString, output: Path) -> None: """Create a target to copy a source file from one location to another.""" if isinstance(src, File): instr = src.absolute_path(self.environment.source_dir, self.environment.build_dir) @@ -2191,7 +2193,7 @@ class NinjaBackend(backends.Backend): others.append(i) return srcs, others - def generate_swift_target(self, target): + def generate_swift_target(self, target) -> None: module_name = self.target_swift_modulename(target) swiftc = target.compilers['swift'] abssrc = [] @@ -2296,7 +2298,7 @@ class NinjaBackend(backends.Backend): options['rspfile_quote_style'] = tool.rsp_file_syntax() return options - def generate_static_link_rules(self): + def generate_static_link_rules(self) -> None: num_pools = self.environment.coredata.optstore.get_value('backend_max_links') if 'java' in self.environment.coredata.compilers.host: self.generate_java_link() @@ -2344,7 +2346,7 @@ class NinjaBackend(backends.Backend): options = self._rsp_options(static_linker) self.add_rule(NinjaRule(rule, cmdlist, args, description, **options, extra=pool)) - def generate_dynamic_link_rules(self): + def generate_dynamic_link_rules(self) -> None: num_pools = self.environment.coredata.optstore.get_value('backend_max_links') for for_machine in MachineChoice: complist = self.environment.coredata.compilers[for_machine] @@ -2383,7 +2385,7 @@ class NinjaBackend(backends.Backend): synstat = 'restat = 1' self.add_rule(NinjaRule(symrule, symcmd, [], syndesc, extra=synstat)) - def generate_java_compile_rule(self, compiler): + def generate_java_compile_rule(self, compiler) -> None: rule = self.compiler_to_rule_name(compiler) command = compiler.get_exelist() + ['$ARGS', '$in'] description = 'Compiling Java sources for $FOR_JAR' @@ -2398,7 +2400,7 @@ class NinjaBackend(backends.Backend): rspable=mesonlib.is_windows(), rspfile_quote_style=compiler.rsp_file_syntax())) - def generate_vala_compile_rules(self, compiler): + def generate_vala_compile_rules(self, compiler) -> None: rule = self.compiler_to_rule_name(compiler) command = compiler.get_exelist() + ['$ARGS', '$in'] description = 'Compiling Vala source $in' @@ -2419,7 +2421,7 @@ class NinjaBackend(backends.Backend): depfile=depfile, extra='restat = 1')) - def generate_rust_compile_rules(self, compiler): + def generate_rust_compile_rules(self, compiler) -> None: rule = self.compiler_to_rule_name(compiler) command = compiler.get_exelist() + ['$ARGS', '$in'] description = 'Compiling Rust source $in' @@ -2428,7 +2430,7 @@ class NinjaBackend(backends.Backend): self.add_rule(NinjaRule(rule, command, [], description, deps=depstyle, depfile=depfile)) - def generate_swift_compile_rules(self, compiler): + def generate_swift_compile_rules(self, compiler) -> None: rule = self.compiler_to_rule_name(compiler) full_exe = self.environment.get_build_command() + [ '--internal', @@ -2459,7 +2461,7 @@ https://groups.google.com/forum/#!topic/ninja-build/j-2RfBIOd_8 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) self.add_rule(NinjaRule(rule, cmd, [], 'Dep hack', extra='restat = 1')) - def generate_llvm_ir_compile_rule(self, compiler): + def generate_llvm_ir_compile_rule(self, compiler) -> None: if self.created_llvm_ir_rule[compiler.for_machine]: return rule = self.get_compiler_rule_name('llvm_ir', compiler.for_machine) @@ -2472,7 +2474,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) self.add_rule(NinjaRule(rule, command, args, description, **options)) self.created_llvm_ir_rule[compiler.for_machine] = True - def generate_compile_rule_for(self, langname, compiler): + def generate_compile_rule_for(self, langname: str, compiler: Compiler) -> None: if langname == 'java': self.generate_java_compile_rule(compiler) return @@ -2518,7 +2520,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) self.add_rule(NinjaRule(rule, command, args, description, **options, deps=deps, depfile=depfile)) - def generate_pch_rule_for(self, langname, compiler): + def generate_pch_rule_for(self, langname: str, compiler: Compiler) -> None: if langname not in {'c', 'cpp'}: return rule = self.compiler_to_pch_rule_name(compiler) @@ -2544,7 +2546,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) self.add_rule(NinjaRule(rule, command, [], description, deps=deps, depfile=depfile)) - def generate_scanner_rules(self): + def generate_scanner_rules(self) -> None: rulename = 'depscan' if rulename in self.ruledict: # Scanning command is the same for native and cross compilation. @@ -2556,7 +2558,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) rule = NinjaRule(rulename, command, args, description) self.add_rule(rule) - def generate_compile_rules(self): + def generate_compile_rules(self) -> None: for for_machine in MachineChoice: clist = self.environment.coredata.compilers[for_machine] for langname, compiler in clist.items(): @@ -2567,7 +2569,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) for mode in compiler.get_modes(): self.generate_compile_rule_for(langname, mode) - def generate_generator_list_rules(self, target): + def generate_generator_list_rules(self, target) -> None: # CustomTargets have already written their rules and # CustomTargetIndexes don't actually get generated, so write rules for # GeneratedLists here @@ -2652,7 +2654,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) elem.add_item('COMMAND', cmdlist) self.add_build(elem) - def scan_fortran_module_outputs(self, target): + def scan_fortran_module_outputs(self, target) -> None: """ Find all module and submodule made available in a Fortran code file. """ @@ -2794,7 +2796,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) return linker.get_link_debugfile_args(filename) return [] - def generate_llvm_ir_compile(self, target, src: mesonlib.FileOrString): + def generate_llvm_ir_compile(self, target, src: FileOrString): base_proxy = target.get_options() compiler = get_compiler_for_source(target.compilers.values(), src) commands = compiler.compiler_args() @@ -2954,9 +2956,9 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) def generate_single_compile(self, target: build.BuildTarget, src, is_generated: bool = False, header_deps=None, - order_deps: T.Optional[T.List['mesonlib.FileOrString']] = None, + order_deps: T.Optional[T.List[FileOrString]] = None, extra_args: T.Optional[T.List[str]] = None, - unity_sources: T.Optional[T.List[mesonlib.FileOrString]] = None, + unity_sources: T.Optional[T.List[FileOrString]] = None, ) -> T.Tuple[str, str]: """ Compiles C/C++, ObjC/ObjC++, Fortran, and D sources @@ -3098,7 +3100,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) assert isinstance(rel_src, str) return (rel_obj, rel_src.replace('\\', '/')) - def add_dependency_scanner_entries_to_element(self, target: build.BuildTarget, compiler, element, src): + def add_dependency_scanner_entries_to_element(self, target: build.BuildTarget, compiler, element, src) -> None: if not self.should_use_dyndeps_for_target(target): return if isinstance(target, build.CompileTarget): @@ -3123,7 +3125,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) d = os.path.join(self.get_target_private_dir(target), d) ninja_element.add_dep(d) - def has_dir_part(self, fname: mesonlib.FileOrString) -> bool: + def has_dir_part(self, fname: FileOrString) -> bool: # FIXME FIXME: The usage of this is a terrible and unreliable hack if isinstance(fname, File): return fname.subdir != '' @@ -3230,7 +3232,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) targetdir = self.get_target_private_dir(target) return os.path.join(targetdir, target.get_filename() + '.symbols') - def generate_shsym(self, target): + def generate_shsym(self, target) -> None: target_file = self.get_target_filename(target) symname = self.get_target_shsym_filename(target) elem = NinjaBuildElement(self.all_outputs, symname, 'SHSYM', target_file) @@ -3240,7 +3242,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) elem.add_item('CROSS', '--cross-host=' + self.environment.machines[target.for_machine].system) self.add_build(elem) - def get_import_filename(self, target): + def get_import_filename(self, target) -> str: return os.path.join(self.get_target_dir(target), target.import_filename) def get_target_type_link_args(self, target, linker): @@ -3295,7 +3297,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) commands += linker.get_win_subsystem_args(target.win_subsystem) return commands - def get_link_whole_args(self, linker, target): + def get_link_whole_args(self, linker: DynamicLinker, target): use_custom = False if linker.id == 'msvc': # Expand our object lists manually if we are on pre-Visual Studio 2015 Update 2 @@ -3565,7 +3567,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) self.environment.get_build_dir()) return self.get_target_filename(t) - def generate_shlib_aliases(self, target, outdir): + def generate_shlib_aliases(self, target, outdir) -> None: for alias, to, tag in target.get_aliases(): aliasfile = os.path.join(outdir, alias) abs_aliasfile = os.path.join(self.environment.get_build_dir(), outdir, alias) @@ -3605,7 +3607,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) gcda_elem.add_item('description', 'Deleting gcda files') self.add_build(gcda_elem) - def get_user_option_args(self): + def get_user_option_args(self) -> T.List[str]: cmds = [] for k, v in self.environment.coredata.optstore.items(): if self.environment.coredata.optstore.is_project_option(k): |
