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
+30 -47
View File
@@ -100,15 +100,7 @@ class _ClideTestAppState extends State<ClideTestApp> {
// Emitted under a distinct source so the harness's grep
// (`make run-testmode` checks for `"failed":0`) keeps working
// without depending on the human-readable lines above.
_logger.info(
'testmode:json',
jsonEncode({
'passed': passed,
'failed': failed,
'total': _results.length,
'failures': failedNames,
}),
);
_logger.info('testmode:json', jsonEncode({'passed': passed, 'failed': failed, 'total': _results.length, 'failures': failedNames}));
setState(() => _done = true);
await Future<void>.delayed(const Duration(seconds: 2));
@@ -198,30 +190,18 @@ class _ClideTestAppState extends State<ClideTestApp> {
// ping round-trip
final pingReq = IpcRequest(id: 'test-ping-1', cmd: 'ping');
final pingResp = await dispatcher.dispatch(pingReq);
_addResult(
'ipc ping',
pingResp.ok && pingResp.data['pong'] == true,
pingResp.ok ? 'pong=${pingResp.data['pong']}' : 'error: ${pingResp.error?.message}',
);
_addResult('ipc ping', pingResp.ok && pingResp.data['pong'] == true, pingResp.ok ? 'pong=${pingResp.data['pong']}' : 'error: ${pingResp.error?.message}');
// version round-trip
final verReq = IpcRequest(id: 'test-ver-1', cmd: 'version');
final verResp = await dispatcher.dispatch(verReq);
final version = verResp.data['version'];
_addResult(
'ipc version',
verResp.ok && version is String && version.isNotEmpty,
'version=$version',
);
_addResult('ipc version', verResp.ok && version is String && version.isNotEmpty, 'version=$version');
// unknown command → notFound
final badReq = IpcRequest(id: 'test-bad-1', cmd: 'no_such_command');
final badResp = await dispatcher.dispatch(badReq);
_addResult(
'ipc unknown cmd',
!badResp.ok && badResp.error?.kind == 'not_found',
badResp.ok ? 'unexpected ok' : 'kind=${badResp.error?.kind}',
);
_addResult('ipc unknown cmd', !badResp.ok && badResp.error?.kind == 'not_found', badResp.ok ? 'unexpected ok' : 'kind=${badResp.error?.kind}');
// envelope encode/decode round-trip
final encoded = pingReq.encode();
@@ -282,12 +262,7 @@ class _ClideTestAppState extends State<ClideTestApp> {
toolchain: tc,
);
final extensions = <ClideExtension>[
DiffExtension(),
FilesExtension(),
GitExtension(),
TerminalExtension(),
];
final extensions = <ClideExtension>[DiffExtension(), FilesExtension(), GitExtension(), TerminalExtension()];
for (final ext in extensions) {
try {
@@ -453,10 +428,15 @@ class _ClideTestAppState extends State<ClideTestApp> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('ClideTestApp', style: TextStyle(color: Color(0xFFCDD6F4), fontSize: 20, fontWeight: FontWeight.bold, decoration: TextDecoration.none)),
const Text(
'ClideTestApp',
style: TextStyle(color: Color(0xFFCDD6F4), fontSize: 20, fontWeight: FontWeight.bold, decoration: TextDecoration.none),
),
const SizedBox(height: 4),
Text(_done ? 'Done — exiting' : 'Running tests...',
style: const TextStyle(color: Color(0xFF6C7086), fontSize: 13, decoration: TextDecoration.none)),
Text(
_done ? 'Done — exiting' : 'Running tests...',
style: const TextStyle(color: Color(0xFF6C7086), fontSize: 13, decoration: TextDecoration.none),
),
const SizedBox(height: 16),
Expanded(
child: ListView.builder(
@@ -467,17 +447,25 @@ class _ClideTestAppState extends State<ClideTestApp> {
padding: const EdgeInsets.symmetric(vertical: 2),
child: Row(
children: [
Text(r.ok ? '●' : '●',
style: TextStyle(color: r.ok ? const Color(0xFFA6E3A1) : const Color(0xFFF38BA8), fontSize: 12, decoration: TextDecoration.none)),
Text(
r.ok ? '●' : '●',
style: TextStyle(color: r.ok ? const Color(0xFFA6E3A1) : const Color(0xFFF38BA8), fontSize: 12, decoration: TextDecoration.none),
),
const SizedBox(width: 8),
SizedBox(
width: 220,
child: Text(r.name,
style: const TextStyle(color: Color(0xFFCDD6F4), fontSize: 12, fontFamily: 'monospace', decoration: TextDecoration.none))),
width: 220,
child: Text(
r.name,
style: const TextStyle(color: Color(0xFFCDD6F4), fontSize: 12, fontFamily: 'monospace', decoration: TextDecoration.none),
),
),
Expanded(
child: Text(r.output,
style: const TextStyle(color: Color(0xFF9399B2), fontSize: 12, fontFamily: 'monospace', decoration: TextDecoration.none),
overflow: TextOverflow.ellipsis)),
child: Text(
r.output,
style: const TextStyle(color: Color(0xFF9399B2), fontSize: 12, fontFamily: 'monospace', decoration: TextDecoration.none),
overflow: TextOverflow.ellipsis,
),
),
],
),
);
@@ -497,12 +485,7 @@ class _TestEventSink implements DaemonEventSink {
@override
void emit(IpcEvent event) {
_bus.emit(DaemonEvent(
subsystem: event.subsystem,
kind: event.kind,
data: event.data,
ts: DateTime.now(),
));
_bus.emit(DaemonEvent(subsystem: event.subsystem, kind: event.kind, data: event.data, ts: DateTime.now()));
}
}