Cyril, something like this:

| env rewriter result methods changes |
env := RBBrowserEnvironment default forPackages: (RPackageOrganizer default
packages ).

rewriter := RBParseTreeRewriter new.
rewriter
replace:'`@receiver detect: `@arg1 ifFound: [ :`arg2 | `arg2 ] ifNone:
`@arg3' with: '`@receiver detect: `@arg1 ifNone: `@arg3'.

changes := Array with: (RBSmalllintChecker runRule: (RBTransformationRule
new
rewriteRule: rewriter;
yourself)
onEnvironment:  env  ) builder.

 (ChangesBrowser changes: changes) open.

On Thu, May 7, 2020 at 8:22 PM Cyril Ferlicot D. <cyril.ferli...@gmail.com>
wrote:

> Hi,
>
> I was wondering if it was possible with the parse tree rewriter to match
> a block parameter?
>
> I would like to be able, for example, to rewrite:
>
> `#() detect: #odd ifFound: [ :e | e ] ifNone: [ self toto ]`
>
> as
>
> `#() detect: #odd ifNone: [ self toto ]`
>
> But I don't know how to express this rule with the rewrite rules of Pharo.
>
> I tried multiple things such as:
>
> '`@receiver detect: `@arg1 ifFound: [ `@arg2 | `@arg2 ] ifNone: `@arg3 '
> -> '`@receiver detect: `@arg1 ifNone: `@arg3'
>
> or
>
> '`@receiver detect: `@arg1 ifFound: [ :`@arg2 | `@arg2 ] ifNone: `@arg3
> ' -> '`@receiver detect: `@arg1 ifNone: `@arg3'
>
> Without sucess.
>
> Is there a way to do that or is it a limitation of the rewrite syntax?
>
> --
> Cyril Ferlicot
> https://ferlicot.fr
>
>

Reply via email to