private static bool TryInvokeSnippetCompletion( CompletionService completionService, Document document, SourceText text, int caretPoint) { var rules = completionService.GetRules(); // Do not invoke snippet if the corresponding rule is not set in options. if (rules.SnippetsRule != SnippetsRule.IncludeAfterTypingIdentifierQuestionTab) { return(false); } var syntaxFactsOpt = document.GetLanguageService <ISyntaxFactsService>(); // Snippets are included if the user types: <quesiton><tab> // If at least one condition for snippets do not hold, bail out. if (syntaxFactsOpt == null || caretPoint < 3 || text[caretPoint - 2] != '?' || !QuestionMarkIsPrecededByIdentifierAndWhitespace(text, caretPoint - 2, syntaxFactsOpt)) { return(false); } // Because <question><tab> is actually a command to bring up snippets, // we delete the last <question> that was typed. var textChange = new TextChange(TextSpan.FromBounds(caretPoint - 2, caretPoint), string.Empty); document.Project.Solution.Workspace.ApplyTextChanges(document.Id, textChange, CancellationToken.None); return(true); }
internal virtual void VerifyCustomCommitWorker( CompletionService service, ICustomCommitCompletionProvider customCommitCompletionProvider, CompletionItem completionItem, CompletionHelper completionRules, ITextView textView, ITextBuffer textBuffer, string codeBeforeCommit, string expectedCodeAfterCommit, char?commitChar = null) { MarkupTestFile.GetPosition(expectedCodeAfterCommit, out var actualExpectedCode, out int expectedCaretPosition); if (commitChar.HasValue && !Controller.IsCommitCharacter(service.GetRules(), completionItem, commitChar.Value, commitChar.Value.ToString())) { Assert.Equal(codeBeforeCommit, actualExpectedCode); return; } customCommitCompletionProvider.Commit(completionItem, textView, textBuffer, textView.TextSnapshot, commitChar); string actualCodeAfterCommit = textBuffer.CurrentSnapshot.AsText().ToString(); var caretPosition = textView.Caret.Position.BufferPosition.Position; Assert.Equal(actualExpectedCode, actualCodeAfterCommit); Assert.Equal(expectedCaretPosition, caretPosition); }
protected CompletionHelper(CompletionService completionService) { CompletionService = completionService; _language = CompletionService.Language; _rules = CompletionService.GetRules(); }