aboutsummaryrefslogtreecommitdiff
path: root/docs/refman/model.py
diff options
context:
space:
mode:
Diffstat (limited to 'docs/refman/model.py')
-rw-r--r--docs/refman/model.py113
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]