[Pharo-dev] Uniformizing Pharo

Stéphane Ducasse stephane.ducasse at inria.fr
Wed Aug 14 14:24:41 EDT 2013


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
> 
> 





More information about the Pharo-dev mailing list