Skip to content

Commit 6f56ad5

Browse files
committed
v0.9.0
1 parent aa62020 commit 6f56ad5

5 files changed

Lines changed: 334 additions & 32 deletions

File tree

CHANGELOG.md

Lines changed: 76 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,35 @@ All notable changes to this project are documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [v0.8.8]
8+
## [Unreleased]
9+
10+
## [v0.9.0] - 2026-09-12
11+
12+
### Changed
13+
- `AnalyzerReleases.Shipped.md` no longer claims a `Release 1.0.0` that was never published. OPL001
14+
moves to `AnalyzerReleases.Unshipped.md`, which is where a rule lives until the release that ships
15+
it; the 1.0.0 release commit moves it back under a real `## Release 1.0.0` heading. Until then the
16+
shipped file is empty, which is the truth: no version of this analyzer has been released.
17+
- This changelog now carries an `[Unreleased]` section, a release date on every version heading, and
18+
compare links against the `v*` tags. Changes land under `[Unreleased]` and are renamed to the
19+
version heading when that version is tagged, instead of every change inventing a version of its
20+
own.
21+
22+
### Notes
23+
- `v0.7.1` was never a release. Its SourceLink and deterministic-build work landed in the same commit
24+
as `v0.8.0`, and the package version went straight from `0.7.0` to `0.8.0`, so the entry below has
25+
no tag and no compare link.
26+
27+
### Tests
28+
- Analyzer coverage now includes the allocation shapes added after the first release: array creation
29+
(`new int[10]`), implicit array creation (`new[] { 1, 2 }`) and target-typed `new()`, each pinning
30+
the type name in the diagnostic message; allocations outside a hot path, including `Instantiate` in
31+
`Start`; a MonoBehaviour two inheritance levels deep; a MonoBehaviour nested in another
32+
MonoBehaviour; and a plain class nested inside a MonoBehaviour, which must stay silent. Two
33+
theories sweep the message table: all 18 hot-path messages report, and five cold-path messages do
34+
not. 84 tests, up from 53. Closes T2.
35+
36+
## [v0.8.8] - 2026-09-12
937

1038
### Documentation
1139
- The README has a `Known limitations` section stating what OPL001 does not do, so a clean run is not
@@ -20,7 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2048
`Usage` sections, and `docs/rules/OPL001.md` gains a `What the rule does not cover` section pointing
2149
at it. Closes D3.
2250

23-
## [v0.8.7]
51+
## [v0.8.7] - 2026-09-12
2452

2553
### Documentation
2654
- The README now has a `The pool contract` section specifying exactly what the "Replace with object
@@ -33,15 +61,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3361
the analyzer "works with any object pool implementation" is corrected, and `docs/rules/OPL001.md`
3462
links to the new section. Closes D2.
3563

36-
## [v0.8.6]
64+
## [v0.8.6] - 2026-09-12
3765

3866
### Documentation
3967
- The README `Requirements` section now carries a supported-version table listing Unity, Visual Studio,
4068
the .NET SDK, Rider and VS Code with their minimum supported versions in one place, replacing the
4169
prose bullets that mixed Unity's Roslyn-plugin rules with IDE versions. It also states that the
4270
package has no dependencies of its own and contributes nothing to build output. Closes D1.
4371

44-
## [v0.8.5]
72+
## [v0.8.5] - 2026-09-12
4573

4674
### Changed
4775
- The "Add pooling TODO comment" fix now uses array-specific wording on `new int[4]` / `new[] { 1, 2 }`,
@@ -58,7 +86,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
5886
`AddPoolingComment_OnImplicitArrayCreation_UsesTheArrayWording`, and
5987
`AddPoolingComment_OnObjectCreation_KeepsTheObjectPoolWording` (53 tests total, up from 51).
6088

61-
## [v0.8.4]
89+
## [v0.8.4] - 2026-09-12
6290

