43 lines
737 B
Python
43 lines
737 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class BaseType:
|
|
name: str
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class SimpleType:
|
|
name: str
|
|
base: BaseType | SimpleType
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class UnknownType:
|
|
pass
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class UnitType:
|
|
pass
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class Function:
|
|
name: str
|
|
pos_args: list[Argument]
|
|
args: list[Argument]
|
|
kw_args: list[Argument]
|
|
returns: Type
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class Argument:
|
|
name: str
|
|
type: Type
|
|
required: bool
|
|
|
|
|
|
Type = BaseType | SimpleType | UnknownType | UnitType | Function
|