Skip to content

Commit eb8250d

Browse files
authored
refactor: migrate ReactiveList to ReactiveUI.Primitives (#247)
* Migrate from System.Reactive to ReactiveUI.Primitives Replace usages of System.Reactive types with ReactiveUI.Primitives (Signals, Sequencer, SynchronizationContextSequencer, MultipleDisposable, etc.) across the library, tests, benchmarks and README. Add a SubscribeObserver benchmark helper and several new benchmark files (MicroParityBenchmarks and BenchmarkObservableExtensions), plus internal observable/grouped observable helpers. Update README examples and sample code to use the new primitives and adjust BenchmarkDotNet Program to respect --job overrides. Update tests to use Signal/BehaviorSignal and Sequencer.Immediate, and replace CompositeDisposable and Rx schedulers with MultipleDisposable and Sequencer/SynchronizationContextSequencer where appropriate. * Migrate to Signals API; update ReactiveUI and deps Replace legacy Observable helper usages with the ReactiveUI.Primitives Signals API (Signal.Create/Emit/None and stream operators such as Map, Keep, FlatMap, Blend, Lead, Chain/SwitchTo, Tap, etc.). Update internal mixins and remove redundant Observable shims. Apply related API changes across collections, views, and extensions (e.g., Stream property, ReactiveList streams, QuaternaryExtensions, ReactiveListExtensions, DynamicReactiveView/ReactiveView buffering). Other changes: bump ReactiveUI.Primitives to 1.3.0, bump TUnit to 1.49.0, add System.Security.Cryptography.Xml to build, convert GroupedObservable and PooledEditableListWrapper to concise constructor/initialization forms, and fix PooledBatch.Dispose to respect ReturnToPool. Misc scheduling and minor null-safety adjustments included. * Migrate core to ReactiveUI.Primitives and expand test coverage * Refactor build schema, lock usage, and internals Rework the NUKE build schema and modernize several internals. .nuke/build.schema.json: extract Host, ExecutableTarget and Verbosity as reusable definitions and reorganize Configuration/NukeBuild via allOf/ref usage. build/Build.cs: mark the partial Build class as sealed. build/Configuration.cs: add ToString() override. src/ReactiveList: rename EnumerablePolyfills to EnumerableExtensions and adjust LINQ helper placement; change IsExternalInit into a sealed class. Multiple ReactiveList view files replace the previous System.Threading.Lock field with a conditional compilation that uses Lock on NET9_0_OR_GREATER and falls back to object otherwise. Miscellaneous small API/implementation cleanups and renames to improve compatibility and clarity. * ci: restrict compile gate to packable projects CI BuildOnly executes the NUKE Compile target, which was building the full solution and failing on analyzer-as-error findings in non-packable test, benchmark, and sample application projects. Update Compile to build the same packable project set used by Pack, log each project being built, and keep the package artifact validation focused on ReactiveList without adding analyzer suppressions. Verified locally with ./build.cmd Compile, ./build.cmd Compile --Configuration Release, and TUnit coverage for ReactiveList at 100% line coverage.
1 parent 8bc3b5d commit eb8250d

125 files changed

Lines changed: 9875 additions & 5062 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 2146 additions & 394 deletions
Large diffs are not rendered by default.

.nuke/build.schema.json

Lines changed: 70 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,49 @@
11
{
22
"$schema": "http://json-schema.org/draft-04/schema#",
3-
"$ref": "#/definitions/build",
4-
"title": "Build Schema",
53
"definitions": {
6-
"build": {
7-
"type": "object",
4+
"Host": {
5+
"type": "string",
6+
"enum": [
7+
"AppVeyor",
8+
"AzurePipelines",
9+
"Bamboo",
10+
"Bitbucket",
11+
"Bitrise",
12+
"GitHubActions",
13+
"GitLab",
14+
"Jenkins",
15+
"Rider",
16+
"SpaceAutomation",
17+
"TeamCity",
18+
"Terminal",
19+
"TravisCI",
20+
"VisualStudio",
21+
"VSCode"
22+
]
23+
},
24+
"ExecutableTarget": {
25+
"type": "string",
26+
"enum": [
27+
"Clean",
28+
"Compile",
29+
"Deploy",
30+
"Pack",
31+
"Print",
32+
"Restore"
33+
]
34+
},
35+
"Verbosity": {
36+
"type": "string",
37+
"description": "",
38+
"enum": [
39+
"Verbose",
40+
"Normal",
41+
"Minimal",
42+
"Quiet"
43+
]
44+
},
45+
"NukeBuild": {
846
"properties": {
9-
"Configuration": {
10-
"type": "string",
11-
"description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)",
12-
"enum": [
13-
"Debug",
14-
"Release"
15-
]
16-
},
1747
"Continue": {
1848
"type": "boolean",
1949
"description": "Indicates to continue a previously failed build attempt"
@@ -23,34 +53,13 @@
2353
"description": "Shows the help text for this build assembly"
2454
},
2555
"Host": {
26-
"type": "string",
2756
"description": "Host for execution. Default is 'automatic'",
28-
"enum": [
29-
"AppVeyor",
30-
"AzurePipelines",
31-
"Bamboo",
32-
"Bitbucket",
33-
"Bitrise",
34-
"GitHubActions",
35-
"GitLab",
36-
"Jenkins",
37-
"Rider",
38-
"SpaceAutomation",
39-
"TeamCity",
40-
"Terminal",
41-
"TravisCI",
42-
"VisualStudio",
43-
"VSCode"
44-
]
57+
"$ref": "#/definitions/Host"
4558
},
4659
"NoLogo": {
4760
"type": "boolean",
4861
"description": "Disables displaying the NUKE logo"
4962
},
50-
"NuGetApiKey": {
51-
"type": "string",
52-
"default": "Secrets must be entered via 'nuke :secrets [profile]'"
53-
},
5463
"Partition": {
5564
"type": "string",
5665
"description": "Partition to use on CI"
@@ -74,47 +83,46 @@
7483
"type": "array",
7584
"description": "List of targets to be skipped. Empty list skips all dependencies",
7685
"items": {
77-
"type": "string",
78-
"enum": [
79-
"Clean",
80-
"Compile",
81-
"Deploy",
82-
"Pack",
83-
"Print",
84-
"Restore"
85-
]
86+
"$ref": "#/definitions/ExecutableTarget"
8687
}
8788
},
88-
"Solution": {
89-
"type": "string",
90-
"description": "Path to a solution file that is automatically loaded"
91-
},
9289
"Target": {
9390
"type": "array",
9491
"description": "List of targets to be invoked. Default is '{default_target}'",
9592
"items": {
96-
"type": "string",
97-
"enum": [
98-
"Clean",
99-
"Compile",
100-
"Deploy",
101-
"Pack",
102-
"Print",
103-
"Restore"
104-
]
93+
"$ref": "#/definitions/ExecutableTarget"
10594
}
10695
},
10796
"Verbosity": {
108-
"type": "string",
10997
"description": "Logging verbosity during build execution. Default is 'Normal'",
98+
"$ref": "#/definitions/Verbosity"
99+
}
100+
}
101+
}
102+
},
103+
"allOf": [
104+
{
105+
"properties": {
106+
"Configuration": {
107+
"type": "string",
108+
"description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)",
110109
"enum": [
111-
"Minimal",
112-
"Normal",
113-
"Quiet",
114-
"Verbose"
110+
"Debug",
111+
"Release"
115112
]
113+
},
114+
"NuGetApiKey": {
115+
"type": "string",
116+
"default": "Secrets must be entered via 'nuke :secrets [profile]'"
117+
},
118+
"Solution": {
119+
"type": "string",
120+
"description": "Path to a solution file that is automatically loaded"
116121
}
117122
}
123+
},
124+
{
125+
"$ref": "#/definitions/NukeBuild"
118126
}
119-
}
127+
]
120128
}

Directory.Build.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@
4141
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.300" PrivateAssets="All" />
4242
</ItemGroup>
4343
<ItemGroup Condition="'$(IsTestProject)' == 'true'">
44-
<PackageReference Include="TUnit" Version="1.55.2" />
45-
<PackageReference Include="FluentAssertions" Version="8.10.0" />
44+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
45+
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.8.0" />
46+
<PackageReference Include="TUnit" Version="1.56.0" />
4647
</ItemGroup>
4748
<ItemGroup>
4849
<None Include="$(MSBuildThisFileDirectory)images\logo.png" Pack="true" PackagePath="\" />
@@ -52,8 +53,7 @@
5253

5354
<ItemGroup>
5455
<!--<Compile Update="**\*.cs" DependentUpon="I%(Filename).cs" />-->
55-
<PackageReference Include="stylecop.analyzers" Version="1.2.0-beta.556" PrivateAssets="all" />
56+
<PackageReference Include="StyleSharp.Analyzers" Version="3.11.1" />
5657
<PackageReference Include="Roslynator.Analyzers" Version="4.15.0" PrivateAssets="All" />
57-
<AdditionalFiles Include="$(MSBuildThisFileDirectory)stylecop.json" Link="stylecop.json" />
5858
</ItemGroup>
5959
</Project>

0 commit comments

Comments
 (0)