Skip to content

Commit 0b3c84a

Browse files
authored
Merge PR #797 from webwarrior-ws/wip/unresolvedTypesWithNewKeyword
RedundantNewKeyword: don't error if part of use binding
2 parents a2da413 + e3827a8 commit 0b3c84a

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

src/FSharpLint.Core/Rules/Conventions/RedundantNewKeyword.fs

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,27 @@ let runner args =
4747
match (args.AstNode, args.CheckInfo) with
4848
| AstNode.Expression(SynExpr.New(_, SynType.LongIdent(identifier), _, range)), Some checkInfo
4949
| AstNode.Expression(SynExpr.New(_, SynType.App(SynType.LongIdent(identifier), _, _, _, _, _, _), _, range)), Some checkInfo ->
50-
Array.singleton
51-
{
52-
Range = range
53-
Message = Resources.GetString("RulesRedundantNewKeyword")
54-
SuggestedFix = Some(generateFix args.FileContent range)
55-
TypeChecks =
56-
[
57-
fun () -> doesNotImplementIDisposable checkInfo identifier
58-
]
59-
}
50+
let maybeUseBinding =
51+
args.GetParents args.NodeIndex
52+
|> List.tryFind
53+
(function
54+
| AstNode.Expression(SynExpr.LetOrUse(_, true, _, _, _, _)) -> true
55+
| AstNode.Expression(SynExpr.LetOrUseBang(_, true, _, _, _, _, _, _, _)) -> true
56+
| _ -> false)
57+
match maybeUseBinding with
58+
| Some _binding ->
59+
Array.empty
60+
| None ->
61+
Array.singleton
62+
{
63+
Range = range
64+
Message = Resources.GetString("RulesRedundantNewKeyword")
65+
SuggestedFix = Some(generateFix args.FileContent range)
66+
TypeChecks =
67+
[
68+
fun () -> doesNotImplementIDisposable checkInfo identifier
69+
]
70+
}
6071
| _ -> Array.empty
6172

6273
let rule =

tests/FSharpLint.Core.Tests/Rules/Conventions/RedundantNewKeyword.fs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,26 @@ module Program
7474
"""
7575

7676
Assert.IsTrue this.ErrorsExist
77+
78+
[<Test>]
79+
member this.``unresolved type with 'use' should not give rule violations``() =
80+
this.Parse """
81+
module Program
82+
let SomeFunc() =
83+
use foo = new UnresolvedType()
84+
foo.Foo
85+
"""
86+
87+
Assert.IsFalse this.ErrorsExist
88+
89+
[<Test>]
90+
member this.``unresolved type with 'let' should give rule violations``() =
91+
this.Parse """
92+
module Program
93+
let SomeFunc() =
94+
let foo = new UnresolvedType()
95+
foo.Foo
96+
"""
97+
98+
Assert.IsTrue this.ErrorsExist
99+

0 commit comments

Comments
 (0)