Skip to content

Commit 1e8380e

Browse files
committed
Use ranges.
1 parent 1c63a5a commit 1e8380e

File tree

8 files changed

+26
-29
lines changed

8 files changed

+26
-29
lines changed

CodeJam.Blocks/Metadata/MetaTypeInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public AttributeInfo[] GetAttribute(Type type) =>
2626
_attributes.Where(a => a.Name == type.FullName).Concat(
2727
_attributes.Where(a => a.Name == type.Name).Concat(
2828
type.Name.EndsWith("Attribute", StringComparison.Ordinal)
29-
? _attributes.Where(a => a.Name == type.Name.Substring(0, type.Name.Length - "Attribute".Length))
29+
? _attributes.Where(a => a.Name == type.Name[..^"Attribute".Length])
3030
: Enumerable.Empty<AttributeInfo>())
3131
).ToArray();
3232
}

CodeJam.Blocks/TableData/CsvFormat.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public static string EscapeValue(string value)
3838
else
3939
escaped.Append(chr);
4040
else if (IsEscapeRequired(chr))
41-
escaped = new StringBuilder(chr == '"' ? value.Substring(0, i) + "\"\"" : value.Substring(0, i + 1));
41+
escaped = new StringBuilder(chr == '"' ? value[..i] + "\"\"" : value[..(i + 1)]);
4242
}
4343
return escaped?.ToString() ?? value;
4444
}

CodeJam.Blocks/TableData/FixedWidthFormat.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public static void Print(
102102
var width = widths[i];
103103
writer.Write(
104104
val.Length > width
105-
? val.Substring(0, width)
105+
? val[..width]
106106
: val.PadRight(width));
107107
}
108108
}

CodeJam.Main.Tests/Collections/SuffixTree/SuffixTreeTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ public void Test17Contains()
103103
st.Add(s);
104104
for (var i = 0; i < s.Length; ++i)
105105
{
106-
var suffix = s.Substring(i);
106+
var suffix = s[i..];
107107
suffixes.Add(suffix);
108108
if (suffix.Length != 1)
109109
{
110-
properSubstrings.Add(suffix.Substring(0, suffix.Length - 1));
110+
properSubstrings.Add(suffix[..^1]);
111111
}
112112
}
113113
}
@@ -181,7 +181,7 @@ private static void TestStartingWith(string[] strings)
181181
{
182182
break;
183183
}
184-
var suffix = s.Substring(pos);
184+
var suffix = s[pos..];
185185
expectedSuffixes.Add(suffix);
186186
expectedSources[suffix].Add(i);
187187
++pos;
@@ -221,7 +221,7 @@ private static void VerifyAllSuffixes(string[] strings, IEnumerable<Suffix> resu
221221
var s = strings[i];
222222
for (var j = 0; j < s.Length; ++j)
223223
{
224-
var suffix = s.Substring(j);
224+
var suffix = s[j..];
225225
expectedSuffixes.Add(suffix);
226226
expectedSources[suffix].Add(i);
227227
}

CodeJam.Main.Tests/Ranges/CompositeRangeTests.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ private static CompositeRange<T> ParseCompositeRange<T>(
3232
var boundaryAndRange = value.Split(new[] { CompositeRangeInternal.PrefixString }, 2, StringSplitOptions.None);
3333
var boundary = ParseRange(boundaryAndRange[0], parseValueCallback);
3434

35-
var result = boundaryAndRange[1]
36-
.Substring(0, boundaryAndRange[1].Length - CompositeRangeInternal.SuffixString.Length)
35+
var result = boundaryAndRange[1][..^CompositeRangeInternal.SuffixString.Length]
3736
.Split(new[] { CompositeRangeInternal.SeparatorString }, StringSplitOptions.None)
3837
.Select(s => ParseRange(s, parseValueCallback))
3938
.ToCompositeRange();
@@ -53,8 +52,7 @@ private static CompositeRange<T, TKey> ParseCompositeRange<T, TKey>(
5352
var boundaryAndRange = value.Split(new[] { CompositeRangeInternal.PrefixString }, 2, StringSplitOptions.None);
5453
var boundary = ParseRange(boundaryAndRange[0], parseValueCallback);
5554

56-
var result = boundaryAndRange[1]
57-
.Substring(0, boundaryAndRange[1].Length - CompositeRangeInternal.SuffixString.Length)
55+
var result = boundaryAndRange[1][..^CompositeRangeInternal.SuffixString.Length]
5856
.Split(new[] { CompositeRangeInternal.SeparatorString }, StringSplitOptions.None)
5957
.Select(s => ParseRange(s, parseValueCallback, parseKeyCallback))
6058
.ToCompositeRange();
@@ -454,11 +452,11 @@ public static void TestCompositeRangeWithValues()
454452
var compositeRange2 = compositeRange.WithValues(i => "A" + i);
455453
AreEqual(compositeRange2.ToString(CultureInfo.InvariantCulture), "[A0..A3]: { '1':[A0..A2]; '2':[A1..A3] }");
456454

457-
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i.Substring(1));
455+
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i[1..]);
458456
AreEqual(compositeRange3.ToString(CultureInfo.InvariantCulture), "[A0..B3]: { '1':[A0..B2]; '2':[A1..B3] }");
459457

460458
var compositeRange4 =
461-
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i.Substring(1), CultureInfo.InvariantCulture));
459+
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i[1..], CultureInfo.InvariantCulture));
462460
AreEqual(compositeRange4.ToString(CultureInfo.InvariantCulture), "[0..3]: { [0..2]; [1..3] }");
463461

