public Task ApplyTypedCharAsync(char @char, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { if (!session.IsRoslyn) { return(Task.CompletedTask); } var trigger = new SignatureHelpTriggerInfoData(SignatureHelpTriggerReason.TypeCharCommand, @char); if (session.Roslyn.CurrentSignatureHelp != null) { var provider = session.Roslyn.CurrentSignatureHelp.Value.Provider; if (provider.IsRetriggerCharacter(@char)) { session.Roslyn.CurrentSignatureHelp = null; return(SendSignatureHelpAsync(null, sender, cancellationToken)); } return(TryApplySignatureHelpAsync(provider, trigger, session, sender, cancellationToken, sendIfEmpty: true)); } return(TryApplySignatureHelpAsync(session, sender, cancellationToken, trigger)); }
private async Task <bool> TryApplySignatureHelpAsync(ISignatureHelpProviderWrapper provider, SignatureHelpTriggerInfoData trigger, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken, bool sendIfEmpty = false) { // ReSharper disable once PossibleInvalidOperationException if (trigger.TriggerReason == SignatureHelpTriggerReason.TypeCharCommand && !provider.IsTriggerCharacter(trigger.TriggerCharacter.Value)) { return(false); } var help = await provider.GetItemsAsync(session.Roslyn.Document, session.CursorPosition, trigger, cancellationToken).ConfigureAwait(false); if (!sendIfEmpty && help == null) { return(false); } session.Roslyn.CurrentSignatureHelp = help != null ? new CurrentSignatureHelp(provider, help) : (CurrentSignatureHelp?)null; await SendSignatureHelpAsync(help, sender, cancellationToken).ConfigureAwait(false); return(true); }
private async Task TryApplySignatureHelpAsync(WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken, SignatureHelpTriggerInfoData trigger) { foreach (var provider in session.Roslyn.SignatureHelpProviders) { if (await TryApplySignatureHelpAsync(provider, trigger, session, sender, cancellationToken).ConfigureAwait(false)) { return; } } }
public Task ForceSignatureHelpAsync(WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var trigger = new SignatureHelpTriggerInfoData(SignatureHelpTriggerReason.InvokeSignatureHelpCommand); return(TryApplySignatureHelpAsync(session, sender, cancellationToken, trigger)); }