| # 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 FetureCheck: |
| 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, FetureCheck): |
| 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, FetureCheck): |
| 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 |
| RETURNED = 3 |
| |
| @dataclass |
| class Object(NamedObject, FetureCheck): |
| 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] |