464462
AreEqual(compositeRange4, compositeRange.WithoutKeys());
@@ -492,11 +490,11 @@ public static void TestCompositeRangeExclusiveWithValues()
492490
var compositeRange2 = compositeRange.WithValues(i => "A" + i);
493491
AreEqual(compositeRange2.ToString(CultureInfo.InvariantCulture), "(A0..A3): { '1':(A0..A2); '2':(A1..A3) }");
494492

495-
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i.Substring(1));
493+
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i[1..]);
496494
AreEqual(compositeRange3.ToString(CultureInfo.InvariantCulture), "(A0..B3): { '1':(A0..B2); '2':(A1..B3) }");
497495

498496
var compositeRange4 =
499-
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i.Substring(1), CultureInfo.InvariantCulture));
497+
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i[1..], CultureInfo.InvariantCulture));
500498
AreEqual(compositeRange4.ToString(CultureInfo.InvariantCulture), "(0..3): { (0..2); (1..3) }");
501499

502500
AreEqual(compositeRange4, compositeRange.WithoutKeys());
@@ -530,11 +528,11 @@ public static void TestCompositeRangeExclusiveFromWithValues()
530528
var compositeRange2 = compositeRange.WithValues(i => "A" + i);
531529
AreEqual(compositeRange2.ToString(CultureInfo.InvariantCulture), "(A0..A3]: { '1':(A0..A2]; '2':(A1..A3] }");
532530

533-
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i.Substring(1));
531+
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i[1..]);
534532
AreEqual(compositeRange3.ToString(CultureInfo.InvariantCulture), "(A0..B3]: { '1':(A0..B2]; '2':(A1..B3] }");
535533

536534
var compositeRange4 =
537-
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i.Substring(1), CultureInfo.InvariantCulture));
535+
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i[1..], CultureInfo.InvariantCulture));
538536
AreEqual(compositeRange4.ToString(CultureInfo.InvariantCulture), "(0..3]: { (0..2]; (1..3] }");
539537

540538
AreEqual(compositeRange4, compositeRange.WithoutKeys());
@@ -568,11 +566,11 @@ public static void TestCompositeRangeExclusiveToWithValues()
568566
var compositeRange2 = compositeRange.WithValues(i => "A" + i);
569567
AreEqual(compositeRange2.ToString(CultureInfo.InvariantCulture), "[A0..A3): { '1':[A0..A2); '2':[A1..A3) }");
570568

571-
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i.Substring(1));
569+
var compositeRange3 = compositeRange2.WithValues(i => i, i => "B" + i[1..]);
572570
AreEqual(compositeRange3.ToString(CultureInfo.InvariantCulture), "[A0..B3): { '1':[A0..B2); '2':[A1..B3) }");
573571

574572
var compositeRange4 =
575-
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i.Substring(1), CultureInfo.InvariantCulture));
573+
compositeRange3.WithoutKeys().WithValues(i => int.Parse(i[1..], CultureInfo.InvariantCulture));
576574
AreEqual(compositeRange4.ToString(CultureInfo.InvariantCulture), "[0..3): { [0..2); [1..3) }");
577575

