start method

  1. @override
Future start({
  1. String? clientId,
  2. String? clientVersion,
  3. int? diagnosticPort,
  4. String? instrumentationLogFile,
  5. bool profileServer = false,
  6. String? sdkPath,
  7. String? serverPath,
  8. int? servicesPort,
  9. bool suppressAnalytics = true,
  10. bool useAnalysisHighlight2 = false,
  11. bool enableAsserts = false,
  12. String? dartBinary,
})

Start the server.

If profileServer is true, the server will be started with "--observe" and "--pause-isolates-on-exit", allowing the observatory to be used.

If serverPath is specified, then that analysis server will be launched, otherwise the analysis server snapshot in the SDK will be launched.

If enableAsserts is specified, then asserts will be enabled in the new dart process for that server. This is typically just useful to enable locally for debugging.

Implementation

@override
Future start({
  String? clientId,
  String? clientVersion,
  int? diagnosticPort,
  String? instrumentationLogFile,
  bool profileServer = false,
  String? sdkPath,
  String? serverPath,
  int? servicesPort,
  bool suppressAnalytics = true,
  bool useAnalysisHighlight2 = false,
  bool enableAsserts = false,
  String? dartBinary,
}) async {
  if (_process != null) {
    throw Exception('Process already started');
  }
  dartBinary ??= Platform.executable;

  // The integration tests run 3x faster when run from snapshots
  // (you need to run test.py with --use-sdk).
  if (serverPath == null) {
    // Look for snapshots/analysis_server.dart.snapshot.
    serverPath = normalize(join(dirname(Platform.resolvedExecutable),
        'snapshots', 'analysis_server.dart.snapshot'));

    if (!FileSystemEntity.isFileSync(serverPath)) {
      // Look for dart-sdk/bin/snapshots/analysis_server.dart.snapshot.
      serverPath = normalize(join(dirname(Platform.resolvedExecutable),
          'dart-sdk', 'bin', 'snapshots', 'analysis_server.dart.snapshot'));
    }
  }

  var arguments = <String>[];
  //
  // Add VM arguments.
  //
  if (profileServer) {
    if (servicesPort == null) {
      arguments.add('--observe');
    } else {
      arguments.add('--observe=$servicesPort');
    }
    arguments.add('--pause-isolates-on-exit');
  } else if (servicesPort != null) {
    arguments.add('--enable-vm-service=$servicesPort');
  }
  if (Platform.packageConfig != null) {
    arguments.add('--packages=${Platform.packageConfig}');
  }
  if (enableAsserts) {
    arguments.add('--enable-asserts');
  }
  //
  // Add the server executable.
  //
  arguments.add(serverPath);

  arguments.addAll(getServerArguments(
      clientId: clientId,
      clientVersion: clientVersion,
      suppressAnalytics: suppressAnalytics,
      diagnosticPort: diagnosticPort,
      instrumentationLogFile: instrumentationLogFile,
      sdkPath: sdkPath,
      useAnalysisHighlight2: useAnalysisHighlight2));

  listener?.startingServer(dartBinary, arguments);
  final process = await Process.start(dartBinary, arguments);
  _process = process;
  // ignore: unawaited_futures
  process.exitCode.then((int code) {
    if (code != 0 && _process != null) {
      // Report an error if server abruptly terminated
      listener?.unexpectedStop(code);
    }
  });
}