Skip to content

Commit ce67329

Browse files
Update dependencies (#797)
* Update simple dependencies * Update `xunit.v3` and necessaries * Improve ArgumentException throwing * Update analyzers and address new warnings Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 7dc7868 commit ce67329

37 files changed

+515
-423
lines changed

Directory.Packages.props

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,23 @@
77
<ItemGroup>
88
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
99
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" />
10-
<PackageVersion Include="DocFx.App" Version="2.78.3" />
10+
<PackageVersion Include="DocFx.App" Version="2.78.4" />
1111
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.39" />
1212
<PackageVersion Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
1313
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="4.14.0" />
1414
<PackageVersion Include="Microsoft.CodeAnalysis" Version="4.14.0" />
1515
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
1616
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.14.0" />
1717
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.14.0" />
18-
<PackageVersion Include="Microsoft.Testing.Platform.MSBuild" Version="1.9.0" />
1918
<PackageVersion Include="MinVer" Version="6.0.0" />
20-
<PackageVersion Include="Scriban" Version="6.4.0" />
19+
<PackageVersion Include="Scriban" Version="6.5.0" />
2120
<PackageVersion Include="System.Linq.Async" Version="6.0.3" />
2221
<PackageVersion Include="System.Memory" Version="4.6.3" />
23-
<PackageVersion Include="xunit.v3" Version="3.1.0" />
22+
<PackageVersion Include="xunit.v3.mtp-v2" Version="3.2.0" />
2423
</ItemGroup>
2524

2625
<ItemGroup>
27-
<GlobalPackageReference Include="Meziantou.Analyzer" Version="2.0.226" />
26+
<GlobalPackageReference Include="Meziantou.Analyzer" Version="2.0.250" />
2827
<GlobalPackageReference Include="PolySharp" Version="1.15.0" />
2928
</ItemGroup>
3029
</Project>

Generators/SuperLinq.Generator/ArgumentNames.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace SuperLinq.Generator;
33
/// <summary>
44
/// int->string translations of different types.
55
/// </summary>
6-
public record ArgumentNames(IReadOnlyList<string> Arity, IReadOnlyList<string> Ordinals, IReadOnlyList<string> Cardinals)
6+
public sealed record ArgumentNames(IReadOnlyList<string> Arity, IReadOnlyList<string> Ordinals, IReadOnlyList<string> Cardinals)
77
{
88
/// <summary>
99
/// int->string translations of different types.
@@ -44,6 +44,7 @@ public record ArgumentNames(IReadOnlyList<string> Arity, IReadOnlyList<string> O
4444
"Sixth",
4545
"Seventh",
4646
"Eighth",
47-
]);
47+
]
48+
);
4849
}
4950

Source/SuperLinq.Async/AssertCount.cs

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,39 @@
1-
namespace SuperLinq.Async;
1+
namespace SuperLinq.Async;
22

