@@ -5898,7 +5898,7 @@ class Program
58985898 SymbolDisplayPartKind.Keyword,
58995899 SymbolDisplayPartKind.Space,
59005900 SymbolDisplayPartKind.Keyword)
5901- End sub
5901+ End Sub
59025902
59035903 <Fact>
59045904 Public Sub UseLongHandValueTuple()
@@ -6032,6 +6032,117 @@ end class"
60326032 actual:=displayParts)
60336033 End Sub
60346034
6035+ <Theory, CombinatorialData>
6036+ Public Sub TestExtensionBlockCSharp_01(useMetadata As Boolean )
6037+ Dim text =
6038+ <text>
6039+ static class E
6040+ {
6041+ extension( object o)
6042+ {
6043+ public void M() { }
6044+ }
6045+ }
6046+ </text>.Value
6047+
6048+ Dim format = New SymbolDisplayFormat(
6049+ typeQualificationStyle:=SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces,
6050+ memberOptions:=SymbolDisplayMemberOptions.IncludeParameters Or
6051+ SymbolDisplayMemberOptions.IncludeModifiers Or
6052+ SymbolDisplayMemberOptions.IncludeAccessibility Or
6053+ SymbolDisplayMemberOptions.IncludeType Or
6054+ SymbolDisplayMemberOptions.IncludeContainingType,
6055+ kindOptions:=SymbolDisplayKindOptions.IncludeMemberKeyword,
6056+ parameterOptions:=SymbolDisplayParameterOptions.IncludeType Or
6057+ SymbolDisplayParameterOptions.IncludeName Or
6058+ SymbolDisplayParameterOptions.IncludeDefaultValue,
6059+ miscellaneousOptions:=SymbolDisplayMiscellaneousOptions.UseSpecialTypes)
6060+
6061+ Dim parseOptions = CSharp.CSharpParseOptions.Default.WithLanguageVersion(CSharp.LanguageVersion.Preview)
6062+ Dim comp As Compilation
6063+ If useMetadata Then
6064+ Dim libComp = CreateCSharpCompilation( "c" , text, parseOptions:=parseOptions)
6065+ comp = CreateCSharpCompilation( "d" , code:= "" , parseOptions:=parseOptions, referencedAssemblies:={libComp.EmitToImageReference()})
6066+ Else
6067+ comp = CreateCSharpCompilation( "c" , text, parseOptions:=parseOptions)
6068+ End If
6069+
6070+ Dim e = DirectCast (comp.GlobalNamespace.GetMembers( "E" ).Single(), ITypeSymbol)
6071+ Dim extension = e.GetMembers().OfType( Of ITypeSymbol).Single()
6072+
6073+ Assert.Equal( "E.<>E__0" , SymbolDisplay.ToDisplayString(extension, format))
6074+
6075+ Dim parts = SymbolDisplay.ToDisplayParts(extension, format)
6076+ Verify(parts,
6077+ "E.<>E__0" ,
6078+ SymbolDisplayPartKind.ClassName,
6079+ SymbolDisplayPartKind.Operator,
6080+ SymbolDisplayPartKind.ClassName)
6081+
6082+ Dim skeletonM = extension.GetMembers( "M" ).Single()
6083+ Assert.Equal( "Public Sub E.<>E__0.M()" , SymbolDisplay.ToDisplayString(skeletonM, format))
6084+ End Sub
6085+
6086+ <Theory, CombinatorialData>
6087+ Public Sub TestExtensionBlockCSharp_02(useMetadata As Boolean )
6088+ Dim text =
6089+ <text>
6090+ <! [CDATA [
6091+ static class E
6092+ {
6093+ extension<T>(T t)
6094+ {
6095+ public void M() { }
6096+ }
6097+ }
6098+ ]]>
6099+ </text>.Value
6100+
6101+ Dim format = New SymbolDisplayFormat(
6102+ typeQualificationStyle:=SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces,
6103+ memberOptions:=SymbolDisplayMemberOptions.IncludeParameters Or
6104+ SymbolDisplayMemberOptions.IncludeModifiers Or
6105+ SymbolDisplayMemberOptions.IncludeAccessibility Or
6106+ SymbolDisplayMemberOptions.IncludeType Or
6107+ SymbolDisplayMemberOptions.IncludeContainingType,
6108+ kindOptions:=SymbolDisplayKindOptions.IncludeMemberKeyword,
6109+ genericsOptions:=SymbolDisplayGenericsOptions.IncludeTypeParameters,
6110+ parameterOptions:=SymbolDisplayParameterOptions.IncludeType Or
6111+ SymbolDisplayParameterOptions.IncludeName Or
6112+ SymbolDisplayParameterOptions.IncludeDefaultValue,
6113+ miscellaneousOptions:=SymbolDisplayMiscellaneousOptions.UseSpecialTypes)
6114+
6115+ Dim parseOptions = CSharp.CSharpParseOptions.Default.WithLanguageVersion(CSharp.LanguageVersion.Preview)
6116+ Dim comp As Compilation
6117+ If useMetadata Then
6118+ Dim libComp = CreateCSharpCompilation( "c" , text, parseOptions:=parseOptions)
6119+ comp = CreateCSharpCompilation( "d" , code:= "" , parseOptions:=parseOptions, referencedAssemblies:={libComp.EmitToImageReference()})
6120+ Else
6121+ comp = CreateCSharpCompilation( "c" , text, parseOptions:=parseOptions)
6122+ End If
6123+
6124+ Dim e = DirectCast (comp.GlobalNamespace.GetMembers( "E" ).Single(), ITypeSymbol)
6125+ Dim extension = e.GetMembers().OfType( Of ITypeSymbol).Single()
6126+
6127+ ' Tracked by https://github.com/dotnet/roslyn/issues/76130 : the arity should not be included in the extension type name
6128+ Assert.Equal( "E.<>E__0`1(Of T)" , SymbolDisplay.ToDisplayString(extension, format))
6129+
6130+ Dim parts = SymbolDisplay.ToDisplayParts(extension, format)
6131+ Verify(parts,
6132+ "E.<>E__0`1(Of T)" ,
6133+ SymbolDisplayPartKind.ClassName,
6134+ SymbolDisplayPartKind.Operator,
6135+ SymbolDisplayPartKind.ClassName,
6136+ SymbolDisplayPartKind.Punctuation,
6137+ SymbolDisplayPartKind.Keyword,
6138+ SymbolDisplayPartKind.Space,
6139+ SymbolDisplayPartKind.TypeParameterName,
6140+ SymbolDisplayPartKind.Punctuation)
6141+
6142+ Dim skeletonM = extension.GetMembers( "M" ).Single()
6143+ Assert.Equal( "Public Sub E.<>E__0`1(Of T).M()" , SymbolDisplay.ToDisplayString(skeletonM, format))
6144+ End Sub
6145+
60356146# Region "Helpers"
60366147
60376148 Private Shared Sub TestSymbolDescription(
0 commit comments