@@ -7,14 +7,17 @@ open FSharpLint.Framework.Rules
77open FSharpLint.Framework
88open FSharpLint.Framework .Suggestion
99
10+ let private isIdentifierTooShort ( identifier : string ) =
11+ identifier.Length < 2 && not ( identifier.StartsWith '_' )
12+
1013let private checkIdentifierPart ( identifier : Ident ) ( idText : string ) =
1114 let formatError errorName =
1215 String.Format( Resources.GetString errorName, idText)
1316
1417 " RulesAvoidTooShortNamesError" |> formatError |> Array.singleton
1518
1619let private checkIdentifier ( identifier : Ident ) ( idText : string ) =
17- if idText.Length = 1 && not ( idText.StartsWith '_' ) then
20+ if isIdentifierTooShort idText then
1821 checkIdentifierPart identifier idText
1922 |> Array.map ( fun message ->
2023 { Range = identifier.idRange
@@ -28,7 +31,7 @@ let private getParameterWithBelowMinimumLength (pats: SynPat list): (Ident * str
2831 let rec loop patArray acc =
2932 match patArray with
3033 | SynPat.Named(_, ident, _, _, _):: tail ->
31- if ident.idText.Length = 1 then
34+ if isIdentifierTooShort ident.idText then
3235 Array.singleton ( ident, ident.idText, None) |> Array.append acc |> loop tail
3336 else
3437 loop tail acc
@@ -43,21 +46,31 @@ let private getIdentifiers (args:AstNodeRuleParams) =
4346 match identifiers with
4447 | head::_ ->
4548 let result : ( Ident * string * ( unit -> bool ) option ) array = getParameterWithBelowMinimumLength names
46- if head.idText.Length = 1 then
49+ if isIdentifierTooShort head.idText then
4750 Array.append result ( Array.singleton ( head, head.idText, None))
4851 else
4952 result
5053 | _ -> Array.empty
51- | SynPat.Named(_, identifier, _, _, _) when identifier.idText.Length = 1 ->
54+ | SynPat.Named(_, identifier, _, _, _) when isIdentifierTooShort identifier.idText ->
5255 ( identifier, identifier.idText, None) |> Array.singleton
5356 | _ -> Array.empty
57+ | AstNode.Field( SynField(_, _, Some identifier, _, _, _, _, _)) when isIdentifierTooShort identifier.idText ->
58+ ( identifier, identifier.idText, None) |> Array.singleton
5459 | _ -> Array.empty
5560
5661let runner ( args : AstNodeRuleParams ) =
57- getIdentifiers args
58- |> Array.collect ( fun ( identifier , idText , typeCheck ) ->
59- let suggestions = checkIdentifier identifier idText
60- suggestions |> Array.map ( fun suggestion -> { suggestion with TypeChecks = Option.toList typeCheck }))
62+ match args.AstNode with
63+ | AstNode.Identifier([ identifier], range) when isIdentifierTooShort identifier ->
64+ { Range = range
65+ Message = Resources.GetString " RulesAvoidTooShortNamesError"
66+ SuggestedFix = None
67+ TypeChecks = List.empty }
68+ |> Array.singleton
69+ | _ ->
70+ getIdentifiers args
71+ |> Array.collect ( fun ( identifier , idText , typeCheck ) ->
72+ let suggestions = checkIdentifier identifier idText
73+ suggestions |> Array.map ( fun suggestion -> { suggestion with TypeChecks = Option.toList typeCheck }))
6174
6275let rule =
6376 { Name = " AvoidTooShortNames"
0 commit comments