This is both rant and list of questions/notes/observations...
...but first of all: do Smalltalkers not like code completion? Because the one in Pharo is really poor and not only that nobody is doing anything about it, but also nobody is complaining; this leads me to believe that you either a) don't have the manpower (this is true pretty much always, so no complaints here) b) don't care about this that much (since you lived without it for 45 years) at least from the lack of complaining to me it seems that b) is more likely scenario... But since I do use it, I get annoyed by it quite a bit, especially since I regularly work in IDEs where this thousand times better. Now I would like to get things moving a bit (or bury it and forget it), so I have couple of questions and would appreciate if someone could provide some feedback. 1. Methods of core/top classes should be deprioritized Since Object has almost 500 methods whatever I will start typing Object/TClass/TBehavior/... will have a list of answers... so let's start typing... Very often I have to type almost full word to see what I want. Shouldn't the completion follow the inheritance chain? So first it shows me matches from the class itself (especially since it actually knows the type) and only after then it's parents and so on? 3. Or maybe even show the (closest) class that implements it. So the last two items would have somewhere (beginning or the end) written '(Object)' and the first two '(yourself)' (or the class's name). 2. The window has fixed size, so if I have longer method (as in picture above) I don't see it all. 3. Is middle-of-the word really that often used? See moseIntere<sti>ngEntity above. It feels to me that it just creates a lot of false positives (I have this problem also with inspector btw, so I often have to prefix it with >># or if I see it already lot of <arrow down>, which is annoying) 4. We write tests, however how often have you manually created an instance of a test class by hand? I think they should be either filtered or deprioritized as they create visual clutter. This is probably also true for many other classes such as ConfigurationOf/Manifest/... Nobody instantiates them by hand. 5. How often do you send #abs to a dictionary? Maybe also deprioritize extension methods? 6. If I have already written part of the selector it's impossible to "continue" and add an extra parameter. This is because it doesn't know if I am code completing for dict, or #key. Maybe different shortcuts? <tab> to code complete on #key, and <shift+tab> to code complete on the previous one... or maybe cycle through them because this can be nested (the currently code completed item would have to be highlighted somehow). 7. So if I don't want to see the above I have to type it manually; which is fine for #at:put: but not for longer words.. (just to find out ten seconds later that I have a stupid typo there). 8. The code completion doesn't show parameter names. This is very helpful because it often reveals what it actually accepts. Now I have to actually look into the code of the method. Now we can hardly compete with typed languages, but I think there's a lot lot room for improvement. For comparison from other languages/IDE's. PhpStorm/PHP (notice how it shows the whole method if it's longer than the window and doesn't it just clip) NetBeans/C++ In the picture above it still provides hinting when typing the parameter. TypeScript playground (similar to NetBeans) Also they have in their online playground better and nicer code completion than we have in actual env (http://www.typescriptlang.org/Playground ) So if you have any thoughts/feedback/whatnot on this matter, I would greatly appreciate it. Peter |
On 04/10/15 23:53, Peter Uhnák wrote:
> This is both rant and list of questions/notes/observations... > > ...but first of all: > do Smalltalkers not like code completion? Because the one in Pharo is > really poor and not only that nobody is doing anything about it, *but > also nobody is complaining*; this leads me to believe that you either > > a) don't have the manpower (this is true pretty much always, so no > complaints here) Definitely. The issue tracker has lots of interesting completion related issues, like https://pharo.fogbugz.com/f/cases/13124/NECContext-needs-plugin-design Stephan |
> On 05 Oct 2015, at 08:39, Stephan Eggermont <[hidden email]> wrote: > > On 04/10/15 23:53, Peter Uhnák wrote: >> This is both rant and list of questions/notes/observations... >> >> ...but first of all: >> do Smalltalkers not like code completion? Because the one in Pharo is >> really poor and not only that nobody is doing anything about it, *but >> also nobody is complaining*; this leads me to believe that you either >> >> a) don't have the manpower (this is true pretty much always, so no >> complaints here) > > Definitely. > The issue tracker has lots of interesting completion related issues, like https://pharo.fogbugz.com/f/cases/13124/NECContext-needs-plugin-design > Yes, and we need to change it to use the AST instead of Shout… that could simplify it a lot. Marcus |
In reply to this post by Peter Uhnak
true.
I think people know that complaining does not help… It would be nice to improve this (an 1000 other things, too ;-) Marcus
|
In reply to this post by Peter Uhnak
Le 4/10/15 23:53, Peter Uhnák a écrit :
No I'm complaining all the time but it is useless when we did have ressources. In addition we did not work on it because a student from delft was planning to work on it but he went to the US. This one. no
I do not get what you mean
|
In reply to this post by Peter Uhnak
I think this is difficult, even though this classes are big and you don't use most of the methods, are you sure we dont use some of the methods *often*. Morphic, ComposeableModel or many collection classes, for example. > This is doesn't happen often to me. It is far from perfect but most of the time I only type a small part and find the correct completion.
Currently, it only collects all selectors into a set and sorts by matching and length. We could add the class info and sort by inheritance distance. This needs some change how sorting is implemented, for now,it is typeless and may need some double dispatching.
This needs some additional work too, now the menu text is the actual completion content. But it shouldn't be that difficult and some code looks like it was intended to work that way. > I often search for "Dictionary" or "Morph" and expect results even if the typed word is not at the beginning, quite often.
Be careful will statements like "nobody ...." I do a lot of reviews for pharo issues, and this involves working in workspace and instantiating classes (Yes, Tests, Refactoring, LintRules) most people don't use them this way but by the tools (SUnit, CriticBrowser) But I do.
seldom, never? but how could a completion framework detect that?
good idea! (did you know, that there is a shortcut to jump from one message send argument to another (not related to completion, but very helpful). Sadly this is gone or I couldn't find it in rubrics shortcut handling). > or maybe cycle through them because this can be nested (the currently code completed item would have to be highlighted somehow). Yes, I tried to change that for issue "10219 Completion: enter on accept awkwardness", but again, the completion only knows about the methodDict keys, the selector, not the mehod code. But I would like to change that and test if it is much slow.
|
In reply to this post by Peter Uhnak
On 04-10-15 23:53, Peter Uhnák wrote:
> 3. Is middle-of-the word really that often used? See > moseIntere<sti>ngEntity above. It feels to me that it just creates a lot of > false positives (I have this problem also with inspector btw, so I often > have to prefix it with >># or if I see it already lot of <arrow down>, > which is annoying) One of the things we can do is detect prefixes. If all classes in a package start with the same two letters... Stephan |
In reply to this post by Nicolai Hess
Ruby? I think that RubyMine has to do something with code completion. Uko
|
In reply to this post by Nicolai Hess
On 10/06/2015 09:09 AM, Nicolai Hess wrote:
> > Since Object has almost 500 methods whatever I will start typing > Object/TClass/TBehavior/... will have a list of answers... > > I think this is difficult, even though this classes are big and you > don't use most of the methods, > Hi Nicolai, imagine that code-completion is a game and the computer wins, if the user mostly uses the first few proposals. perhaps one could program several different heuristics, that decide, what the user wants. depending on the user choices, the weights for these heuristics get updated accordingly and then the choices get sorted with those weights. this way the code-completion could adapt to the way each user works? werner |
In reply to this post by Uko2
2015-10-06 10:31 GMT+02:00 Yuriy Tymchuk <[hidden email]>:
Wow, that looks great, do you work with it?
|
In reply to this post by wernerk
2015-10-06 11:57 GMT+02:00 Werner Kassens <[hidden email]>: On 10/06/2015 09:09 AM, Nicolai Hess wrote: Yes this would be nice, but it is not an easy task. werner |
I thought we already had something like that... Cheers, Henry signature.asc (859 bytes) Download Attachment |
In reply to this post by wernerk
Part of the Phd of Romain Robbes was about comparing completion
algorithms. And NOC/NEC are part of the results but it needs a real pass. Stef > > Hi Nicolai, > imagine that code-completion is a game and the computer wins, if the > user mostly uses the first few proposals. perhaps one could program > several different heuristics, that decide, what the user wants. > depending on the user choices, the weights for these heuristics get > updated accordingly and then the choices get sorted with those > weights. this way the code-completion could adapt to the way each user > works? > werner > > |
In reply to this post by Henrik Sperre Johansen
2015-10-06 13:46 GMT+02:00 Henrik Johansen <[hidden email]>:
I can not load it in a recen pharo image. Is it used in recent versions of squeak?
|
OCompletion is already in the image (since Pharo 2.0). if you check your settings, under "Code Completion”, Controller… it should say NOCController. Is a lot better than older NECController, but still far from good enough. Esteban
|
In reply to this post by Nicolai Hess
This is already in Pharo. It is merged into the one completion package. Marcus |
In reply to this post by EstebanLM
and strangely not the default. I remember setting it multiple times as the default, but it was reverted somehow. Marcus |
In reply to this post by EstebanLM
2015-10-06 15:28 GMT+02:00 Esteban Lorenzano <[hidden email]>:
Funny, I always thought the NOC-Classes are some kind of "Old" NEC-Classes.
Some more information on this? What is missing.
|
ECompletion was just a list of matching classes/selectors OCompletion added some candy like showing first last typed entries (with some other heuristic). AFAIR It was scanning changes file to do it so Camilo changed it to do something more “image based” (and fast), but we never got happy with the results. IMO older version was a bit better (but do not be mistaken: it was just “a bit” better… we changed it because Marcus hated it, and I think he still does :P) So there you have… we need a real completion tool, I agree… :) Esteban
|
In reply to this post by Nicolai Hess
About an alternative way to do code completion:
This is the paper: http://macbeth.cs.ucdavis.edu/cacheca.pdf this is the code repository: https://github.com/christinef/CACHECA and this is the tool in action: https://www.youtube.com/watch?v=3INk0N3JNtc This was the student I was in contact with. Stef |
Free forum by Nabble | Edit this page |