-
Notifications
You must be signed in to change notification settings - Fork 44
Open
Description
It would be nice if we could write something like this:
add_class_tostring = (target, name) ->
target.<tostring> = () => "<class '#{name}'>"
target
#[add_class_tostring]
class FooBar
-- ...
print(FooBar) --> <class 'FooBar'>It would be equivalent to this:
FooBar = add_class_tostring(class FooBar
-- ...
"FooBar")The name parameter would be statically determined from the declaration. This has the advantage that a statement like
#[wrap_func]
local x = () -> print("...")would also have access to the name (x in this case). That would be equal to:
local x = wrap_func((() -> print("...")), "x")Of course, name would have to be nil if the statement doesn't have a name (like a name-less class).
Additionally, macros should also be invocable as attributes:
macro example = (target, name) ->
target
#[$example]
class FooBar
-- ...That would be equivalent to:
FooBar = $example(class FooBar
-- ...
FooBar)Note that, unlike a regular macro, the output of an attribute macro would not need to be wrapped in a do-expression.
Metadata
Metadata
Assignees
Labels
No labels