Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
2019 posts
|
Hi,
RewriteTool is not working in latest pharo, complaining about #MNU CheckboxMorph>>hShrinkWrap when opening RewriteRuleBrowser, and #MNU LabelMorph>>hShrinkWrap for RewriteRuleBuilder. I am not familiar with Morphic enough and I don't know why the morphs are accessed directly from Spec to fix it... so I can only report it. :) Thanks, Peter |
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
194 posts
|
Hi Peter! In any case if you just remove #hShrinkWrap message sends from #initializeWidgets, it will only change UI a bit, you will be able to work with tool. But soon I'll fix it. Thanks for reporting :) Mark 2015-11-17 13:30 GMT+02:00 Peter Uhnák <[hidden email]>:
|
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
194 posts
|
Hi again, it should work now ;) 2015-11-17 13:40 GMT+02:00 Mark Rizun <[hidden email]>:
... [show rest of quote] |
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
2019 posts
|
Thanks! One more question though: is it possible to somehow reference the method's name? For example I would like to rewrite method [[[ navy ^ self fromHexString: '000080' ]]] to [[[ navy ^ ColorRegistry at: #navy ifAbsentPut: [ self fromHexString: '000080' ] ]]] of course for that I would need to know the selector's name... ^ ColorRegistry at: ``@selector ifAbsentPut: [ self fromHexString: ``@color ] Is it possible? Peter On Tue, Nov 17, 2015 at 12:58 PM, Mark Rizun <[hidden email]> wrote:
... [show rest of quote] |
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
1618 posts
|
2015-11-17 13:20 GMT+01:00 Peter Uhnák <[hidden email]>:
... [show rest of quote] In RBParseTreeRewriter, yes. Thierry
... [show rest of quote] |
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
194 posts
|
In reply to this post by Peter Uhnak
Actually for now it's not possible as I parse expression not a method. |
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
2019 posts
|
In reply to this post by Thierry Goubier
On Tue, Nov 17, 2015 at 1:25 PM, Thierry Goubier <[hidden email]> wrote:
... [show rest of quote] Could you give me an example? I am not sure how the "variable" parts are expressed (since unlike RewriteTool there is not even a useful class comment for the replacement). Thanks, Peter |
Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
1618 posts
|
2015-11-17 13:40 GMT+01:00 Peter Uhnák <[hidden email]>:
... [show rest of quote] What you do is you add the necessary Smalltalk code to your meta variable in the RB 'search' pattern and there you can recover the method node and ask it the selector. I have an example in a Gist [1]: rewrite := RBParseTreeRewriter new replace: 'self parse: `#l `{:node :dic | | n | n := ''source'' , (node methodNode selector allButFirst: 4). dic at: #n put: n. PythonParserTests compile: (RBParser parseMethod: n, '' ^ '', `#l newSource) formattedCode classified: ''resources''. true }' with: 'self parse: `{:dic | RBParser parseExpression: ''self '', (dic at: #n) }'. What you do is, with the node you target (here the `#l), you add to it a block (the `{:node :dic | ... } ). The block usually refines the search (if the block returns true -> match, if it returns false -> match failed) but it can also execute arbitrary code and add contextual information for the rewrite. So, :node contains the matched node (here the literal) and, through it you can reach the method top node (#methodNode). And to use it in the rewrite, you store it in the :dic (this dictionary contains the variables matched); if you have multiple matches in the same method, then each time you will get a new dictionary. Beware: if your block is not in a message selector position in your pattern, then it behaves as a node (a variable) by itself. Using parenthesis in this case can help. Thierry
|
Free forum by Nabble | Edit this page |