Raise the declared minimums in pubspec.yaml to what our deps already
require: Flutter >=3.35.0 / Dart >=3.9.0 (was 3.19.0 / 3.5.0). alchemist
0.12 needs Flutter 3.32; Dart 3.9 first ships in Flutter 3.35, so 3.35 is
the binding floor. Pin the exact build toolchain in .fvmrc (Flutter
3.44.1).
Moving to the Dart 3.9 language level switches `dart format` to the new
"tall" style and enables two new lints. This commit is the resulting
mechanical churn, isolated from any behaviour change:
- whole-tree `dart format` reformat (tall style)
- `dart fix` for unnecessary_underscores + use_null_aware_elements
No runtime behaviour change; `make test` green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds test/terminal/buffer/line_test.dart — 51 unit tests covering
BufferLine and CellAnchor, hitting every reachable line in
lib/src/terminal/src/core/buffer/line.dart (192 / 192).
Coverage delta:
- line.dart: 0 / 194 → 192 / 192 (file shrank by two lines after
the prior commit's iteration fix folded two for-loop heads into
for-each-toList).
- Total project: 36.39% → 39.12%.
- pubspec.yaml `coverage_floor:` bumped 36 → 39 in lockstep.
Highlights:
- All packed-cell encodings (foreground/background/attrs/content
channels, codepoint+width packing, CellData round-trips).
- `eraseRange` wide-char neighbor extension on both ends.
- `removeCells` / `insertCells` shift logic, anchor reposition, and
the wide-tail-erase branch (insertCells case where the post-shift
last cell carries a wide marker).
- `resize` exercising the [64, 256) capacity-doubling branch and
the >=256 +32 branch separately.
- `getTrimmedLength` cols-clamp behaviour for null/over-capacity.
- `getText` skip-trailing-wide-char branch.
- `CellAnchor` lifecycle: detached construction, `reposition`,
`reparent` (both detached→attached and between owners), `dispose`,
attached y/offset via a real IndexAwareCircularBuffer.
Also cleans up five `unrelated_type_equality_checks` analyze infos
in test/terminal/buffer/range_test.dart by typing the RHS as Object
when intentionally probing the type-mismatch branch of operator==.
Co-Authored-By: Claude <noreply@anthropic.com>
Adds test/terminal/buffer/range_test.dart — 38 unit tests covering
the small pure-Dart files in lib/src/terminal/src/core/buffer/:
- cell_offset.dart 23 / 23 (was 0 / 23)
- range.dart 13 / 13 (was 0 / 13)
- segment.dart 13 / 13 (was 0 / 13)
- range_line.dart 30 / 30 (was 0 / 30)
- range_block.dart 48 / 48 (was 0 / 48)
Total project line coverage 34.90% → 36.39%; coverage_floor in
pubspec.yaml bumped 34 → 36 in lockstep.
Tests exercise the abstract BufferRange operator==/hashCode/toString
via a local _StubRange (BufferRangeLine and BufferRangeBlock both
override those, so the base versions are otherwise unreachable —
worth a stub rather than carving the lines out of coverage). The
denormalized-input branches in Block contain/toSegments/extend get
explicit cases too.
Pure Dart, no Flutter dependency — uses package:test/test.dart and
runs in <100ms.
First batch under T-91; line.dart and buffer.dart land in subsequent
commits with their own floor bumps.
Co-Authored-By: Claude <noreply@anthropic.com>