2015-06-23 9:44 GMT+02:00 Yuriy Tymchuk <yuriy.tymc...@me.com>: > I would say, that besides #checkClass: and #checkMethod: rules should also > have #checkMetaClass: this will allow rule developers to be more flexible, > and will add a bit more certainty. > > Because sometimes you need to check both, then you implement a method and > call it from #checkClass: and #checkMetaClass:. Sometimes you only need to > check one of them. And you will always know that metaclass will not sendup > in your method. >
And maybe we should exclude traits and provide a checkTrait method, because now there are some lint rules failing because there is code like checkClasse: aClass |meta| meta := aClass class. .... check on meta and if this method is called for a trait like TBehavior, TBehavior class -> Trait meta is not the classTrait of TBehavior but the Metaclass of Trait. > > Uko > > On 23 Jun 2015, at 08:40, Guillermo Polito <guillermopol...@gmail.com> > wrote: > > What if rules that need metaclasses ask for them explicitly to the class? > > environment allClasses do: [ :theInstanceSide | > self doSomethingWith: theInstanceSide. > self doSomethingWith: theInstanceSide classSide. ] > > Just putting another possibility on the table... > > El lun., 22 de jun. de 2015 a la(s) 10:40 p. m., Nicolai Hess < > nicolaih...@web.de> escribió: > >> >> 2014-12-18 22:32 GMT+01:00 Yuriy Tymchuk <yuriy.tymc...@me.com>: >> >>> I’m ready to help with this issue, but as far as I can tell, it’s not >>> hard to implement the mentors. Here we should decide on the meaning of the >>> phrases. What are "all behaviors” and so on. The reason of the refactoring >>> that I’ve done was that there were two methods with similar names that were >>> doing different things. >>> >>> Uko >>> >>> On 18 Dec 2014, at 21:19, Nicolai Hess <nicolaih...@web.de> wrote: >>> >>> Hi, >>> >>> some time ago Yuriy cleaned up the RBBrowserEnvironment methods for >>> allClassesAndTraits(Do), classesDo, .... >>> >>> The fix was good and necessary (I think). But they had an impact >>> on some SmallLint-rules (they arent applied on the class side) and the >>> behavior >>> for the different Environments changed (compared with Pharo3 >>> (-> 14621 <https://pharo.fogbugz.com/default.asp?14621> Some >>> RBBrowserEnvironments don't work well with Metaclasses)) >>> >>> As some SmallLint-rules need to iterate over the metaclasses as well and >>> I don't want to revert Yuriys change, I 'll add another method that >>> collect classes and metaclasses. >>> >>> So, I need some help, how to name this methods: >>> >>> all classes (Object, Integer, ....) -> allClasses, ok >>> all classes and metaclasses (Object, Object class, Integer class ) -> ? >>> allBehaviors? >>> all classes and traits -> allClassesAndTraits, ok >>> all classes and meta classes and traits and class traits -> ? no idea! >>> all metaclasses and class traits -> allMeta(ClassesAndTraits) ? I don't >>> know if we need this >>> >>> One problem with "allBehaviors" is, SystemNavigation uses allBehaviors >>> to iterate >>> over classes, metaclasses, traits and class traits, >>> allthough a Trait is not a Behavior. (TClass isBehavior -> false) >>> >>> feedback is welcome >>> >>> >>> nicolai >>> >>> >>> >>> >> >> >> Pharo 3.0: >> SystemNavigation default allClasses size. 4024 >> Smalltalk allClasses size. 4024. >> RBBrowserEnvironment default allClasses size. 4024 >> RBBrowserEnvironment default classes size. 8048 >> >> Pharo 4.0: >> >> SystemNavigation default allClasses size. 5012 >> Smalltalk allClasses size. 5012 >> RBBrowserEnvironment default allClasses size. 5012 >> RBBrowserEnvironment default classes size. 5012 >> >> -> I "define" the Pharo 4.0 behavior as the correct one. >> RBEnvironment>>#classes should not contain meta classes. >> >> Some other RBEnvironments and/or RBRules rely on the "classes = classes >> and metaclasses" (-> see issue >> 14621 <https://pharo.fogbugz.com/default.asp?14621> >> Some RBBrowserEnvironments don't work well with Metaclasses >> 14230 <https://pharo.fogbugz.com/default.asp?14230> >> Some rules aren't applied on the classside anymore >> 15302 <https://pharo.fogbugz.com/default.asp?15302> >> a RBEnvironment from #referencesTo: does not list meta classes >> >> I will change them, and if appropiate, add a new >> classesAndMetaclasses resp. classesAndMetaclassesDo: >> >> I don't know about classesAndMetaclassesTraits. And I skip "behaviors" >> for now. >> #allBehaviors is suspicious to me, I still don't >> know what they are: >> >> Smalltalk globals allBehaviors includes:TBehavior. -> true (1) >> TBehavior isBehavior. -> false (!) >> >> >> >> >