Skip to content

Commit 12df95d

Browse files
committed
docs(changelog): introduce keep-a-changelog with 0.10.0 entry
Fresh CHANGELOG.md in Keep-A-Changelog format. 0.10.0 (today) captures the DFM scanner release: 20 new detectors, DFM parsing infrastructure, FormBinder, repo-wide form index, .dfm-aware VCS diff, HTML report grouping, IDE Code-Editor DFM-as-text via Close-and-Reopen, standalone modal viewer, demo forms, plus the SafeCloseModule refcount + viewer off-by-one + Cardinal-typing fixes. Back-fills 0.9.0 / 0.8.0 / 0.7.1 / 0.7.0 from existing release notes.
1 parent e8c336e commit 12df95d

1 file changed

Lines changed: 163 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# Changelog
2+
3+
All notable changes to this project are documented here. Format
4+
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
5+
and [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6+
7+
---
8+
9+
## [0.10.0] - 2026-05-11
10+
11+
The "DFM scanner" release: detector count grows from 21 to **41
12+
total** (21 Pascal + 20 DFM), plus full IDE-side support for working
13+
on DFM findings as text in the Code Editor.
14+
15+
### Added
16+
17+
- **DFM scanner with 20 dedicated detectors** across six clusters
18+
(Dead-Wiring, Data-Access, Security, Master-Detail, UI/UX,
19+
Localization). Each comes with a before/after fix hint and DUnitX
20+
tests. See [DETECTORS.md](DETECTORS.md).
21+
- **DFM parsing infrastructure**: own DFM lexer, DFM parser, and
22+
component graph (`uDfmLexer`, `uDfmParser`, `uDfmComponentGraph`).
23+
- **DFM analysis pipeline**: runner, FormBinder (couples Pascal AST
24+
to DFM graph), repo-wide form index (`TDfmRepoIndex`), and
25+
DB-field helper for SQL-from-property detection.
26+
- **Cross-unit form index** so detectors can answer questions like
27+
"is this published event referenced anywhere in the repo?" and
28+
"which form owns this datasource?".
29+
- **`.dfm`-aware VCS diff**: when `.dfm` is touched in the branch,
30+
the companion `.pas` is queued for analysis automatically (and
31+
vice versa).
32+
- **HTML report**: file dropdown groups `.pas` and `.dfm` with the
33+
same basename under one heading; severity badges filter both
34+
views consistently.
35+
- **IDE plugin — DFM finding opens DFM as text** in the Code Editor
36+
via the Close-and-Reopen pattern (DFMCheck/GExperts-style). When
37+
the companion `.pas` is modified, falls back to opening the
38+
`.pas` and showing a status-bar hint that Alt+F12 toggles to the
39+
DFM source. New return enum `TOpenFileMode`
40+
(`ofmRegular` / `ofmDfmAsText` / `ofmDfmFallbackPas`) so the
41+
status bar can describe what happened.
42+
- **Standalone EXE — modal DFM text viewer** on double-click: opens
43+
the form file as text with the finding line highlighted and the
44+
caret pre-positioned (EM_LINEINDEX).
45+
- **Smarter double-click on DFM findings** in the standalone grid:
46+
routes `.dfm` to the modal viewer, `.pas` via ShellExecute as
47+
before.
48+
- **Stat-tile readability bump**: tile fonts grow +1pt (Icon, Count
49+
11→12; Caption 6→7).
50+
- **Demo resources** for trying the DFM scanner:
51+
- `uOrderForm.pas` + `.dfm`: `TADOQuery` + `TFields` + `TDBEdit`s
52+
with intentional smells.
53+
- `uCustomerForm.pas` + `.dfm`: `TFDQuery``TDataSetProvider`
54+
`TClientDataSet``TDataSource` chain.
55+
56+
### Changed
57+
58+
- `uIDEEditorIntegration.OpenFileAtLine` now returns
59+
`TOpenFileMode`; callers can describe the result in the status
60+
bar. Old `Boolean` return is gone — bump the version of any
61+
third-party caller (unlikely outside this repo).
62+
- `SafeCloseModule` uses `CloseModule(True)` (save-if-dirty)
63+
unconditionally — the Modified flag is unreliable in Delphi 12
64+
directly after `OpenFile` and blocked the Close-and-Reopen trick.
65+
- README + README-de tagline rewritten to highlight the **41
66+
detectors total** + DFM scanner feature surface; added a
67+
"Related projects and alternatives" section and a "Keywords"
68+
block for discoverability.
69+
70+
### Fixed
71+
72+
- `TEditSource Refcount = 2` error during IDE destroy after
73+
rapid DFM→PAS click sequences. Cause: implicit interface
74+
references kept the source alive past IDE-internal destroy
75+
ordering. Fix: explicit `:= nil` on the `IOTAModule` reference
76+
in `SafeCloseModule`.
77+
- DFM-finding line off-by-one in the standalone modal viewer.
78+
- `TDictionary<string, Cardinal>` var-parameter type mismatch in
79+
`uExportHtml` (inline-var was inferred as `Integer`).
80+
81+
---
82+
83+
## [0.9.0] - 2026-03-15
84+
85+
### Added
86+
87+
- **SARIF report** (`--report-sarif`) for GitHub Code Scanning,
88+
GitLab CI, Azure DevOps, and other SARIF-aware CI/CD systems.
89+
Findings show up as inline annotations in PR diffs.
90+
- **Custom-rule engine** with YAML profiles (`analyser-rules.yml`)
91+
loadable per project. Profiles in `examples/` for common
92+
starting points.
93+
- **Rule Catalog** — all detectors expose machine-readable
94+
metadata (id, severity, category, fix hint).
95+
96+
---
97+
98+
## [0.8.0] - 2026-02-04
99+
100+
### Added
101+
102+
- **Headless CLI mode**: `analyser.d12.exe --path X --full|--branch
103+
--report-sarif Y` runs the same engine as the IDE plugin without
104+
RAD Studio, for use in CI pipelines and pre-commit hooks.
105+
- **Exit-code mapping**: 0 clean / 1 hints / 2 warnings /
106+
3 errors — drop-in for hook scripts.
107+
108+
---
109+
110+
## [0.7.1] - 2026-01-20
111+
112+
### Added
113+
114+
- **IDE hover-hint overlay** on finding lines.
115+
- **Hover-overlay description** as multiline wrap text.
116+
117+
### Fixed
118+
119+
- IDE plugin: first docking now reliably switches into compact
120+
layout.
121+
- Three detectors received false-positive reduction work.
122+
123+
### Changed
124+
125+
- Central three-tier responsive layout for the IDE plugin.
126+
- FormatMismatch fixes.
127+
128+
---
129+
130+
## [0.7.0] - 2025-12-XX
131+
132+
### Added
133+
134+
- **Docked-mode UI**: two breakpoints (700/400) with sub-panel
135+
width shrinking; Hamburger menu absorbs all actions; SearchEdit
136+
shrinks in docked mode.
137+
- **DPI scaling** + extracted layout constants.
138+
139+
---
140+
141+
## [0.6.x and earlier]
142+
143+
Initial release stream — Sonar-style classification, 21 Pascal
144+
detectors, Git+SVN branch-changes mode, dxgettext localisation,
145+
HTML/CSV/JSON export, Claude AI prompt copy, theme-aware rendering.
146+
See `git log` for granular history before the changelog was
147+
introduced.
148+
149+
---
150+
151+
## Conventions
152+
153+
- **MAJOR.MINOR.PATCH** follows SemVer for the public API of the
154+
IDE plugin (BPL exports) and the standalone CLI (flags + exit
155+
codes). Detector additions are **MINOR** bumps; behaviour or
156+
signature changes that break either are **MAJOR**.
157+
- The pre-1.0 line is still allowed to break public surface in
158+
MINOR bumps when the change is necessary — every such case is
159+
called out under **Changed** with a migration note.
160+
- Each entry is grouped under **Added / Changed / Fixed / Removed
161+
/ Deprecated / Security** so a reader can scan one section.
162+
- Dates are absolute (`YYYY-MM-DD`) so relative phrasing like
163+
"last week" doesn't drift.

0 commit comments

Comments
 (0)