Skip to content

Commit 9c5da2c

Browse files
committed
chore(deps): update packages and adopt the new analyzer rules
- Take every framework-aligned pin to the latest of its own band, hold the .NET 11 entries on preview 7 until the release is out, and leave Microsoft.CodeAnalysis.CSharp on the 4.x line it is pinned to on purpose - Scope the .NET Framework group's pins to the legs that reference them, since transitive pinning would otherwise apply them to every graph - Turn on the rules the 4.x analyzers add, and pass the capacity or comparer through a collection expression where SST2106 asks for it
1 parent 94c529e commit 9c5da2c

12 files changed

Lines changed: 40 additions & 30 deletions

‎.editorconfig‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,6 +1527,7 @@ dotnet_diagnostic.SST1706.severity = error # An extension block targets a broad
15271527
dotnet_diagnostic.SST1707.severity = error # Extension blocks should be ordered by receiver type
15281528
dotnet_diagnostic.SST1708.severity = error # An extension method never uses its this receiver
15291529
dotnet_diagnostic.SST1709.severity = error # A method in an *Extensions class whose first parameter lacks this
1530+
dotnet_diagnostic.SST1710.severity = error # Prefer an extension indexer over an accessor-shaped extension method
15301531
dotnet_diagnostic.SST1800.severity = error # Record classes should be sealed
15311532
dotnet_diagnostic.SST1801.severity = error # A positional record parameter does not match the configured casing
15321533
dotnet_diagnostic.SST1802.severity = error # A record declares a settable rather than init-only instance property
@@ -1538,6 +1539,7 @@ dotnet_diagnostic.SST2102.severity = error # A span-targeted stackalloc initiali
15381539
dotnet_diagnostic.SST2103.severity = error # A collection-builder factory call can use a collection expression
15391540
dotnet_diagnostic.SST2104.severity = error # A short builder-local sequence can return a collection expression
15401541
dotnet_diagnostic.SST2105.severity = error # A literal array materialized with LINQ can use a collection expression
1542+
dotnet_diagnostic.SST2106.severity = error # Pass the capacity or comparer through a collection expression
15411543
dotnet_diagnostic.SST2200.severity = error # A single-use backing field can use the C# 14 field keyword
15421544
dotnet_diagnostic.SST2201.severity = error # A return-only switch statement can use a switch expression
15431545
dotnet_diagnostic.SST2202.severity = error # An object creation repeats an explicit target type
@@ -1626,6 +1628,7 @@ dotnet_diagnostic.SST2285.severity = error # A null guard is conjoined with a me
16261628
dotnet_diagnostic.SST2286.severity = error # ToString is called on a receiver already typed as string
16271629
dotnet_diagnostic.SST2287.severity = error # A while loop owns its counter, so a for header would gather it
16281630
dotnet_diagnostic.SST2288.severity = error # A conditional expression has a boolean literal in exactly one branch
1631+
dotnet_diagnostic.SST2289.severity = error # An unsafe block that no longer needs an unsafe context
16291632
# Design
16301633
dotnet_diagnostic.SST2300.severity = error # A class implements IDisposable but builds only half of the disposal pattern
16311634
dotnet_diagnostic.SST2301.severity = error # A class implementing IEquatable for itself can still be derived from
@@ -1664,6 +1667,8 @@ dotnet_diagnostic.SST2333.severity = error # A generic equality contract lacks i
16641667
dotnet_diagnostic.SST2334.severity = error # A publicly visible type has no `[DebuggerDisplay]`
16651668
dotnet_diagnostic.SST2335.severity = error # Parts of a partial type disagree on the `static` modifier
16661669
dotnet_diagnostic.SST2336.severity = error # A concrete attribute type declares no [AttributeUsage]
1670+
dotnet_diagnostic.SST2337.severity = error # Declare a fully known hierarchy as closed
1671+
dotnet_diagnostic.SST2338.severity = none # Declare a hand-rolled discriminated type as a union
16671672

