示例#1
0
        private async Task <TextSpan> GetTextChangeSpanAsync(Document document, int position, CancellationToken cancellationToken)
        {
            var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false);

            return(CompletionUtilities.GetTextChangeSpan(text, position));
        }
示例#2
0
 public override bool IsTriggerCharacter(SourceText text, int characterPosition, OptionSet options)
 {
     return(CompletionUtilities.IsTriggerAfterSpaceOrStartOfWordCharacter(text, characterPosition, options));
 }
示例#3
0
 public override TextSpan GetDefaultCompletionListSpan(SourceText text, int caretPosition)
 {
     return(CompletionUtilities.GetCompletionItemSpan(text, caretPosition));
 }
 internal override bool IsInsertionTrigger(SourceText text, int insertedCharacterPosition, OptionSet options)
 {
     return(CompletionUtilities.IsTriggerCharacter(text, insertedCharacterPosition, options));
 }
示例#5
0
 public override bool SendEnterThroughToEditor(CompletionItem completionItem, string textTypedSoFar)
 {
     return(CompletionUtilities.SendEnterThroughToEditor(completionItem, textTypedSoFar));
 }
示例#6
0
 public override bool IsCommitCharacter(CompletionItem completionItem, char ch, string textTypedSoFar)
 {
     return(CompletionUtilities.IsCommitCharacter(completionItem, ch, textTypedSoFar));
 }
示例#7
0
 protected override TextSpan GetFilterSpan(SourceText text, int position)
 {
     return(CompletionUtilities.GetTextChangeSpan(text, position));
 }
        protected override async Task <IEnumerable <CompletionItem> > GetItemsWorkerAsync(Document document, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken)
        {
            if (triggerInfo.IsDebugger)
            {
                return(null);
            }

            var tree = await document.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(false);

            var token        = tree.FindTokenOnLeftOfPosition(position, cancellationToken);
            var parentTrivia = token.GetAncestor <DocumentationCommentTriviaSyntax>();

            if (parentTrivia == null)
            {
                return(null);
            }

            var items = new List <CompletionItem>();
            var text  = await document.GetTextAsync(cancellationToken).ConfigureAwait(false);

            var span = CompletionUtilities.GetTextChangeSpan(text, position);

            var attachedToken = parentTrivia.ParentTrivia.Token;

            if (attachedToken.Kind() == SyntaxKind.None)
            {
                return(null);
            }

            var semanticModel = await document.GetSemanticModelForNodeAsync(attachedToken.Parent, cancellationToken).ConfigureAwait(false);

            ISymbol declaredSymbol    = null;
            var     memberDeclaration = attachedToken.GetAncestor <MemberDeclarationSyntax>();

            if (memberDeclaration != null)
            {
                declaredSymbol = semanticModel.GetDeclaredSymbol(memberDeclaration, cancellationToken);
            }
            else
            {
                var typeDeclaration = attachedToken.GetAncestor <TypeDeclarationSyntax>();
                if (typeDeclaration != null)
                {
                    declaredSymbol = semanticModel.GetDeclaredSymbol(typeDeclaration, cancellationToken);
                }
            }

            if (declaredSymbol != null)
            {
                items.AddRange(GetTagsForSymbol(declaredSymbol, span, parentTrivia, token));
            }

            if (token.Parent.Kind() == SyntaxKind.XmlEmptyElement || token.Parent.Kind() == SyntaxKind.XmlText ||
                (token.Parent.IsKind(SyntaxKind.XmlElementEndTag) && token.IsKind(SyntaxKind.GreaterThanToken)) ||
                (token.Parent.IsKind(SyntaxKind.XmlName) && token.Parent.IsParentKind(SyntaxKind.XmlEmptyElement)))
            {
                if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement)
                {
                    items.AddRange(GetNestedTags(span));
                }

                if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement && ((XmlElementSyntax)token.Parent.Parent).StartTag.Name.LocalName.ValueText == "list")
                {
                    items.AddRange(GetListItems(span));
                }

                if (token.Parent.IsParentKind(SyntaxKind.XmlEmptyElement) & token.Parent.Parent.IsParentKind(SyntaxKind.XmlElement))
                {
                    var element = (XmlElementSyntax)token.Parent.Parent.Parent;
                    if (element.StartTag.Name.LocalName.ValueText == "list")
                    {
                        items.AddRange(GetListItems(span));
                    }
                }

                if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement && ((XmlElementSyntax)token.Parent.Parent).StartTag.Name.LocalName.ValueText == "listheader")
                {
                    items.AddRange(GetListHeaderItems(span));
                }

                if (token.Parent.Parent is DocumentationCommentTriviaSyntax)
                {
                    items.AddRange(GetTopLevelSingleUseNames(parentTrivia, span));
                    items.AddRange(GetTopLevelRepeatableItems(span));
                }
            }

            if (token.Parent.Kind() == SyntaxKind.XmlElementStartTag)
            {
                var startTag = (XmlElementStartTagSyntax)token.Parent;

                if (token == startTag.GreaterThanToken && startTag.Name.LocalName.ValueText == "list")
                {
                    items.AddRange(GetListItems(span));
                }

                if (token == startTag.GreaterThanToken && startTag.Name.LocalName.ValueText == "listheader")
                {
                    items.AddRange(GetListHeaderItems(span));
                }
            }

            items.AddRange(GetAlwaysVisibleItems(span));
            return(items);
        }
示例#9
0
        public override bool IsTriggerCharacter(SourceText text, int characterPosition, OptionSet options)
        {
            var ch = text[characterPosition];

            return(ch == ' ' || (CompletionUtilities.IsStartingNewWord(text, characterPosition) && options.GetOption(CompletionOptions.TriggerOnTypingLetters, LanguageNames.CSharp)));
        }