Skip to content

Commit 55eb26a

Browse files
committed
LambdaAnalyzer/SimplifyLambda: do not suggest if has conversion to a delegate
1 parent 6fb5364 commit 55eb26a

4 files changed

Lines changed: 19 additions & 4 deletions

File tree

ReSharper.FSharp/src/FSharp/FSharp.Psi.Daemon/src/Analyzers/LambdaAnalyzer.fs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ type LambdaAnalyzer() =
187187
| _ -> true
188188

189189
let tryCreateWarning (ctor: ILambdaExpr * 'a -> #IHighlighting) (lambda: ILambdaExpr, replacementExpr: 'a as arg)
190-
isFSharp6Supported =
191-
if isFSharp6Supported && hasExplicitConversion lambda then null else
190+
delegatesConversionSupported =
191+
if delegatesConversionSupported && hasExplicitConversion lambda then null else
192192

193193
let lambda = lambda.IgnoreParentParens()
194194

@@ -201,7 +201,7 @@ type LambdaAnalyzer() =
201201
| ValueSome (:? FSharpActivePatternCase) -> null
202202
| _ ->
203203

204-
let outerReferenceCheck = isLambdaArgOwnerSupported lambda isFSharp6Supported replacementExprSymbol
204+
let outerReferenceCheck = isLambdaArgOwnerSupported lambda delegatesConversionSupported replacementExprSymbol
205205
if not outerReferenceCheck then null else
206206

207207
match replacementExprSymbol with
@@ -352,7 +352,7 @@ type LambdaAnalyzer() =
352352
isFSharp60Supported :> _
353353

354354
| true, false, replaceCandidate ->
355-
tryCreateWarning LambdaCanBeSimplifiedWarning (lambda, replaceCandidate) isFSharp60Supported :> _
355+
tryCreateWarning LambdaCanBeSimplifiedWarning (lambda, replaceCandidate) false :> _
356356

357357
| _ ->
358358

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
open System
2+
3+
type A =
4+
static member M(_: Func<int, string, unit>) = ()
5+
6+
A.M(fun x y -> ignore y)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
open System
2+
3+
type A =
4+
static member M(_: Func<int, string, unit>) = ()
5+
6+
A.M(fun x y -> ignore y)
7+
8+
---------------------------------------------------------

ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/Daemon/LambdaAnalyzerTest.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type LambdaAnalyzerTest() =
2929
[<Test>] member x.``Snd``() = x.DoNamedTest()
3030
[<Test>] member x.``Delegates 01``() = x.DoNamedTest()
3131
[<Test>] member x.``Delegates 02 - Method overloads``() = x.DoNamedTest()
32+
[<Test>] member x.``Delegates 03 - Simplify lambda``() = x.DoNamedTest()
3233

3334
[<Test; TestReferences("System.Core")>] member x.``Delegates``() = x.DoNamedTest()
3435

0 commit comments

Comments
 (0)