private bool ShouldTriggerCompletion( AsyncCompletionData.CompletionTrigger trigger, SnapshotPoint triggerLocation, SourceText sourceText, Document document, CompletionService completionService) { // The trigger reason guarantees that user wants a completion. if (trigger.Reason == AsyncCompletionData.CompletionTriggerReason.Invoke || trigger.Reason == AsyncCompletionData.CompletionTriggerReason.InvokeAndCommitIfUnique) { return(true); } //The user may be trying to invoke snippets through question-tab. // We may provide a completion after that. // Otherwise, tab should not be a completion trigger. if (trigger.Reason == AsyncCompletionData.CompletionTriggerReason.Insertion && trigger.Character == '\t') { return(TryInvokeSnippetCompletion(completionService, document, sourceText, triggerLocation.Position)); } var roslynTrigger = Helpers.GetRoslynTrigger(trigger, triggerLocation); // The completion service decides that user may want a completion. if (completionService.ShouldTriggerCompletion(sourceText, triggerLocation.Position, roslynTrigger)) { return(true); } return(false); }
public static async ValueTask <bool> ShouldTriggerCompletionAsync( this CompletionService completionService, Document document, int caretPosition, CompletionTrigger trigger, ImmutableHashSet <string>?roles, OmniSharpCompletionOptions options, CancellationToken cancellationToken) { var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false); return(completionService.ShouldTriggerCompletion(document.Project, document.Project.LanguageServices, text, caretPosition, trigger, options.ToCompletionOptions(), document.Project.Solution.Options, roles)); }
private bool IsTextualTriggerCharacter(CompletionService completionService, char ch, OptionSet options) { AssertIsForeground(); // Note: When this function is called we've already guaranteed that // TypeCharWasHandledStrangely returned false. That means we know that the caret is in // our buffer, and is after the character just typed. var caretPosition = this.TextView.GetCaretPoint(this.SubjectBuffer).Value; var previousPosition = caretPosition - 1; Contract.ThrowIfFalse(this.SubjectBuffer.CurrentSnapshot[previousPosition] == ch); var trigger = CompletionTrigger.CreateInsertionTrigger(ch); return(completionService.ShouldTriggerCompletion(previousPosition.Snapshot.AsText(), caretPosition, trigger, _roles, options)); }
public bool ShouldTriggerCompletion(int cursorPosition, CompletionTrigger trigger) { return(_completionService.ShouldTriggerCompletion(SourceText, cursorPosition, trigger)); }
public override bool ShouldTriggerCompletion(SourceText text, int caretPosition, CompletionTrigger trigger, ImmutableHashSet <string> roles = null, OptionSet options = null) { // Just ask the local service if we should trigger completion based on its rules since that determination is based on just looking at the current buffer. return(_originalService.ShouldTriggerCompletion(text, caretPosition, trigger, roles, options)); }