Skip to content

Commit 48ae833

Browse files
authored
Merge pull request #3639 from bjornhellander/feature/naming-settings-regex
Update NamingSettings and DocumentationSettings to keep one Regex instance instead of calling Regex.IsMatch
2 parents 1c7f5f3 + 51b4ba8 commit 48ae833

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers/Settings/ObjectModel/DocumentationSettings.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ protected internal DocumentationSettings(JsonObject documentationSettingsObject,
199199
{
200200
string name = child.Key;
201201

202-
if (!Regex.IsMatch(name, "^[a-zA-Z0-9]+$"))
202+
if (!IsValidVariableName(name))
203203
{
204204
continue;
205205
}
@@ -354,6 +354,20 @@ public string GetCopyrightText(string fileName)
354354
return this.copyrightTextCache;
355355
}
356356

357+
private static bool IsValidVariableName(string name)
358+
{
359+
// Equivalent to Regex.IsMatch(prefix, "^[a-zA-Z0-9]+$")
360+
for (var i = 0; i < name.Length; i++)
361+
{
362+
if (name[i] is not ((>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or (>= '0' and <= '9')))
363+
{
364+
return false;
365+
}
366+
}
367+
368+
return name.Length > 0;
369+
}
370+
357371
private KeyValuePair<string, bool> BuildCopyrightText(string fileName)
358372
{
359373
bool canCache = true;

StyleCop.Analyzers/StyleCop.Analyzers/Settings/ObjectModel/NamingSettings.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ namespace StyleCop.Analyzers.Settings.ObjectModel
77
{
88
using System.Collections.Immutable;
99
using System.Linq;
10-
using System.Text.RegularExpressions;
1110
using LightJson;
1211
using StyleCop.Analyzers.Lightup;
1312

@@ -55,7 +54,7 @@ protected internal NamingSettings(JsonObject namingSettingsObject, AnalyzerConfi
5554
{
5655
var prefix = prefixJsonValue.ToStringValue(kvp.Key);
5756

58-
if (!Regex.IsMatch(prefix, "^[a-z]{1,2}$"))
57+
if (!IsValidHungarianPrefix(prefix))
5958
{
6059
continue;
6160
}
@@ -86,7 +85,7 @@ protected internal NamingSettings(JsonObject namingSettingsObject, AnalyzerConfi
8685

8786
allowCommonHungarianPrefixes ??= AnalyzerConfigHelper.TryGetBooleanValue(analyzerConfigOptions, "stylecop.naming.allowCommonHungarianPrefixes");
8887
allowedHungarianPrefixes ??= AnalyzerConfigHelper.TryGetStringListValue(analyzerConfigOptions, "stylecop.naming.allowedHungarianPrefixes")
89-
?.Where(value => Regex.IsMatch(value, "^[a-z]{1,2}$"))
88+
?.Where(value => IsValidHungarianPrefix(value))
9089
.ToImmutableArray()
9190
.ToBuilder();
9291
allowedNamespaceComponents ??= AnalyzerConfigHelper.TryGetStringListValue(analyzerConfigOptions, "stylecop.naming.allowedNamespaceComponents")?.ToBuilder();
@@ -115,5 +114,19 @@ protected internal NamingSettings(JsonObject namingSettingsObject, AnalyzerConfi
115114
public bool IncludeInferredTupleElementNames { get; }
116115

117116
public TupleElementNameCase TupleElementNameCasing { get; }
117+
118+
private static bool IsValidHungarianPrefix(string prefix)
119+
{
120+
// Equivalent to Regex.IsMatch(prefix, "^[a-z]{1,2}$")
121+
for (var i = 0; i < prefix.Length; i++)
122+
{
123+
if (prefix[i] is not (>= 'a' and <= 'z'))
124+
{
125+
return false;
126+
}
127+
}
128+
129+
return prefix.Length is (>= 1 and <= 2);
130+
}
118131
}
119132
}

0 commit comments

Comments
 (0)