33
public static partial class AsyncSuperEnumerable
44
{
55
/// <summary>
6-
/// Asserts that a source sequence contains a given count of elements.
6+
/// Asserts that a source sequence contains a given count of elements.
77
/// </summary>
8-
/// <typeparam name="TSource">Type of elements in <paramref name="source"/> sequence.</typeparam>
9-
/// <param name="source">Source sequence.</param>
10-
/// <param name="count">Count to assert.</param>
8+
/// <typeparam name="TSource">
9+
/// Type of elements in <paramref name="source"/> sequence.
10+
/// </typeparam>
11+
/// <param name="source">
12+
/// Source sequence.
13+
/// </param>
14+
/// <param name="count">
15+
/// Count to assert.
16+
/// </param>
1117
/// <returns>
12-
/// Returns the original sequence as long it is contains the number of elements specified by <paramref
13-
/// name="count"/>. Otherwise it throws <see cref="ArgumentException" />.
18+
/// Returns the original sequence as long it is contains the number of elements specified by <paramref
19+
/// name="count"/>. Otherwise it throws <see cref="InvalidOperationException" />.
1420
/// </returns>
15-
/// <exception cref="ArgumentNullException"><paramref name="source"/> is null.</exception>
16-
/// <exception cref="ArgumentOutOfRangeException"><paramref name="count"/> is less than <c>0</c>.</exception>
17-
/// <exception cref="ArgumentException"><paramref name="source"/> has a length different than <paramref
18-
/// name="count"/>.</exception>
21+
/// <exception cref="ArgumentNullException">
22+
/// <paramref name="source"/> is <see langword="null" />.
23+
/// </exception>
24+
/// <exception cref="ArgumentOutOfRangeException">
25+
/// <paramref name="count"/> is less than <c>0</c>.
26+
/// </exception>
27+
/// <exception cref="InvalidOperationException">
28+
/// Thrown lazily <paramref name="source"/> has a length different than <paramref name="count"/>.
29+
/// </exception>
1930
/// <remarks>
20-
/// This operator uses deferred execution and streams its results.
31+
/// <para>
32+
/// This operator uses deferred execution and streams its results.
33+
/// </para>
34+
/// <para>
35+
/// The sequence length is evaluated lazily during the enumeration of the sequence.
36+
/// </para>
2137
/// </remarks>
2238
public static IAsyncEnumerable<TSource> AssertCount<TSource>(this IAsyncEnumerable<TSource> source, int count)
2339
{
@@ -40,7 +56,13 @@ static async IAsyncEnumerable<TSource> Core(
4056
yield return item;
4157
}
4258

43-
ArgumentOutOfRangeException.ThrowIfNotEqual(c, count, $"{nameof(source)}.Count()");
59+
AssertSequenceCount(count, c);
4460
}
4561
}
62+
63+
private static void AssertSequenceCount(int expected, int actual)
64+
{
65+
if (expected != actual)
66+
ThrowHelper.ThrowInvalidOperationException($"Sequence contains too {(actual < expected ? "few" : "many")} elements when exactly '{expected:N0}' {(expected == 1 ? "was" : "were")} expected.");
67+
}
4668
}

Source/SuperLinq.Async/Catch.cs

