Hi Vitor,

I got it to work (integrated it as a command into my IDE, and wrote
the auto-detect part for the permutation), with the following
algorithm (I've removed the IDE-specific part):

| aClass aSel newSel ast aMap |
aClass := RefactoringReformatExample.
aSel := #with:doThis:
newSel := UIManager default
        request: 'Enter the new selector and arguments'
        initialAnswer: (aClass >> aSel) ast selectorAndArgumentNames.
    (newSel isNil or: [ newSel isEmpty ])
        ifTrue: [ self inform: 'Cancelled'.
            ^ self ].
    ast := aClass compiler parse: newSel.
    aMap := ast argumentNames
        collect: [ :e |
            (aClass >> aSel) ast argumentNames
                indexOf: e
                ifAbsent: [ self error: 'Incorrect argument name: ' , e.
                    ^ self ] ].
            (RBRenameMethodRefactoring
                renameMethod: aSelector
                in: aClass
                to: ast selector
                permutation: aMap) execute

If your initial method is 'with: arg1 doThis: arg2', you write the new
selector as 'doThis: arg2 with: arg1' and it will pick up the
permutation map for you.

Thierry

Le mar. 26 mai 2020 à 17:05, Vitor Medina Cruz <vitormc...@gmail.com> a écrit :
>
> Will wait then.
>
> I tried to use the RB classes but with no success. There are few docs and 
> test code are hard to understand (still not sure if I should use transform ou 
> primitiveExecute). I did this:
>
> (RBRenameMethodRefactoring new
>     renameMethod: #with:doThis:
>     in: RefactoringReformatExample
>     to: #withh:doThis:
>     permutation: #(1 2)) primitiveExecute
>
> and
>
> (RBRenameMethodRefactoring new
>     renameMethod: #with:doThis:
>     in: RefactoringReformatExample
>     to: #withh:doThis:
>     permutation: #(1 2)) tranform
>
> but nothing happens... It is really odd, I expected an error at least.
>
> I am assuming permutation means the change of params order.
>
>
> On Fri, May 22, 2020 at 3:50 AM Stéphane Ducasse <stephane.duca...@inria.fr> 
> wrote:
>>
>> we are working with sebastian jordan on a better rewriter.
>>
>> S.
>>
>> On 21 May 2020, at 17:17, Vitor Medina Cruz <vitormc...@gmail.com> wrote:
>>
>> Interesting, I will have a look at it.
>>
>> On Thu, May 21, 2020 at 11:52 AM Thierry Goubier <thierry.goub...@gmail.com> 
>> wrote:
>>>
>>> Hi Vitor,
>>>
>>> as a matter of fact, the infrastructure for doing what you're looking
>>> for is already there.
>>>
>>> The algorithm is the following:
>>>
>>> - create a scope (something based on RBBrowserEnvironment, such as
>>> RBClassEnvironment or based on regexes and AND / OR operations:
>>> RBAndEnvironment, RBNotEnvironment, which allows for virtually
>>> anything, such as all #printString methods in the package X that do
>>> not belong to class Y)
>>>
>>> - create a refactoring command: if it is not a pre-existing command
>>> such as rename class, etc..., then writing a pattern matcher is
>>> possible with RBTreeRewriter.
>>>
>>> - execute the refactoring command on the environment, changing only
>>> for the subset of code visible in the environment.
>>>
>>> Normally, the system browser or the search tools should automatically
>>> setup the environment for you, and scope accordingly most of the
>>> refactoring commands. As far as I know, there isn't yet a shell giving
>>> you the full pattern matching rewrite power, but some work was
>>> underway (GUI tools).
>>>
>>> Going with the source files as you did also work...
>>>
>>> Regards,
>>>
>>> Thierry
>>>
>>> Le jeu. 21 mai 2020 à 15:30, Vitor Medina Cruz <vitormc...@gmail.com> a 
>>> écrit :
>>> >
>>> > Well, as it seems, there is no way of find/replacing other than inside a 
>>> > single method.
>>> >
>>> > As a workaround, I did the following:
>>> >
>>> > 1- Committed all my image work in progress;
>>> > 2- Opened the project structure in an external tool (notepad++ in this 
>>> > case) and did the find/replace there;
>>> > 3- Committed it using git command line;
>>> > 4- Back to the image, I did a repair repository from iceberg checking out 
>>> > and ignoring changes to the image (safe because I did commit everything 
>>> > before)
>>> >
>>> > If there are many places to change, it is worth.
>>> >
>>> > Regards,
>>> > Vitor
>>> >
>>> > On Tue, May 19, 2020 at 12:56 PM Vitor Medina Cruz <vitormc...@gmail.com> 
>>> > wrote:
>>> >>
>>> >> Hello,
>>> >>
>>> >> Is there a way to make find replace in a class scoped way? I can do that 
>>> >> with finder, but I figured only with package scoping. I wanna to change 
>>> >> the name of a variable in multiple methods, and also I would like to 
>>> >> regex replace an expression also in multiple methods.
>>> >>
>>> >> Regards,
>>> >> Vitor
>>>
>>
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr / http://www.pharo.org
>> 03 59 35 87 52
>> Assistant: Aurore Dalle
>> FAX 03 59 57 78 50
>> TEL 03 59 35 86 16
>> S. Ducasse - Inria
>> 40, avenue Halley,
>> Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
>> Villeneuve d'Ascq 59650
>> France
>>

Reply via email to