Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
 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;
         }
     }
 }
Example #4
0
        public Task ForceSignatureHelpAsync(WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken)
        {
            var trigger = new SignatureHelpTriggerInfoData(SignatureHelpTriggerReason.InvokeSignatureHelpCommand);

            return(TryApplySignatureHelpAsync(session, sender, cancellationToken, trigger));
        }