mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-21 00:59:03 +01:00
Initial work on signature help context (#58135)
* Initial work on signature help context Fixes #54972 Adds `SignatureHelpContext`. This tells providers why signature help was requested TODO: - [ ] Better understand semantics of retrigger. Should `retrigger` be an flag instead of a `triggerReason`? - [ ] Fix skipped test - [ ] Add more tests for trigger reasons / trigger characters * Fix unit test * Make sure we retrigger sig help if it is already showing * Add test for dismiss and re-invoke * Extract some constants * Extract createMockEditor
This commit is contained in:
@@ -20,13 +20,17 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
|
||||
public async provideSignatureHelp(
|
||||
document: vscode.TextDocument,
|
||||
position: vscode.Position,
|
||||
token: vscode.CancellationToken
|
||||
token: vscode.CancellationToken,
|
||||
context?: vscode.SignatureHelpContext,
|
||||
): Promise<vscode.SignatureHelp | undefined> {
|
||||
const filepath = this.client.toPath(document.uri);
|
||||
if (!filepath) {
|
||||
return undefined;
|
||||
}
|
||||
const args: Proto.SignatureHelpRequestArgs = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
|
||||
const args: Proto.SignatureHelpRequestArgs = {
|
||||
...typeConverters.Position.toFileLocationRequestArgs(filepath, position),
|
||||
triggerReason: toTsTriggerReason(context!)
|
||||
};
|
||||
|
||||
let info: Proto.SignatureHelpItems;
|
||||
try {
|
||||
@@ -71,6 +75,23 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
|
||||
}
|
||||
}
|
||||
|
||||
function toTsTriggerReason(context: vscode.SignatureHelpContext): Proto.SignatureHelpTriggerReason {
|
||||
switch (context.triggerReason) {
|
||||
case vscode.SignatureHelpTriggerReason.Retrigger:
|
||||
return { kind: 'retrigger' };
|
||||
|
||||
case vscode.SignatureHelpTriggerReason.TriggerCharacter:
|
||||
if (context.triggerCharacter) {
|
||||
return { kind: 'characterTyped', triggerCharacter: context.triggerCharacter as any };
|
||||
} else {
|
||||
return { kind: 'invoked' };
|
||||
}
|
||||
|
||||
case vscode.SignatureHelpTriggerReason.Invoke:
|
||||
default:
|
||||
return { kind: 'invoked' };
|
||||
}
|
||||
}
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
|
||||
Reference in New Issue
Block a user