| // Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:dds/dap.dart'; |
| |
| import '../core.dart'; |
| |
| /// A command to start a debug adapter process that communicates over |
| /// stdin/stdout using the Debug Adapter Protocol to allow editors to run debug |
| /// sessions in a standard way. |
| class DebugAdapterCommand extends DartdevCommand { |
| static const String cmdName = 'debug_adapter'; |
| |
| static const argIpv6 = 'ipv6'; |
| static const argDds = 'dds'; |
| static const argAuthCodes = 'auth-codes'; |
| static const argTest = 'test'; |
| |
| DebugAdapterCommand({bool verbose = false}) |
| : super( |
| cmdName, |
| 'Start a debug adapter that conforms to the Debug Adapter Protocol.', |
| verbose, |
| hidden: true, |
| ) { |
| argParser |
| ..addFlag( |
| argIpv6, |
| defaultsTo: false, |
| help: 'Whether to bind DAP/VM Service/DDS to IPv6 addresses.', |
| ) |
| ..addFlag( |
| argDds, |
| defaultsTo: true, |
| help: 'Whether to enable DDS for debug sessions.', |
| ) |
| ..addFlag( |
| argAuthCodes, |
| defaultsTo: true, |
| help: 'Whether to enable authentication codes for VM Services.', |
| ) |
| ..addFlag( |
| argTest, |
| defaultsTo: false, |
| help: 'Whether to use the "dart test" debug adapter to run tests' |
| ' and emit custom events for test progress/results.', |
| ); |
| } |
| |
| @override |
| FutureOr<int> run() async { |
| final args = argResults!; |
| final ipv6 = args[argIpv6] as bool; |
| |
| final server = DapServer( |
| stdin, |
| stdout.nonBlocking, |
| ipv6: ipv6, |
| enableDds: args[argDds], |
| enableAuthCodes: args[argAuthCodes], |
| test: args[argTest], |
| // Protocol errors should be written to stderr to help debug (or in the |
| // case of a user running this command to explain it's for tools). |
| onError: (e) => stderr.writeln( |
| 'Input could not be parsed as a Debug Adapter Protocol message.\n' |
| 'The "dart debug_adapter" command is intended for use by tooling that ' |
| 'communicates using the Debug Adapter Protocol.\n\n' |
| '$e', |
| ), |
| ); |
| |
| await server.channel.closed; |
| |
| return 0; |
| } |
| } |