| # SPDX-License-Identifier: Apache-2.0 | |
| # Copyright 2021 The Meson development team | |
| from dataclasses import dataclass, field | |
| from enum import Enum | |
| import typing as T | |
| # Utils | |
| @dataclass | |
| class NamedObject: | |
| name: str | |
| description: str | |
| @property | |
| def hidden(self) -> bool: | |
| return self.name.startswith('_') | |
| @dataclass | |
| class FeatureCheck: | |
| since: str | |
| deprecated: str | |
| @dataclass | |
| class DataTypeInfo: | |
| data_type: 'Object' | |
| holds: T.Optional['Type'] | |
| @dataclass | |
| class Type: | |
| raw: str | |
| resolved: T.List[DataTypeInfo] = field(init=False, default_factory=list) | |
| # Arguments | |
| @dataclass | |
| class ArgBase(NamedObject, FeatureCheck): | |
| type: Type | |
| @dataclass | |
| class PosArg(ArgBase): | |
| default: str | |
| @dataclass | |
| class VarArgs(ArgBase): | |
| min_varargs: int | |
| max_varargs: int | |
| @dataclass | |
| class Kwarg(ArgBase): | |
| required: bool | |
| default: str | |
| # Function | |
| @dataclass | |
| class Function(NamedObject, FeatureCheck): | |
| notes: T.List[str] | |
| warnings: T.List[str] | |
| returns: Type | |
| example: str | |
| posargs: T.List[PosArg] | |
| optargs: T.List[PosArg] | |
| varargs: T.Optional[VarArgs] | |
| kwargs: T.Dict[str, Kwarg] | |
| posargs_inherit: str | |
| optargs_inherit: str | |
| varargs_inherit: str | |
| kwargs_inherit: T.List[str] | |
| arg_flattening: bool | |
| @dataclass | |
| class Method(Function): | |
| obj: 'Object' | |
| # Types and objects | |
| class ObjectType(Enum): | |
| ELEMENTARY = 0 | |
| BUILTIN = 1 | |
| MODULE = 2 | |
| FUNCTIONS = 3 | |
| RETURNED = 4 | |
| @dataclass | |
| class Object(NamedObject, FeatureCheck): | |
| notes: T.List[str] | |
| warnings: T.List[str] | |
| long_name: str | |
| example: str | |
| obj_type: ObjectType | |
| methods: T.List[Method] | |
| is_container: bool | |
| extends: str | |
| extends_obj: T.Optional['Object'] = None | |
| defined_by_module: T.Optional['Object'] = None | |
| returned_by: T.List[T.Union[Function, Method]] = field(default_factory=list) | |
| extended_by: T.List['Object'] = field(default_factory=list) | |
| inherited_methods: T.List[Method] = field(default_factory=list) | |
| # ROOT | |
| @dataclass | |
| class ReferenceManual: | |
| functions: T.List[Function] | |
| objects: T.List[Object] |