builtinfunctiontype

This commit is contained in:
Jesse Bannon 2023-11-23 23:02:39 -08:00
parent 4278534c21
commit fd9be6444e
5 changed files with 8 additions and 15 deletions

View file

@ -4,7 +4,6 @@ from typing import List
from typing import Optional from typing import Optional
from typing import Set from typing import Set
from ytdl_sub.script.functions import Functions
from ytdl_sub.script.parser import parse from ytdl_sub.script.parser import parse
from ytdl_sub.script.types.resolvable import Resolvable from ytdl_sub.script.types.resolvable import Resolvable
from ytdl_sub.script.types.syntax_tree import SyntaxTree from ytdl_sub.script.types.syntax_tree import SyntaxTree
@ -145,12 +144,6 @@ class Script:
f"{nested_custom_function.num_input_args}" f"{nested_custom_function.num_input_args}"
) )
def _ensure_lambda_usage_num_input_arguments_valid(self) -> None:
for variable_name, variable_definition in self._variables.items():
for lambda_argument in variable_definition.lambda_arguments:
if Functions.is_built_in(name=lambda_argument.value):
pass
def _validate(self) -> None: def _validate(self) -> None:
self._ensure_no_custom_function_cycles() self._ensure_no_custom_function_cycles()
self._ensure_custom_function_arguments_valid() self._ensure_custom_function_arguments_valid()

View file

@ -12,6 +12,7 @@ from ytdl_sub.script.functions import Functions
from ytdl_sub.script.types.array import ResolvedArray from ytdl_sub.script.types.array import ResolvedArray
from ytdl_sub.script.types.array import UnresolvedArray from ytdl_sub.script.types.array import UnresolvedArray
from ytdl_sub.script.types.resolvable import Argument from ytdl_sub.script.types.resolvable import Argument
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
from ytdl_sub.script.types.resolvable import FunctionType from ytdl_sub.script.types.resolvable import FunctionType
from ytdl_sub.script.types.resolvable import Lambda from ytdl_sub.script.types.resolvable import Lambda
from ytdl_sub.script.types.resolvable import NamedCustomFunction from ytdl_sub.script.types.resolvable import NamedCustomFunction
@ -19,7 +20,6 @@ from ytdl_sub.script.types.resolvable import Resolvable
from ytdl_sub.script.types.resolvable import ReturnableArgument from ytdl_sub.script.types.resolvable import ReturnableArgument
from ytdl_sub.script.types.resolvable import ReturnableArgumentA from ytdl_sub.script.types.resolvable import ReturnableArgumentA
from ytdl_sub.script.types.resolvable import ReturnableArgumentB from ytdl_sub.script.types.resolvable import ReturnableArgumentB
from ytdl_sub.script.types.resolvable import TypeHintedFunctionType
from ytdl_sub.script.types.variable import FunctionArgument from ytdl_sub.script.types.variable import FunctionArgument
from ytdl_sub.script.types.variable import Variable from ytdl_sub.script.types.variable import Variable
from ytdl_sub.script.types.variable_dependency import VariableDependency from ytdl_sub.script.types.variable_dependency import VariableDependency
@ -78,7 +78,7 @@ class CustomFunction(Function, NamedCustomFunction):
raise UNREACHABLE raise UNREACHABLE
class BuiltInFunction(Function, TypeHintedFunctionType): class BuiltInFunction(Function, BuiltInFunctionType):
def validate_args(self) -> "BuiltInFunction": def validate_args(self) -> "BuiltInFunction":
if not self.function_spec.is_compatible(input_args=self.args): if not self.function_spec.is_compatible(input_args=self.args):
raise FunctionArgumentsExceptionFormatter( raise FunctionArgumentsExceptionFormatter(

View file

@ -142,7 +142,7 @@ class FunctionType(NamedArgument, ABC):
@dataclass(frozen=True) @dataclass(frozen=True)
class TypeHintedFunctionType(FunctionType, ABC): class BuiltInFunctionType(FunctionType, ABC):
@abstractmethod @abstractmethod
def output_type(self) -> Type[Resolvable]: def output_type(self) -> Type[Resolvable]:
pass pass

View file

@ -4,8 +4,8 @@ from typing import Type
from typing import TypeVar from typing import TypeVar
from typing import Union from typing import Union
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
from ytdl_sub.script.types.resolvable import NamedType from ytdl_sub.script.types.resolvable import NamedType
from ytdl_sub.script.types.resolvable import TypeHintedFunctionType
from ytdl_sub.script.utils.exceptions import IncompatibleFunctionArguments from ytdl_sub.script.utils.exceptions import IncompatibleFunctionArguments
from ytdl_sub.script.utils.exceptions import UserException from ytdl_sub.script.utils.exceptions import UserException
from ytdl_sub.script.utils.type_checking import FunctionSpec from ytdl_sub.script.utils.type_checking import FunctionSpec
@ -101,7 +101,7 @@ class FunctionArgumentsExceptionFormatter:
def __init__( def __init__(
self, self,
input_spec: FunctionSpec, input_spec: FunctionSpec,
function_instance: TypeHintedFunctionType, function_instance: BuiltInFunctionType,
): ):
self._args = input_spec.args self._args = input_spec.args
self._varargs = input_spec.varargs self._varargs = input_spec.varargs
@ -126,7 +126,7 @@ class FunctionArgumentsExceptionFormatter:
def _received_args_str(self) -> str: def _received_args_str(self) -> str:
received_type_names: List[str] = [] received_type_names: List[str] = []
for arg in self._input_args: for arg in self._input_args:
if isinstance(arg, TypeHintedFunctionType): if isinstance(arg, BuiltInFunctionType):
if is_union(arg.output_type()): if is_union(arg.output_type()):
received_type_names.append( received_type_names.append(
f"%{arg.name}(...)->Union[" f"%{arg.name}(...)->Union["

View file

@ -9,11 +9,11 @@ from typing import Union
from typing import get_origin from typing import get_origin
from ytdl_sub.script.types.resolvable import Argument from ytdl_sub.script.types.resolvable import Argument
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
from ytdl_sub.script.types.resolvable import FunctionType from ytdl_sub.script.types.resolvable import FunctionType
from ytdl_sub.script.types.resolvable import Lambda from ytdl_sub.script.types.resolvable import Lambda
from ytdl_sub.script.types.resolvable import NamedType from ytdl_sub.script.types.resolvable import NamedType
from ytdl_sub.script.types.resolvable import Resolvable from ytdl_sub.script.types.resolvable import Resolvable
from ytdl_sub.script.types.resolvable import TypeHintedFunctionType
from ytdl_sub.script.types.variable import Variable from ytdl_sub.script.types.variable import Variable
from ytdl_sub.script.utils.exceptions import UNREACHABLE from ytdl_sub.script.utils.exceptions import UNREACHABLE
@ -57,7 +57,7 @@ def is_type_compatible(
True if arg is compatible with expected_arg_type. False otherwise. True if arg is compatible with expected_arg_type. False otherwise.
""" """
arg_type: Type[NamedType] = arg.__class__ arg_type: Type[NamedType] = arg.__class__
if isinstance(arg, FunctionType) and isinstance(arg, TypeHintedFunctionType): if isinstance(arg, BuiltInFunctionType):
arg_type = arg.output_type() # built-in function arg_type = arg.output_type() # built-in function
elif isinstance(arg, FunctionType): elif isinstance(arg, FunctionType):
return True # custom-function, can be anything, so pass for now return True # custom-function, can be anything, so pass for now