6391
### Added
6492
- `docs/rules/OPL001.md`: what the rule flags (including the signature and `MonoBehaviour` conditions,
@@ -69,7 +97,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6997
the error list have somewhere to link and RS1015 has nothing to report. Pinned by
7098
`Descriptor_HasHelpLinkToTheRuleDoc` (51 tests total, up from 50).
7199

72-
## [v0.8.3]
100+
## [v0.8.3] - 2026-09-12
73101

74102
### Changed
75103
- The analyzer resolves `UnityEngine.MonoBehaviour` and `UnityEngine.Object` once per compilation from
@@ -89,7 +117,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
89117
`AllocationInUpdateWithoutUnityObject_ReportsDiagnostic` pin the bail-out and the partial-stub
90118
behaviour (50 tests total, up from 48).
91119

92-
## [v0.8.2]
120+
## [v0.8.2] - 2026-09-12
93121

94122
### Added
95123
- Code-fix test coverage for the paths that were previously only verified by inspection, 10 tests
@@ -111,7 +139,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
111139
stops the incremental pass after the first fix (`CodeFixTestBehaviors.FixOne`) and compares the
112140
fix-all result against a separate `BatchFixedCode`.
113141

114-
## [v0.8.1]
142+
## [v0.8.1] - 2026-09-12
115143

116144
### Fixed
117145
- The `UnityEngine` namespace check compared `ContainingNamespace.Name`, which is only the innermost
@@ -127,7 +155,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
127155

128156
- 3 analyzer tests added for the look-alike namespace and nested-type cases (38 total, up from 35).
129157

130-
## [v0.8.0]
158+
## [v0.8.0] - 2026-09-12
131159

132160
### Fixed
133161
- `IsUnityMessage` matched on method name alone, so any method named `Update`,
@@ -149,7 +177,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
149177
- 10 analyzer tests added for the new signature rules (35 total, up from 25); the Unity stub in the
150178
test project gained `Collider`, `Collider2D`, `Collision` and `Collision2D`.
151179

152-
## [v0.7.1]
180+
## v0.7.1 - 2026-09-12 (never tagged; shipped inside v0.8.0)
153181

154182
### Added
155183
- SourceLink, debug symbols and deterministic builds, none of which the package had. A consumer who
@@ -175,7 +203,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
175203
- Verified: two `CI=true` builds of the analyzer produce byte-identical `.dll` and `.pdb`; the CI
176204
PDB normalizes source paths to `/_/` while the local one does not; 25/25 tests pass.
177205

178-
## [v0.7.0]
206+
## [v0.7.0] - 2026-09-12
179207

180208
### Added
181209
- A Unity install path, which the project did not have: Unity does not consume NuGet analyzers, so
@@ -199,7 +227,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
199227
`"unity": "2021.3"`, matching Unity's documented Roslyn 3.8 requirement for 2021.3 and 2022.3, but
200228
those versions are untested and the README says so.
201229

202-
## [v0.6.5]
230+
## [v0.6.5] - 2026-09-11
203231

204232
### Changed
205233
- Lowered the Roslyn reference from `Microsoft.CodeAnalysis.* 4.8.0` to `3.8.0` in the analyzer and
@@ -209,7 +237,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
209237
The tests still run on Roslyn 4.8.0, so they exercise the analyzer in a newer host.
210238
- README: a `Requirements` section that states the Roslyn 3.8 floor and which hosts it covers.
211239

212-
## [v0.6.4]
240+
## [v0.6.4] - 2026-09-11
213241

214242
### Changed
215243
- The analyzer and the code fix are now separate assemblies. `ObjectPoolLinter.dll` holds only the
@@ -224,14 +252,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
224252
restore does not see two projects with the same ID.
225253
- The sample project and the tests reference the code fix project alongside the analyzer.
226254

227-
## [v0.6.3]
255+
## [v0.6.3] - 2026-09-10
228256

229257
### Added
230258
- `LICENSE` at the repository root: the MIT License text. The project file already declared
231259
`PackageLicenseExpression=MIT`, but the repository itself carried no license text, so by default it was all rights reserved and nobody could legally use it. The license file is also packed at the package root.
232260
- README: an MIT license badge under the title and a `License` section.
233261

234-
## [v0.6.2]
262+
## [v0.6.2] - 2026-09-10
235263

236264
### Added
237265
- NuGet package metadata on the analyzer project: `PackageId`, an explicit `Version`, `Authors`,
@@ -248,12 +276,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
248276
- `SuppressDependenciesWhenPacking=true`: the package carries no `lib/`, so the otherwise-empty
249277
`netstandard2.0` dependency group tripped NU5128 on every `dotnet pack`.
250278

251-
## [v0.6.1]
279+
## [v0.6.1] - 2026-09-10
252280

253281
### Fixed
254282
- building the package with `dotnet pack -c Release` creating an empty package (no analyzer)
255283

256-
## [v0.6.0]
284+
## [v0.6.0] - 2026-09-08
257285

258286
### Fixed
259287
- The "Replace with object pool Get()" code fix invented a pool type out of the allocated type's
@@ -277,7 +305,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
277305
`Get` is not static, when it is inaccessible (`private`), when the pool's generic arity differs
278306
from the allocated type's, and when `Get` cannot take the constructor arguments being forwarded.
279307

280-
## [v0.5.0]
308+
## [v0.5.0] - 2026-09-06
281309

282310
### Fixed
283311
- The "Replace with object pool Get()" code fix dropped constructor arguments: `new Enemy(hp)`
@@ -296,7 +324,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
296324
- Code fix tests covering argument forwarding (single argument, named/`out` arguments, target-typed
297325
`new`) and one asserting the replace fix is not registered when an initializer is present.
298326

299-
## [v0.4.0]
327+
## [v0.4.0] - 2026-09-04
300328

301329
### Fixed
302330
- The "Add pooling TODO comment" code fix produced code that does not compile. The comment was
@@ -322,12 +350,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
322350
to rewrite neighbouring lines to the workspace's own newline, which would churn line endings the
323351
user never touched.
324352

325-
## [v0.3.1]
353+
## [v0.3.1] - 2026-09-04
326354

327355
### Added
328356
- **`.gitattributes`** - Without it, files saved with CRLF while the committed blobs are LF show up as whole-file modifications and pollute real diffs. Normalize text files to LF in the repository, native on checkout, and mark common binary types explicitly.
329357

330-
## [v0.3.0]
358+
## [v0.3.0] - 2026-09-04
331359

332360
### Fixed
333361
- Allocations inside a lambda or anonymous method declared in a hot-path Unity message
@@ -338,7 +366,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
338366
only when the declaring body actually calls that local function. A local function that
339367
is only converted to a delegate escapes the same way a lambda does.
340368

341-
## [v0.2.0]
369+
## [v0.2.0] - 2026-09-02
342370

343371
### Fixed
344372
- Code fix emitted invalid C# for generic types: `new List<int>()` produced
@@ -362,7 +390,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
362390
type argument printed from the symbol does not round-trip through `ParseTypeName`,
363391
instead of emitting a guess.
364392

365-
## [v0.1.0]
393+
## [v0.1.0] - 2026-09-02
366394

367395
### Added
368396
- Detection of array allocations in hot paths: `SyntaxKind.ArrayCreationExpression`
@@ -380,3 +408,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
380408

381409
### Removed
382410
- Empty placeholder test `tests/ObjectPoolLinter.Tests/UnitTest1.cs`.
411+
412+
[Unreleased]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.9.0...HEAD
413+
[v0.9.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.8...v0.9.0
414+
[v0.8.8]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.7...v0.8.8
415+
[v0.8.7]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.6...v0.8.7
416+
[v0.8.6]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.5...v0.8.6
417+
[v0.8.5]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.4...v0.8.5
418+
[v0.8.4]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.3...v0.8.4
419+
[v0.8.3]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.2...v0.8.3
420+
[v0.8.2]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.1...v0.8.2
421+
[v0.8.1]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.8.0...v0.8.1
422+
[v0.8.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.7.0...v0.8.0
423+
[v0.7.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.6.5...v0.7.0
424+
[v0.6.5]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.6.4...v0.6.5
425+
[v0.6.4]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.6.3...v0.6.4
426+
[v0.6.3]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.6.2...v0.6.3
427+
[v0.6.2]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.6.1...v0.6.2
428+
[v0.6.1]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.6.0...v0.6.1
429+
[v0.6.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.5.0...v0.6.0
430+
[v0.5.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.4.0...v0.5.0
431+
[v0.4.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.3.1...v0.4.0
432+
[v0.3.1]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.3.0...v0.3.1
433+
[v0.3.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.2.0...v0.3.0
434+
[v0.2.0]: https://github.com/joezhuo2/ObjectPoolLinter/compare/v0.1.0...v0.2.0
435+
[v0.1.0]: https://github.com/joezhuo2/ObjectPoolLinter/releases/tag/v0.1.0

src/ObjectPoolLinter.Package/ObjectPoolLinter.Package.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<PropertyGroup>
1111
<PackageId>ObjectPoolLinter</PackageId>
12-
<Version>0.8.8</Version>
12+
<Version>0.9.0</Version>
1313
<Authors>Joe Zhuo</Authors>
1414
<Copyright>Copyright (c) 2026 Joe Zhuo</Copyright>
1515
<Description>Roslyn analyzer for Unity C# that flags object allocations in hot paths and offers code fixes that route them through an object pool, minimizing GC and frame hitches.</Description>
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
## Release 1.0.0
2-
3-
### New Rules
4-
5-
Rule ID | Category | Severity | Notes
6-
--------|----------|----------|-------
7-
OPL001 | Performance | Warning | Detects `new` expressions and Unity `Instantiate` calls inside frequently-invoked methods (e.g. `Update`).
1+
; Shipped analyzer releases
2+
; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md
3+
;
4+
; No release has shipped yet. The 1.0.0 release commit moves the rules below from
5+
; AnalyzerReleases.Unshipped.md into a "## Release 1.0.0" section here.
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
11
; Unshipped analyzer release
2-
; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md
2+
; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md
3+
4+
### New Rules
5+
6+
Rule ID | Category | Severity | Notes
7+
--------|----------|----------|-------
8+
OPL001 | Performance | Warning | Detects `new` expressions and Unity `Instantiate` calls inside frequently-invoked methods (e.g. `Update`).

0 commit comments

Comments
 (0)