@@ -38,30 +38,41 @@ let private generateError (fileContents: string) (range:FSharp.Compiler.Text.Ran
3838 SuggestedFix = Some suggestedFix
3939 TypeChecks = List.Empty }
4040
41- let private runner ( args : AstNodeRuleParams ) =
42- match args.AstNode with
43- | AstNode.Expression( SynExpr.Const ( SynConst.String ( " " , _, range), _)) ->
44- generateError args.FileContent range EmptyStringLiteral
45- | AstNode.Expression( SynExpr.ArrayOrList ( isArray, [], range)) ->
41+ [<TailCall>]
42+ let rec private processExpressions ( errorsSoFar : array < WarningDetails >) ( args : AstNodeRuleParams ) ( expressions : list < SynExpr >) =
43+ match expressions with
44+ | SynExpr.Const( SynConst.String ( " " , _, range), _) :: tail ->
45+ let errors =
46+ Array.append
47+ errorsSoFar
48+ ( generateError args.FileContent range EmptyStringLiteral)
49+ processExpressions errors args tail
50+ | SynExpr.ArrayOrList ( isArray, [], range) :: tail ->
4651 let emptyLiteralType =
4752 if isArray then EmptyArrayLiteral else EmptyListLiteral
48- generateError args.FileContent range emptyLiteralType
49- | AstNode.Expression( SynExpr.Record(_, _, synExprRecordField, _)) ->
53+ let errors =
54+ Array.append
55+ errorsSoFar
56+ ( generateError args.FileContent range emptyLiteralType)
57+ processExpressions errors args tail
58+ | SynExpr.App(_, _, _, argExpr, _) :: tail ->
59+ processExpressions errorsSoFar args ( argExpr :: tail)
60+ | SynExpr.Record(_, _, synExprRecordFields, _) :: tail ->
5061 let mapping =
5162 function
52- | SynExprRecordField(_, _, expr, _) ->
53- match expr with
54- | Some ( SynExpr.ArrayOrList ( isArray , [], range )) ->
55- let emptyLiteralType = if isArray then EmptyArrayLiteral else EmptyListLiteral
56- generateError args.FileContent range emptyLiteralType
57- | Some ( SynExpr.Const ( SynConst.String ( " " , _, range ), _)) ->
58- generateError args.FileContent range EmptyStringLiteral
59- | Some ( SynExpr.App (_, _, _, SynExpr.Const ( SynConst.String ( " " , _, range ), _), _)) ->
60- generateError args.FileContent range EmptyStringLiteral
61- | _ -> Array.empty
62- synExprRecordField
63- |> List.map mapping
64- |> Array.concat
63+ | SynExprRecordField(_, _, expr, _) -> expr
64+ let fieldExpressions =
65+ synExprRecordFields
66+ |> List.choose mapping
67+ processExpressions errorsSoFar args ( List.append fieldExpressions tail )
68+ | _ :: tail ->
69+ processExpressions errorsSoFar args tail
70+ | [] -> errorsSoFar
71+
72+ let private runner ( args : AstNodeRuleParams ) =
73+ match args.AstNode with
74+ | AstNode.Expression ( expr ) ->
75+ processExpressions Array.empty args ( List.singleton expr )
6576 | _ -> Array.empty
6677
6778
0 commit comments