@@ -38,30 +38,56 @@ 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.DotIndexedGet(_, indexArgs, _ , _) :: tail ->
51+ processExpressions errorsSoFar args ( indexArgs :: tail)
52+ | SynExpr.DotIndexedSet(_, indexArgs, _ , _, _, _) :: tail ->
53+ processExpressions errorsSoFar args ( indexArgs :: tail)
54+ | SynExpr.Paren( expr, _, _, _) :: tail ->
55+ processExpressions errorsSoFar args ( expr :: tail)
56+ | SynExpr.Tuple(_, expressions, _, _) :: tail ->
57+ processExpressions errorsSoFar args ( List.append expressions tail)
58+ | SynExpr.ArrayOrList( isArray, [], range) :: tail ->
4659 let emptyLiteralType =
4760 if isArray then EmptyArrayLiteral else EmptyListLiteral
48- generateError args.FileContent range emptyLiteralType
49- | AstNode.Expression( SynExpr.Record(_, _, synExprRecordField, _)) ->
61+ let errors =
62+ Array.append
63+ errorsSoFar
64+ ( generateError args.FileContent range emptyLiteralType)
65+ processExpressions errors args tail
66+ | SynExpr.ArrayOrListComputed(_, expr, _) :: tail ->
67+ processExpressions errorsSoFar args ( expr :: tail)
68+ | SynExpr.App(_, _, funcExpr, argExpr, _) :: tail ->
69+ processExpressions errorsSoFar args ( List.append [ funcExpr; argExpr ] tail)
70+ | SynExpr.AnonRecd(_, _, recordFields, _, _) :: tail ->
71+ let fieldExpressions =
72+ recordFields
73+ |> List.map ( fun ( _ , _ , expr ) -> expr)
74+ processExpressions errorsSoFar args ( List.append fieldExpressions tail)
75+ | SynExpr.Record(_, _, synExprRecordFields, _) :: tail ->
5076 let mapping =
5177 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
78+ | SynExprRecordField(_, _, expr, _) -> expr
79+ let fieldExpressions =
80+ synExprRecordFields
81+ |> List.choose mapping
82+ processExpressions errorsSoFar args ( List.append fieldExpressions tail )
83+ | _ :: tail ->
84+ processExpressions errorsSoFar args tail
85+ | [] -> errorsSoFar
86+
87+ let private runner ( args : AstNodeRuleParams ) =
88+ match args.AstNode with
89+ | AstNode.Expression ( expr ) ->
90+ processExpressions Array.empty args ( List.singleton expr )
6591 | _ -> Array.empty
6692
6793
0 commit comments