macro_prototype icon indicating copy to clipboard operation
macro_prototype copied to clipboard

Allow a class/mixin to implicitly apply a macro wherever it is mixed in or extended?

Open jakemac53 opened this issue 4 years ago • 2 comments

I am not sure this is a good idea, but filing it to have a central area for discussion.

The general idea is to have a mechanism available whereby mixing in or extending a particular class would auto apply some macros to the class that mixed it in or extended it.

This would eliminate the need for annotations in some cases, and enable frameworks to "hide" the macro applications from their users. Consider for instance:

class MyWidgetState extends State<MyWidget> with AutoListener {}

Instead of:

@autoListen
class MyWidgetState extends State<MyWidget> {}

Potentially frameworks could even add macro applications to their base classes (ie: State or Widget) in this example.

Pros

  • Hides the magic in some cases
  • Potentially less boilerplate

Cons

  • Hides the magic, making it more magical, and less expected
  • Two ways to do the same thing. Some macro authors may choose to use this just to avoid the annotation, making there two ways to do exactly the same thing.
  • Potential overhead in more complicated class hierarchies that otherwise aren't necessary (if the mixin is only used to apply the macro for instance)

jakemac53 avatar Aug 02 '21 16:08 jakemac53

Related: Allow a macro applied to a function to do something at every invocation site of the function. That could be nice for debug-only code so that the call can be completely eliminated, including the evaluation of its arguments.

munificent avatar Aug 02 '21 20:08 munificent

Related: Allow a macro applied to a function to do something at every invocation site of the function. That could be nice for debug-only code so that the call can be completely eliminated, including the evaluation of its arguments.

I think that probably becomes https://github.com/jakemac53/macro_prototype/issues/29 - or at least this could cover that use case.

jakemac53 avatar Aug 02 '21 20:08 jakemac53