Skip to content

Commit abbf5fa

Browse files
committed
RedundantNewKeyword: don't error if part of use binding
If object is created using `new` keyword as a part of `use` binding, don't apply the rule, because only types that implement IDisposable can be used in `use` bindings.
1 parent 664d9d3 commit abbf5fa

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-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 =

0 commit comments

Comments
 (0)