@@ -7,25 +7,39 @@ open FSharp.Compiler.Syntax
77open FSharpLint.Framework .Ast
88open FSharpLint.Framework .Rules
99
10- let private checkForBindingToAWildcard pattern range =
10+ let private checkForBindingToAWildcard pattern range fileContent ( expr : SynExpr ) letBindingRange =
1111 let rec findWildAndIgnoreParens = function
1212 | SynPat.Paren( pattern, _) -> findWildAndIgnoreParens pattern
1313 | SynPat.Wild(_) -> true
1414 | _ -> false
1515
16- if findWildAndIgnoreParens pattern then
17- { Range = range
18- Message = Resources.GetString( " RulesFavourIgnoreOverLetWildError" )
19- SuggestedFix = None
20- TypeChecks = [] } |> Array.singleton
21- else
22- Array.empty
16+ match ExpressionUtilities.tryFindTextOfRange expr.Range fileContent with
17+ | Some exprText ->
18+ if findWildAndIgnoreParens pattern then
19+ { Range = range
20+ Message = Resources.GetString( " RulesFavourIgnoreOverLetWildError" )
21+ SuggestedFix = Some ( lazy ( Some({ FromRange = letBindingRange
22+ FromText = fileContent
23+ ToText = sprintf " (%s ) |> ignore" exprText })))
24+ TypeChecks = [] } |> Array.singleton
25+ else
26+ Array.empty
27+ | None -> Array.empty
2328
2429let private runner ( args : AstNodeRuleParams ) =
2530 match args.AstNode with
26- | AstNode.Binding( SynBinding(_, _, _, _, _, _, _, pattern, _, _, range, _, _))
27- when Helper.Binding.isLetBinding args.NodeIndex args.SyntaxArray ->
28- checkForBindingToAWildcard pattern range
31+ | AstNode.Binding( SynBinding(_, _, _, _, _, _, _, pattern, _, expr, range, _, _)) ->
32+ let bindingRange =
33+ match args.GetParents( args.NodeIndex) with
34+ | AstNode.ModuleDeclaration( SynModuleDecl.Let(_, _, range)) :: _
35+ | AstNode.Expression( SynExpr.LetOrUse(_, false , _, _, range, _)) :: _ ->
36+ Some( range)
37+ | _ -> None
38+
39+ match bindingRange with
40+ | Some letBindingRange ->
41+ checkForBindingToAWildcard pattern range args.FileContent expr letBindingRange
42+ | None -> Array.empty
2943 | _ -> Array.empty
3044
3145/// Checks if any code uses 'let _ = ...' and suggests to use the ignore function.
0 commit comments