dotnet/roslyn

VB editor doesn't highlight syntax errors in lambdas

開放

#42,857 建立於 2020年3月27日

 (10 則留言) (0 個反應) (0 位負責人)C# (4,257 個分叉)batch import
Area-CompilersConcept-Diagnostic Clarityhelp wanted

倉庫指標

星標
 (20,414 顆星)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 256 個 PR)

描述

In this code:

Module Program
    Sub Main(args As String())
        Foo(Function() 3,
                Sub(x)
                    Dim x = Function(x) x + 3
                End Sub
        )
    End Sub

    Sub Foo(a As Integer, b As Integer)
             ' Do something
    End Sub

    Sub Foo(a As Func(Of Integer), b As Action(Of Integer))
             ' Do something
    End Sub
End Module

The editor puts a red line under Foo in the third line Foo(Function() 3, saying there is an overload resolution error (which is not true), and doesn't highlight the real errors involving declaring a local variable x and a param x inside the Sub(x) lambda sub that has a param x. These errors are reported in one long message, which may be the reason that the editor can't realize them.

Overload resolution failed because no accessible 'Foo' can be called with these arguments: 'Public Sub Foo(a As Integer, b As Integer)': Lambda expression cannot be converted to 'Integer' because 'Integer' is not a delegate type. 'Public Sub Foo(a As Integer, b As Integer)': Lambda expression cannot be converted to 'Integer' because 'Integer' is not a delegate type. 'Public Sub Foo(a As Func(Of Integer), b As Action(Of Integer))': Lambda parameter 'x' hides a variable in an enclosing block, a previously defined range variable, or an implicitly declared variable in a query expression. 'Public Sub Foo(a As Func(Of Integer), b As Action(Of Integer))': Variable 'x' is already declared as a parameter of this or an enclosing lambda expression. 'Public Sub Foo(a As Func(Of Integer), b As Action(Of Integer))': Variable declaration without an 'As' clause; type of Object assumed. 'Public Sub Foo(a As Func(Of Integer), b As Action(Of Integer))': Operands of type Object used for operator '+'; runtime errors could occur.

貢獻者指南