Lines changed: 83 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,34 @@ namespace SuperLinq.Async;
33
public static partial class AsyncSuperEnumerable
44
{
55
/// <summary>
6-
/// Creates a sequence that corresponds to the source sequence, concatenating it with the sequence resulting from
7-
/// calling an exception handler function in case of an error.
6+
/// Creates a sequence that corresponds to the source sequence, concatenating it with the sequence resulting
7+
/// from calling an exception handler function in case of an error.
88
/// </summary>
9-
/// <typeparam name="TSource">Source sequence element type.</typeparam>
10-
/// <typeparam name="TException">Exception type to catch.</typeparam>
11-
/// <param name="source">Source sequence.</param>
12-
/// <param name="handler">Handler to invoke when an exception of the specified type occurs.</param>
13-
/// <returns>Source sequence, concatenated with an exception handler result sequence in case of an error.</returns>
14-
/// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="handler"/> is <see
15-
/// langword="null"/>.</exception>
9+
/// <typeparam name="TSource">
10+
/// Source sequence element type.
11+
/// </typeparam>
12+
/// <typeparam name="TException">
13+
/// Exception type to catch.
14+
/// </typeparam>
15+
/// <param name="source">
16+
/// Source sequence.
17+
/// </param>
18+
/// <param name="handler">
19+
/// Handler to invoke when an exception of the specified type occurs.
20+
/// </param>
21+
/// <returns>
22+
/// Source sequence, concatenated with an exception handler result sequence in case of an error.
23+
/// </returns>
24+
/// <exception cref="ArgumentNullException">
25+
/// <paramref name="source"/> or <paramref name="handler"/> is <see langword="null"/>.
26+
/// </exception>
1627
/// <remarks>
17-
/// This method uses deferred execution and streams its results.
28+
/// This method uses deferred execution and streams its results.
1829
/// </remarks>
1930
public static IAsyncEnumerable<TSource> Catch<TSource, TException>(
2031
this IAsyncEnumerable<TSource> source,
21-
Func<TException, IAsyncEnumerable<TSource>> handler)
32+
Func<TException, IAsyncEnumerable<TSource>> handler
33+
)
2234
where TException : Exception
2335
{
2436
ArgumentNullException.ThrowIfNull(source);
@@ -57,17 +69,26 @@ static async IAsyncEnumerable<TSource> Core(
5769
}
5870

5971
/// <summary>
60-
/// Creates a sequence that returns the elements of the first sequence, switching to the second in case of an error.
72+
/// Creates a sequence that returns the elements of the first sequence, switching to the second in case of an
73+
/// error.
6174
/// </summary>
62-
/// <typeparam name="TSource">Source sequence element type.</typeparam>
63-
/// <param name="first">First sequence.</param>
64-
/// <param name="second">Second sequence, concatenated to the result in case the first sequence completes
65-
/// exceptionally.</param>
66-
/// <returns>The first sequence, followed by the second sequence in case an error is produced.</returns>
67-
/// <exception cref="ArgumentNullException"><paramref name="first"/> or <paramref name="second"/> is <see
68-
/// langword="null"/>.</exception>
75+
/// <typeparam name="TSource">
76+
/// Source sequence element type.
77+
/// </typeparam>
78+
/// <param name="first">
79+
/// First sequence.
80+
/// </param>
81+
/// <param name="second">
82+
/// Second sequence, concatenated to the result in case the first sequence completes exceptionally.
83+
/// </param>
84+
/// <returns>
85+
/// The first sequence, followed by the second sequence in case an error is produced.
86+
/// </returns>
87+
/// <exception cref="ArgumentNullException">
88+
/// <paramref name="first"/> or <paramref name="second"/> is <see langword="null"/>.
89+
/// </exception>
6990
/// <remarks>
70-
/// This method uses deferred execution and streams its results.
91+
/// This method uses deferred execution and streams its results.
7192
/// </remarks>
7293
public static IAsyncEnumerable<TSource> Catch<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second)
7394
{
@@ -78,14 +99,22 @@ public static IAsyncEnumerable<TSource> Catch<TSource>(this IAsyncEnumerable<TSo
7899
}
79100

80101
/// <summary>
81-
/// Creates a sequence by concatenating source sequences until a source sequence completes successfully.
102+
/// Creates a sequence by concatenating source sequences until a source sequence completes successfully.
82103
/// </summary>
83-
/// <typeparam name="TSource">Source sequence element type.</typeparam>
84-
/// <param name="sources">Source sequences.</param>
85-
/// <returns>Sequence that continues to concatenate source sequences while errors occur.</returns>
86-
/// <exception cref="ArgumentNullException"><paramref name="sources"/> is <see langword="null"/>.</exception>
104+
/// <typeparam name="TSource">
105+
/// Source sequence element type.
106+
/// </typeparam>
107+
/// <param name="sources">
108+
/// Source sequences.
109+
/// </param>
110+
/// <returns>
111+
/// Sequence that continues to concatenate source sequences while errors occur.
112+
/// </returns>
113+
/// <exception cref="ArgumentNullException">
114+
/// <paramref name="sources"/> is <see langword="null"/>.
115+
/// </exception>
87116
/// <remarks>
88-
/// This method uses deferred execution and streams its results.
117+
/// This method uses deferred execution and streams its results.
89118
/// </remarks>
90119
public static IAsyncEnumerable<TSource> Catch<TSource>(params IAsyncEnumerable<TSource>[] sources)
91120
{
@@ -95,14 +124,22 @@ public static IAsyncEnumerable<TSource> Catch<TSource>(params IAsyncEnumerable<T
95124
}
96125

97126
/// <summary>
98-
/// Creates a sequence by concatenating source sequences until a source sequence completes successfully.
127+
/// Creates a sequence by concatenating source sequences until a source sequence completes successfully.
99128
/// </summary>
100-
/// <typeparam name="TSource">Source sequence element type.</typeparam>
101-
/// <param name="sources">Source sequences.</param>
102-
/// <returns>Sequence that continues to concatenate source sequences while errors occur.</returns>
103-
/// <exception cref="ArgumentNullException"><paramref name="sources"/> is <see langword="null"/>.</exception>
129+
/// <typeparam name="TSource">
130+
/// Source sequence element type.
131+
/// </typeparam>
132+
/// <param name="sources">
133+
/// Source sequences.
134+
/// </param>
135+
/// <returns>
136+
/// Sequence that continues to concatenate source sequences while errors occur.
137+
/// </returns>
138+
/// <exception cref="ArgumentNullException">
139+
/// <paramref name="sources"/> is <see langword="null"/>.
140+
/// </exception>
104141
/// <remarks>
105-
/// This method uses deferred execution and streams its results.
142+
/// This method uses deferred execution and streams its results.
106143
/// </remarks>
107144
public static IAsyncEnumerable<TSource> Catch<TSource>(this IEnumerable<IAsyncEnumerable<TSource>> sources)
108145
{
@@ -112,14 +149,22 @@ public static IAsyncEnumerable<TSource> Catch<TSource>(this IEnumerable<IAsyncEn
112149
}
113150

114151
/// <summary>
115-
/// Creates a sequence by concatenating source sequences until a source sequence completes successfully.
152+
/// Creates a sequence by concatenating source sequences until a source sequence completes successfully.
116153
/// </summary>
117-
/// <typeparam name="TSource">Source sequence element type.</typeparam>
118-
/// <param name="sources">Source sequences.</param>
119-
/// <returns>Sequence that continues to concatenate source sequences while errors occur.</returns>
120-
/// <exception cref="ArgumentNullException"><paramref name="sources"/> is <see langword="null"/>.</exception>
154+
/// <typeparam name="TSource">
155+
/// Source sequence element type.
156+
/// </typeparam>
157+
/// <param name="sources">
158+
/// Source sequences.
159+
/// </param>
160+
/// <returns>
161+
/// Sequence that continues to concatenate source sequences while errors occur.
162+
/// </returns>
163+
/// <exception cref="ArgumentNullException">
164+
/// <paramref name="sources"/> is <see langword="null"/>.
165+
/// </exception>
121166
/// <remarks>
122-
/// This method uses deferred execution and streams its results.
167+
/// This method uses deferred execution and streams its results.
123168
/// </remarks>
124169
public static IAsyncEnumerable<TSource> Catch<TSource>(this IAsyncEnumerable<IAsyncEnumerable<TSource>> sources)
125170
{
@@ -146,7 +191,6 @@ static async IAsyncEnumerable<TSource> Core(
146191
// make it outside of the inner `while (true)`
147192
while (true)
148193
{
149-
ArgumentNullException.ThrowIfNull(source);
150194
await using var e = source.GetConfiguredAsyncEnumerator(cancellationToken);
151195

152196
while (true)

Source/SuperLinq.Async/GlobalUsings.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.

Source/SuperLinq.Async/Memoize.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ private void InitializeEnumerator(CancellationToken cancellationToken)
9898

9999
if (_exceptionIndex == -1)
100100
{
101-
ArgumentNullException.ThrowIfNull(_exception);
101+
Debug.Assert(_exception is not null);
102102
_exception.Throw();
103103
}
104104

Source/SuperLinq.Async/OnErrorResumeNext.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ static async IAsyncEnumerable<TSource> Core(
6969
{
7070
await foreach (var source in sources.WithCancellation(cancellationToken).ConfigureAwait(false))
7171
{
72-
ArgumentNullException.ThrowIfNull(source);
7372
await using var e = source.GetConfiguredAsyncEnumerator(cancellationToken);
7473

7574
while (true)

0 commit comments

Comments
 (0)