En mi extensión de VS Code, me gustaría que los paréntesis de apertura y cierre se insertaran automáticamente después de seleccionar una función de la lista proporcionada por el proveedor del elemento de finalización.
Después de agregar los paréntesis, me gustaría que la extensión active el proveedor de ayuda para firmas (tenga en cuenta que VS Code activa el proveedor de ayuda para firmas cuando escribe manualmente el paréntesis de apertura ( .
Aquí hay un fragmento de lo que agregué dentro del método provideCompletionItems :
myFunctions.forEach((func) => { const completion = new CompletionItem(func, CompletionItemKind.Function); completion.detail = func.signature; completion.documentation = func.description; completion.insertText = func + '('; ... });Soy consciente de que puedo ejecutar un comando después de insertar una finalización agregando algo como
completion.command = ... La API de extensión de VS Code tiene vscode.executeSignatureHelpProvider como un comando integrado para ejecutar el proveedor de ayuda de firma. Por lo tanto, ejecutaría este comando así:
vscode.commands.executeCommand('vscode.executeSignatureHelpProvider', document.uri, position) Sin embargo, no sé cómo ejecutar este comando como parte de la variable de command , lo que significa que no puedo hacer
completion.command = vscode.commands.executeCommand('vscode.executeSignatureHelpProvider', document.uri, position) porque la variable de command acepta solo el tipo Command .
Entonces, ¿cómo podría ejecutar un comando después de insertar la finalización en el editor?
SOLUCIÓN:
Según las respuestas a continuación, me di cuenta de que estaba usando el comando incorrecto para activar el widget de sugerencias de parámetros. En su lugar, utilicé el comando editor.action.triggerParameterHints :
completion.command = { command: 'editor.action.triggerParameterHints', title: '' };Pruebe el comando editor.action.triggerParameterHints en su lugar. Si ha registrado su propio SignatureHelpProvider, eso debería activarlo para que se ejecute. Si no ha registrado el suyo propio, eso debería activar el proveedor predeterminado.
completion.command = "editor.action.triggerParameterHints";
También puede invocar un comando, si tiene más trabajo que hacer allí, a través de esto en su CompletionItem :
newCommand.command = "<your extension name>.selectDigitInCompletion"; newCommand.title = "Select the digit 'n' in completionItem"; newCommand.arguments = [key, replaceRange, position]; // whatever args you want to pass to the command completion.command = newCommand; Y luego ese comando está registrado en alguna parte, no tiene que estar en el package.json :
vscode.commands.registerCommand('<your extension name>.selectDigitInCompletion', async (completionText, completionRange, position) => { // ... // access your passed-in args `completionText`,`completionRange` and `position` here // await vscode.commands.executeCommand('vscode.executeSignatureHelpProvider', document.uri, position) ... }asignar una instancia del objeto Command
completion.command = { command: 'vscode.executeSignatureHelpProvider', title: 'Signature' };