I'm using TextMate 2.0-beta.8 on OS X 10.11.1 with v3.2.1 of the Go bundle from:

When I type "fmt." and press Option+Escape for code completion, it uses TextMate::UI.complete with the :case_insensitive => false option. 

That didn't seem ideal to me. All exported identifiers in Go begin with a capital letter, but in terms of filtering, I would expect lowercase "p" to filter to Print just as well as an uppercase "P".

So I modified the bundle, and then I saw why it is set the way it is.

In the completeAndInsertSnippet method of TMDIncrementalPopUpMenu.mm there is a line that inserts the text being used for filtering rather than the text from the choices.

insert_text([candidateMatch substringFromIndex:[[self filterString] length]]);

The result is that fmt. [option+esc] [p] and pressing [Enter] gives me:


rather than the desired:


I'm not really sure why it's done this way? Are there situations where people want their filtering keys over the text present in the menu?

While I'm talking about code completion, and to drive the point home, I noticed that TMDIncrementalPopUpMenu uses a BEGINSWITH predicate. Ideally it would use a fuzzy match with similar logic to Go To File... That would allow typing something like:

fmt. [option+esc] [p] [l]

to get Println from the list of candidates. In this case it becomes obvious that "pl" is only for filtering and should not be inserted.

Finally, it would be great if it was possible to set an (additional) Key Equivalent with a delay so that the popup menu came up when pressing ".", or perhaps something more sophisticated based on the language grammar. I realize that not everyone likes code completion popups automatically appearing, but it would be nice to at least have the option.


Nathan Youngman