New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
x/tools/gopls: option to autocomplete function call without parentheses #41813
Comments
@HymanZHAN thanks for the feature request. This is about adding a new knob for gopls' autocompletion behavior, so I will transfer this to its issue tracker. (cc @stamblerre ) |
@hyangah Thanks! |
If you disable snippets in your editor then you won't get the parens anymore (but will lose other snippet dependent functionality). Why don't the other languages include parens when completing function calls? I can appreciate not being used to it, but it objectively saves keystrokes. |
@muirdm My personal experience actually speaks otherwise. Including parens (and the input inside parens) as snippets does save the keystroke of Also, it's way easier to mishit Tab and exit the snippet accidentally in the middle of typing, as I tend to hit Tab for autocompletion (even though it's not there). I also use an extension called TabOut, which lets you skip closing characters like BTW, my favorite snippet implementation is actually the one of Visual Studio, where you can use Tab to loop through all snippet input space holders, modify previous input, have automatically autocompletion and use Enter to finish the snippet. Sadly that's not how VS Code implements it.😥 |
I have my editor set up where I do get automatic completions inside the snippet. After inserting a snippet, it automatically triggers a completion at the first placeholder. I can accept it right away (and overwrite the placeholder), or simply start typing to filter completions. I press TAB to choose the inner completion, then TAB again to advance to the next outer placeholder. I definitely agree that nested completion/snippets is finicky, but I think most of that is just editors not doing it well by default. |
I just encountered this for the first time (long-time non-gopls user who upgraded recently due to modules) and was also surprised that there's no option to turn it off. I don't like autocompletion of anything other than function names in general, and disable bracket completion whenever I have the chance. Like the original reporter, I find that bracket insertion usually increases my keystrokes. Thanks for the tip about disabling snippet insertion, I will try that as an interim fix and hope that it doesn't break anything else. |
As a vim user, bracket completion does not help me in any way unless the function has no parameters (in which case it is still inconsistent anyway). Now my standard workflow is to accept the completion and delete the parentheses. Not sure if it is relevant, but after upgrading to the 0.12 dev version, the parentheses are inserted even when completing a function call that already has parentheses. Not sure if that qualifies for a separate bug. |
Disabling snippets completely just to turn off parens in completion isn't ideal. (And it's not something configurable from LSP client at least in vscode microsoft/vscode-languageserver-node#732) I checked other language plugins and they are either not adding
Can we have a gopls setting to disable parens? (For VS Code, there is a separate feature that adds matching |
It sounds like we need an option. People are used to things, and editors often aren't set up to give an optimized completion experience out of the box. But, I'm still curious about the keystroke level details.
@themowski Can you give an example where it increases keystrokes?
@SOF3 Are you saying your cursor ends up after the closing paren? /cc @findleyr |
@muirdm yes, In the vim scenario, generating the commas in advance do not help at all because you can't jump to the next argument blank anyway, and the number of parameters doesn't help without knowing the actual argument name/type (which is in the other hover anyway, no need for the pregenerated commas). |
Sure, when bracket completion is on and a closing bracket is automatically inserted, I usually either:
I'm aware that these items are very specific to my personal coding style, and others may feel that these are non-issues / self-inflicted. That said, I feel like this extension's current behavior is bad UX: the editor is inserting symbols that I did not want/expect to be inserted, given that I have the global "do not insert brackets" option set. When I selected the symbol in the autocomplete menu, I approved the autocomplete of a function name, not the corresponding braces. However... I don't really have a chance to write Go that often these days, so after playing with it a few times to refresh my memory of what this comment was about, it's less irritating to me now than it was when I commented on this back in 2021. EDIT: I think the thing that jumped out at me from the original report for this issue was the following:
This is 100% valid and, after testing it out really quick just now, I am certain that this is what really was annoying to me about this behavior. Like OP, I tend to write in multiple languages, and what I'm doing on a given day depends on the project I'm working, and when the editor's behavior is inconsistent between languages, it's really hard on muscle memory. |
I think a bare minimum is that commas should not be completed. There is no point in inserting commas at all; the user has to type it either way to get function signature hint, and moving cursor to right is barely better (if not worse) than typing the comma manually. Commas are worse than closing parentheses because most editors just move rightwards when you type in front of an existing |
(This is more of a question before it becomes a feature request. However, the original Slack invite link is no longer active.)
Is your feature request related to a problem? Please describe.
Is it possible to leave out the parentheses of a method when doing autocompletion? For example, when typing
time.No
and hit tab, instead of autocompleting withtime.Now()
is it possible to complete it astime.Now
?Describe the solution you'd like
Have an option for this, something like
gopls.includeParenthesesWhenAutocomplete
that can be set tofalse
.Describe alternatives you've considered
N/A
Additional context
I have been writing a mix of C++, Python, and JS/TS, and all these languages' autocompletion on VS Code are without the parentheses. It's muscle memory for me now to reach for
(
after completing the method and it's really counter-productive especially when I need to switch between languages.The text was updated successfully, but these errors were encountered: