Could we deselect check box by default in Nautilus if refactoring suggests instVar1 / instVar1? Every time have to go through the list and deselect...
Cheers, Alex On 8 December 2016 at 14:11, Eliot Miranda <eliot.mira...@gmail.com> wrote: > Hi Nicolas, > > On Dec 8, 2016, at 1:16 AM, Nicolas Passerini <npasser...@gmail.com> > wrote: > > Let me recapitulate a little. > A) What to do in case that a method with same selector already exists in > the same class? > So far I think we've come up with four ideas: > 1. Create with an alternative name such as instVar1 / instVar1: > 2. Create with an alternative name but ask the user what the name should > be. > 3. Replace existing method with simple accessor. > 4. Do nothing. > > > To be clear, you don't mean Do Nothing; you mean Issue an Error and Abort > the Refactoring right? > > > I think that the last one is the best alternative and should be the > default action. Let me analyze the others: > 1. Is the current behavior, but I always end up deleting the method, I > can't think of a situation in which I want to keep a method named #name1 . > I know that there was a lot of thinking on top of this ideas, but even so > I think that we can (should) rethink things once in a while. > > 2. A little better, because lets me select a name better than #name1. > Still I do not like it, because this means that I have a Class with > - an instance variable 'name' > - a method #name which is not the accessor for 'name' inst var. > - and an accessor which is named in another way > > I think this can happen in two situations: > - The original #name method is in fact a (smarter) accessor (i.e., for > example it provides a lazy initialization). In this case the best action is > 4 => do nothing, accessor already exists, do not provide a new one. > - The original #name does something else, that maybe has nothing to do > with the variable name... in this case, I think the best is aborting the > refactor. I am not proposing that refactoring browser should abort the > refactor automatically, probably not, but that is what I would do as user: > my class has a weird name clash, so I should rename either the inst var or > the method, it has no automatic solution. > > I am not sure about how the "generate accessors" could help me coping with > name clashes, but I do not like generating accessor with another name > different from the inst var name is a good idea. We could have this as an > option to the user, but should not be the default. > > 3. This is really dangerous, we shouldn't do it. I am not sure if someone > would like to have this as a (non default) option. > > > B) What if the colliding method is in a superclass? > Well, pretty much the same but: > - in option 3 instead of replacing a method you could override it. > - the method in the superclass could not be a "smarter accessor" unless > you are trying to create accessors in subclass for an inst var in the > superclass... I do not like it. So I'd consider it allways as a name clash. > > Then I think that the best option is still do nothing (option 4). You > could offer to create method with another name as alternative (option 2)... > but I still think that this kind of name "coincidences" may introduce bugs > in the future and should be avoided. > > C) Colliding methods in subclasses. > Here we have a more subtle situation because the existing method could be > a smarter accessor, that even could have its motivation to be there (for > example because initialization code only is useful for one subclass). > > I still think that doing nothing could be a safe solution, better than > creating it with an alternative name (but we could allow it also). > > Here we could think also about writing the accessor, because it will not > override preexistent behavior. But we have to think about a few situations: > - Easy, if any of the colliding methods (they could be serveral one for > each subclass) is not a smarter accessor... we have name clashes and we > cannot do anything. > - If all colliding methods are smart accessors, we could create one in the > superclass, provided that there exists at least one subclass which does not > provide its own implementation. > > > Of course there is not precise way of determining if a preexistent method > can be considered as a smarter accessor or not... so we only can let the > user decide. > > To resume: > - Doing nothing will be the best default as it is suitable for all cases, > and can not do any harm. > - Creating methods with alternative names could be optional, but shouldn't > be default. In this case I prefer to ask the user for a name instead of > creating one automatically. > - Creating the method even in case of collision can be dangerous... I am > not sure if we should even allow it as an option. > > 2016-12-07 0:03 GMT+01:00 Ben Coman <b...@openinworld.com>: > >> How about mostly keeping the existing behaviour, but default to >> collisions being deselected? >> Then at least you don't need to search for it. >> It minimises the chance of missing it by mistake. >> The deselected item easily stands out to be reselected if required. >> >> P.S. An additional side idea: If collision is from a superclass then >> append (Superclass>>name) to the list item, and clicking on it shows a >> code dialog to the right similar to Spotter code review pane, to make >> a review easier. >> >> cheers -ben >> >> On Tue, Dec 6, 2016 at 10:09 PM, Yuriy Tymchuk <yuriy.tymc...@me.com> >> wrote: >> > It shouldn’t be too intelligent. Keep the default behavior, and for each >> > method add a 3-state checkbox: create (default), skip, force (override). >> > Also having a usage recorder would be nice to know if developers are >> > actually checking the other state more often than the default one. >> > >> > Uko >> > >> > On 6 Dec 2016, at 13:03, Thierry Goubier <thierry.goub...@gmail.com> >> wrote: >> > >> > >> > >> > 2016-12-06 11:34 GMT+01:00 Denis Kudriashov <dionisi...@gmail.com>: >> >> >> >> >> >> 2016-12-06 11:28 GMT+01:00 Yuriy Tymchuk <yuriy.tymc...@me.com>: >> >>> >> >>> Additionally it was annoying if a superclass has a method with the >> same >> >>> name. For example if you have a name var and you create accessors I’d >> like >> >>> to have actually a ’name’ getter and not ’name1’ >> >> >> >> >> >> Yes >> >> >> > >> > If you start to make it so intelligent it requires half a dozen click to >> > generate a simple accessor, then people will stop using the refactoring >> and >> > write the code by hand... >> > >> > Thierry >> > >> > >> > >> >> >