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