blob: 51d4ca24a8ddf830983f52c65f47c6c057700cfe [file] [log] [blame]
# 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]