You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When implementing a java language server, it would be nice to be able to activate signatureHelp immediately, without a trigger character. Suppose for example the user has typed:
someValue.someMeth
We would like to autocomplete someValue.someMethod() and place the users cursor between parentheses. This is possible using snippets:
The problem is that signatureHelp relies on the trigger character (, and it doesn't get activated when the ( is inserted as part of the snippet.
This problem does not come up in languages like Typescript, because the expression someValue.someMethod is well-defined as a reference to someMethod. But in Java, method references have a different syntax someValue::someMethod. So we know the user will always type (, but we don't autocomplete it.
There are two possible solutions to this, one at the VSCode level and one at the language-server-protocol level:
VSCode solution: if the character before $0 in a snippet is a signatureHelp trigger character, activate signatureHelp.
LSP solution: add a property CompletionItem { ... activateSignatureHelp: boolean } that activates signature-help immediately following completion.
This should work when using the completion item command. Set it to editor.action.triggerParameterHints and the editor will trigger signature help after inserting the completion
It was not obvious to me from the language-server-protocol docs that I could execute built-in commands, perhaps the documentation could be improved a bit.
When implementing a java language server, it would be nice to be able to activate signatureHelp immediately, without a trigger character. Suppose for example the user has typed:
We would like to autocomplete
someValue.someMethod()
and place the users cursor between parentheses. This is possible using snippets:The problem is that signatureHelp relies on the trigger character
(
, and it doesn't get activated when the(
is inserted as part of the snippet.This problem does not come up in languages like Typescript, because the expression
someValue.someMethod
is well-defined as a reference tosomeMethod
. But in Java, method references have a different syntaxsomeValue::someMethod
. So we know the user will always type(
, but we don't autocomplete it.There are two possible solutions to this, one at the VSCode level and one at the language-server-protocol level:
$0
in a snippet is a signatureHelp trigger character, activate signatureHelp.CompletionItem { ... activateSignatureHelp: boolean }
that activates signature-help immediately following completion.I filed a corresponding issue in the language-server-protocol repo: microsoft/language-server-protocol#274
The text was updated successfully, but these errors were encountered: