未验证 提交 2d54dec4 编写于 作者: J Julien Couvreur 提交者: GitHub

Add LanguageVersion.VisualBasic16 (#28522)

上级 9e3cc5b8
......@@ -17,6 +17,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
VisualBasic15 = 15
VisualBasic15_3 = 1503
VisualBasic15_5 = 1505
VisualBasic16 = 1600
Latest = Integer.MaxValue
End Enum
......@@ -32,7 +34,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
LanguageVersion.VisualBasic14,
LanguageVersion.VisualBasic15,
LanguageVersion.VisualBasic15_3,
LanguageVersion.VisualBasic15_5
LanguageVersion.VisualBasic15_5,
LanguageVersion.VisualBasic16
Return True
End Select
......@@ -60,6 +63,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return "15.3"
Case LanguageVersion.VisualBasic15_5
Return "15.5"
Case LanguageVersion.VisualBasic16
Return "16"
Case Else
Throw ExceptionUtilities.UnexpectedValue(value)
End Select
......@@ -76,9 +81,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Public Function MapSpecifiedToEffectiveVersion(version As LanguageVersion) As LanguageVersion
Select Case version
Case LanguageVersion.Latest
Return LanguageVersion.VisualBasic15_5
Return LanguageVersion.VisualBasic16
Case LanguageVersion.Default
Return LanguageVersion.VisualBasic15
Return LanguageVersion.VisualBasic16
Case Else
Return version
End Select
......@@ -107,6 +112,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return "15.3"
Case LanguageVersion.VisualBasic15_5
Return "15.5"
Case LanguageVersion.VisualBasic16
Return "16"
Case LanguageVersion.Default
Return "default"
Case LanguageVersion.Latest
......@@ -142,6 +149,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
result = LanguageVersion.VisualBasic15_3
Case "15.5"
result = LanguageVersion.VisualBasic15_5
Case "16"
result = LanguageVersion.VisualBasic16
Case "default"
result = LanguageVersion.Default
Case "latest"
......
Microsoft.CodeAnalysis.VisualBasic.LanguageVersion.VisualBasic16 = 1600 -> Microsoft.CodeAnalysis.VisualBasic.LanguageVersion
Microsoft.CodeAnalysis.VisualBasic.Syntax.AsClauseSyntax.WithAsKeyword(asKeyword As Microsoft.CodeAnalysis.SyntaxToken) -> Microsoft.CodeAnalysis.VisualBasic.Syntax.AsClauseSyntax
Microsoft.CodeAnalysis.VisualBasic.Syntax.CastExpressionSyntax.WithCloseParenToken(closeParenToken As Microsoft.CodeAnalysis.SyntaxToken) -> Microsoft.CodeAnalysis.VisualBasic.Syntax.CastExpressionSyntax
Microsoft.CodeAnalysis.VisualBasic.Syntax.CastExpressionSyntax.WithCommaToken(commaToken As Microsoft.CodeAnalysis.SyntaxToken) -> Microsoft.CodeAnalysis.VisualBasic.Syntax.CastExpressionSyntax
......
......@@ -1208,23 +1208,27 @@ End Module").Path
parsedArgs.Errors.Verify()
Assert.Equal(LanguageVersion.VisualBasic15_5, parsedArgs.ParseOptions.LanguageVersion)
parsedArgs = DefaultParse({"/langVERSION:16", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify()
Assert.Equal(LanguageVersion.VisualBasic16, parsedArgs.ParseOptions.LanguageVersion)
' The canary check is a reminder that this test needs to be updated when a language version is added
LanguageVersionAdded_Canary()
parsedArgs = DefaultParse({"/langVERSION:default", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify()
Assert.Equal(LanguageVersion.Default, parsedArgs.ParseOptions.SpecifiedLanguageVersion)
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
parsedArgs = DefaultParse({"/langVERSION:latest", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify()
Assert.Equal(LanguageVersion.Latest, parsedArgs.ParseOptions.SpecifiedLanguageVersion)
Assert.Equal(LanguageVersion.VisualBasic15_5, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
' default: "current version"
parsedArgs = DefaultParse({"a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify()
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
' overriding
parsedArgs = DefaultParse({"/langVERSION:10", "/langVERSION:9.0", "a.vb"}, _baseDirectory)
......@@ -1234,23 +1238,23 @@ End Module").Path
' errors
parsedArgs = DefaultParse({"/langVERSION", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify(Diagnostic(ERRID.ERR_ArgumentRequired).WithArguments("langversion", ":<number>"))
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
parsedArgs = DefaultParse({"/langVERSION+", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify(Diagnostic(ERRID.WRN_BadSwitch).WithArguments("/langVERSION+")) ' TODO: Dev11 reports ERR_ArgumentRequired
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
parsedArgs = DefaultParse({"/langVERSION:", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify(Diagnostic(ERRID.ERR_ArgumentRequired).WithArguments("langversion", ":<number>"))
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
parsedArgs = DefaultParse({"/langVERSION:8", "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify(Diagnostic(ERRID.ERR_InvalidSwitchValue).WithArguments("langversion", "8"))
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
parsedArgs = DefaultParse({"/langVERSION:" & (LanguageVersion.VisualBasic12 + 1), "a.vb"}, _baseDirectory)
parsedArgs.Errors.Verify(Diagnostic(ERRID.ERR_InvalidSwitchValue).WithArguments("langversion", CStr(LanguageVersion.VisualBasic12 + 1)))
Assert.Equal(LanguageVersion.VisualBasic15, parsedArgs.ParseOptions.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), parsedArgs.ParseOptions.LanguageVersion)
End Sub
<Fact>
......@@ -1735,7 +1739,7 @@ End Module").Path
' - update the IDE drop-down for selecting Language Version (not yet supported in VB)
' - update all the tests that call this canary
' - update the command-line documentation (CommandLine.md)
AssertEx.SetEqual({"default", "9", "10", "11", "12", "14", "15", "15.3", "15.5", "latest"},
AssertEx.SetEqual({"default", "9", "10", "11", "12", "14", "15", "15.3", "15.5", "16", "latest"},
System.Enum.GetValues(GetType(LanguageVersion)).Cast(Of LanguageVersion)().Select(Function(v) v.ToDisplayString()))
' For minor versions, the format should be "x.y", such as "15.3"
End Sub
......@@ -1755,7 +1759,8 @@ End Module").Path
"14.0",
"15.0",
"15.3",
"15.5"
"15.5",
"16"
}
AssertEx.SetEqual(versions, errorCodes)
......@@ -1772,11 +1777,12 @@ End Module").Path
Assert.Equal(LanguageVersion.VisualBasic12, LanguageVersion.VisualBasic12.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic14, LanguageVersion.VisualBasic14.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic15, LanguageVersion.VisualBasic15.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic15, LanguageVersion.Default.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic15_3, LanguageVersion.VisualBasic15_3.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic15_5, LanguageVersion.VisualBasic15_5.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic15_5, LanguageVersion.Latest.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic16, LanguageVersion.VisualBasic16.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic16, LanguageVersion.Default.MapSpecifiedToEffectiveVersion())
Assert.Equal(LanguageVersion.VisualBasic16, LanguageVersion.Latest.MapSpecifiedToEffectiveVersion())
' The canary check is a reminder that this test needs to be updated when a language version is added
LanguageVersionAdded_Canary()
......@@ -1797,6 +1803,7 @@ End Module").Path
InlineData("15.0", True, LanguageVersion.VisualBasic15),
InlineData("15.3", True, LanguageVersion.VisualBasic15_3),
InlineData("15.5", True, LanguageVersion.VisualBasic15_5),
InlineData("16", True, LanguageVersion.VisualBasic16),
InlineData("DEFAULT", True, LanguageVersion.Default),
InlineData("default", True, LanguageVersion.Default),
InlineData("LATEST", True, LanguageVersion.Latest),
......
......@@ -7777,7 +7777,8 @@ Module Module1
End Module
</file>
</compilation>)
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
compilation.AssertTheseDiagnostics(<errors>
BC30241: Named argument expected. Please use language version 15.5 or greater to use non-trailing named arguments.
M1(x:=2, 3) 'BIND:"M1(x:=2, 3)"
......@@ -7803,7 +7804,8 @@ Module Module1
End Module
</file>
</compilation>)
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
compilation.AssertTheseDiagnostics(<errors>
BC30241: Named argument expected. Please use language version 15.5 or greater to use non-trailing named arguments.
M1(x:=2, 3) 'BIND:"M1(x:=2, 3)"
......
......@@ -48,7 +48,7 @@ End Class
</file>
</compilation>
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors>
BC30075: Named arguments are not valid as array subscripts.
......
......@@ -349,7 +349,7 @@ Class A3
End Operator
End Class
]]></file>
</compilation>)
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
Dim model As VBSemanticModel = GetSemanticModel(compilation, "a.vb")
Dim operatorSyntax As OperatorStatementSyntax
Dim op As MethodSymbol
......
......@@ -22031,7 +22031,7 @@ Public Partial Class C
End Sub
End Class
]]></file>
</compilation>)
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
Dim expectedErrors = <errors><![CDATA[
BC36716: Visual Basic 15.0 does not support Private Protected.
......
......@@ -1023,7 +1023,9 @@ End Class
<WorkItem(544299, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544299")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestExclusiveNamedParameterCompletion() As Task
Using state = TestState.CreateVisualBasicTestState(
Using state = TestState.CreateTestStateFromWorkspace(
<Workspace>
<Project Language="Visual Basic" CommonReferences="true" LanguageVersion="VisualBasic15">
<Document>
Class Class1
Private Sub Test()
......@@ -1036,7 +1038,9 @@ Class Class1
Private Sub Goo(str As String, bool As Boolean)
End Sub
End Class
</Document>)
</Document>
</Project>
</Workspace>)
state.SendTypeChars(" ")
Await state.AssertCompletionSession()
......@@ -1048,7 +1052,9 @@ End Class
<WorkItem(544299, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544299")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestExclusiveNamedParameterCompletion2() As Task
Using state = TestState.CreateVisualBasicTestState(
Using state = TestState.CreateTestStateFromWorkspace(
<Workspace>
<Project Language="Visual Basic" CommonReferences="true" LanguageVersion="VisualBasic15">
<Document>
Class Goo
Private Sub Test()
......@@ -1065,7 +1071,9 @@ Class Goo
Private Sub Method(obj As Object, b As Boolean, str As String)
End Sub
End Class
</Document>)
</Document>
</Project>
</Workspace>)
state.SendTypeChars(" ")
Await state.AssertCompletionSession()
......
......@@ -12,9 +12,12 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.UseNamedArguments
Return New VisualBasicUseNamedArgumentsCodeRefactoringProvider()
End Function
Private Shared ReadOnly s_vb15Parameters As TestParameters =
New TestParameters(parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
Public Async Function TestFirstArgument() As Task
Await TestInRegularAndScriptAsync(
Await TestInRegularAndScript1Async(
"Class C
Sub M(arg1 As Integer, arg2 As Integer)
M([||]1, 2)
......@@ -24,7 +27,7 @@ End Class",
Sub M(arg1 As Integer, arg2 As Integer)
M(arg1:=1, arg2:=2)
End Sub
End Class")
End Class", parameters:=s_vb15Parameters)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
......@@ -82,7 +85,7 @@ End Class")
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
Public Async Function TestConditionalMethod() As Task
Await TestInRegularAndScriptAsync(
Await TestInRegularAndScript1Async(
"Class C
Sub M(arg1 as Integer, arg2 as Integer)
Me?.M([||]1, 2)
......@@ -92,7 +95,7 @@ End Class",
Sub M(arg1 as Integer, arg2 as Integer)
Me?.M(arg1:=1, arg2:=2)
End Sub
End Class")
End Class", parameters:=s_vb15Parameters)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
......@@ -112,7 +115,7 @@ End Class")
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
Public Async Function TestConstructor() As Task
Await TestInRegularAndScriptAsync(
Await TestInRegularAndScript1Async(
"Class C
Sub New(arg1 As Integer, arg2 As Integer)
Dim c = New C([||]1, 2)
......@@ -122,7 +125,7 @@ End Class",
Sub New(arg1 As Integer, arg2 As Integer)
Dim c = New C(arg1:=1, arg2:=2)
End Sub
End Class")
End Class", parameters:=s_vb15Parameters)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
......@@ -280,7 +283,7 @@ End Class")
<WorkItem(19175, "https://github.com/dotnet/roslyn/issues/19175")>
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
Public Async Function TestCaretPositionAtTheEnd2() As Task
Await TestInRegularAndScriptAsync(
Await TestInRegularAndScript1Async(
"Class C
Sub M(arg1 As Integer, arg2 As Integer)
M(arg1[||], arg2)
......@@ -290,7 +293,7 @@ End Class",
Sub M(arg1 As Integer, arg2 As Integer)
M(arg1:=arg1, arg2:=arg2)
End Sub
End Class")
End Class", parameters:=s_vb15Parameters)
End Function
<WorkItem(19175, "https://github.com/dotnet/roslyn/issues/19175")>
......@@ -341,7 +344,7 @@ End Class")
<WorkItem(23269, "https://github.com/dotnet/roslyn/issues/23269")>
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseNamedArguments)>
Public Async Function TestCharacterEscape() As Task
Await TestInRegularAndScriptAsync(
Await TestInRegularAndScript1Async(
"Class C
Sub M([If] As Integer, [For] As Integer)
M([If][||], [For])
......@@ -351,7 +354,7 @@ End Class",
Sub M([If] As Integer, [For] As Integer)
M([If]:=[If], [For]:=[For])
End Sub
End Class")
End Class", parameters:=s_vb15Parameters)
End Function
End Class
End Namespace
......@@ -64,8 +64,8 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.ProjectSystemShim
Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
' SetCompilerOptions only handles versions 15.3 and up
Assert.Equal(LanguageVersion.VisualBasic15, options.LanguageVersion)
Assert.Equal(LanguageVersion.VisualBasic15, options.SpecifiedLanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.SpecifiedLanguageVersion)
project.Disconnect()
End Using
......@@ -85,8 +85,8 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.ProjectSystemShim
Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
Assert.Equal(LanguageVersion.VisualBasic15, options.LanguageVersion)
Assert.Equal(LanguageVersion.VisualBasic15, options.SpecifiedLanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.LanguageVersion)
Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.SpecifiedLanguageVersion)
project.Disconnect()
End Using
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册