16681673
# Correctness
16691674
dotnet_diagnostic.SST2400.severity = error # Two arguments name each other's parameters and have been transposed
@@ -1757,6 +1762,7 @@ dotnet_diagnostic.SST2495.severity = error # A [Flags] combination includes bits
17571762
dotnet_diagnostic.SST2496.severity = error # An explicit Dispose/Close an enclosing using already performs
17581763
dotnet_diagnostic.SST2497.severity = error # A member forwards to itself, so calling it recurses until the stack is gone
17591764
dotnet_diagnostic.SST2498.severity = error # nameof on a type parameter is the constant "T"
1765+
dotnet_diagnostic.SST2499.severity = error # Read the exit status rather than the exit code when a process can be signalled
17601766

17611767
# Testing
17621768
dotnet_diagnostic.SST2500.severity = error # A test method contains no assertion and no expected-exception check
@@ -1821,6 +1827,7 @@ dotnet_diagnostic.PSH1020.severity = error # Prefer a jagged array over a multid
18211827
dotnet_diagnostic.PSH1021.severity = error # An explicit GC.Collect forces collection the runtime tunes itself
18221828
dotnet_diagnostic.PSH1022.severity = error # A parameterless new EventArgs() where EventArgs.Empty would serve
18231829
dotnet_diagnostic.PSH1023.severity = error # A local anonymous type allocates where a tuple would not
1830+
dotnet_diagnostic.PSH1024.severity = error # Build a BitArray from a span instead of a temporary array
18241831
dotnet_diagnostic.PSH1100.severity = error # Hot-path code should avoid System.Linq.Enumerable calls
18251832
dotnet_diagnostic.PSH1101.severity = none # LINQ predicate simplification — production code avoids LINQ on hot paths
18261833
dotnet_diagnostic.PSH1102.severity = none # LINQ type-filter simplification — production code avoids LINQ on hot paths
@@ -1892,6 +1899,7 @@ dotnet_diagnostic.PSH1313.severity = error # A synchronous call where an async o
18921899
dotnet_diagnostic.PSH1314.severity = error # Read and write streams through the memory-based overloads
18931900
dotnet_diagnostic.PSH1315.severity = error # A blocking wait on an awaitable that may not be done
18941901
dotnet_diagnostic.PSH1316.severity = error # A ValueTask is awaited in a loop or awaited after being copied
1902+
dotnet_diagnostic.PSH1318.severity = error # Validate options asynchronously instead of blocking
18951903
dotnet_diagnostic.PSH1400.severity = error # Use the static HashData method for one-shot hashing
18961904
dotnet_diagnostic.PSH1401.severity = error # Attribute types should be sealed
18971905
dotnet_diagnostic.PSH1402.severity = error # Use const for compile-time constants
@@ -1946,6 +1954,7 @@ dotnet_diagnostic.SES1006.severity = error # A Data Protection key ring is persi
19461954
dotnet_diagnostic.SES1007.severity = error # A cryptographic primitive is implemented by hand
19471955
dotnet_diagnostic.SES1008.severity = error # An XML signature is verified with the no-key CheckSignature overload
19481956
dotnet_diagnostic.SES1009.severity = error # A password is stored without a slow, salted key-derivation function
1957+
dotnet_diagnostic.SES1010.severity = error # Do not implement AES key wrapping by hand
19491958

19501959
# Transport
19511960
dotnet_diagnostic.SES1102.severity = error # Do not accept any server certificate

