> On 17 Jun 2016, at 12:22, Guille Polito <[email protected]> wrote:
> 
> Hi!
> 
> How is this packaged? I don't want to introduce a dependency to the 
> refactoring browser into the kernel…
> 
There is *NO* dependency.


> Guille
> 
> -------- Original Message --------
>> Hi,
>> 
>> 
>> I have dusted off and improved the automatic refactoring of deprecations.
>> 
>> - when the refactoring engine is not present, it falls back to a standard 
>> deprecation
>> - It does not introduce any dependencies (can just be in the Kernel, the 
>> only cost is one method of 10 lines).
>> - It sets the author so it does not require initials
>> - It refactors ​*only*​ the sending (offending, deprecated) send site. So a 
>> second selector that is identical (which might be a different method and not 
>> deprecated) will not be affected.
>> 
>> The way to use it is this:
>> 
>> ifNotNilDo: aBlock
>>     self
>>         deprecated: 'Please use #ifNotNil: instead'
>>         transformWith: '`@receiver ifNotNilDo: `@statements' -> '`@receiver 
>> ifNotNil: `@statements'.
>>     ^ aBlock ifNotNil: aBlock
>> 
>> 
>> As we try to provide already Lint rules for deprecations (or at least should 
>> have..) the amount of additional work is not much.
>> 
>> This is the full implementation:
>> 
>> deprecated: anExplanationString transformWith: aRule
>>     | rewriteRule method context node |
>>     context := thisContext sender sender.
>>     (Smalltalk globals hasClassNamed: #RBParseTreeRewriter)
>>         ifFalse: [ ^self deprecated: anExplanationString ].
>>     method := context method.
>>     node := context sourceNodeExecuted.
>>     rewriteRule := (Smalltalk globals classNamed: #RBParseTreeRewriter) new 
>> replace: aRule key with: aRule value.
>>     (rewriteRule executeTree: node)
>>         ifFalse: [ ^ self ].
>>     node replaceWith: rewriteRule tree.
>>     Author
>>         useAuthor: 'AutoDeprecationRefactoring'
>>         during: [method methodClass compile: method ast formattedCode 
>> classified: method protocol]
>> 
>> https://pharo.fogbugz.com/f/cases/18507/
>> 
>> This is *with intention* the absolute “simplest thing that can possibly 
>> work”. There is no interactive tool to preview refactoring in interactive
>> mode, or some way to opt in or out.
>> 
>> The power of things like this comes from actually using them, not from being 
>> perfect...
>> 
>>      Marcus
> 


Reply via email to