From c3a67a01eb70c1debad0f967ee6c9d5caaaa4837 Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Mon, 19 Apr 2021 19:21:48 +0200 Subject: [PATCH 1/2] Handle records in documentation comments in IDE side --- .../DocumentationCommentTests.cs | 64 +++++++++++++++++++ .../DocumentationCommentSnippetService.cs | 1 + .../MemberDeclarationSyntaxExtensions.cs | 26 -------- .../CSharp/Extensions/SyntaxNodeExtensions.cs | 3 +- 4 files changed, 67 insertions(+), 27 deletions(-) diff --git a/src/EditorFeatures/CSharpTest/DocumentationComments/DocumentationCommentTests.cs b/src/EditorFeatures/CSharpTest/DocumentationComments/DocumentationCommentTests.cs index 4af6c89fe02ca..326a0fc2cdb94 100644 --- a/src/EditorFeatures/CSharpTest/DocumentationComments/DocumentationCommentTests.cs +++ b/src/EditorFeatures/CSharpTest/DocumentationComments/DocumentationCommentTests.cs @@ -38,6 +38,40 @@ class C VerifyTypingCharacter(code, expected); } + [WpfFact, Trait(Traits.Feature, Traits.Features.DocumentationComments)] + public void TypingCharacter_Record() + { + var code = +@"//$$ +record R;"; + + var expected = +@"/// +/// $$ +/// +record R;"; + + VerifyTypingCharacter(code, expected); + } + + [WpfFact, Trait(Traits.Feature, Traits.Features.DocumentationComments)] + public void TypingCharacter_RecordWithPositionalParameters() + { + var code = +@"//$$ +record R(string S, int I);"; + + var expected = +@"/// +/// $$ +/// +/// +/// +record R(string S, int I);"; + + VerifyTypingCharacter(code, expected); + } + [WpfFact, Trait(Traits.Feature, Traits.Features.DocumentationComments)] public void TypingCharacter_Class_NewLine() { @@ -1467,6 +1501,36 @@ class C VerifyInsertCommentCommand(code, expected); } + [WpfFact, Trait(Traits.Feature, Traits.Features.DocumentationComments)] + public void Command_Record() + { + var code = "record R$$;"; + + var expected = +@"/// +/// $$ +/// +record R;"; + + VerifyInsertCommentCommand(code, expected); + } + + [WpfFact, Trait(Traits.Feature, Traits.Features.DocumentationComments)] + public void Command_RecordWithPositionalParameters() + { + var code = "record R$$(string S, int I);"; + + var expected = +@"/// +/// $$ +/// +/// +/// +record R(string S, int I);"; + + VerifyInsertCommentCommand(code, expected); + } + [WorkItem(4817, "https://github.com/dotnet/roslyn/issues/4817")] [WpfFact, Trait(Traits.Feature, Traits.Features.DocumentationComments)] public void Command_Class_AutoGenerateXmlDocCommentsOff() diff --git a/src/Features/CSharp/Portable/DocumentationComments/DocumentationCommentSnippetService.cs b/src/Features/CSharp/Portable/DocumentationComments/DocumentationCommentSnippetService.cs index 079e46c889145..53dcae7f19d17 100644 --- a/src/Features/CSharp/Portable/DocumentationComments/DocumentationCommentSnippetService.cs +++ b/src/Features/CSharp/Portable/DocumentationComments/DocumentationCommentSnippetService.cs @@ -39,6 +39,7 @@ protected override bool SupportsDocumentationComments(MemberDeclarationSyntax me switch (member.Kind()) { case SyntaxKind.ClassDeclaration: + case SyntaxKind.RecordDeclaration: case SyntaxKind.InterfaceDeclaration: case SyntaxKind.StructDeclaration: case SyntaxKind.DelegateDeclaration: diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/MemberDeclarationSyntaxExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/MemberDeclarationSyntaxExtensions.cs index f2ef822ad2493..1e03341fec4e1 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/MemberDeclarationSyntaxExtensions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/MemberDeclarationSyntaxExtensions.cs @@ -114,32 +114,6 @@ public static TypeParameterListSyntax GetTypeParameterList(this MemberDeclaratio return null; } - public static BaseParameterListSyntax GetParameterList(this MemberDeclarationSyntax member) - { - if (member != null) - { - switch (member.Kind()) - { - case SyntaxKind.DelegateDeclaration: - return ((DelegateDeclarationSyntax)member).ParameterList; - case SyntaxKind.MethodDeclaration: - return ((MethodDeclarationSyntax)member).ParameterList; - case SyntaxKind.ConstructorDeclaration: - return ((ConstructorDeclarationSyntax)member).ParameterList; - case SyntaxKind.DestructorDeclaration: - return ((DestructorDeclarationSyntax)member).ParameterList; - case SyntaxKind.IndexerDeclaration: - return ((IndexerDeclarationSyntax)member).ParameterList; - case SyntaxKind.OperatorDeclaration: - return ((OperatorDeclarationSyntax)member).ParameterList; - case SyntaxKind.ConversionOperatorDeclaration: - return ((ConversionOperatorDeclarationSyntax)member).ParameterList; - } - } - - return null; - } - public static MemberDeclarationSyntax WithParameterList( this MemberDeclarationSyntax member, BaseParameterListSyntax parameterList) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs index 9c1c265e461d7..2770240b8e87e 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs @@ -258,7 +258,7 @@ node is UsingStatementSyntax || }; public static BaseParameterListSyntax? GetParameterList(this SyntaxNode declaration) - => declaration.Kind() switch + => declaration?.Kind() switch { SyntaxKind.DelegateDeclaration => ((DelegateDeclarationSyntax)declaration).ParameterList, SyntaxKind.MethodDeclaration => ((MethodDeclarationSyntax)declaration).ParameterList, @@ -270,6 +270,7 @@ node is UsingStatementSyntax || SyntaxKind.ParenthesizedLambdaExpression => ((ParenthesizedLambdaExpressionSyntax)declaration).ParameterList, SyntaxKind.LocalFunctionStatement => ((LocalFunctionStatementSyntax)declaration).ParameterList, SyntaxKind.AnonymousMethodExpression => ((AnonymousMethodExpressionSyntax)declaration).ParameterList, + SyntaxKind.RecordDeclaration => ((RecordDeclarationSyntax)declaration).ParameterList, _ => null, }; From a837654f76937caccafa9b1d2a97d8e75386c617 Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Mon, 19 Apr 2021 19:40:08 +0200 Subject: [PATCH 2/2] Fix --- .../Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs index 2770240b8e87e..3f0cd950cc660 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Extensions/SyntaxNodeExtensions.cs @@ -257,7 +257,7 @@ node is UsingStatementSyntax || _ => null, }; - public static BaseParameterListSyntax? GetParameterList(this SyntaxNode declaration) + public static BaseParameterListSyntax? GetParameterList(this SyntaxNode? declaration) => declaration?.Kind() switch { SyntaxKind.DelegateDeclaration => ((DelegateDeclarationSyntax)declaration).ParameterList,