diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2020-05-12 10:39:50 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2020-05-14 12:15:03 -0700 |
commit | e3b2f1b82f2987a233b8a386457958b533acce04 (patch) | |
tree | 7b7a6e3aaf274de8df969d9bb3b9bea80e9a72a6 /mesonbuild/interpreterbase.py | |
parent | 06481666f4e74ecef01e59351fc345ab0962d998 (diff) | |
download | meson-e3b2f1b82f2987a233b8a386457958b533acce04.zip meson-e3b2f1b82f2987a233b8a386457958b533acce04.tar.gz meson-e3b2f1b82f2987a233b8a386457958b533acce04.tar.bz2 |
interpreterbase: Add a oneline helper method for Feature(New|Deprecated)
This allows us to replace FeatureNew(..).use() with just
FeatureNew.single_use(...). It's a lttle cleaner and hides some of the
smell.
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r-- | mesonbuild/interpreterbase.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index af9018b..6c2e73f 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -286,6 +286,13 @@ class FeatureCheckBase(metaclass=abc.ABCMeta): return f(*wrapped_args, **wrapped_kwargs) return wrapped + @classmethod + def single_use(cls, feature_name: str, version: str, subproject: str, + extra_message: T.Optional[str] = None) -> None: + """Oneline version that instantiates and calls use().""" + cls(feature_name, version, extra_message).use(subproject) + + class FeatureNew(FeatureCheckBase): """Checks for new features""" @@ -342,7 +349,13 @@ class FeatureDeprecated(FeatureCheckBase): mlog.warning(*args) -class FeatureCheckKwargsBase: +class FeatureCheckKwargsBase(metaclass=abc.ABCMeta): + + @property + @abc.abstractmethod + def feature_check_class(self) -> T.Type[FeatureCheckBase]: + pass + def __init__(self, feature_name: str, feature_version: str, kwargs: T.List[str]): self.feature_name = feature_name self.feature_version = feature_version @@ -351,8 +364,6 @@ class FeatureCheckKwargsBase: def __call__(self, f): @wraps(f) def wrapped(*wrapped_args, **wrapped_kwargs): - # Which FeatureCheck class to invoke - FeatureCheckClass = self.feature_check_class kwargs, subproject = _get_callee_args(wrapped_args, want_subproject=True)[3:5] if subproject is None: raise AssertionError('{!r}'.format(wrapped_args)) @@ -360,7 +371,7 @@ class FeatureCheckKwargsBase: if arg not in kwargs: continue name = arg + ' arg in ' + self.feature_name - FeatureCheckClass(name, self.feature_version).use(subproject) + self.feature_check_class.single_use(name, self.feature_version, subproject) return f(*wrapped_args, **wrapped_kwargs) return wrapped |