Skip to content

Commit 9ec0af9

Browse files
committed
Tidy up RegexPatterns.Cache and proliferate [StringSyntax(StringSyntaxAttribute.Regex)] appropriately.
1 parent 7559faa commit 9ec0af9

File tree

6 files changed

+13
-34
lines changed

6 files changed

+13
-34
lines changed

src/GitVersion.Configuration/Builders/BranchConfigurationBuilder.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics.CodeAnalysis;
12
using GitVersion.VersionCalculation;
23

34
namespace GitVersion.Configuration;
@@ -81,7 +82,7 @@ public virtual BranchConfigurationBuilder WithCommitMessageIncrementing(CommitMe
8182
return this;
8283
}
8384

84-
public virtual BranchConfigurationBuilder WithRegularExpression(string? value)
85+
public virtual BranchConfigurationBuilder WithRegularExpression([StringSyntax(StringSyntaxAttribute.Regex)] string? value)
8586
{
8687
this.regularExpression = value;
8788
return this;

src/GitVersion.Core/Configuration/EffectiveConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics.CodeAnalysis;
12
using GitVersion.Extensions;
23
using GitVersion.VersionCalculation;
34

@@ -100,6 +101,7 @@ public EffectiveConfiguration(
100101

101102
public IncrementStrategy Increment { get; }
102103

104+
[StringSyntax(StringSyntaxAttribute.Regex)]
103105
public string? RegularExpression { get; }
104106

105107
public bool PreventIncrementOfMergedBranch { get; }

src/GitVersion.Core/Configuration/IBranchConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics.CodeAnalysis;
12
using GitVersion.Core;
23
using GitVersion.VersionCalculation;
34

@@ -19,6 +20,7 @@ public interface IBranchConfiguration
1920

2021
CommitMessageIncrementMode? CommitMessageIncrementing { get; }
2122

23+
[StringSyntax(StringSyntaxAttribute.Regex)]
2224
string? RegularExpression { get; }
2325

2426
bool IsMatch(string branchName)

src/GitVersion.Core/Core/RegexPatterns.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ public static class Cache
1313
{
1414
private static readonly ConcurrentDictionary<string, Regex> cache = new();
1515

16-
public static Regex GetOrAdd(string pattern) =>
17-
GetOrAdd(pattern, () => new Regex(pattern, Options));
18-
19-
public static Regex GetOrAdd(string pattern, Func<Regex> fallbackFactory)
16+
public static Regex GetOrAdd([StringSyntax(StringSyntaxAttribute.Regex)] string pattern)
2017
{
2118
ArgumentNullException.ThrowIfNull(pattern);
22-
ArgumentNullException.ThrowIfNull(fallbackFactory);
2319

24-
return cache.GetOrAdd(pattern, _ => Resolve(pattern, fallbackFactory));
20+
return cache.GetOrAdd(pattern, key =>
21+
KnownRegexes.TryGetValue(key, out var factory)
22+
? factory()
23+
: new Regex(key, Options));
2524
}
2625

2726
private static readonly ImmutableDictionary<string, Func<Regex>> KnownRegexes =
@@ -71,16 +70,6 @@ public static Regex GetOrAdd(string pattern, Func<Regex> fallbackFactory)
7170
[AssemblyVersion.VisualBasic.TriviaRegexPattern] = AssemblyVersion.VisualBasic.TriviaRegex,
7271
[AssemblyVersion.VisualBasic.AttributeRegexPattern] = AssemblyVersion.VisualBasic.AttributeRegex
7372
}.ToImmutableDictionary();
74-
75-
private static Regex Resolve(string pattern, Func<Regex> fallbackFactory)
76-
{
77-
if (KnownRegexes.TryGetValue(pattern, out var factory))
78-
{
79-
return factory();
80-
}
81-
82-
return fallbackFactory();
83-
}
8473
}
8574

8675
internal static partial class Common
Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
using System.Collections.Concurrent;
2-
using System.Diagnostics.CodeAnalysis;
3-
using System.Text.RegularExpressions;
4-
51
namespace GitVersion.Extensions;
62

7-
public static class DictionaryExtensions
3+
internal static class DictionaryExtensions
84
{
9-
public static TValue GetOrAdd<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, Func<TValue> getValue) where TKey : notnull
5+
internal static TValue GetOrAdd<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, Func<TValue> getValue) where TKey : notnull
106
{
117
ArgumentNullException.ThrowIfNull(dict);
128
ArgumentNullException.ThrowIfNull(getValue);
@@ -16,12 +12,4 @@ public static TValue GetOrAdd<TKey, TValue>(this Dictionary<TKey, TValue> dict,
1612
dict.Add(key, value);
1713
return value;
1814
}
19-
20-
public static Regex GetOrAdd(this ConcurrentDictionary<string, Regex> dict, [StringSyntax(StringSyntaxAttribute.Regex)] string pattern)
21-
{
22-
ArgumentNullException.ThrowIfNull(dict);
23-
ArgumentNullException.ThrowIfNull(pattern);
24-
25-
return dict.GetOrAdd(pattern, regex => new(regex, RegexOptions.IgnoreCase | RegexOptions.Compiled));
26-
}
2715
}

src/GitVersion.Core/PublicAPI.Shipped.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ GitVersion.ConfigurationInfo.OverrideConfiguration -> System.Collections.Generic
154154
GitVersion.ConfigurationInfo.ShowConfiguration -> bool
155155
GitVersion.Extensions.AssemblyVersionsGeneratorExtensions
156156
GitVersion.Extensions.CommonExtensions
157-
GitVersion.Extensions.DictionaryExtensions
158157
GitVersion.Extensions.EnumerableExtensions
159158
GitVersion.Extensions.FileSystemExtensions
160159
GitVersion.Extensions.GitExtensions
@@ -730,8 +729,6 @@ static GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.GetAssemblyVers
730729
static GitVersion.Extensions.CommonExtensions.NotNull<T>(this T? value, string! name = "") -> T!
731730
static GitVersion.Extensions.CommonExtensions.NotNullOrEmpty(this string? value, string! name = "") -> string!
732731
static GitVersion.Extensions.CommonExtensions.NotNullOrWhitespace(this string? value, string! name = "") -> string!
733-
static GitVersion.Extensions.DictionaryExtensions.GetOrAdd(this System.Collections.Concurrent.ConcurrentDictionary<string!, System.Text.RegularExpressions.Regex!>! dict, string! pattern) -> System.Text.RegularExpressions.Regex!
734-
static GitVersion.Extensions.DictionaryExtensions.GetOrAdd<TKey, TValue>(this System.Collections.Generic.Dictionary<TKey, TValue>! dict, TKey key, System.Func<TValue>! getValue) -> TValue
735732
static GitVersion.Extensions.EnumerableExtensions.AddRange<T>(this System.Collections.Generic.ICollection<T>! source, System.Collections.Generic.IEnumerable<T>! items) -> void
736733
static GitVersion.Extensions.EnumerableExtensions.OnlyOrDefault<T>(this System.Collections.Generic.IEnumerable<T>! source) -> T?
737734
static GitVersion.Extensions.EnumerableExtensions.SingleOfType<T>(this System.Collections.IEnumerable! source) -> T

0 commit comments

Comments
 (0)