interpreter: use typed_kwargs for func_generator

Do the type checking in a nice tidy way
pull/8822/head
Dylan Baker 4 years ago
parent d2c1ab40a0
commit 491c756dc9
  1. 13
      mesonbuild/interpreter/interpreter.py
  2. 1
      mesonbuild/interpreter/interpreterobjects.py
  3. 11
      mesonbuild/interpreter/kwargs.py

@ -1955,8 +1955,17 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
@permittedKwargs({'arguments', 'output', 'depends', 'depfile', 'capture',
'preserve_path_from'})
@typed_pos_args('generator', (ExecutableHolder, ExternalProgramHolder))
def func_generator(self, node: mparser.FunctionNode, args: T.Tuple[T.Union[ExecutableHolder, ExternalProgramHolder]],
kwargs) -> GeneratorHolder:
@typed_kwargs(
'generator',
KwargInfo('arguments', ContainerTypeInfo(list, str, allow_empty=False), required=True, listify=True),
KwargInfo('output', ContainerTypeInfo(list, str, allow_empty=False), required=True, listify=True),
KwargInfo('depfile', str),
KwargInfo('capture', bool, default=False, since='0.43.0'),
KwargInfo('depends', ContainerTypeInfo(list, (BuildTargetHolder, CustomTargetHolder)), default=[], listify=True),
)
def func_generator(self, node: mparser.FunctionNode,
args: T.Tuple[T.Union[ExecutableHolder, ExternalProgramHolder]],
kwargs: 'kwargs.FuncGenerator') -> GeneratorHolder:
gen = build.Generator(args[0].held_object, kwargs)
holder = GeneratorHolder(self, gen, self)
self.generators.append(holder)

@ -622,7 +622,6 @@ class ExternalLibraryHolder(InterpreterObject, ObjectHolder[ExternalLibrary]):
class GeneratorHolder(InterpreterObject, ObjectHolder[build.Generator]):
@FeatureNewKwargs('generator', '0.43.0', ['capture'])
def __init__(self, gen: 'build.Generator', interpreter: 'Interpreter'):
InterpreterObject.__init__(self)
ObjectHolder.__init__(self, gen, interpreter.subproject)

@ -71,3 +71,14 @@ class ExtractRequired(TypedDict):
"""
required: T.Union[bool, 'FeatureOptionHolder']
class FuncGenerator(TypedDict):
"""Keyword rguments for the generator function."""
arguments: T.List[str]
output: T.List[str]
depfile: bool
capture: bool
depends: T.List[T.Union['BuildTargetHolder', 'CustomTargetHolder']]

Loading…
Cancel
Save