better indenting in script validation
This commit is contained in:
parent
bb6829a4bc
commit
962a3a2d32
1 changed files with 59 additions and 65 deletions
|
|
@ -118,9 +118,8 @@ class Script:
|
||||||
)
|
)
|
||||||
|
|
||||||
def _ensure_custom_function_usage_num_input_arguments_valid(
|
def _ensure_custom_function_usage_num_input_arguments_valid(
|
||||||
self, definitions: Dict[str, SyntaxTree], prefix: str
|
self, prefix: str, name: str, definition: SyntaxTree
|
||||||
):
|
):
|
||||||
for name, definition in definitions.items():
|
|
||||||
for nested_custom_function in definition.custom_functions:
|
for nested_custom_function in definition.custom_functions:
|
||||||
if nested_custom_function.num_input_args != (
|
if nested_custom_function.num_input_args != (
|
||||||
expected_num_args := len(
|
expected_num_args := len(
|
||||||
|
|
@ -135,31 +134,25 @@ class Script:
|
||||||
)
|
)
|
||||||
|
|
||||||
def _ensure_lambda_usage_num_input_arguments_valid(
|
def _ensure_lambda_usage_num_input_arguments_valid(
|
||||||
self, definitions: Dict[str, SyntaxTree], prefix: str
|
self, prefix: str, name: str, definition: SyntaxTree
|
||||||
):
|
):
|
||||||
for name, definition in definitions.items():
|
|
||||||
for function in definition.built_in_functions:
|
for function in definition.built_in_functions:
|
||||||
spec = FunctionSpec.from_callable(Functions.get(function.name))
|
spec = FunctionSpec.from_callable(Functions.get(function.name))
|
||||||
if lambda_type := spec.is_lambda_like:
|
if not (lambda_type := spec.is_lambda_like):
|
||||||
|
return
|
||||||
|
|
||||||
lambda_function_names = set(
|
lambda_function_names = set(
|
||||||
lamb.value
|
lamb.value for lamb in SyntaxTree(function.args).lambdas if isinstance(lamb, Lambda)
|
||||||
for lamb in SyntaxTree(function.args).lambdas
|
|
||||||
if isinstance(lamb, Lambda)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Only case len(lambda_function_names) > 1 is when used in if-statements
|
# Only case len(lambda_function_names) > 1 is when used in if-statements
|
||||||
for lambda_function_name in lambda_function_names:
|
for lambda_function_name in lambda_function_names:
|
||||||
if Functions.is_built_in(lambda_function_name):
|
if Functions.is_built_in(lambda_function_name):
|
||||||
lambda_spec = FunctionSpec.from_callable(
|
lambda_spec = FunctionSpec.from_callable(Functions.get(lambda_function_name))
|
||||||
Functions.get(lambda_function_name)
|
|
||||||
)
|
|
||||||
if not lambda_spec.is_num_args_compatible(lambda_type.num_input_args()):
|
if not lambda_spec.is_num_args_compatible(lambda_type.num_input_args()):
|
||||||
expected_args_str = str(lambda_spec.num_required_args)
|
expected_args_str = str(lambda_spec.num_required_args)
|
||||||
if lambda_spec.num_required_args != len(lambda_spec.args):
|
if lambda_spec.num_required_args != len(lambda_spec.args):
|
||||||
expected_args_str = (
|
expected_args_str = f"{expected_args_str} - {len(lambda_spec.args)}"
|
||||||
f"{expected_args_str} - {len(lambda_spec.args)}"
|
|
||||||
)
|
|
||||||
|
|
||||||
raise IncompatibleFunctionArguments(
|
raise IncompatibleFunctionArguments(
|
||||||
f"{prefix}{name} has invalid usage of the "
|
f"{prefix}{name} has invalid usage of the "
|
||||||
|
|
@ -202,11 +195,12 @@ class Script:
|
||||||
to_validate.append(("Custom function %", self._functions))
|
to_validate.append(("Custom function %", self._functions))
|
||||||
|
|
||||||
for prefix, definitions in to_validate:
|
for prefix, definitions in to_validate:
|
||||||
|
for name, definition in definitions.items():
|
||||||
self._ensure_custom_function_usage_num_input_arguments_valid(
|
self._ensure_custom_function_usage_num_input_arguments_valid(
|
||||||
prefix=prefix, definitions=definitions
|
prefix=prefix, name=name, definition=definition
|
||||||
)
|
)
|
||||||
self._ensure_lambda_usage_num_input_arguments_valid(
|
self._ensure_lambda_usage_num_input_arguments_valid(
|
||||||
prefix=prefix, definitions=definitions
|
prefix=prefix, name=name, definition=definition
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, script: Dict[str, str]):
|
def __init__(self, script: Dict[str, str]):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue