Hi James,
Regarding the “transpile into Python” syntax with with statements: Can I see an example of this syntax when used in pathlib? I’m a bit worried this syntax is too long and “in the way”, unlike decorators which are before the function body. Or do you mean that both MockP and your syntax should be supported?
Would
with requiring: assert arg1 < arg2, “message”
Be the code you type or the code that’s actually run?
That's the code you would type. Let me make a full example (I'm omitting "with contracts" since we actually don't need it).
You would read/write this:
def some_func(arg1: List[int])->int:
with requiring:
assert len(arg1) > 3, "some description"
with oldie as O, resultie as result, ensuring:
if SLOW:
O.var1 = sum(arg1)
assert result > sum(arg1) > O.var1
assert len(result) > 5
This would run:
@requires(lambda P: len(P.arg1) > 3, "some description")
@snapshot(lambda P, var1: sum(P.arg1), enabled=SLOW)
@ensures(lambda O, P, result: result > sum(arg1) > O.var1, enabled=SLOW)
@ensures(lambda result: len(result) > 5)
I omitted in the example how to specify a custom exception to avoid confusion.
If we decide that transpiler is the way to go, I'd say it's easier to just stick with lambdas and allow no mock-based approach in transpilation.
Cheers,
Marko