‎src/Directory.Packages.props‎

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<CentralPackageTransitivePinningEnabled>trueCentralPackageTransitivePinningEnabled>
66
8-
<RoslynCommonAnalyzersVersion>3.46.0RoslynCommonAnalyzersVersion>
8+
<RoslynCommonAnalyzersVersion>4.1.0RoslynCommonAnalyzersVersion>
99
<AvaloniaVersion>12.1.2AvaloniaVersion>
1010
PropertyGroup>
1111
<ItemGroup>
@@ -19,12 +19,12 @@
1919
<PackageVersion Include="Roslynator.Analyzers" Version="5.0.0"/>
2020
<PackageVersion Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="5.6.0"/>
2121
<PackageVersion Include="PublicApiSharp.Analyzers" Version="1.0.7"/>
22-
<PackageVersion Include="SonarAnalyzer.CSharp" Version="10.33.0.1635"/>
22+
<PackageVersion Include="SonarAnalyzer.CSharp" Version="10.34.0.3385"/>
2323
ItemGroup>
2424
2525
<ItemGroup>
2626
<PackageVersion Include="BenchmarkDotNet" Version="0.15.8"/>
27-
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.9.0"/>
27+
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.10.0"/>
2828
<PackageVersion Include="System.Reactive" Version="7.0.0"/>
2929
<PackageVersion Include="Microsoft.Reactive.Testing" Version="7.0.0"/>
3030
<PackageVersion Include="System.Reactive.Async" Version="6.0.0-alpha.18"/>
@@ -34,42 +34,42 @@
3434
<ItemGroup>
3535
<PackageVersion Include="Avalonia" Version="$(AvaloniaVersion)"/>
3636
<PackageVersion Include="Avalonia.Headless" Version="$(AvaloniaVersion)"/>
37-
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.30" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))"/>
38-
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="9.0.19" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))"/>
39-
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="10.0.11" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
37+
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.31" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))"/>
38+
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="9.0.20" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))"/>
39+
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="10.0.12" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
4040
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
41-
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.30" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))"/>
42-
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="9.0.19" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))"/>
43-
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="10.0.11" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
41+
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.31" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))"/>
42+
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="9.0.20" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))"/>
43+
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="10.0.12" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
4444
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
45-
<PackageVersion Include="Microsoft.Bcl.TimeProvider" Version="10.0.11"/>
45+
<PackageVersion Include="Microsoft.Bcl.TimeProvider" Version="10.0.12"/>
4646
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
4747
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
4848
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
4949
<PackageVersion Include="Microsoft.Extensions.Logging" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
5050
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="11.0.0-preview.7.26381.103" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
51-
<PackageVersion Include="Microsoft.Maui.Core" Version="10.0.100" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
51+
<PackageVersion Include="Microsoft.Maui.Core" Version="10.0.101" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0')) AND !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
5252
<PackageVersion Include="Microsoft.Maui.Core" Version="11.0.0-preview.7.26406.9" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))"/>
5353
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="2.4.0"/>
5454
ItemGroup>
5555
56-
<ItemGroup>
56+
<ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
5757
<PackageVersion Include="System.ValueTuple" Version="4.6.2"/>
58-
<PackageVersion Include="System.Threading.Channels" Version="10.0.11"/>
58+
<PackageVersion Include="System.Threading.Channels" Version="10.0.12"/>
5959
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2"/>
6060
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0"/>
6161
<PackageVersion Include="System.Buffers" Version="4.6.1"/>
6262
<PackageVersion Include="System.Memory" Version="4.6.3"/>
63-
<PackageVersion Include="System.Collections.Immutable" Version="10.0.11"/>
63+
<PackageVersion Include="System.Collections.Immutable" Version="10.0.12"/>
6464
ItemGroup>
6565
6868
<ItemGroup>
6969
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0"/>
70-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.9.0"/>
71-
<PackageVersion Include="TUnit" Version="1.66.8"/>
72-
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.11.0"/>
70+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.10.0"/>
71+
<PackageVersion Include="TUnit" Version="1.66.27"/>
72+
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.11.2"/>
7373
ItemGroup>
7474
<Import Project="$(MSBuildThisFileDirectory)/directory.packages.support.props" Condition="Exists('$(MSBuildThisFileDirectory)/directory.packages.support.props')"/>
7575
Project>

