提交 688b5347 编写于 作者: G Gen Lu

show void keyword in completion after readonly in struct

上级 00edbcef
......@@ -772,5 +772,25 @@ class C
{
delegate*$$");
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
[WorkItem(43295, "https://github.com/dotnet/roslyn/issues/43295")]
public async Task TestAfterReadonlyInStruct()
{
await VerifyKeywordAsync(@"
struct S
{
public readonly $$");
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
[WorkItem(43295, "https://github.com/dotnet/roslyn/issues/43295")]
public async Task TestNotAfterReadonlyInClass()
{
await VerifyAbsenceAsync(@"
class C
{
public readonly $$");
}
}
}
......@@ -12,7 +12,7 @@ namespace Microsoft.CodeAnalysis.CSharp.Completion.KeywordRecommenders
{
internal class VoidKeywordRecommender : AbstractSyntacticSingleKeywordRecommender
{
private static readonly ISet<SyntaxKind> s_validModifiers = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
private static readonly ISet<SyntaxKind> s_validClassInterfaceRecordModifiers = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
{
SyntaxKind.NewKeyword,
SyntaxKind.PublicKeyword,
......@@ -29,6 +29,11 @@ internal class VoidKeywordRecommender : AbstractSyntacticSingleKeywordRecommende
SyntaxKind.AsyncKeyword
};
private static readonly ISet<SyntaxKind> s_validStructModifiers = new HashSet<SyntaxKind>(s_validClassInterfaceRecordModifiers, SyntaxFacts.EqualityComparer)
{
SyntaxKind.ReadOnlyKeyword,
};
public VoidKeywordRecommender()
: base(SyntaxKind.VoidKeyword)
{
......@@ -101,15 +106,8 @@ private static bool IsUnsafeLocalVariableDeclarationContext(CSharpSyntaxContext
}
private static bool IsMemberReturnTypeContext(int position, CSharpSyntaxContext context, CancellationToken cancellationToken)
{
var syntaxTree = context.SyntaxTree;
return
syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructRecordTypeDeclarations,
canBePartial: true,
cancellationToken: cancellationToken);
}
=> context.SyntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(validModifiers: s_validClassInterfaceRecordModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceRecordTypeDeclarations, canBePartial: true, cancellationToken) ||
context.IsMemberDeclarationContext(validModifiers: s_validStructModifiers, validTypeDeclarations: SyntaxKindSet.StructOnlyTypeDeclarations, canBePartial: false, cancellationToken);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册