diff options
author | Marvin Scholz <epirat07@gmail.com> | 2025-04-01 22:11:14 +0200 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2025-08-29 17:36:44 -0400 |
commit | 17aa0acd0b91df8c38fb3be948b5d32ff73fd91d (patch) | |
tree | 7134ae0217638340e889d7a8b3695ddee2578e3a | |
parent | 36a47e91619fc47312ebcbf7b4832207ae46e017 (diff) | |
download | meson-17aa0acd0b91df8c38fb3be948b5d32ff73fd91d.zip meson-17aa0acd0b91df8c38fb3be948b5d32ff73fd91d.tar.gz meson-17aa0acd0b91df8c38fb3be948b5d32ff73fd91d.tar.bz2 |
interpreter: add dict.values() method
Analogous to keys(), this returns the values in an array. It uses the
same sorting as keys(), else it would quite confusing to return values
in a different order than the corresponding keys.
-rw-r--r-- | docs/markdown/snippets/add_dict_values.md | 12 | ||||
-rw-r--r-- | docs/yaml/elementary/dict.yml | 5 | ||||
-rw-r--r-- | mesonbuild/interpreter/primitives/dict.py | 13 |
3 files changed, 29 insertions, 1 deletions
diff --git a/docs/markdown/snippets/add_dict_values.md b/docs/markdown/snippets/add_dict_values.md new file mode 100644 index 0000000..0b97a70 --- /dev/null +++ b/docs/markdown/snippets/add_dict_values.md @@ -0,0 +1,12 @@ +## Added a `values()` method for dictionaries + +Mesons built-in [[@dict]] type now supports the [[dict.values]] method +to retrieve the dictionary values as an array, analogous to the +[[dict.keys]] method. + +```meson +dict = { 'b': 'world', 'a': 'hello' } + +[[#dict.keys]] # Returns ['a', 'b'] +[[#dict.values]] # Returns ['hello', 'world'] +``` diff --git a/docs/yaml/elementary/dict.yml b/docs/yaml/elementary/dict.yml index 70844bb..3a5c484 100644 --- a/docs/yaml/elementary/dict.yml +++ b/docs/yaml/elementary/dict.yml @@ -46,3 +46,8 @@ methods: - name: keys returns: array[str] description: Returns an array of keys in the dictionary. + +- name: values + returns: array[any] + description: Returns an array of values in the dictionary. + since: 1.10.0 diff --git a/mesonbuild/interpreter/primitives/dict.py b/mesonbuild/interpreter/primitives/dict.py index d641fa8..794c150 100644 --- a/mesonbuild/interpreter/primitives/dict.py +++ b/mesonbuild/interpreter/primitives/dict.py @@ -9,6 +9,7 @@ from ...interpreterbase import ( IterableObject, MesonOperator, ObjectHolder, + FeatureNew, typed_operator, noKwargs, noPosargs, @@ -48,6 +49,9 @@ class DictHolder(ObjectHolder[T.Dict[str, TYPE_var]], IterableObject): def size(self) -> int: return len(self.held_object) + def _keys_getter(self) -> T.List[str]: + return sorted(self.held_object) + @noKwargs @typed_pos_args('dict.has_key', str) @InterpreterObject.method('has_key') @@ -58,7 +62,14 @@ class DictHolder(ObjectHolder[T.Dict[str, TYPE_var]], IterableObject): @noPosargs @InterpreterObject.method('keys') def keys_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[str]: - return sorted(self.held_object) + return self._keys_getter() + + @noKwargs + @noPosargs + @InterpreterObject.method('values') + @FeatureNew('dict.values', '1.10.0') + def values_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[TYPE_var]: + return [self.held_object[k] for k in self._keys_getter()] @noArgsFlattening @noKwargs |