diff --git a/mesonbuild/modules/keyval.py b/mesonbuild/modules/keyval.py index 559380ab4..7cebc91bd 100644 --- a/mesonbuild/modules/keyval.py +++ b/mesonbuild/modules/keyval.py @@ -13,23 +13,28 @@ # limitations under the License. import os +import typing as T from . import ExtensionModule from .. import mesonlib -from ..interpreterbase import FeatureNew, noKwargs, InvalidCode -from ..mesonlib import typeslistify +from ..interpreterbase import FeatureNew, noKwargs, typed_pos_args + +if T.TYPE_CHECKING: + from ..interpreter import Interpreter + from . import ModuleState class KeyvalModule(ExtensionModule): @FeatureNew('Keyval Module', '0.55.0') - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, interp: 'Interpreter'): + super().__init__(interp) self.methods.update({ 'load': self.load, }) - def _load_file(self, path_to_config): - result = dict() + @staticmethod + def _load_file(path_to_config: str) -> T.Dict[str, str]: + result: T.Dict[str, str] = {} try: with open(path_to_config, encoding='utf-8') as f: for line in f: @@ -48,12 +53,9 @@ class KeyvalModule(ExtensionModule): return result @noKwargs - def load(self, state, args, kwargs): - sources = typeslistify(args, (str, mesonlib.File)) - if len(sources) != 1: - raise InvalidCode('load takes only one file input.') - - s = sources[0] + @typed_pos_args('keyval.laod', (str, mesonlib.File)) + def load(self, state: 'ModuleState', args: T.Tuple['mesonlib.FileOrString'], kwargs: T.Dict[str, T.Any]) -> T.Dict[str, str]: + s = args[0] is_built = False if isinstance(s, mesonlib.File): is_built = is_built or s.is_built @@ -67,5 +69,5 @@ class KeyvalModule(ExtensionModule): return self._load_file(s) -def initialize(*args, **kwargs): - return KeyvalModule(*args, **kwargs) +def initialize(interp: 'Interpreter') -> KeyvalModule: + return KeyvalModule(interp)