diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-06-27 04:12:17 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-27 04:12:17 -0400 |
commit | 80ebc916f78ad736494ffee49f100134954acc2c (patch) | |
tree | 724f8c7390efd0536fa3a37082414a359ae9fd1f /mesonbuild/interpreterbase.py | |
parent | ee8fcd5f6729c0481c18309d6ad2beb0fdc67792 (diff) | |
parent | 3262be23dc3f01923a1d162a5914ba29f05416b7 (diff) | |
download | meson-80ebc916f78ad736494ffee49f100134954acc2c.zip meson-80ebc916f78ad736494ffee49f100134954acc2c.tar.gz meson-80ebc916f78ad736494ffee49f100134954acc2c.tar.bz2 |
Merge pull request #2001 from mesonbuild/kwcheck
Decorator to check for unknown keyword arguments
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r-- | mesonbuild/interpreterbase.py | 60 |
1 files changed, 13 insertions, 47 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index fb87ea2..d44f71b 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -55,6 +55,19 @@ def stringArgs(f): return f(self, node, args, kwargs) return wrapped +class permittedKwargs: + + def __init__(self, permitted): + self.permitted = permitted + + def __call__(self, f): + def wrapped(s, node, args, kwargs): + for k in kwargs: + if k not in self.permitted: + mlog.warning('Passed invalid keyword argument %s. This will become a hard error in the future.' % k) + return f(s, node, args, kwargs) + return wrapped + class InterpreterException(mesonlib.MesonException): pass @@ -578,52 +591,5 @@ To specify a keyword argument, use : instead of =.''') return isinstance(value, (InterpreterObject, dependencies.Dependency, str, int, list, mesonlib.File)) - def func_build_target(self, node, args, kwargs): - if 'target_type' not in kwargs: - raise InterpreterException('Missing target_type keyword argument') - target_type = kwargs.pop('target_type') - if target_type == 'executable': - return self.func_executable(node, args, kwargs) - elif target_type == 'shared_library': - return self.func_shared_lib(node, args, kwargs) - elif target_type == 'static_library': - return self.func_static_lib(node, args, kwargs) - elif target_type == 'library': - return self.func_library(node, args, kwargs) - elif target_type == 'jar': - return self.func_jar(node, args, kwargs) - else: - raise InterpreterException('Unknown target_type.') - - def func_set_variable(self, node, args, kwargs): - if len(args) != 2: - raise InvalidCode('Set_variable takes two arguments.') - varname = args[0] - value = args[1] - self.set_variable(varname, value) - -# @noKwargs - def func_get_variable(self, node, args, kwargs): - if len(args) < 1 or len(args) > 2: - raise InvalidCode('Get_variable takes one or two arguments.') - varname = args[0] - if not isinstance(varname, str): - raise InterpreterException('First argument must be a string.') - try: - return self.variables[varname] - except KeyError: - pass - if len(args) == 2: - return args[1] - raise InterpreterException('Tried to get unknown variable "%s".' % varname) - - @stringArgs - @noKwargs - def func_is_variable(self, node, args, kwargs): - if len(args) != 1: - raise InvalidCode('Is_variable takes two arguments.') - varname = args[0] - return varname in self.variables - def is_elementary_type(self, v): return isinstance(v, (int, float, str, bool, list)) |