Skip to content

ROneCOne 1.9.1

Choose a tag to compare

@WilliamSmithEdward WilliamSmithEdward released this 23 Sep 00:42
· 47 commits to main since this release

ROneCOne 1.9.1

Importing ROneCOne.cls no longer rewrites the spelling of names in the rest of the project
(issue #6), and every module that ships
now opens with its release and the MIT license.

Upgrading needs no change to calling code. No member was added or removed, and every public
parameter keeps its name and position. 324 of them changed case, as value became Value in
Add, and VBA matches named arguments regardless of case. 75 parameters on 63 Friend members
were renamed. Those are the runtime's internal wiring, absent from the reference, so only code
calling them by named argument would notice.

A project that ran an earlier release can keep some names in the spelling the old class gave them.
Getting started covers
replacing the class and has a procedure to paste and delete that restores them.

Fixed

VBA keeps one spelling per identifier across a project, and a declaration anywhere sets it. The
runtime declared more than a thousand parameters and locals in lowercase whose names Excel,
Office, or VBA spell otherwise. Imported into a project, it turned .Value into .value and
.Text into .text in every module, and each export carried the change as diff noise. Exported
through the VBE beside a host module that declares none of those names, 24 names in the host came
back recased, Count, Item, Rows, and Value among them. The runtime recased its own members
too, and ROneCOne and ModernJsonInVBA recased each other when they shared a project.

Public parameters now take the spelling the type libraries use, as Excel's own parameters do.
Parameters of Private and Friend members, locals, UDT fields, and Declare parameters were renamed
to names no reference defines, such as value to itemValue and index to idx. Guid and
Xml keep their .NET spelling, so a host that writes GUID or .XML still sees those two
recased.

The demo modules had the same defect inside their workbooks, where Dim json As String turned
ROneCOne.Json into ROneCOne.json. So did the documentation's examples, which readers copy into
their own modules. Both now use names that no reference and no ROneCOne member defines. The
ModernJsonInVBA side of the collision is tracked in
ModernJsonInVBA#1.

Changed

Every module that ships opens with the release it belongs to and the full MIT license, directly
below Option Explicit: the runtime and each module packaged into the demo workbooks. A demo
module copied out of its workbook used to carry neither, and the runtime's license sat on line
208, below the Windows declarations. tools/stamp_release_headers.py writes the header from the
newest dated changelog heading and from LICENSE.

Guards added

tests/python/test_casing.py holds the runtime, the demo modules, and every documentation example
to one spelling per name and to the spelling the default references use.
tools/run_casing_roundtrip.ps1 exports a host project through the VBE and requires every token
back as written. A source contract fails while any shipped module's header disagrees with the
changelog or LICENSE.

Release evidence

Each of three fresh Microsoft 365 Excel processes passed the same 997 live assertions as 1.9.0.
All ten suite benchmark scenarios met their release gates in every sample. The medians ran
invocation 0.11, collection 0.18, ordering 0.95, dictionary build and read 0.16, 100,000 indexed
lookups 0.30, keyed mutation 0.70, 10,000 list writes 0.07, 2,000 row reads 0.07, 10,000 hash set
reads 0.01, and constrained maintenance 0.48 seconds.

All sixteen demo workbooks were repackaged with the stamped modules and run in place, and all 205
of their examples passed. The VBE casing round trip over the runtime, all eighteen demo modules,
and a host module brought every token back as written.

Static analysis on pyVBAanalysis 1.3.1 reported zero diagnostics across the runtime source, the
live test modules, the demo modules, and all sixteen final workbooks. 89 Python contract tests pin
the source, the demos, and the documentation. Every packaged VBA module round-tripped
byte-for-byte.

Method note

The upgrade path was measured before the guide was written. A workbook holding 1.9.0 and two host
modules was saved with the host names recased, then upgraded by removing the class and importing
this one through the VBE. Names this runtime declares came back, 17 of the 24 in the first host
module. The rest did not. A second host module references all 72 names that some release declared
and 1.9.1 does not; 64 of them kept the old spelling, and the imported runtime took five of them
itself. Saving and reopening between removing the old class and importing the new one still left
59. Pasting the guide's procedure and deleting it restored every name in all three modules, and
the spellings survived saving and reopening.

A comparison of the public surface against 1.9.0 also ran before release. It found one parameter
renamed rather than recased, TryUpdate's newValue, which would have broken a named-argument
caller. The parameter was restored, and every public name now matches 1.9.0.

Full changelog