提交 7815502e 编写于 作者: R Ravi Chande

Merge pull request #2383 from rchande/CrefCompletion

Don't suggest type arguments in VB Crefs
......@@ -84,7 +84,7 @@ End Module]]></File>.Value
End Sub
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub InTypeParameterContext()
Public Sub NotInTypeParameterContext()
Dim text = <File><![CDATA[
Imports System
......@@ -96,7 +96,7 @@ Class Program(Of T)
End Sub
End Class]]></File>.Value
VerifyItemExists(text, "Integer")
VerifyItemIsAbsent(text, "Integer")
End Sub
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
......@@ -368,5 +368,37 @@ End Class
VerifyProviderCommit(text, "List(Of T)", expected, " "c, "List(Of")
End Sub
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub OfAfterParen()
Dim text = <File><![CDATA[
Imports System
''' <summary>
''' <see cref="Foo($$
''' </summary>
Module Program
Sub Foo()
End Sub
End Module]]></File>.Value
VerifyItemExists(text, "Of")
End Sub
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub OfNotAfterComma()
Dim text = <File><![CDATA[
Imports System
''' <summary>
''' <see cref="Foo(a, $$
''' </summary>
Module Program
Sub Foo()
End Sub
End Module]]></File>.Value
VerifyItemIsAbsent(text, "Of")
End Sub
End Class
End Namespace
......@@ -70,10 +70,20 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Return CreateCompletionItems(symbols, span, semanticModel, workspace, touchingToken.SpanStart)
End If
If IsParameterContext(touchingToken) OrElse
IsTypeParameterContext(touchingToken) Then
If IsTypeParameterContext(touchingToken) Then
Return Nothing
End If
If IsFirstParameterContext(touchingToken) OrElse IsOtherParameterContext(touchingToken) Then
Dim symbols = semanticModel.LookupNamespacesAndTypes(position)
Return CreateCompletionItems(symbols, span, semanticModel, workspace, touchingToken.SpanStart)
Dim items = CreateCompletionItems(symbols, span, semanticModel, workspace, touchingToken.SpanStart)
If (IsFirstParameterContext(touchingToken)) Then
' Include Of in case they're typing a type parameter
Return items.Concat(CreateOfCompletionItem(span))
End If
Return items
End If
If touchingToken.IsChildToken(Function(x As QualifiedNameSyntax) x.DotToken) Then
......@@ -129,9 +139,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Return False
End Function
Private Shared Function IsParameterContext(ByRef touchingToken As SyntaxToken) As Boolean
Return touchingToken.IsChildToken(Function(x As CrefSignatureSyntax) x.OpenParenToken) OrElse
touchingToken.IsChildSeparatorToken(Function(p As CrefSignatureSyntax) p.ArgumentTypes)
Private Shared Function IsFirstParameterContext(ByRef touchingToken As SyntaxToken) As Boolean
Return touchingToken.IsChildToken(Function(x As CrefSignatureSyntax) x.OpenParenToken)
End Function
Private Shared Function IsOtherParameterContext(ByRef touchingToken As SyntaxToken) As Boolean
Return touchingToken.IsChildSeparatorToken(Function(p As CrefSignatureSyntax) p.ArgumentTypes)
End Function
Private Shared Function IsCrefStartPosition(ByRef touchingToken As SyntaxToken) As Boolean
......@@ -176,6 +189,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
End Function)
End Function
Private Function CreateOfCompletionItem(span As TextSpan) As IEnumerable(Of CompletionItem)
Dim item = New CompletionItem(Me, "Of", span, glyph:=Glyph.Keyword,
descriptionFactory:=Function(c As CancellationToken) Task.FromResult(RecommendedKeyword.CreateDisplayParts("Of", VBFeaturesResources.OfKeywordToolTip)))
Return SpecializedCollections.SingletonEnumerable(item)
End Function
Protected Overrides Function IsExclusiveAsync(document As Document, position As Integer, triggerInfo As CompletionTriggerInfo, cancellationToken As CancellationToken) As Task(Of Boolean)
Return SpecializedTasks.True
End Function
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册