ah looks very nice, indeed much more powerful than my hack.
If you have time, switch to real regular expressions, because things like 
> add: (MethodCategorizationRule whenSelectorMatches: 'as*' categorizeIn: 
> #converting);
will easily produce false positives. For instance #assert: will end up in 
converting, which is not what you want ;)
=> /as[A-Z][a-zA-Z]*/ for instance does a much better job


On 2013-08-14, at 15:24, Stéphane Ducasse <[email protected]> wrote:
> Ok I checked and I prefer the one I used because you can express nice rules :)
> My next step will be to check the tests again, hack/replace the 
> methodClassifier and code with the hacked version for a while
> and push everything in the system. Now I will look to see how to make them 
> polymorphic because the classifier is simpler
> 
> Here is the default rules list (I added bench from the other list).
> 
> What is nice is that 
>       - we can express that the superclass should be used in last resort
>       - I filtered the extensions for now.
> 
> 
> 
> defaultCategorizationRules
> 
>       "The order is relevant, the categorizer uses the first rule matching - 
> DF"
> 
>       ^OrderedCollection new
>               add: MethodCategorizationRule forAccessors;
>               
>               "initialize"
>               add: (MethodCategorizationRule whenSelectorMatches: 
> 'initialize*' categorizeIn: #initialization);
>               add: (MethodCategorizationRule whenSelectorMatches: 'init*' 
> categorizeIn: #initialization);
>               add: (MethodCategorizationRule whenSelectorMatches: 'default*' 
> categorizeIn: #defaults);
>               
>               add: (MethodCategorizationRule whenSelectorMatches: 'as*' 
> categorizeIn: #converting);
>               add: (MethodCategorizationRule whenSelectorMatches: 'hash' 
> categorizeIn: #comparing);
>               "order is important"
>               
>               "testing"
>               add: (MethodCategorizationRule whenSelectorMatches: 'is*' 
> categorizeIn: #testing);
>               add: (MethodCategorizationRule whenSelectorMatches: 'has*' 
> categorizeIn: #testing);
>               
>               add: (MethodCategorizationRule whenSelectorMatches: '=' 
> categorizeIn: #comparing);
>               
>               
>               add: (MethodCategorizationRule whenSelectorMatches: 'new' 
> categorizeIn: #'instance creation');
>               add: (MethodCategorizationRule whenSelectorMatches: 'setting' 
> categorizeIn: #'settings');
> 
>               add: (MethodCategorizationRule whenSelectorMatches: 'printOn:' 
> categorizeIn: #printing);
>               add: (MethodCategorizationRule whenSelectorMatches: 'storeOn:' 
> categorizeIn: #printing);
>               
>               add: (MethodCategorizationRule whenSelectorMatches: '*copy*' 
> categorizeIn: #copying);
>               
>               add: (MethodCategorizationRule whenSelectorMatches: 'draw*' 
> categorizeIn: #drawing);
>               add: (MethodCategorizationRule whenSelectorMatches: 'bench*' 
> categorizeIn: #benchmarking);
>               add: (MethodCategorizationRule whenSelectorMatches: 'signal*' 
> categorizeIn: #signalling);
>               add: (MethodCategorizationRule whenSelectorMatches: 'add*' 
> categorizeIn: #adding);
>               add: (MethodCategorizationRule whenSelectorMatches: 'remove*' 
> categorizeIn: #adding);
>               
>               add: (MethodCategorizationRule whenSelectorMatches: 'open*' 
> categorizeIn: #opening);
>               add: (MethodCategorizationRule whenSelectorMatches: 'update*' 
> categorizeIn: #updating);
>               add: (MethodCategorizationRule whenSelectorMatches: 'change*' 
> categorizeIn: #updating);
>               
>               add: (MethodCategorizationRule whenSelectorMatches: 'accept*' 
> categorizeIn: #'visitor accepting');
>               add: (MethodCategorizationRule whenSelectorMatches: 'visit*' 
> categorizeIn: #visiting);
> 
>               add: (MethodCategorizationRule whenSelectorMatches: 'menu*' 
> categorizeIn: #menus);
> 
>               add: (MethodCategorizationRule whenSelectorMatches: 'value' 
> categorizeIn: #value);
>               
>               "test cases"
>               add: (MethodCategorizationRule 
>                                       whenSelectorMatches: 'test*'
>                                       andClassInheritsFrom: TestCase
>                                       categorizeIn: #tests);
>                                       
>               add: (MethodCategorizationRule 
>                                       whenSelectorMatches: 'setUp'
>                                       andClassInheritsFrom: TestCase
>                                       categorizeIn: #'setup');
>               add: (MethodCategorizationRule 
>                                       whenSelectorMatches: 'tearDown'
>                                       andClassInheritsFrom: TestCase
>                                       categorizeIn: #'setup');
>               
>               "baselines, versions..."
>               add: (MethodCategorizationRule 
>                                       whenSelectorMatches: 'version*'
>                                       andClassMatches: 'ConfigurationOf*'
>                                       categorizeIn: #'versions');
>               add: (MethodCategorizationRule 
>                                       whenSelectorMatches: 'baseline*'
>                                       andClassMatches: 'ConfigurationOf*'
>                                       categorizeIn: #'baselines');
>               add: (MethodCategorizationRule
>                                       whenSelectorMatches: 'development*'
>                                       andClassMatches: 'ConfigurationOf*'
>                                       categorizeIn: #'symbolic');
>               add: (MethodCategorizationRule 
>                                       whenSelectorMatches: 'stable*'
>                                       andClassMatches: 'ConfigurationOf*'
>                                       categorizeIn: #'symbolic');
>               
>               
>                                       
>               add: MethodCategorizationRule 
> usingMostUsedCategoryInSuperClasses;
>               add: MethodCategorizationRule usingMostUsedCategoryInImage;
>               yourself
> 
>>> Did you use the method categorizer that is already in the image?
>>> 
>>> => MethodClassifier
>>> 
>>> it implements already a lot of rules, so you should plug in your tool there 
>>> or remove MethodClassifier and make it work with nautilus. otherwise we 
>>> have a lot of duplicated functionality.
>> 
>> I was not aware of it I will look at it.
>> In fact there was a method categorizer in a nice package with tests and I 
>> took this one and adapted it.
>> I will check the rules. 
>> 
>> Stef
>> 
>> 
> 
> 


Reply via email to