@@ -24,6 +24,25 @@ module QuickFixes =
2424 let toText = prefixingUnderscores + ident.idText.Replace( " _" , String.Empty)
2525 Some { FromText = ident.idText; FromRange = ident.idRange; ToText = toText })
2626
27+ let removePrefixingAndSuffixingUnderscores ( ident : Ident ) = lazy (
28+ let rec removePrefixingUnderscores ( str : string ) =
29+ if str.StartsWith " _" then
30+ removePrefixingUnderscores( str.Substring 1 )
31+ else
32+ str
33+
34+ let rec removeSuffixingUnderscores ( str : string ) =
35+ if str.EndsWith " _" then
36+ removeSuffixingUnderscores( str.Substring( 0 , str.Length - 1 ))
37+ else
38+ str
39+
40+ let toText =
41+ ident.idText
42+ |> removePrefixingUnderscores
43+ |> removeSuffixingUnderscores
44+ Some { FromText = ident.idText; FromRange = ident.idRange; ToText = toText })
45+
2746 let addPrefix prefix ( ident : Ident ) = lazy (
2847 Some { FromText = ident.idText; FromRange = ident.idRange; ToText = prefix + ident.idText })
2948
@@ -83,12 +102,17 @@ let private camelCaseRule (identifier:string) =
83102 if not ( isCamelCase identifier) then Some " RulesNamingConventionsCamelCaseError"
84103 else None
85104
86- let private underscoreRule allowPrefix ( identifier : string ) =
87- if allowPrefix && identifier.TrimStart( '_' ) .Contains( " _" ) then
88- Some " RulesNamingConventionsUnderscoreError"
89- else if not allowPrefix && identifier.Contains( " _" ) then
90- Some " RulesNamingConventionsUnderscoreError"
91- else
105+ let private underscoreRule ( underscoreMode : NamingUnderscores ) ( identifier : string ) =
106+ let errorKeyToRemoveUnderscores = " RulesNamingConventionsUnderscoreError"
107+ let errorKeyToRemoveLeadingOrTrailingUnderscores = " RulesNamingConventionsNoInfixUnderscoreError"
108+ match underscoreMode with
109+ | NamingUnderscores.AllowPrefix when identifier.TrimStart( '_' ) .Contains '_' ->
110+ Some errorKeyToRemoveUnderscores
111+ | NamingUnderscores.None when identifier.Contains '_' ->
112+ Some errorKeyToRemoveUnderscores
113+ | NamingUnderscores.AllowInfix when ( identifier.StartsWith '_' || identifier.EndsWith '_' ) ->
114+ Some errorKeyToRemoveLeadingOrTrailingUnderscores
115+ | _ ->
92116 None
93117
94118let private prefixRule ( prefix : string ) ( identifier : string ) =
@@ -120,12 +144,15 @@ let private checkIdentifierPart (config:NamingConfig) (identifier:Ident) (idText
120144
121145 let underscoresError =
122146 match config.Underscores with
123- | Some NamingUnderscores.None ->
124- underscoreRule false idText
147+ | Some ( NamingUnderscores.None as nuCfg ) ->
148+ underscoreRule nuCfg idText
125149 |> Option.map ( formatError >> tryAddFix QuickFixes.removeAllUnderscores)
126- | Some NamingUnderscores.AllowPrefix ->
127- underscoreRule true idText
150+ | Some ( NamingUnderscores.AllowPrefix as nuCfg ) ->
151+ underscoreRule nuCfg idText
128152 |> Option.map ( formatError >> tryAddFix QuickFixes.removeNonPrefixingUnderscores)
153+ | Some ( NamingUnderscores.AllowInfix as nuCfg) ->
154+ underscoreRule nuCfg idText
155+ |> Option.map ( formatError >> tryAddFix QuickFixes.removePrefixingAndSuffixingUnderscores)
129156 | _ -> None
130157
131158 let prefixError =
0 commit comments