From 9c1e72202de8015e16a4ba2ccf8ea50c10f474f7 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Fri, 28 Aug 2020 17:58:54 +0200 Subject: typing: refactor dict handling --- mesonbuild/ast/interpreter.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'mesonbuild/ast') diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index fb77db0..55812d3 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -38,7 +38,6 @@ from ..mparser import ( NotNode, OrNode, PlusAssignmentNode, - StringNode, TernaryNode, UMinusNode, ) @@ -216,15 +215,16 @@ class AstInterpreter(interpreterbase.InterpreterBase): def unknown_function_called(self, func_name: str) -> None: pass - def reduce_arguments(self, args: ArgumentNode, resolve_key_nodes: bool = True) -> T.Tuple[T.List[TYPE_nvar], TYPE_nkwargs]: + def reduce_arguments( + self, + args: mparser.ArgumentNode, + key_resolver: T.Callable[[mparser.BaseNode], str] = interpreterbase.default_resolve_key, + duplicate_key_error: T.Optional[str] = None, + ) -> T.Tuple[T.List[TYPE_nvar], TYPE_nkwargs]: if isinstance(args, ArgumentNode): - kwargs = {} # type: T.Dict[T.Union[str, BaseNode], TYPE_nvar] + kwargs = {} # type: T.Dict[str, TYPE_nvar] for key, val in args.kwargs.items(): - if resolve_key_nodes and isinstance(key, (StringNode, IdNode)): - assert isinstance(key.value, str) - kwargs[key.value] = val - else: - kwargs[key] = val + kwargs[key_resolver(key)] = val if args.incorrect_order(): raise InvalidArguments('All keyword arguments must be after positional arguments.') return self.flatten_args(args.arguments), kwargs -- cgit v1.1 From 3489442848c84c05ce0fb8a696d3b5ae0e46daaa Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Fri, 28 Aug 2020 18:00:50 +0200 Subject: typing: completely type ast --- mesonbuild/ast/introspection.py | 6 +++--- mesonbuild/ast/postprocess.py | 6 +++--- mesonbuild/ast/visitor.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'mesonbuild/ast') diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index 6e6927f..73cd422 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -21,7 +21,7 @@ from .. import compilers, environment, mesonlib, optinterpreter from .. import coredata as cdata from ..mesonlib import MachineChoice from ..interpreterbase import InvalidArguments, TYPE_nvar -from ..build import Executable, Jar, SharedLibrary, SharedModule, StaticLibrary +from ..build import BuildTarget, Executable, Jar, SharedLibrary, SharedModule, StaticLibrary from ..mparser import BaseNode, ArithmeticNode, ArrayNode, ElementaryNode, IdNode, FunctionNode, StringNode import typing as T import os @@ -173,7 +173,7 @@ class IntrospectionInterpreter(AstInterpreter): 'node': node }] - def build_target(self, node: BaseNode, args: T.List[TYPE_nvar], kwargs_raw: T.Dict[str, TYPE_nvar], targetclass) -> T.Optional[T.Dict[str, T.Any]]: + def build_target(self, node: BaseNode, args: T.List[TYPE_nvar], kwargs_raw: T.Dict[str, TYPE_nvar], targetclass: T.Type[BuildTarget]) -> T.Optional[T.Dict[str, T.Any]]: args = self.flatten_args(args) if not args or not isinstance(args[0], str): return None @@ -295,7 +295,7 @@ class IntrospectionInterpreter(AstInterpreter): return None def is_subproject(self) -> bool: - return self.subproject != '' + return str(self.subproject) != '' def analyze(self) -> None: self.load_root_meson_file() diff --git a/mesonbuild/ast/postprocess.py b/mesonbuild/ast/postprocess.py index 35fe1d3..6d808be 100644 --- a/mesonbuild/ast/postprocess.py +++ b/mesonbuild/ast/postprocess.py @@ -20,7 +20,7 @@ from .. import mparser import typing as T class AstIndentationGenerator(AstVisitor): - def __init__(self): + def __init__(self) -> None: self.level = 0 def visit_default_func(self, node: mparser.BaseNode) -> None: @@ -76,7 +76,7 @@ class AstIndentationGenerator(AstVisitor): self.level -= 1 class AstIDGenerator(AstVisitor): - def __init__(self): + def __init__(self) -> None: self.counter = {} # type: T.Dict[str, int] def visit_default_func(self, node: mparser.BaseNode) -> None: @@ -87,7 +87,7 @@ class AstIDGenerator(AstVisitor): self.counter[name] += 1 class AstConditionLevel(AstVisitor): - def __init__(self): + def __init__(self) -> None: self.condition_level = 0 def visit_default_func(self, node: mparser.BaseNode) -> None: diff --git a/mesonbuild/ast/visitor.py b/mesonbuild/ast/visitor.py index 451020d..0f2265c 100644 --- a/mesonbuild/ast/visitor.py +++ b/mesonbuild/ast/visitor.py @@ -18,7 +18,7 @@ from .. import mparser class AstVisitor: - def __init__(self): + def __init__(self) -> None: pass def visit_default_func(self, node: mparser.BaseNode) -> None: -- cgit v1.1 From 23818fc5a389c49e2673f79af2c90d9d56b1aaf0 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Tue, 1 Sep 2020 14:28:08 +0200 Subject: typing: more fixes --- mesonbuild/ast/introspection.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mesonbuild/ast') diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index 73cd422..19fedbf 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -25,10 +25,11 @@ from ..build import BuildTarget, Executable, Jar, SharedLibrary, SharedModule, S from ..mparser import BaseNode, ArithmeticNode, ArrayNode, ElementaryNode, IdNode, FunctionNode, StringNode import typing as T import os +import argparse build_target_functions = ['executable', 'jar', 'library', 'shared_library', 'shared_module', 'static_library', 'both_libraries'] -class IntrospectionHelper: +class IntrospectionHelper(argparse.Namespace): # mimic an argparse namespace def __init__(self, cross_file: str): self.cross_file = cross_file # type: str -- cgit v1.1 From e681235e5fe3ee0a40dd6a3f5922c2c4b0cf98b4 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Tue, 1 Sep 2020 19:58:10 +0200 Subject: typing: fix code review --- mesonbuild/ast/introspection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesonbuild/ast') diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index 19fedbf..d7d982e 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -296,7 +296,7 @@ class IntrospectionInterpreter(AstInterpreter): return None def is_subproject(self) -> bool: - return str(self.subproject) != '' + return self.subproject != '' def analyze(self) -> None: self.load_root_meson_file() -- cgit v1.1 From 1743f636fdb67c7569711e8cabd2d7440ba265be Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Tue, 1 Sep 2020 20:30:03 +0200 Subject: typing: fix LGTM bot error --- mesonbuild/ast/introspection.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'mesonbuild/ast') diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index d7d982e..c91bf40 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -32,10 +32,14 @@ build_target_functions = ['executable', 'jar', 'library', 'shared_library', 'sha class IntrospectionHelper(argparse.Namespace): # mimic an argparse namespace def __init__(self, cross_file: str): + super().__init__() self.cross_file = cross_file # type: str self.native_file = None # type: str self.cmd_line_options = {} # type: T.Dict[str, str] + def __eq__(self, other: object) -> bool: + return NotImplemented + class IntrospectionInterpreter(AstInterpreter): # Interpreter to detect the options without a build directory # Most of the code is stolen from interpreter.Interpreter -- cgit v1.1 From 057c77f7d08b3372e99065fb3f3cd37f16801a82 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Tue, 8 Sep 2020 20:46:11 +0200 Subject: typing: fixup for #7708 --- mesonbuild/ast/interpreter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mesonbuild/ast') diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index 55812d3..23c8427 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -192,7 +192,11 @@ class AstInterpreter(interpreterbase.InterpreterBase): self.evaluate_statement(node.falseblock) def evaluate_dictstatement(self, node: mparser.DictNode) -> TYPE_nkwargs: - (arguments, kwargs) = self.reduce_arguments(node.args, resolve_key_nodes=False) + def resolve_key(node: mparser.BaseNode) -> str: + if isinstance(node, mparser.StringNode): + return node.value + return '__AST_UNKNOWN__' + arguments, kwargs = self.reduce_arguments(node.args, key_resolver=resolve_key) assert (not arguments) self.argument_depth += 1 for key, value in kwargs.items(): -- cgit v1.1