提交 8bb2349d 编写于 作者: R Ravi Chande

No conditional access completion on types

Fixes #33
上级 1a4bbb67
......@@ -7945,5 +7945,45 @@ class A {
";
VerifyItemExists(markup, "s_abc");
}
[WorkItem(33, "https://github.com/dotnet/roslyn/issues/33")]
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public void NoConditionalAccessCompletionOnTypes1()
{
var markup = @"
using A = System
class C
{
A?.$$
}
";
VerifyNoItemsExist(markup);
}
[WorkItem(33, "https://github.com/dotnet/roslyn/issues/33")]
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public void NoConditionalAccessCompletionOnTypes2()
{
var markup = @"
class C
{
System?.$$
}
";
VerifyNoItemsExist(markup);
}
[WorkItem(33, "https://github.com/dotnet/roslyn/issues/33")]
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public void NoConditionalAccessCompletionOnTypes3()
{
var markup = @"
class C
{
System.Console?.$$
}
";
VerifyNoItemsExist(markup);
}
}
}
......@@ -5289,7 +5289,7 @@ End Class
<WorkItem(1041269)>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub UnwrapNullableForConditionalAccess()
Public Sub NullableForConditionalAccess()
Dim text =
<code><![CDATA[
Class C
......@@ -5392,24 +5392,6 @@ End Module
VerifyItemExists(text, "ToString")
End Sub
<WorkItem(1079716)>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub DontThrowForNullPropagatingOperatorAfterNamespace()
Dim text =
<code><![CDATA[
Option Strict On
Module Program
Sub Main()
System?.$$
End Sub
End Module
]]></code>.Value
' NOTE: The current behavior is that we'll still show types for a namespace after ?.
' While the code is not correct, it seems reasonable to allow the user to continue typing.
VerifyItemExists(text, "Action")
End Sub
<WorkItem(1079723)>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub AllowCompletionAfterNullPropagatingOperatingInWithBlock()
......@@ -5835,5 +5817,51 @@ End Class
VerifyItemExists(text, "M", usePreviousCharAsTrigger:=True)
End Sub
<WorkItem(33, "https://github.com/dotnet/roslyn/issues/33")>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub NoCompletionForConditionalAccessOnTypes1()
Dim text =
<code><![CDATA[
Module Program
Sub Main(args As String())
System?.$$
End Sub
End Module
]]></code>.Value
VerifyNoItemsExist(text)
End Sub
<WorkItem(33, "https://github.com/dotnet/roslyn/issues/33")>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub NoCompletionForConditionalAccessOnTypes2()
Dim text =
<code><![CDATA[
Module Program
Sub Main(args As String())
Console?.$$
End Sub
End Module
]]></code>.Value
VerifyNoItemsExist(text)
End Sub
<WorkItem(33, "https://github.com/dotnet/roslyn/issues/33")>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub NoCompletionForConditionalAccessOnTypes3()
Dim text =
<code><![CDATA[
Imports a = System
Module Program
Sub Main(args As String())
a?.$$
End Sub
End Module
]]></code>.Value
VerifyNoItemsExist(text)
End Sub
End Class
End Namespace
\ No newline at end of file
......@@ -398,6 +398,14 @@ internal class CSharpRecommendationService : AbstractRecommendationService
var expression = originalExpression.WalkDownParentheses();
var leftHandBinding = context.SemanticModel.GetSymbolInfo(expression, cancellationToken);
var container = context.SemanticModel.GetTypeInfo(expression, cancellationToken).Type.RemoveNullableIfPresent();
// If the thing on the left is a type, namespace, or alias, we shouldn't show anything in
// IntelliSense.
if (leftHandBinding.GetBestOrAllSymbols().FirstOrDefault().MatchesKind(SymbolKind.NamedType, SymbolKind.Namespace, SymbolKind.Alias))
{
return SpecializedCollections.EmptyEnumerable<ISymbol>();
}
return GetSymbolsOffOfBoundExpression(context, originalExpression, expression, leftHandBinding, container, cancellationToken);
}
......
......@@ -224,6 +224,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Recommendations
Dim firstSymbol = leftHandBinding.Symbol
Select Case firstSymbol.Kind
Case SymbolKind.TypeParameter
' 884060: We don't allow invocations off type parameters.
......@@ -278,6 +281,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Recommendations
End If
End If
' No completion on types/namespace after conditional access
If leftExpression.Parent.IsKind(SyntaxKind.ConditionalAccessExpression) AndAlso
(couldBeMergedNamespace OrElse leftHandBinding.GetBestOrAllSymbols().FirstOrDefault().MatchesKind(SymbolKind.NamedType, SymbolKind.Namespace, SymbolKind.Alias)) Then
Return SpecializedCollections.EmptyCollection(Of ISymbol)()
End If
Dim position = node.SpanStart
Dim symbols As IEnumerable(Of ISymbol)
If couldBeMergedNamespace Then
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册