diff options
| -rw-r--r-- | mesonbuild/rewriter.py | 12 | ||||
| -rw-r--r-- | test cases/rewrite/8 kwargs dict/info.json | 14 | ||||
| -rw-r--r-- | test cases/rewrite/8 kwargs dict/meson.build | 10 | ||||
| -rw-r--r-- | unittests/rewritetests.py | 17 |
4 files changed, 52 insertions, 1 deletions
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py index 33baefdb3..4a237bd7b 100644 --- a/mesonbuild/rewriter.py +++ b/mesonbuild/rewriter.py @@ -16,7 +16,7 @@ from .interpreterbase.helpers import flatten from mesonbuild.mesonlib import MesonException, setup_vsenv, relpath from . import mlog, environment from functools import wraps -from .mparser import Token, ArrayNode, ArgumentNode, ArithmeticNode, AssignmentNode, BaseNode, StringNode, BooleanNode, ElementaryNode, IdNode, FunctionNode, PlusAssignmentNode +from .mparser import Token, ArrayNode, ArgumentNode, ArithmeticNode, AssignmentNode, BaseNode, StringNode, BooleanNode, DictNode, ElementaryNode, IdNode, FunctionNode, PlusAssignmentNode from .mintro import IntrospectionEncoder import json, os, re, sys, codecs import typing as T @@ -569,6 +569,16 @@ class Rewriter: element = i.value data_list += [element] info_data[key] = data_list + elif isinstance(val, DictNode): + data_dict = {} + for k, v in val.args.kwargs.items(): + if not isinstance(k, StringNode): + continue + value = None + if isinstance(v, ElementaryNode): + value = v.value + data_dict[k.value] = value + info_data[key] = data_dict self.add_info('kwargs', '{}#{}'.format(cmd['function'], cmd['id']), info_data) return # Nothing else to do diff --git a/test cases/rewrite/8 kwargs dict/info.json b/test cases/rewrite/8 kwargs dict/info.json new file mode 100644 index 000000000..11a9e1a6e --- /dev/null +++ b/test cases/rewrite/8 kwargs dict/info.json @@ -0,0 +1,14 @@ +[ + { + "type": "kwargs", + "function": "project", + "id": "/", + "operation": "info" + }, + { + "type": "kwargs", + "function": "dependency", + "id": "dep1", + "operation": "info" + } +] diff --git a/test cases/rewrite/8 kwargs dict/meson.build b/test cases/rewrite/8 kwargs dict/meson.build new file mode 100644 index 000000000..1c5f25b6d --- /dev/null +++ b/test cases/rewrite/8 kwargs dict/meson.build @@ -0,0 +1,10 @@ +project( + 'rewritetest', 'cpp', + version: '0.0.1', + default_options: { + 'c_std': 'c11', + 'cpp_std': 'c++17', + }, +) + +dep1 = dependency('zlib', required: false, default_options: {'foo': 'bar'}) diff --git a/unittests/rewritetests.py b/unittests/rewritetests.py index 7cfe6c0fb..84a6baf56 100644 --- a/unittests/rewritetests.py +++ b/unittests/rewritetests.py @@ -289,6 +289,23 @@ class RewriterTests(BasePlatformTests): } self.assertDictEqual(out, expected) + def test_kwargs_info_dict(self): + self.prime('8 kwargs dict') + out = self.rewrite(self.builddir, os.path.join(self.builddir, 'info.json')) + expected = { + 'kwargs': { + 'project#/': { + 'default_options': {'c_std': 'c11', 'cpp_std': 'c++17'}, + 'version': '0.0.1' + }, + 'dependency#dep1': { + 'default_options': {'foo': 'bar'}, + 'required': False + } + } + } + self.assertDictEqual(out, expected) + def test_kwargs_set(self): self.prime('3 kwargs') self.rewrite(self.builddir, os.path.join(self.builddir, 'set.json')) |
