/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/CoreTest/CodeCleanup/AddMissingTokensTests.cs
2 594 строки
80 KB
Cyrus Najmabadi
Merge branch 'main' into testRawStrings
10 июл 2025, 00:28
10 июл 2025, 00:28
a4ec594
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CodeCleanup; using Microsoft.CodeAnalysis.CodeCleanup.Providers; using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.CodeAnalysis.Text; using Roslyn.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.UnitTests.CodeCleanup; [UseExportProvider] [Trait(Traits.Feature, Traits.Features.AddMissingTokens)] public sealed class AddMissingTokensTests { [Fact] public Task MultipleLineIfStatementThen() => VerifyAsync(CreateMethod(""" [| If True Dim a = 1 End If|] """), CreateMethod(""" If True Then Dim a = 1 End If """)); [Fact] public Task TypeArgumentOf() => VerifyAsync(CreateMethod(""" [| Dim a As List(Integer)|] """), CreateMethod(""" Dim a As List(Of Integer) """)); [Fact] public Task TypeParameterOf() => VerifyAsync(""" [|Class A(T) End Class|] """, """ Class A(Of T) End Class """); [Fact] public Task MethodDeclaration() => VerifyAsync(""" Class A [|Sub Test End Sub|] End Class """, """ Class A Sub Test() End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544318")] public Task MethodInvocation_TypeArgParens() => VerifyAsync(""" [|Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Threading Module Program Sub Main(args As String()) [|Dim q = New List(Of Thread |]End Sub|] """, """ Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Threading Module Program Sub Main(args As String()) Dim q = New List(Of Thread End Sub """); [Fact] public Task MethodInvocation_Sub() => VerifyAsync(""" Class A Sub Test [|Test|] End Sub End Class """, """ Class A Sub Test Test() End Sub End Class """); [Fact] public Task MethodInvocation_Function() => VerifyAsync(""" Class A Function Test() As Integer [|Test|] Return 1 End Function End Class """, """ Class A Function Test() As Integer Test() Return 1 End Function End Class """); [Fact] public Task IdentifierMethod_Return() => VerifyAsync(""" Class A Function Test() As Integer Return [|Test2|] End Function Function Test2() As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Return Test2() End Function Function Test2() As Integer Return 1 End Function End Class """); [Fact] public Task IdentifierMethod_Assign() => VerifyAsync(""" Class A Function Test() As Integer Dim a = [|Test2|] Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Dim a = Test2() Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """); [Fact] public Task IdentifierMethod_DotName_DoNotAdd() => VerifyAsync(""" Class A Function Test() As Integer Dim a = [|Me.Test2|] Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Dim a = Me.Test2 Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """); [Fact] public Task MethodInvocation_DotName() => VerifyAsync(""" Class A Function Test() As Integer [|Me.Test2|] Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Me.Test2() Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """); [Fact] public Task MethodInvocation_Generic() => VerifyAsync(""" Class A Function Test() As Integer [|Me.Test2(Of Integer)|] Return 1 End Function Function Test2(Of T) As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Me.Test2(Of Integer)() Return 1 End Function Function Test2(Of T) As Integer Return 1 End Function End Class """); [Fact] public Task MethodInvocation_Call() => VerifyAsync(""" Class A Function Test() As Integer Call [|Me.Test2|] Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Call Me.Test2() Return 1 End Function Function Test2() As Integer Return 1 End Function End Class """); [Fact] public Task EventHandler_AddressOf1() => VerifyAsync(""" Class A Sub EventMethod() [|AddHandler TestEvent, AddressOf EventMethod|] End Sub Public Event TestEvent() End Class """, """ Class A Sub EventMethod() AddHandler TestEvent, AddressOf EventMethod End Sub Public Event TestEvent() End Class """); [Fact] public Task EventHandler_AddressOf2() => VerifyAsync(""" Class A Sub EventMethod() [|RemoveHandler TestEvent, AddressOf EventMethod|] End Sub Public Event TestEvent() End Class """, """ Class A Sub EventMethod() RemoveHandler TestEvent, AddressOf EventMethod End Sub Public Event TestEvent() End Class """); [Fact] public Task Delegate_AddressOf() => VerifyAsync(""" Class A Sub Method() [|Dim a As Action = New Action(AddressOf Method)|] End Sub End Class """, """ Class A Sub Method() Dim a As Action = New Action(AddressOf Method) End Sub End Class """); [Fact] public Task EventDeclaration() => VerifyAsync(""" Class A Sub EventMethod() [|RaiseEvent TestEvent|] End Sub Public Event TestEvent() End Class """, """ Class A Sub EventMethod() RaiseEvent TestEvent() End Sub Public Event TestEvent() End Class """); [Fact] public Task RaiseEvent() => VerifyAsync(""" Class A Sub EventMethod() RaiseEvent TestEvent End Sub [|Public Event TestEvent|] End Class """, """ Class A Sub EventMethod() RaiseEvent TestEvent End Sub Public Event TestEvent() End Class """); [Fact] public Task DelegateInvocation() => VerifyAsync(CreateMethod(""" Dim a As Action [|a|] """), CreateMethod(""" Dim a As Action a() """)); [Fact] public Task Attribute() => VerifyAsync(""" [|<Obsolete> Class C(Of T) Sub Main Dim a = {1, 2, 3} End Sub End Class|] """, """ <Obsolete> Class C(Of T) Sub Main() Dim a = {1, 2, 3} End Sub End Class """); [Fact] public Task ObjectCreation() => VerifyAsync(""" [|Module Program Sub Main(args As String()) Dim x As New ClassInNewFile Dim c As CustomClass = New CustomClass("constructor") End Sub End Module Friend Class CustomClass Sub New(p1 As String) End Sub End Class Class ClassInNewFile End Class|] """, """ Module Program Sub Main(args As String()) Dim x As New ClassInNewFile Dim c As CustomClass = New CustomClass("constructor") End Sub End Module Friend Class CustomClass Sub New(p1 As String) End Sub End Class Class ClassInNewFile End Class """); [Fact] public Task Constructor() => VerifyAsync(""" [|Class C Sub New End Sub End Class|] """, """ Class C Sub New() End Sub End Class """); [Fact] public Task DeclareStatement() => VerifyAsync(""" [|Class C Declare Function getUserName Lib "advapi32.dll" Alias "GetUserNameA" End Class|] """, """ Class C Declare Function getUserName Lib "advapi32.dll" Alias "GetUserNameA" () End Class """); [Fact] public Task DelegateStatement() => VerifyAsync(""" [|Class C Delegate Sub Test End Class|] """, """ Class C Delegate Sub Test() End Class """); [Fact] public Task MethodStatementWithComment() => VerifyAsync(""" [|Class C [|Sub Test ' test End Sub|] End Class|] """, """ Class C Sub Test() ' test End Sub End Class """); [Fact] public Task MultipleLineIfStatementThenWithComment() => VerifyAsync(CreateMethod(""" [| If True ' test Dim a = 1 End If|] """), CreateMethod(""" If True Then ' test Dim a = 1 End If """)); [Fact] public Task TypeArgumentOf_Comment_DoNotAdd() => VerifyAsync(CreateMethod(""" [| Dim a As List( ' test Integer)|] """), CreateMethod(""" Dim a As List( ' test Integer) """)); [Fact] public Task TypeParameterOf_Comment() => VerifyAsync(""" [|Class A( ' test T) End Class|] """, """ Class A(Of ' test T) End Class """); [Fact] public Task MethodInvocation_Function_Comment() => VerifyAsync(""" Class A Function Test() As Integer [|Test ' test|] Return 1 End Function End Class """, """ Class A Function Test() As Integer Test() ' test Return 1 End Function End Class """); [Fact] public Task IdentifierMethod_Return_Comment() => VerifyAsync(""" Class A Function Test() As Integer Return [|Test2 ' test|] End Function Function Test2() As Integer Return 1 End Function End Class """, """ Class A Function Test() As Integer Return Test2() ' test End Function Function Test2() As Integer Return 1 End Function End Class """); [Fact] public Task ImplementsClause() => VerifyAsync(""" Class Program Implements I [|Public Sub Method() Implements I.Method End Sub|] End Class Interface I Sub Method() End Interface """, """ Class Program Implements I Public Sub Method() Implements I.Method End Sub End Class Interface I Sub Method() End Interface """); [Fact] public Task OperatorStatement() => VerifyAsync(""" [|Public Structure abc Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc Dim r As New abc ' Insert code to calculate And of x and y. Return r End Operator End Structure|] """, """ Public Structure abc Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc Dim r As New abc ' Insert code to calculate And of x and y. Return r End Operator End Structure """); [Fact] public Task PropertyAndAccessorStatement() => VerifyAsync(""" [|Class Class1 Private propertyValue As String Public Property prop1() As String Get Return propertyValue End Get Set(ByVal value As String) propertyValue = value End Set End Property End Class|] """, """ Class Class1 Private propertyValue As String Public Property prop1() As String Get Return propertyValue End Get Set(ByVal value As String) propertyValue = value End Set End Property End Class """); [Fact] public Task LambdaExpression() => VerifyAsync(""" [|Class Class1 Dim f as Action = Sub() End Sub End Class|] """, """ Class Class1 Dim f as Action = Sub() End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544225")] public Task StructuredTrivia_Expression_DoNotCrash() => VerifyAsync(""" [|#Const Goo1 = 1 #Const Goo2 = 2 #If Goo1 Then #ElseIf Goo2 Then #Else #End If|] """, """ #Const Goo1 = 1 #Const Goo2 = 2 #If Goo1 Then #ElseIf Goo2 Then #Else #End If """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544169")] public Task EventStatement_AsClause() => VerifyAsync(""" [|Imports System.ComponentModel Class Goo Public Event PropertyChanged As PropertyChangedEventHandler End Class|] """, """ Imports System.ComponentModel Class Goo Public Event PropertyChanged As PropertyChangedEventHandler End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544167")] public Task InvocationExpression_NoParenthesesForPredefinedCastExpression() => VerifyAsync(""" [|Class Program Sub Main(args As String()) CInt(5) End Sub End Class|] """, """ Class Program Sub Main(args As String()) CInt(5) End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544178")] [WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544317")] public Task ObjectCreationExpression() => VerifyAsync(""" [|Class C Function F() As C Return New C End Function End Class|] """, """ Class C Function F() As C Return New C End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544317")] public Task ObjectCreationExpression_Initializer() => VerifyAsync(""" [|Public Class SomeClass Public goo As Integer Sub SomeSub() [|Dim c = New SomeClass With {.goo = 23}|] End Sub End Class|] """, """ Public Class SomeClass Public goo As Integer Sub SomeSub() Dim c = New SomeClass With {.goo = 23} End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544178")] public Task ObjectCreationExpression_GenericName() => VerifyAsync(""" [|Imports System Module Program Sub Main(args As String()) Dim q = New List(Of Integer End Sub End Module|] """, """ Imports System Module Program Sub Main(args As String()) Dim q = New List(Of Integer End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544178")] public Task ObjectCreationExpression_AsNewClause() => VerifyAsync(""" [|Class C Dim a As New C End Class|] """, """ Class C Dim a As New C End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544301")] public Task ContinueStatement_While() => VerifyAsync(""" Module M Sub S() [|While True Continue End While|] End Sub End Module """, """ Module M Sub S() While True Continue While End While End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544301")] public Task ContinueStatement_For() => VerifyAsync(""" Module M Sub S() [|For i = 1 to 10 Continue Next|] End Sub End Module """, """ Module M Sub S() For i = 1 to 10 Continue For Next End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544380")] public Task IfDirective() => VerifyAsync(""" [|#If VBC_VER >= 9.0 Class C End Class|] """, """ #If VBC_VER >= 9.0 Then Class C End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544386")] public Task NamedFieldInitializer() => VerifyAsync(""" [|Class S Public Sub Goo() End Sub Property X Sub test() Dim x = New S With {.X = 0,.Goo} End Sub End Class|] """, """ Class S Public Sub Goo() End Sub Property X Sub test() Dim x = New S With {.X = 0, .Goo} End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544526")] public Task DoNotCrash_ImplementsStatement() => VerifyAsync(""" [|Class C Sub Main() Implements IDisposable.Dispose End Sub End Class|] """, """ Class C Sub Main() Implements IDisposable.Dispose End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544525")] public Task AccessorStatement_AddRemoveHandler_RaiseEvent() => VerifyAsync(""" [|Class C Public Custom Event E1 As Action AddHandler End AddHandler RemoveHandler End RemoveHandler RaiseEvent End RaiseEvent End Event End Class|] """, """ Class C Public Custom Event E1 As Action AddHandler() End AddHandler RemoveHandler() End RemoveHandler RaiseEvent() End RaiseEvent End Event End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545176")] public Task CallStatement_Lambda() => VerifyAsync(""" [|Module Program Sub Main() Call Sub() Console.WriteLine(1) End Sub End Module|] """, """ Module Program Sub Main() Call Sub() Console.WriteLine(1) End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545256")] public Task HandlesClauseItem_DoNotAddParentheses() => VerifyAsync(""" [|Structure s1 Sub Goo() Handles Me.Goo End Sub End Structure|] """, """ Structure s1 Sub Goo() Handles Me.Goo End Sub End Structure """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545380")] public Task DoNotAddParenthesesInForEachControlVariable() => VerifyAsync(""" [|Module Module1 Sub Main() For Each goo in {} End Sub Sub Goo() End Sub End Module|] """, """ Module Module1 Sub Main() For Each goo in {} End Sub Sub Goo() End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545380")] public Task DoNotAddParenthesesInForControlVariable() => VerifyAsync(""" [|Module Module1 Sub Main() For goo to End Sub Sub Goo() End Sub End Module|] """, """ Module Module1 Sub Main() For goo to End Sub Sub Goo() End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545483")] public Task DoNotAddParenthesesForMissingName() => VerifyAsync(""" [|Class C Public Overrides Function|] """, """ Class C Public Overrides Function """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545483")] public Task CombinedDelegates() => VerifyAsync(""" [|Imports System Class A Public Shared Operator +(x As A, y As A) As Action End Operator Shared Sub Main() Dim x As New A Call x + x End Sub End Class|] """, """ Imports System Class A Public Shared Operator +(x As A, y As A) As Action End Operator Shared Sub Main() Dim x As New A Call x + x End Sub End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546581")] public Task ThenOmittedWithSurroundingErrors() => VerifyAsync(CreateMethod(""" [| If True OrElse|] """), CreateMethod(""" If True OrElse """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546581")] public Task ThenOmittedWithSurroundingErrors1() => VerifyAsync(CreateMethod(""" [| If True|] """), CreateMethod(""" If True Then """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546797")] public Task ParenthesisWithLineContinuation() => VerifyAsync(CreateMethod(""" [| System.Diagnostics.Debug.Assert _ (True)|] """), CreateMethod(""" System.Diagnostics.Debug.Assert _ (True) """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546806")] public Task ThenWithLineContinuation() => VerifyAsync(CreateMethod(""" [| #If Condition _ Then ' blah #End If|] """), CreateMethod(""" #If Condition _ Then ' blah #End If """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531278")] public Task ThenInIfDirective() => VerifyAsync(""" #Const ccConst = 0 [|#If ccConst #End If|] Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) End Sub End Module """, """ #Const ccConst = 0 #If ccConst Then #End If Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/607792")] public Task CaseKeywordInSelectStatement() => VerifyAsync(""" Module Program Sub Main() [| Select 1 End Select Dim z = Function() From x In "" :Select 1 End Select Dim z2 = Function() From x In "" : Select 1 End Select |] End Sub End Module """, """ Module Program Sub Main() Select Case 1 End Select Dim z = Function() From x In "" : Select Case 1 End Select Dim z2 = Function() From x In "" : Select Case 1 End Select End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530789")] public Task Bug530789() => VerifyAsync(""" Imports System Module Program Sub Main() [|If True Then Console.WriteLine else If False Then Console.WriteLine else Console.writeline|] End Sub End Module """, """ Imports System Module Program Sub Main() If True Then Console.WriteLine() else If False Then Console.WriteLine() else Console.writeline() End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530039")] public Task TestArraySyntax() => VerifyAsync(""" [|Module TestMod Sub Main() Dim y As Object Dim x As cls2(Of y.gettype()) End Sub End Module|] """, """ Module TestMod Sub Main() Dim y As Object Dim x As cls2(Of y.gettype()) End Sub End Module """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithoutAsClause() => VerifyAsync(""" [| Interface I Function Goo() As System.Threading.Tasks.Task End Interface Class Test Implements I ' a. Basic Async Function Goo1() End Function ' b. With Trailing trivia Async Function Goo2() ' Trailing End Function ' c. Without Parenthesis Async Function Goo4 End Function ' d. With Implements/Handles clause Async Function Goo5() Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo6() Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo7() End Sub ' g. Without End Function Async Function Goo3() ' h. With End Function On SameLine Async Function Goo4(ByVal x As Integer) End Function End Class|] """, """ Interface I Function Goo() As System.Threading.Tasks.Task End Interface Class Test Implements I ' a. Basic Async Function Goo1() As System.Threading.Tasks.Task End Function ' b. With Trailing trivia Async Function Goo2() As System.Threading.Tasks.Task ' Trailing End Function ' c. Without Parenthesis Async Function Goo4() As System.Threading.Tasks.Task End Function ' d. With Implements/Handles clause Async Function Goo5() As System.Threading.Tasks.Task Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo6() As System.Threading.Tasks.Task Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo7() End Sub ' g. Without End Function Async Function Goo3() As System.Threading.Tasks.Task ' h. With End Function On SameLine Async Function Goo4(ByVal x As Integer) As System.Threading.Tasks.Task End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithoutAsClause_WithAddedImports() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Interface I Function Goo() As Task End Interface Class Test Implements I ' a. Basic Async Function Goo1() End Function ' b. With Trailing trivia Async Function Goo2() ' Trailing End Function ' c. Without Parenthesis Async Function Goo4 End Function ' d. With Implements/Handles clause Async Function Goo5() Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo6() Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo7() End Sub ' g. Without End Function Async Function Goo3() ' h. With End Function On SameLine Async Function Goo4(ByVal x As Integer) End Function End Class|] """, """ Imports System Imports System.Threading.Tasks Interface I Function Goo() As Task End Interface Class Test Implements I ' a. Basic Async Function Goo1() As Task End Function ' b. With Trailing trivia Async Function Goo2() As Task ' Trailing End Function ' c. Without Parenthesis Async Function Goo4() As Task End Function ' d. With Implements/Handles clause Async Function Goo5() As Task Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo6() As Task Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo7() End Sub ' g. Without End Function Async Function Goo3() As Task ' h. With End Function On SameLine Async Function Goo4(ByVal x As Integer) As Task End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithoutAsClause() => VerifyAsync(""" [| Interface I Function Goo() As System.Collections.IEnumerable End Interface Class Test Implements I ' a. Basic Iterator Function Goo1() End Function ' b. With Trailing trivia Iterator Function Goo2() ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo4 End Function ' d. With Implements/Handles clause Iterator Function Goo5() Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo6() Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo7() End Sub ' g. Without End Function Iterator Function Goo3() End Class|] """, """ Interface I Function Goo() As System.Collections.IEnumerable End Interface Class Test Implements I ' a. Basic Iterator Function Goo1() As System.Collections.IEnumerable End Function ' b. With Trailing trivia Iterator Function Goo2() As System.Collections.IEnumerable ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo4() As System.Collections.IEnumerable End Function ' d. With Implements/Handles clause Iterator Function Goo5() As System.Collections.IEnumerable Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo6() As System.Collections.IEnumerable Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo7() End Sub ' g. Without End Function Iterator Function Goo3() As System.Collections.IEnumerable End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithoutAsClause_WithAddedImports() => VerifyAsync(""" [| Imports System Imports System.Collections Imports System.Collections.Generic Interface I Function Goo() As System.Collections.IEnumerable End Interface Class Test Implements I ' a. Basic Iterator Function Goo1() End Function ' b. With Trailing trivia Iterator Function Goo2() ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo4 End Function ' d. With Implements/Handles clause Iterator Function Goo5() Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo6() Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo7() End Sub ' g. Without End Function Iterator Function Goo3() End Class|] """, """ Imports System Imports System.Collections Imports System.Collections.Generic Interface I Function Goo() As System.Collections.IEnumerable End Interface Class Test Implements I ' a. Basic Iterator Function Goo1() As IEnumerable End Function ' b. With Trailing trivia Iterator Function Goo2() As IEnumerable ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo4() As IEnumerable End Function ' d. With Implements/Handles clause Iterator Function Goo5() As IEnumerable Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo6() As IEnumerable Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo7() End Sub ' g. Without End Function Iterator Function Goo3() As IEnumerable End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithAsClause() => VerifyAsync(""" [| Interface I Function Goo() As System.Threading.Tasks.Task End Interface Class MyType Public Class Task End Class End Class Class MyTask Inherits Task Sub New() MyBase.New(Nothing) End Sub End Class Class Test(Of T) Implements I ' a. Basic Async Function Goo1() As Integer End Function ' b. With Trailing trivia Async Function Goo2() As Integer ' Trailing End Function ' c. Without Parenthesis Async Function Goo3 As Integer ' Trailing End Function ' d. With Implements/Handles clause Async Function Goo4() As Integer Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo5() As Integer Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo6() As Integer End Sub ' g. With valid Task return type Async Function Goo7() As Task End Function ' h. With valid Task(Of T) return type Async Function Goo8() As Task(Of T) End Function ' i. With valid Task(Of Integer) return type Async Function Goo9() As Task(Of Integer) End Function ' j. With invalid user defined Task return type Async Function Goo10() As MyType.Task End Function ' k. With error return type Async Function Goo11() As ErrorType End Function ' l. Without a return type Async Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Async Function Goo13() As Integer ' Trailing End Function ' n. With return type that inherits from Task Async Function Goo14() As MyTask End Function ' o. Without End Function Async Function GooLast() As Integer End Class|] """, """ Interface I Function Goo() As System.Threading.Tasks.Task End Interface Class MyType Public Class Task End Class End Class Class MyTask Inherits Task Sub New() MyBase.New(Nothing) End Sub End Class Class Test(Of T) Implements I ' a. Basic Async Function Goo1() As System.Threading.Tasks.Task(Of Integer) End Function ' b. With Trailing trivia Async Function Goo2() As System.Threading.Tasks.Task(Of Integer) ' Trailing End Function ' c. Without Parenthesis Async Function Goo3() As System.Threading.Tasks.Task(Of Integer) ' Trailing End Function ' d. With Implements/Handles clause Async Function Goo4() As System.Threading.Tasks.Task(Of Integer) Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo5() As System.Threading.Tasks.Task(Of Integer) Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo6() As Integer End Sub ' g. With valid Task return type Async Function Goo7() As Task End Function ' h. With valid Task(Of T) return type Async Function Goo8() As Task(Of T) End Function ' i. With valid Task(Of Integer) return type Async Function Goo9() As Task(Of Integer) End Function ' j. With invalid user defined Task return type Async Function Goo10() As System.Threading.Tasks.Task(Of MyType.Task) End Function ' k. With error return type Async Function Goo11() As ErrorType End Function ' l. Without a return type Async Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Async Function Goo13() As System.Threading.Tasks.Task(Of Integer) ' Trailing End Function ' n. With return type that inherits from Task Async Function Goo14() As System.Threading.Tasks.Task(Of MyTask) End Function ' o. Without End Function Async Function GooLast() As System.Threading.Tasks.Task(Of Integer) End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithAsClause_WithAddedImports() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Interface I Function Goo() As System.Threading.Tasks.Task End Interface Class MyType Public Class Task End Class End Class Class MyTask Inherits Task Sub New() MyBase.New(Nothing) End Sub End Class Class Test(Of T) Implements I ' a. Basic Async Function Goo1() As Integer End Function ' b. With Trailing trivia Async Function Goo2() As Integer ' Trailing End Function ' c. Without Parenthesis Async Function Goo3 As Integer ' Trailing End Function ' d. With Implements/Handles clause Async Function Goo4() As Integer Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo5() As Integer Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo6() As Integer End Sub ' g. With valid Task return type Async Function Goo7() As Task End Function ' h. With valid Task(Of T) return type Async Function Goo8() As Task(Of T) End Function ' i. With valid Task(Of Integer) return type Async Function Goo9() As Task(Of Integer) End Function ' j. With invalid user defined Task return type Async Function Goo10() As MyType.Task End Function ' k. With error return type Async Function Goo11() As ErrorType End Function ' l. Without a return type Async Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Async Function Goo13() As Integer ' Trailing End Function ' n. With return type that inherits from Task Async Function Goo14() As MyTask End Function ' o. Without End Function Async Function GooLast() As Integer End Class|] """, """ Imports System Imports System.Threading.Tasks Interface I Function Goo() As System.Threading.Tasks.Task End Interface Class MyType Public Class Task End Class End Class Class MyTask Inherits Task Sub New() MyBase.New(Nothing) End Sub End Class Class Test(Of T) Implements I ' a. Basic Async Function Goo1() As Task(Of Integer) End Function ' b. With Trailing trivia Async Function Goo2() As Task(Of Integer) ' Trailing End Function ' c. Without Parenthesis Async Function Goo3() As Task(Of Integer) ' Trailing End Function ' d. With Implements/Handles clause Async Function Goo4() As Task(Of Integer) Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Async Function Goo5() As Task(Of Integer) Implements I.Goo ' Trailing End Function ' f. Invalid Async Sub Async Sub Goo6() As Integer End Sub ' g. With valid Task return type Async Function Goo7() As Task End Function ' h. With valid Task(Of T) return type Async Function Goo8() As Task(Of T) End Function ' i. With valid Task(Of Integer) return type Async Function Goo9() As Task(Of Integer) End Function ' j. With invalid user defined Task return type Async Function Goo10() As Task(Of MyType.Task) End Function ' k. With error return type Async Function Goo11() As ErrorType End Function ' l. Without a return type Async Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Async Function Goo13() As Task(Of Integer) ' Trailing End Function ' n. With return type that inherits from Task Async Function Goo14() As Task(Of MyTask) End Function ' o. Without End Function Async Function GooLast() As Task(Of Integer) End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithAsClause() => VerifyAsync(""" [| Interface I Function Goo() As System.Collections.IEnumerable End Interface Class MyType Public Class IEnumerable End Class End Class Class MyIEnumerable Implements System.Collections.IEnumerable Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Throw New NotImplementedException() End Function End Class Class Test(Of T) Implements I ' a. Basic Iterator Function Goo1() As Integer End Function ' b. With Trailing trivia Iterator Function Goo2() As Integer ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo3 As Integer ' Trailing End Function ' d. With Implements/Handles clause Iterator Function Goo4() As Integer Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo5() As Integer Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo6() As Integer End Sub ' g1. With valid IEnumerable return type Iterator Function Goo7_1() As System.Collections.IEnumerable End Function ' g2. With valid IEnumerator return type Iterator Function Goo7_2() As System.Collections.IEnumerator End Function ' h1. With valid IEnumerable(Of T) return type Iterator Function Goo8_1() As System.Collections.Generic.IEnumerable(Of T) End Function ' h2. With valid IEnumerator(Of T) return type Iterator Function Goo8_2() As System.Collections.Generic.IEnumerator(Of T) End Function ' i1. With valid IEnumerable(Of Integer) return type Iterator Function Goo9_1() As System.Collections.Generic.IEnumerable(Of Integer) End Function ' i2. With valid IEnumerator(Of Integer) return type Iterator Function Goo9_2() As System.Collections.Generic.IEnumerator(Of Integer) End Function ' j. With invalid user defined IEnumerable return type Iterator Function Goo10() As MyType.IEnumerable End Function ' k. With error return type Iterator Function Goo11() As ErrorType End Function ' l. Without a return type Iterator Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Iterator Function Goo13() As Integer ' Trailing End Function ' n. With return type that implements IEnumerable Iterator Function Goo14() As MyIEnumerable End Function ' o. Without End Function Iterator Function GooLast() As Integer End Class|] """, """ Interface I Function Goo() As System.Collections.IEnumerable End Interface Class MyType Public Class IEnumerable End Class End Class Class MyIEnumerable Implements System.Collections.IEnumerable Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Throw New NotImplementedException() End Function End Class Class Test(Of T) Implements I ' a. Basic Iterator Function Goo1() As System.Collections.Generic.IEnumerable(Of Integer) End Function ' b. With Trailing trivia Iterator Function Goo2() As System.Collections.Generic.IEnumerable(Of Integer) ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo3() As System.Collections.Generic.IEnumerable(Of Integer) ' Trailing End Function ' d. With Implements/Handles clause Iterator Function Goo4() As System.Collections.Generic.IEnumerable(Of Integer) Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo5() As System.Collections.Generic.IEnumerable(Of Integer) Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo6() As Integer End Sub ' g1. With valid IEnumerable return type Iterator Function Goo7_1() As System.Collections.IEnumerable End Function ' g2. With valid IEnumerator return type Iterator Function Goo7_2() As System.Collections.IEnumerator End Function ' h1. With valid IEnumerable(Of T) return type Iterator Function Goo8_1() As System.Collections.Generic.IEnumerable(Of T) End Function ' h2. With valid IEnumerator(Of T) return type Iterator Function Goo8_2() As System.Collections.Generic.IEnumerator(Of T) End Function ' i1. With valid IEnumerable(Of Integer) return type Iterator Function Goo9_1() As System.Collections.Generic.IEnumerable(Of Integer) End Function ' i2. With valid IEnumerator(Of Integer) return type Iterator Function Goo9_2() As System.Collections.Generic.IEnumerator(Of Integer) End Function ' j. With invalid user defined IEnumerable return type Iterator Function Goo10() As System.Collections.Generic.IEnumerable(Of MyType.IEnumerable) End Function ' k. With error return type Iterator Function Goo11() As ErrorType End Function ' l. Without a return type Iterator Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Iterator Function Goo13() As System.Collections.Generic.IEnumerable(Of Integer) ' Trailing End Function ' n. With return type that implements IEnumerable Iterator Function Goo14() As System.Collections.Generic.IEnumerable(Of MyIEnumerable) End Function ' o. Without End Function Iterator Function GooLast() As System.Collections.Generic.IEnumerable(Of Integer) End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithAsClause_WithAddedImports() => VerifyAsync(""" [| Imports System Imports System.Collections.Generic Interface I Function Goo() As System.Collections.IEnumerable End Interface Class MyType Public Class IEnumerable End Class End Class Class MyIEnumerable Implements System.Collections.IEnumerable Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Throw New NotImplementedException() End Function End Class Class Test(Of T) Implements I ' a. Basic Iterator Function Goo1() As Integer End Function ' b. With Trailing trivia Iterator Function Goo2() As Integer ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo3 As Integer ' Trailing End Function ' d. With Implements/Handles clause Iterator Function Goo4() As Integer Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo5() As Integer Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo6() As Integer End Sub ' g1. With valid IEnumerable return type Iterator Function Goo7_1() As System.Collections.IEnumerable End Function ' g2. With valid IEnumerator return type Iterator Function Goo7_2() As System.Collections.IEnumerator End Function ' h1. With valid IEnumerable(Of T) return type Iterator Function Goo8_1() As IEnumerable(Of T) End Function ' h2. With valid IEnumerator(Of T) return type Iterator Function Goo8_2() As System.Collections.Generic.IEnumerator(Of T) End Function ' i1. With valid IEnumerable(Of Integer) return type Iterator Function Goo9_1() As IEnumerable(Of Integer) End Function ' i2. With valid IEnumerator(Of Integer) return type Iterator Function Goo9_2() As System.Collections.Generic.IEnumerator(Of Integer) End Function ' j. With invalid user defined IEnumerable return type Iterator Function Goo10() As MyType.IEnumerable End Function ' k. With error return type Iterator Function Goo11() As ErrorType End Function ' l. Without a return type Iterator Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Iterator Function Goo13() As Integer ' Trailing End Function ' n. With return type that implements IEnumerable Iterator Function Goo14() As MyIEnumerable End Function ' o. Without End Function Iterator Function GooLast() As Integer End Class|] """, """ Imports System Imports System.Collections.Generic Interface I Function Goo() As System.Collections.IEnumerable End Interface Class MyType Public Class IEnumerable End Class End Class Class MyIEnumerable Implements System.Collections.IEnumerable Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Throw New NotImplementedException() End Function End Class Class Test(Of T) Implements I ' a. Basic Iterator Function Goo1() As IEnumerable(Of Integer) End Function ' b. With Trailing trivia Iterator Function Goo2() As IEnumerable(Of Integer) ' Trailing End Function ' c. Without Parenthesis Iterator Function Goo3() As IEnumerable(Of Integer) ' Trailing End Function ' d. With Implements/Handles clause Iterator Function Goo4() As IEnumerable(Of Integer) Implements I.Goo End Function ' e. With Implements/Handles clause with trivia Iterator Function Goo5() As IEnumerable(Of Integer) Implements I.Goo ' Trailing End Function ' f. Invalid Iterator Sub Iterator Sub Goo6() As Integer End Sub ' g1. With valid IEnumerable return type Iterator Function Goo7_1() As System.Collections.IEnumerable End Function ' g2. With valid IEnumerator return type Iterator Function Goo7_2() As System.Collections.IEnumerator End Function ' h1. With valid IEnumerable(Of T) return type Iterator Function Goo8_1() As IEnumerable(Of T) End Function ' h2. With valid IEnumerator(Of T) return type Iterator Function Goo8_2() As System.Collections.Generic.IEnumerator(Of T) End Function ' i1. With valid IEnumerable(Of Integer) return type Iterator Function Goo9_1() As IEnumerable(Of Integer) End Function ' i2. With valid IEnumerator(Of Integer) return type Iterator Function Goo9_2() As System.Collections.Generic.IEnumerator(Of Integer) End Function ' j. With invalid user defined IEnumerable return type Iterator Function Goo10() As IEnumerable(Of MyType.IEnumerable) End Function ' k. With error return type Iterator Function Goo11() As ErrorType End Function ' l. Without a return type Iterator Function Goo12() As ' Trailing End Function ' m. With trivia within AsClause Iterator Function Goo13() As IEnumerable(Of Integer) ' Trailing End Function ' n. With return type that implements IEnumerable Iterator Function Goo14() As IEnumerable(Of MyIEnumerable) End Function ' o. Without End Function Iterator Function GooLast() As IEnumerable(Of Integer) End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithAliasedReturnType() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Imports X = System.Threading.Tasks.Task Imports Y = System.Threading Class Test Async Function Goo() As X End Function Async Function Bar() As Y.Tasks.Task End Class|] """, """ Imports System Imports System.Threading.Tasks Imports X = System.Threading.Tasks.Task Imports Y = System.Threading Class Test Async Function Goo() As X End Function Async Function Bar() As Y.Tasks.Task End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithAliasedReturnType() => VerifyAsync(""" [| Imports System Imports System.Collections Imports X = System.Collections.IEnumerable Imports Y = System.Collections Class Test Iterator Function Goo() As X End Function Iterator Function Bar() As Y.IEnumerable End Class|] """, """ Imports System Imports System.Collections Imports X = System.Collections.IEnumerable Imports Y = System.Collections Class Test Iterator Function Goo() As X End Function Iterator Function Bar() As Y.IEnumerable End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithAliasedReturnType_2() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Imports Y = System.Int32 Class Test Async Function Goo() As Y ' Trailing End Function End Class|] """, """ Imports System Imports System.Threading.Tasks Imports Y = System.Int32 Class Test Async Function Goo() As Task(Of Y) ' Trailing End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithAliasedReturnType_2() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Imports Y = System.Int32 Class Test Iterator Function Goo() As Y ' Trailing End Function End Class|] """, """ Imports System Imports System.Threading.Tasks Imports Y = System.Int32 Class Test Iterator Function Goo() As Collections.Generic.IEnumerable(Of Y) ' Trailing End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncFunctionWithQualifiedNameReturnType() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Class Test Async Function Goo() As System.Int32 ' Trailing End Function End Class|] """, """ Imports System Imports System.Threading.Tasks Class Test Async Function Goo() As Task(Of System.Int32) ' Trailing End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorFunctionWithQualifiedNameReturnType() => VerifyAsync(""" [| Imports System Imports System.Collections Class Test Iterator Function Goo() As System.Int32 ' Trailing End Function End Class|] """, """ Imports System Imports System.Collections Class Test Iterator Function Goo() As Generic.IEnumerable(Of System.Int32) ' Trailing End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestAsyncLambdaFunction() => VerifyAsync(""" [| Imports System Imports System.Threading.Tasks Class Test Async Function Goo() As Integer ' Basic Dim a = Async Function() As Integer End Function ' With trailing trivia Dim b = Async Function() As Integer ' Trailing End Function ' Single Line lambda Dim c = Async Function() 0 ' Without AsClause Dim d = Async Function() End Function ' With valid Task return type Dim e = Async Function() as Task End Function ' Without End Function Dim last = Async Function() As Integer ' Trailing End Function End Class|] """, """ Imports System Imports System.Threading.Tasks Class Test Async Function Goo() As Task(Of Integer) ' Basic Dim a = Async Function() As Task(Of Integer) End Function ' With trailing trivia Dim b = Async Function() As Task(Of Integer) ' Trailing End Function ' Single Line lambda Dim c = Async Function() 0 ' Without AsClause Dim d = Async Function() End Function ' With valid Task return type Dim e = Async Function() as Task End Function ' Without End Function Dim last = Async Function() As Task(Of Integer) ' Trailing End Function End Class """); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/602932")] public Task TestIteratorLambdaFunction() => VerifyAsync(""" [| Imports System Imports System.Collections.Generic Class Test Iterator Function Goo() As Integer ' Basic Dim a = Iterator Function() As Integer End Function ' With trailing trivia Dim b = Iterator Function() As Integer ' Trailing End Function ' Single Line lambda Dim c = Iterator Function() 0 ' Without AsClause Dim d = Iterator Function() End Function ' With valid IEnumerable return type Dim e = Iterator Function() as System.Collections.IEnumerable End Function ' Without End Function Dim last = Iterator Function() As Integer ' Trailing End Function End Class|] """, """ Imports System Imports System.Collections.Generic Class Test Iterator Function Goo() As IEnumerable(Of Integer) ' Basic Dim a = Iterator Function() As IEnumerable(Of Integer) End Function ' With trailing trivia Dim b = Iterator Function() As IEnumerable(Of Integer) ' Trailing End Function ' Single Line lambda Dim c = Iterator Function() 0 ' Without AsClause Dim d = Iterator Function() End Function ' With valid IEnumerable return type Dim e = Iterator Function() as System.Collections.IEnumerable End Function ' Without End Function Dim last = Iterator Function() As IEnumerable(Of Integer) ' Trailing End Function End Class """); [Fact] public Task TestNoParenthesesForArgument() => VerifyAsync(""" [| Imports System Imports System.Collections.Generic Class Test Private Function Goo() As Integer Return 1 End Function Private Sub Caller(i As Integer) Caller(Goo) End Sub End Class|] """, """ Imports System Imports System.Collections.Generic Class Test Private Function Goo() As Integer Return 1 End Function Private Sub Caller(i As Integer) Caller(Goo) End Sub End Class """); [Fact] public Task TestNoParenthesesForNameOf() => VerifyAsync(""" [| Module M Sub Main() Dim s = NameOf(Main) End Sub End Module|] """, """ Module M Sub Main() Dim s = NameOf(Main) End Sub End Module """); [Fact] public Task OptionExplicitOn() => VerifyAsync(@"[|Option Explicit|]", """ Option Explicit On """); [Fact] public Task OptionInferOn() => VerifyAsync(@"[|Option Infer|]", """ Option Infer On """); [Fact] public Task OptionStrictOn() => VerifyAsync(@"[|Option Strict|]", """ Option Strict On """); private static string CreateMethod(string body) { return """ Imports System Class C Public Sub Method() """ + body + """ End Sub End Class """; } private static async Task VerifyAsync(string codeWithMarker, string expectedResult) { MarkupTestFile.GetSpans(codeWithMarker, out var codeWithoutMarker, out var textSpans); var document = CreateDocument(codeWithoutMarker, LanguageNames.VisualBasic); var codeCleanups = CodeCleaner.GetDefaultProviders(document).WhereAsArray(p => p.Name is PredefinedCodeCleanupProviderNames.AddMissingTokens or PredefinedCodeCleanupProviderNames.Format or PredefinedCodeCleanupProviderNames.Simplification); var cleanDocument = await CodeCleaner.CleanupAsync(document, textSpans[0], await document.GetCodeCleanupOptionsAsync(CancellationToken.None), codeCleanups); Assert.Equal(expectedResult, (await cleanDocument.GetSyntaxRootAsync()).ToFullString()); } private static Document CreateDocument(string code, string language) { var solution = new AdhocWorkspace().CurrentSolution; var projectId = ProjectId.CreateNewId(); var project = solution.AddProject(projectId, "Project", "Project.dll", language).GetProject(projectId); return project.AddMetadataReference(NetFramework.mscorlib) .AddDocument("Document", SourceText.From(code)); } }