public override Task <CodeCompletion.ParameterHintingResult> ParameterCompletionCommand(CodeCompletion.CodeCompletionContext completionContext)
 {
     if (!IsActiveExtension())
     {
         return(null);
     }
     return(completionTextEditorExtension.ParameterCompletionCommand(completionContext));
 }
        internal static async void UpdateCursorPosition(CompletionTextEditorExtension ext, ICompletionWidget widget)
        {
            updateSrc.Cancel();
            updateSrc = new CancellationTokenSource();
            var token = updateSrc.Token;

            // Called after the key has been processed by the editor
            if (currentMethodGroup == null)
            {
                return;
            }
            var actualMethodGroup = new MethodData();

            actualMethodGroup.CompletionContext = widget.CurrentCodeCompletionContext;
            if (!currentMethodGroup.MethodProvider.ApplicableSpan.Contains(ext.Editor.CaretOffset))
            {
                actualMethodGroup.MethodProvider = await ext.ParameterCompletionCommand(widget.CurrentCodeCompletionContext);

                if (actualMethodGroup.MethodProvider == null)
                {
                    HideWindow(ext, widget);
                }
            }
            if (actualMethodGroup.MethodProvider != null && (currentMethodGroup == null || !actualMethodGroup.MethodProvider.Equals(currentMethodGroup.MethodProvider)))
            {
                currentMethodGroup = actualMethodGroup;
            }
            try {
                int pos = await ext.GetCurrentParameterIndex(currentMethodGroup.MethodProvider.ApplicableSpan.Start, token);

                if (pos == -1)
                {
                    if (actualMethodGroup.MethodProvider == null)
                    {
                        currentMethodGroup = null;
                    }
                    else
                    {
                        pos = await ext.GetCurrentParameterIndex(actualMethodGroup.MethodProvider.ApplicableSpan.Start, token);

                        currentMethodGroup = pos >= 0 ? actualMethodGroup : null;
                    }
                }

                // If the user enters more parameters than the current overload has,
                // look for another overload with more parameters.
                UpdateOverload(ext, widget, token);

                // Refresh.
                UpdateWindow(ext, widget);
            }
            catch (OperationCanceledException) {
            }
            catch (Exception e) {
                LoggingService.LogError("Error while updating cursor position for parameter info window.", e);
            }
        }
Exemple #3
0
        internal static async void UpdateCursorPosition(CompletionTextEditorExtension ext, ICompletionWidget widget)
        {
            updateSrc.Cancel();
            updateSrc = new CancellationTokenSource();
            var token = updateSrc.Token;

            // Called after the key has been processed by the editor
            if (currentMethodGroup == null)
            {
                return;
            }

            var actualMethodGroup = new MethodData();

            actualMethodGroup.CompletionContext = widget.CurrentCodeCompletionContext;
            actualMethodGroup.MethodProvider    = await ext.ParameterCompletionCommand(widget.CurrentCodeCompletionContext);

            if (actualMethodGroup.MethodProvider != null && (currentMethodGroup == null || !actualMethodGroup.MethodProvider.Equals(currentMethodGroup.MethodProvider)))
            {
                currentMethodGroup = actualMethodGroup;
            }

            int pos = await ext.GetCurrentParameterIndex(currentMethodGroup.MethodProvider.StartOffset, token);

            if (pos == -1)
            {
                if (actualMethodGroup.MethodProvider == null)
                {
                    currentMethodGroup = null;
                }
                else
                {
                    pos = await ext.GetCurrentParameterIndex(actualMethodGroup.MethodProvider.StartOffset, token);

                    currentMethodGroup = pos >= 0 ? actualMethodGroup : null;
                }
            }

            // If the user enters more parameters than the current overload has,
            // look for another overload with more parameters.
            UpdateOverload(ext, widget, token);

            // Refresh.
            UpdateWindow(ext, widget);
        }
		internal static async void UpdateCursorPosition (CompletionTextEditorExtension ext, ICompletionWidget widget)
		{
			updateSrc.Cancel ();
			updateSrc = new CancellationTokenSource ();
			var token = updateSrc.Token;
			// Called after the key has been processed by the editor
			if (currentMethodGroup == null)
				return;
	
			var actualMethodGroup = new MethodData ();
			actualMethodGroup.CompletionContext = widget.CurrentCodeCompletionContext;
			actualMethodGroup.MethodProvider = await ext.ParameterCompletionCommand (widget.CurrentCodeCompletionContext);
			if (actualMethodGroup.MethodProvider != null && !actualMethodGroup.MethodProvider.Equals (currentMethodGroup.MethodProvider)) 
				currentMethodGroup = actualMethodGroup;

			int pos = await ext.GetCurrentParameterIndex (currentMethodGroup.MethodProvider.StartOffset, token);
			if (pos == -1) {
				if (actualMethodGroup.MethodProvider == null) {
					currentMethodGroup = null;
				} else {
					pos = await ext.GetCurrentParameterIndex (actualMethodGroup.MethodProvider.StartOffset, token);
					currentMethodGroup = pos >= 0 ? actualMethodGroup : null;
				}
			}

			// If the user enters more parameters than the current overload has,
			// look for another overload with more parameters.
			UpdateOverload (ext, widget);
			
			// Refresh.
			UpdateWindow (ext, widget);
		}