578576
AreEqual(compositeRange4, compositeRange.WithoutKeys());

CodeJam.Main.Tests/Ranges/RangeTestHelper.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ private static RangeBoundaryFrom<T> ParseBoundaryFromCore<T>(string value, Func<
2020
if (value.StartsWith(RangeInternal.FromInclusiveString, StringComparison.Ordinal))
2121
{
2222
kind = RangeBoundaryFromKind.Inclusive;
23-
valuePart = value.Substring(RangeInternal.FromInclusiveString.Length);
23+
valuePart = value[RangeInternal.FromInclusiveString.Length..];
2424
}
2525
else if (value.StartsWith(RangeInternal.FromExclusiveString, StringComparison.Ordinal))
2626
{
2727
kind = RangeBoundaryFromKind.Exclusive;
28-
valuePart = value.Substring(RangeInternal.FromExclusiveString.Length);
28+
valuePart = value[RangeInternal.FromExclusiveString.Length..];
2929
}
3030
else
3131
{
@@ -47,12 +47,12 @@ private static RangeBoundaryTo<T> ParseBoundaryToCore<T>(
4747
if (value.EndsWith(RangeInternal.ToInclusiveString, StringComparison.Ordinal))
4848
{
4949
kind = RangeBoundaryToKind.Inclusive;
50-
valuePart = value.Substring(0, value.Length - RangeInternal.ToInclusiveString.Length);
50+
valuePart = value[..^RangeInternal.ToInclusiveString.Length];
5151
}
5252
else if (value.EndsWith(RangeInternal.ToExclusiveString, StringComparison.Ordinal))
5353
{
5454
kind = RangeBoundaryToKind.Exclusive;
55-
valuePart = value.Substring(0, value.Length - RangeInternal.ToExclusiveString.Length);
55+
valuePart = value[..^RangeInternal.ToExclusiveString.Length];
5656
}
5757
else
5858
{
@@ -78,8 +78,7 @@ public static Range<T, TKey> ParseRange<T, TKey>(
7878
Func<string, T> parseValueCallback,
7979
Func<string, TKey> parseKeyCallback)
8080
{
81-
var keyAndRange = value
82-
.Substring(RangeInternal.KeyPrefixString.Length)
81+
var keyAndRange = value[RangeInternal.KeyPrefixString.Length..]
8382
.Split(new[] { RangeInternal.KeySeparatorString }, 2, StringSplitOptions.None);
8483

8584
if (keyAndRange[1] == RangeInternal.EmptyString)

CodeJam.Main.Tests/Reflection/CreateInstanceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private static ParamInfo[] ParseParams(IEnumerable<string> paramStrs) =>
3737
var parts = s.Split(':');
3838
return
3939
s.StartsWith("!", StringComparison.Ordinal)
40-
? Param(parts[0].Substring(1), parts[1], true)
40+
? Param(parts[0][1..], parts[1], true)
4141
: Param(parts[0], parts[1], false);
4242
})
4343
.ToArray();

CodeJam.Main/Strings/StringExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public static string Substring(this string str, StringOrigin origin, int length)
101101
return
102102
origin switch
103103
{
104-
StringOrigin.Begin => str.Substring(0, length),
104+
StringOrigin.Begin => str[..length],
105105
StringOrigin.End => str.Substring(strLen - length, length),
106106
_ => throw CodeExceptions.Argument(nameof(origin), $"Invalid {nameof(StringOrigin)} value.")
107107
};
@@ -175,7 +175,7 @@ public static string TrimPrefix(
175175
return str;
176176

177177
var actPrefix = str.Prefix(prefixLen);
178-
return !comparer.Equals(prefix, actPrefix) ? str : str.Substring(prefixLen);
178+
return !comparer.Equals(prefix, actPrefix) ? str : str[prefixLen..];
179179
}
180180

181181
/// <summary>
@@ -203,7 +203,7 @@ public static string TrimSuffix(this string str, string? suffix, IEqualityCompar
203203
return str;
204204

205205
var actPrefix = str.Suffix(suffixLen);
206-
return !comparer.Equals(suffix, actPrefix) ? str : str.Substring(0, strLen - suffixLen);
206+
return !comparer.Equals(suffix, actPrefix) ? str : str[..(strLen - suffixLen)];
207207
}
208208

209209
/// <summary>

0 commit comments

Comments
 (0)