Hi Henrik, Thanks for the the link. Interestingly, I was presented the same page on an old version, https://web.archive.org/web/20090227160738/http://st-www.cs.uiuc.edu/users/brant/Refactory/Rewrite.html <https://web.archive.org/web/20090227160738/http://st-www.cs.uiuc.edu/users/brant/Refactory/Rewrite.html>. Good to see, that there is still a maintained source.
As for the rule you presented, that is pretty cool, you got way closer to the goal than I did. John Brant mentioned that these kind of matches/transformations are not easily supported by RB by design, especially cascades seem to be problematic, as well as sequenced/nested message sends. I am now looking into the RewriteTool (http://smalltalkhub.com/#!/~MarkRizun/RewriteTool/commits <http://smalltalkhub.com/#!/~MarkRizun/RewriteTool/commits>) and Phorms (http://smalltalkhub.com/#!/~CamilleTeruel/Patterns/commits <http://smalltalkhub.com/#!/~CamilleTeruel/Patterns/commits>), which seems to have a more powerful pattern matching language. Cheers, Manuel > On 19 Feb 2019, at 14:04, Henrik Sperre Johansen > <henrik.s.johan...@veloxit.no> wrote: > > Manuel Leuenberger wrote >> Hi, >> >> I am looking into the RB pattern language for refactoring and I am having >> trouble matching and replacing non-trivial pattern. Given the following >> excerpt, I want to match "b shape >> <rest> >> ." and replace it with "b shape: [ :x | x >> <rest> >> ]" >> >> b shape circle >> size: 15; >> color: (Color veryLightGray alpha: 0.4); >> if: [ :value | toBeRed includes: value ] fillColor: Color red. >> >> How can I do this? I tried using "b shape ``@messages", but this only >> matches "b shape circle". Using "b shape `message `;middle; `;last" for >> some reason then also matches the following, which I think it should not: >> >> b edges >> moveBehind; >> connectToAll: [ :v | >> v \\ 20 ~~ 0 >> ifTrue: [ Array with: v + 1 with: v + 20 ] >> ifFalse: [ Array with: v + 20 ] ]. >> >> There seems not be too much documentation about the pattern language, only >> found tests, some short help description from RB and Yuriy's MatchTool. >> How can I match the node correctly? >> >> Cheers, >> Manuel > > The best documentation is at https://refactory.com/rewrite-tool/ > What isn't covered, is cascade nodes (`@;messages1), but my first naive > attempt did not work as I expected on your example; > '(b shape `@method: `@keywords) > @;messages1: `@args' > -> > 'b shape: [ :x | > (x `@method: `@keywords) > @;messages1: `@args ]' > > b shape circle > size: 15; > color: (Color veryLightGray alpha: 0.4); > if: [ :value | toBeRed includes: value ] fillColor: Color red > -> > b > shape: [ :x | x circle size: 15 ]; > shape: [ :x | x circle color: (Color veryLightGray alpha: 0.4) ]; > shape: [ :x | x circle if: [ :value | toBeRed includes: value ] > fillColor: Color red ] > > > > -- > Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html >