One of the reasons that method names are so long (attackNearbyEnemy) is that we've always been planning to add really good autocomplete, so that players don't actually have to type that stuff out. I'm not even just talking about tab-completing identifiers, either--that's something that beginners may not know they can do. We could go all out like jsdares does and obey the Victorian commandment to get something on the screen as soon as possible:
(@janpaul123, you followed the vision--how did that end up working for beginner jsdares players?)
So how will we do it? There are two parts:
For finding completions, our secret weapon will be Aether, since it should know not only which properties are available on this, but also through runtime introspection can actually know any property available on anything, what its type is, and what its current value is. I've opened a related issue over on that project to get that part of it ready.
For autocomplete UI, I hadn't thought too much about it beyond starting with something simple and trying to evolve it toward the screenshots above while iterating through some UX tests. Developing the interface is what this issue (in the main CodeCombat project) is about.
I found a couple potentially useful links for doing autocomplete within ACE:
I'm guessing we'll probably want something weird enough that we won't really go through ACE for it, though.
I think the autocomplete box in jsdares worked pretty well, I have seen most novice learners use it without any problems. Most people start typing "robot." by example, and then see the autocomplete box. Some people copy/paste lines from the example, but eventually they discover the autocomplete box too.
It's a flexible interface for discovering new methods (not just the ones in an example). It also scales nicely to real-world programming, although there autocomplete boxes are often not as nice (no preview, or no context-awareness) ;-)
If you're going to do this, I would like to suggest doing it a bit better than jsdares and show some more information, e.g. little icons (like Bret Victor proposes), or named arguments instead of just numbers, or small method descriptions.
Yeah many people expect this, including me. A lot of people already get frustrated when nothing happens after pressing CTRL+Space ( a code assist combination in many IDE's ). so maybe show a message box (maybe just when you do CTRL+SPACE) that tells that the auto complete function is not yet implemented but will be done soon.
@tips48 has started integrating ACE's new autocomplete to get started, but we'll need a way to feed in the available properties from Aether.
@tips48 how far did you end up getting with this? Care to share any progress?
It would be enough to allow to click-insert spells from available spells interface. Right now it's tedious to write commands, therefore inherently not fun for my kids :/.
@dkundel has been working on this with Zatanna.
BTW I think we can close this issue? We got the autocomplete and the click to insert snippets part.
Yeah, it's largely done. I see a few issues remaining with it:
I should be able to select the autocompletion even after typing this and have it work. It should also do the semicolon for me.
I have to press either tab-tab, down-tab, or down-enter to trigger the first autocomplete snippet. I would prefer it if we can let them also just press tab to do the first one (or even enter if what they have typed couldn't be a valid end of line). Glen mentioned Ctrl+Space–I'm not sure how common that is, but if it's really standard, we might try to support it. I think it will conflict with keyboard input method selection shortcuts a lot of the time, though.
Should be easy to fix.
While it's cool that it can do that, this seems like it would be useful less of the time than it would be confusing.
At some point soon I think we're going to need to make the snippet insertion much smarter to take advantage of the available methods and only insert valid code (especially on iPad), but we can do that one in a separate issue.