‎src/Primitives.Shared/SignalOperatorMixins.CollectionSignals.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public IDisposable Subscribe(IObserver> observer)
7979
{
8080
ArgumentExceptionHelper.ThrowIfNull(observer);
8181

82-
List<int> values = new(_range.Count);
82+
List<int> values = [with(capacity: _range.Count)];
8383
for (var i = 0; i < _range.Count; i++)
8484
{
8585
values.Add(_range.Start + i);

‎src/Primitives.Shared/SignalOperatorMixins.StatefulSignals.cs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,12 +330,12 @@ private HashSet CreateSeen() =>
330330
#if NET8_0_OR_GREATER
331331
(_source is RangeSignal range ? range.Count : 0) switch
332332
{
333-
var capacity when capacity > 0 => new(capacity, _comparer),
333+
var capacity when capacity > 0 => [with(capacity, _comparer)],
334334
_ when _comparer is null => [],
335-
_ => new(_comparer),
335+
_ => [with(_comparer)],
336336
};
337337
#else
338-
new(_comparer);
338+
[with(_comparer)];
339339
#endif
340340
}
341341

‎src/Primitives.Shared/SignalOperatorParityMixins.AggregateHelpers.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private static int CountDistinctRange(
104104
Func<T, TKey> keySelector,
105105
IEqualityComparer<TKey>? comparer)
106106
{
107-
HashSet<TKey> seen = comparer is null ? [] : new(comparer);
107+
HashSet<TKey> seen = comparer is null ? [] : [with(comparer)];
108108
var typedSelector = (Func<int, TKey>)(object)keySelector;
109109
for (var i = 0; i < range.Count; i++)
110110
{

‎src/Primitives.Shared/SignalOperatorParityMixins.AwaitableTerminals.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ public Task> CollectListAsync()
278278

279279
if (source is RangeSignal range && typeof(T) == typeof(int))
280280
{
281-
List<int> integers = new(range.Count);
281+
List<int> integers = [with(capacity: range.Count)];
282282
for (var i = 0; i < range.Count; i++)
283283
{
284284
integers.Add(range.Start + i);

‎src/ReactiveUI.Primitives.Async.Core/Operators/ToDictionaryAsync.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ private sealed class ToDictionaryTaskWitness(
148148
where TKey : notnull
149149
{
150150
/// The dictionary that accumulates key-value pairs from the source sequence.
151-
private readonly Dictionary<TKey, TValue> _map = comparer is null ? new() : new(comparer);
151+
private readonly Dictionary<TKey, TValue> _map = comparer is null ? [] : [with(comparer)];
152152

153153
///
154154
protected override ValueTask OnNextAsyncCore(TSource value, CancellationToken cancellationToken)

‎src/ReactiveUI.Primitives.Core/Advanced/DistinctByCountAggregator.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public readonly record struct
2121
/// The key selector.
2222
/// The key comparer, or for the default comparer.
2323
public DistinctByCountAggregator(Func<T, TKey> keySelector, IEqualityComparer<TKey>? comparer)
24-
: this(keySelector, comparer is null ? [] : new(comparer), 0)
24+
: this(keySelector, comparer is null ? [] : [with(comparer)], 0)
2525
{
2626
}
2727

‎src/ReactiveUI.Primitives.Core/Advanced/DistinctByLongCountAggregator.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public readonly record struct
2121
/// The key selector.
2222
/// The key comparer, or for the default comparer.
2323
public DistinctByLongCountAggregator(Func<T, TKey> keySelector, IEqualityComparer<TKey>? comparer)
24-
: this(keySelector, comparer is null ? [] : new(comparer), 0L)
24+
: this(keySelector, comparer is null ? [] : [with(comparer)], 0L)
2525
{
2626
}
2727

‎src/ReactiveUI.Primitives.Core/Advanced/DistinctByWitness.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public DistinctByWitness(IObserver observer, Func keySelector, IEqua
3535
{
3636
_observer = observer;
3737
_keySelector = keySelector;
38-
_seen = comparer is null ? [] : new(comparer);
38+
_seen = comparer is null ? [] : [with(comparer)];
3939
}
4040

4141
///

0 commit comments

Comments
 (0)