Commit fbbcd52
authored
feat: add view registration attributes and attribute-aware dispatch (#17)
## View Registration Attributes
- Add ExcludeFromViewRegistration, SingleInstanceView, and ViewContract attributes to ReactiveUI.Binding
- Source generator reads attributes to skip excluded views, emit singleton caching, and generate contract-aware dispatch
- Add CreateMappingBuilder() factory method on DefaultViewLocator
## Generator Improvements
- Rewrite ViewLocatorDispatchGenerator to use raw string literals ($$""" pattern)
- Deduplicate by (ViewModel FQN, Contract) pair instead of ViewModel FQN alone
- Remove redundant IEquatable<Self> from all sealed record model types
## Test Coverage
- 100% line and branch coverage maintained
* fix: ViewLocatorDispatch contract ordering, thread safety, and defensive improvements
- Group dispatch branches by ViewModel type so contract-specific checks
are emitted before the default branch (prevents shadowing)
- Escape contract strings with SymbolDisplay.FormatLiteral for safe codegen
- Use Interlocked.CompareExchange for thread-safe singleton view caching
- Fix strategyDoc for SingleInstanceView without parameterless constructor
- Move [ExcludeFromViewRegistration] check inside IViewFor<T> guard to
prevent EnsureNotNull crash in compilations without ReactiveUI.Binding
- Add tests for grouped dispatch and contract-only dispatch (100% coverage)1 parent 3c0fe71 commit fbbcd52
File tree
44 files changed
+1674
-385
lines changed- src
- ReactiveUI.Binding.SourceGenerators
- Generators
- Helpers
- Models
- ReactiveUI.Binding/View
- tests
- ReactiveUI.Binding.SourceGenerators.Tests
- ReactiveUI.Binding.Tests/View
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
44 files changed
+1674
-385
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
159 | 159 | | |
160 | 160 | | |
161 | 161 | | |
162 | | - | |
| 162 | + | |
| 163 | + | |
163 | 164 | | |
164 | 165 | | |
165 | 166 | | |
| |||
171 | 172 | | |
172 | 173 | | |
173 | 174 | | |
174 | | - | |
| 175 | + | |
| 176 | + | |
175 | 177 | | |
176 | 178 | | |
177 | 179 | | |
| |||
180 | 182 | | |
181 | 183 | | |
182 | 184 | | |
183 | | - | |
| 185 | + | |
| 186 | + | |
184 | 187 | | |
185 | 188 | | |
186 | 189 | | |
187 | 190 | | |
188 | 191 | | |
189 | 192 | | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
190 | 196 | | |
191 | 197 | | |
192 | 198 | | |
| |||
201 | 207 | | |
202 | 208 | | |
203 | 209 | | |
204 | | - | |
| 210 | + | |
205 | 211 | | |
206 | 212 | | |
207 | 213 | | |
208 | 214 | | |
209 | 215 | | |
| 216 | + | |
| 217 | + | |
210 | 218 | | |
211 | 219 | | |
212 | 220 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| |||
142 | 143 | | |
143 | 144 | | |
144 | 145 | | |
| 146 | + | |
| 147 | + | |
145 | 148 | | |
146 | 149 | | |
147 | 150 | | |
| |||
220 | 223 | | |
221 | 224 | | |
222 | 225 | | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
223 | 276 | | |
224 | 277 | | |
225 | 278 | | |
| |||
363 | 416 | | |
364 | 417 | | |
365 | 418 | | |
| 419 | + | |
| 420 | + | |
366 | 421 | | |
367 | 422 | | |
368 | 423 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
138 | 153 | | |
139 | 154 | | |
140 | 155 | | |
| |||
0 commit comments