diff options
Diffstat (limited to 'docs/refman/model.py')
-rw-r--r-- | docs/refman/model.py | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/docs/refman/model.py b/docs/refman/model.py new file mode 100644 index 0000000..23515a2 --- /dev/null +++ b/docs/refman/model.py @@ -0,0 +1,113 @@ +# Copyright 2021 The Meson development team + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +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): + type: Type + +@dataclass +class PosArg(ArgBase, FetureCheck): + default: str + +@dataclass +class VarArgs(ArgBase, FetureCheck): + min_varargs: int + max_varargs: int + +@dataclass +class Kwarg(ArgBase, FetureCheck): + 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] + +@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] |