chore: adopt Dart 3.9 toolchain — honest floor + tall-style reformat (T-353)

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>
This commit is contained in:
2026-06-11 12:11:53 +02:00
co-authored by Claude Opus 4.8
parent bcea5f15b7
commit 6d0ebab721
444 changed files with 7587 additions and 12849 deletions
@@ -41,26 +41,30 @@ void main() {
/// Pump a themed context, run [body] with a controller already
/// given tokens from the active theme.
Future<void> withController(
WidgetTester tester,
SyntaxTextController c,
Future<void> Function(BuildContext ctx) body,
) async {
Future<void> withController(WidgetTester tester, SyntaxTextController c, Future<void> Function(BuildContext ctx) body) async {
late BuildContext ctx;
await tester.pumpWidget(harness(f, Builder(builder: (context) {
ctx = context;
return const SizedBox();
})));
await tester.pumpWidget(
harness(
f,
Builder(
builder: (context) {
ctx = context;
return const SizedBox();
},
),
),
);
c.tokens = ClideTheme.of(ctx).surface;
await body(ctx);
}
testWidgets('renders highlighted spans as styled TextSpan children', (tester) async {
final c = SyntaxTextController(
syntax: _FakeSyntax(const [
SyntaxSpan(start: 0, end: 5, role: 'keyword'), // "class"
SyntaxSpan(start: 6, end: 9, role: 'type'), // "Foo"
]));
syntax: _FakeSyntax(const [
SyntaxSpan(start: 0, end: 5, role: 'keyword'), // "class"
SyntaxSpan(start: 6, end: 9, role: 'type'), // "Foo"
]),
);
await withController(tester, c, (ctx) async {
c.text = 'class Foo {}';
c.updatePath('a.dart');
@@ -76,9 +80,10 @@ void main() {
// '😀' is a surrogate pair (4 UTF-8 bytes). A span after it must
// still land on the right character offset.
final c = SyntaxTextController(
syntax: _FakeSyntax(const [
SyntaxSpan(start: 5, end: 8, role: 'type'), // "Foo" after "😀 "
]));
syntax: _FakeSyntax(const [
SyntaxSpan(start: 5, end: 8, role: 'type'), // "Foo" after "😀 "
]),
);
await withController(tester, c, (ctx) async {
c.text = '😀 Foo';
c.updatePath('a.dart');