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
+5 -7
View File
@@ -29,14 +29,12 @@ const String argvSentinelCmd = '_argv';
ArgvParseResult unwrapArgvRequest(IpcRequest outer) {
final raw = outer.args['argv'];
if (raw is! List) {
return ArgvError(IpcResponse.err(
id: outer.id,
error: IpcError(
code: IpcExitCode.userError,
kind: IpcErrorKind.userError,
message: '_argv requires args.argv to be a JSON array',
return ArgvError(
IpcResponse.err(
id: outer.id,
error: IpcError(code: IpcExitCode.userError, kind: IpcErrorKind.userError, message: '_argv requires args.argv to be a JSON array'),
),
));
);
}
return parseArgv(raw.cast<String>(), requestId: outer.id);
}
+18 -24
View File
@@ -73,11 +73,7 @@ ArgvParseResult parseArgv(List<String> argv, {required String requestId}) {
if (parsed is _TailError) {
return ArgvError(_err(requestId, parsed.message));
}
return ArgvParsed(IpcRequest(
id: requestId,
cmd: first,
args: (parsed as _TailOk).toArgs(),
));
return ArgvParsed(IpcRequest(id: requestId, cmd: first, args: (parsed as _TailOk).toArgs()));
}
// Subsystem.verb form: need at least two tokens.
@@ -97,11 +93,7 @@ ArgvParseResult parseArgv(List<String> argv, {required String requestId}) {
if (parsed is _TailError) {
return ArgvError(_err(requestId, parsed.message));
}
return ArgvParsed(IpcRequest(
id: requestId,
cmd: '$subsystem.$verb',
args: (parsed as _TailOk).toArgs(),
));
return ArgvParsed(IpcRequest(id: requestId, cmd: '$subsystem.$verb', args: (parsed as _TailOk).toArgs()));
}
/// Route a `clide://` deep link to the `deeplink.invoke` command (T-56). A
@@ -109,9 +101,15 @@ ArgvParseResult parseArgv(List<String> argv, {required String requestId}) {
/// it is NOT translated into a command here. The raw URL is handed to the
/// deeplink handler, which validates it against a paranoid (default-deny)
/// allowlist and prompts the user before doing anything (D-90).
ArgvParseResult _deepLinkToRequest(String url, String requestId) => ArgvParsed(IpcRequest(id: requestId, cmd: 'deeplink.invoke', args: {
'positional': [url]
}));
ArgvParseResult _deepLinkToRequest(String url, String requestId) => ArgvParsed(
IpcRequest(
id: requestId,
cmd: 'deeplink.invoke',
args: {
'positional': [url],
},
),
);
// -- internals --------------------------------------------------------------
@@ -126,10 +124,10 @@ class _TailOk extends _TailParseResult {
final List<String> passthrough;
Map<String, Object?> toArgs() => {
if (positional.isNotEmpty) 'positional': positional,
if (flags.isNotEmpty) 'flags': flags,
if (passthrough.isNotEmpty) 'passthrough': passthrough,
};
if (positional.isNotEmpty) 'positional': positional,
if (flags.isNotEmpty) 'flags': flags,
if (passthrough.isNotEmpty) 'passthrough': passthrough,
};
}
class _TailError extends _TailParseResult {
@@ -221,10 +219,6 @@ bool _isValidIdentifier(String s) {
bool _isValidFlagName(String s) => _isValidIdentifier(s);
IpcResponse _err(String id, String message) => IpcResponse.err(
id: id,
error: IpcError(
code: IpcExitCode.userError,
kind: IpcErrorKind.userError,
message: message,
),
);
id: id,
error: IpcError(code: IpcExitCode.userError, kind: IpcErrorKind.userError, message: message),
);