2017-10-04 14:34 GMT+02:00 Henrik Sperre Johansen <henrik.s.johansen@veloxit.no>:
Denis Kudriashov wrote
>> Would it?
>> With pure method tags, you'd do something like:
>> SomeClass >> #renamePackage: aPackage
>>
> <command: 'Rename package'
>>
>�� ��category: 'Package'
>>�� order: 25
>>�� shortcut: #($r meta)>
>> ... method renaming package here ...
>
> Then have different pragma traversers capable of creating the actual menus
> /
>> commands invoking such methods.
>>
>
> So instead of simple subclassing of ClassAnnotation you would suggest me
> to
> implement pragma traversal/interpreter?
> I would prefer first. It gives me for free the object with any structure
> without any tricky literal interpretation logic.
> For me annotation is just obviously simpler solution.

A traverser doesn't have to be a lot of work;
http://forum.world.st/Having-comments-for-pragma-tp4902987p4903058.html

Denis Kudriashov wrote
> Also try to think how to support blocks in parameters with pragma
> approach.
> And how fun would be to debug them.
>�� It is for the question about
> "restricted anyway".

You wouldn't need them. What to do with the tag, is up to the traverser.
For instance, #perform'ing one of the literal args on the domain class
traverser creates, returning an appropriate block, if strictly necessary.

Which means restriction to me because I could not simply use a block in the place of pragma.
��

Denis Kudriashov wrote
>�� Really, with annotations you have normal smalltalk
> code for annotating classes. No magic. And implementation is really
> simple.

Same with a traverser; the normal smalltalk code to create your domain
objects�� is simply in a different place; the traverser part of the package
defining said domain, rather than as an extension method marked with a tag.

But example with #($r meta) shows that it is not normal smalltalk code. I could not put halt here (I expect that halt will work, but it will debug interpreter code instead of expression).��
Also extension methods here is a very important feature and not just a mechanism. Because it provides the way how to annotate existing classes from external packages. It is pretty cool feature which not exists in java or C#.


I guess it's best to just agree to disagree, and since you're the one
implementing... ;)

Ok, Henrik. But last note:
Pragma is low level annotation mechanism and actually more than annotation which was discussed many times in past.��
But with this library I tried to generalise the way how we use pragmas to annotate classes.��
Of course you can use pragmas to implement my examples. But I argue that it will require more complex code.
��
Best regards,
Denis��

Looking forward to trying it out!