// Copyright (c) 2016, 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:isolate';

import 'package:analyzer/src/plugin/resolver_provider.dart';
import 'package:analyzer_cli/src/driver.dart';
import 'package:plugin/plugin.dart';

/**
 * An object that can be used to start a command-line analysis. This class
 * exists so that clients can configure a command-line analyzer before starting
 * it.
 *
 * Clients may not extend, implement or mix-in this class.
 */
abstract class CommandLineStarter {
  /**
   * Initialize a newly created starter to start up a command-line analysis.
   */
  factory CommandLineStarter() = Driver;

  /**
   * Set the package resolver provider used to override the way package URI's
   * are resolved in some contexts. The provider should return `null` if the
   * default package resolution scheme should be used instead.
   */
  void set packageResolverProvider(ResolverProvider provider);

  /**
   * Set the [plugins] that are defined outside the analyzer_cli package.
   */
  void set userDefinedPlugins(List<Plugin> plugins);

  /**
   * Use the given command-line [arguments] to start this analyzer.
   *
   * If [sendPort] is provided it is used for bazel worker communication
   * instead of stdin/stdout.
   */
  Future<Null> start(List<String> arguments, {SendPort sendPort});
}
