dartfmt --fix, tidy up analysis, protobuf 1.0.0 (#42)

* dartfmt --fix, tidy up analysis, protobuf 1.0.0

* Stable analysis_options ruleset

* Protobuf version range
diff --git a/analysis_options.yaml b/analysis_options.yaml
index e88b5f1..10a2849 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,3 +1,5 @@
+include: package:pedantic/analysis_options.yaml
+
 analyzer:
 
 linter:
@@ -20,7 +22,6 @@
     - prefer_is_not_empty
     - slash_for_doc_comments
     - sort_unnamed_constructors_first
-    - super_goes_last
     # - type_annotate_public_apis
     - type_init_formals
     - unnecessary_brace_in_string_interps
diff --git a/e2e_test/bin/async_worker.dart b/e2e_test/bin/async_worker.dart
index 4573473..ddd530c 100644
--- a/e2e_test/bin/async_worker.dart
+++ b/e2e_test/bin/async_worker.dart
@@ -10,5 +10,5 @@
 /// This worker can run in one of two ways: normally, using stdin/stdout, or
 /// in an isolate, communicating over a [SendPort].
 Future main(List<String> args, [SendPort sendPort]) async {
-  await new ExampleAsyncWorker(sendPort).run();
+  await ExampleAsyncWorker(sendPort).run();
 }
diff --git a/e2e_test/bin/async_worker_in_isolate.dart b/e2e_test/bin/async_worker_in_isolate.dart
index 7b245f6..fce1eff 100644
--- a/e2e_test/bin/async_worker_in_isolate.dart
+++ b/e2e_test/bin/async_worker_in_isolate.dart
@@ -15,9 +15,9 @@
 /// to use this code to do additional work, for example post processing one of
 /// the output files.
 Future main(List<String> args, SendPort message) async {
-  var receivePort = new ReceivePort();
+  var receivePort = ReceivePort();
   await Isolate.spawnUri(
-      new Uri.file('async_worker.dart'), [], receivePort.sendPort);
+      Uri.file('async_worker.dart'), [], receivePort.sendPort);
 
   var worker = await ForwardsToIsolateAsyncWorker.create(receivePort);
   await worker.run();
diff --git a/e2e_test/bin/sync_worker.dart b/e2e_test/bin/sync_worker.dart
index e87b1c8..9bdcc77 100644
--- a/e2e_test/bin/sync_worker.dart
+++ b/e2e_test/bin/sync_worker.dart
@@ -5,5 +5,5 @@
 import 'package:e2e_test/sync_worker.dart';
 
 void main() {
-  new ExampleSyncWorker().run();
+  ExampleSyncWorker().run();
 }
diff --git a/e2e_test/lib/async_worker.dart b/e2e_test/lib/async_worker.dart
index ee080a9..3c7607b 100644
--- a/e2e_test/lib/async_worker.dart
+++ b/e2e_test/lib/async_worker.dart
@@ -12,10 +12,10 @@
 class ExampleAsyncWorker extends AsyncWorkerLoop {
   /// Set [sendPort] to run in an isolate.
   ExampleAsyncWorker([SendPort sendPort])
-      : super(connection: new AsyncWorkerConnection(sendPort: sendPort));
+      : super(connection: AsyncWorkerConnection(sendPort: sendPort));
 
   Future<WorkResponse> performRequest(WorkRequest request) async {
-    return new WorkResponse()
+    return WorkResponse()
       ..exitCode = 0
       ..output = request.arguments.join('\n');
   }
diff --git a/e2e_test/lib/forwards_to_isolate_async_worker.dart b/e2e_test/lib/forwards_to_isolate_async_worker.dart
index 47cf101..a09d3ee 100644
--- a/e2e_test/lib/forwards_to_isolate_async_worker.dart
+++ b/e2e_test/lib/forwards_to_isolate_async_worker.dart
@@ -14,7 +14,7 @@
 
   static Future<ForwardsToIsolateAsyncWorker> create(
       ReceivePort receivePort) async {
-    return new ForwardsToIsolateAsyncWorker(
+    return ForwardsToIsolateAsyncWorker(
         await IsolateDriverConnection.create(receivePort));
   }
 
diff --git a/e2e_test/lib/sync_worker.dart b/e2e_test/lib/sync_worker.dart
index 7c98dbe..270c555 100644
--- a/e2e_test/lib/sync_worker.dart
+++ b/e2e_test/lib/sync_worker.dart
@@ -8,7 +8,7 @@
 /// separated by newlines.
 class ExampleSyncWorker extends SyncWorkerLoop {
   WorkResponse performRequest(WorkRequest request) {
-    return new WorkResponse()
+    return WorkResponse()
       ..exitCode = 0
       ..output = request.arguments.join('\n');
   }
diff --git a/e2e_test/test/e2e_test.dart b/e2e_test/test/e2e_test.dart
index 1757139..028213f 100644
--- a/e2e_test/test/e2e_test.dart
+++ b/e2e_test/test/e2e_test.dart
@@ -27,7 +27,7 @@
   BazelWorkerDriver driver;
   group(groupName, () {
     setUp(() {
-      driver = new BazelWorkerDriver(spawnWorker);
+      driver = BazelWorkerDriver(spawnWorker);
     });
 
     tearDown(() async {
@@ -48,10 +48,9 @@
 /// completed with the correct response.
 Future _doRequests(BazelWorkerDriver driver, {int count}) async {
   count ??= 100;
-  var requests = new List.generate(count, (requestNum) {
-    var request = new WorkRequest();
-    request.arguments
-        .addAll(new List.generate(requestNum, (argNum) => '$argNum'));
+  var requests = List.generate(count, (requestNum) {
+    var request = WorkRequest();
+    request.arguments.addAll(List.generate(requestNum, (argNum) => '$argNum'));
     return request;
   });
   var responses = await Future.wait(requests.map(driver.doWork));
diff --git a/lib/src/async_message_grouper.dart b/lib/src/async_message_grouper.dart
index 3044bbe..dba4748 100644
--- a/lib/src/async_message_grouper.dart
+++ b/lib/src/async_message_grouper.dart
@@ -6,6 +6,7 @@
 import 'dart:collection';
 
 import 'package:async/async.dart';
+import 'package:pedantic/pedantic.dart';
 
 import 'message_grouper.dart';
 import 'message_grouper_state.dart';
@@ -14,7 +15,7 @@
 /// base-128 encoded lengths interleaved with raw data.
 class AsyncMessageGrouper implements MessageGrouper {
   /// Current state for reading in messages;
-  final _state = new MessageGrouperState();
+  final _state = MessageGrouperState();
 
   /// The input stream.
   final StreamQueue<List<int>> _inputQueue;
@@ -23,10 +24,10 @@
   bool _inputQueueCancelled = false;
 
   /// The current buffer.
-  final Queue<int> _buffer = new Queue<int>();
+  final Queue<int> _buffer = Queue<int>();
 
   AsyncMessageGrouper(Stream<List<int>> inputStream)
-      : _inputQueue = new StreamQueue(inputStream);
+      : _inputQueue = StreamQueue(inputStream);
 
   /// Returns the next full message that is received, or null if none are left.
   Future<List<int>> get next async {
@@ -41,7 +42,7 @@
       }
 
       // If there is nothing left in the queue then cancel the subscription.
-      if (message == null) _cancel();
+      if (message == null) unawaited(_cancel());
 
       return message;
     } catch (e) {
@@ -57,7 +58,7 @@
       _inputQueueCancelled = true;
       return _inputQueue.cancel();
     }
-    return new Future.value(null);
+    return Future.value(null);
   }
 
   /// Stop listening to the stream for further updates.
diff --git a/lib/src/driver/driver.dart b/lib/src/driver/driver.dart
index 8a3fb04..c4d1e92 100644
--- a/lib/src/driver/driver.dart
+++ b/lib/src/driver/driver.dart
@@ -10,7 +10,7 @@
 import '../worker_protocol.pb.dart';
 import 'driver_connection.dart';
 
-typedef Future<Process> SpawnWorker();
+typedef SpawnWorker = Future<Process> Function();
 
 /// A driver for talking to a bazel worker.
 ///
@@ -39,7 +39,7 @@
   final _spawningWorkers = <Future<Process>>[];
 
   /// Work requests that haven't been started yet.
-  final _workQueue = new Queue<_WorkAttempt>();
+  final _workQueue = Queue<_WorkAttempt>();
 
   /// Factory method that spawns a worker process.
   final SpawnWorker _spawnWorker;
@@ -58,7 +58,7 @@
   /// available worker.
   Future<WorkResponse> doWork(WorkRequest request,
       {Function(Future<WorkResponse>) trackWork}) {
-    var attempt = new _WorkAttempt(request, trackWork: trackWork);
+    var attempt = _WorkAttempt(request, trackWork: trackWork);
     _workQueue.add(attempt);
     _runWorkQueue();
     return attempt.response;
@@ -88,7 +88,7 @@
     if (_workQueue.isEmpty) return;
     if (_numWorkers == _maxWorkers && _idleWorkers.isEmpty) return;
     if (_numWorkers > _maxWorkers) {
-      throw new StateError('Internal error, created to many workers. Please '
+      throw StateError('Internal error, created to many workers. Please '
           'file a bug at https://github.com/dart-lang/bazel_worker/issues/new');
     }
 
@@ -106,7 +106,7 @@
         _spawningWorkers.remove(futureWorker);
         _readyWorkers.add(worker);
 
-        _workerConnections[worker] = new StdDriverConnection.forWorker(worker);
+        _workerConnections[worker] = StdDriverConnection.forWorker(worker);
         _runWorker(worker, attempt);
 
         // When the worker exits we should retry running the work queue in case
@@ -148,11 +148,11 @@
           rescheduled = _tryReschedule(attempt);
           if (rescheduled) return;
           stderr.writeln('Failed to run request ${attempt.request}');
-          response = new WorkResponse()
+          response = WorkResponse()
             ..exitCode = EXIT_CODE_ERROR
             ..output =
                 'Invalid response from worker, this probably means it wrote '
-                'invalid output or died.';
+                    'invalid output or died.';
         }
         attempt.responseCompleter.complete(response);
         _cleanUp(worker);
@@ -164,7 +164,7 @@
       if (!attempt.responseCompleter.isCompleted) {
         rescheduled = _tryReschedule(attempt);
         if (rescheduled) return;
-        var response = new WorkResponse()
+        var response = WorkResponse()
           ..exitCode = EXIT_CODE_ERROR
           ..output = 'Error running worker:\n$e\n$s';
         attempt.responseCompleter.complete(response);
@@ -218,7 +218,7 @@
 /// [WorkResponse], and the number of times it has been retried.
 class _WorkAttempt {
   final WorkRequest request;
-  final responseCompleter = new Completer<WorkResponse>();
+  final responseCompleter = Completer<WorkResponse>();
   final Function(Future<WorkResponse>) trackWork;
 
   Future<WorkResponse> get response => responseCompleter.future;
@@ -228,4 +228,4 @@
   _WorkAttempt(this.request, {this.trackWork});
 }
 
-final _workerConnections = new Expando<DriverConnection>('connection');
+final _workerConnections = Expando<DriverConnection>('connection');
diff --git a/lib/src/driver/driver_connection.dart b/lib/src/driver/driver_connection.dart
index f30bf84..0a3cb78 100644
--- a/lib/src/driver/driver_connection.dart
+++ b/lib/src/driver/driver_connection.dart
@@ -33,12 +33,11 @@
 
   StdDriverConnection(
       {Stream<List<int>> inputStream, StreamSink<List<int>> outputStream})
-      : _messageGrouper = new AsyncMessageGrouper(inputStream ?? stdin),
+      : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin),
         _outputStream = outputStream ?? stdout;
 
-  factory StdDriverConnection.forWorker(Process worker) =>
-      new StdDriverConnection(
-          inputStream: worker.stdout, outputStream: worker.stdin);
+  factory StdDriverConnection.forWorker(Process worker) => StdDriverConnection(
+      inputStream: worker.stdout, outputStream: worker.stdin);
 
   /// Note: This will attempts to recover from invalid proto messages by parsing
   /// them as strings. This is a common error case for workers (they print a
@@ -53,12 +52,12 @@
 
     WorkResponse response;
     try {
-      response = new WorkResponse.fromBuffer(buffer);
+      response = WorkResponse.fromBuffer(buffer);
     } catch (_) {
       try {
         // Try parsing the message as a string and set that as the output.
         var output = utf8.decode(buffer);
-        var response = new WorkResponse()
+        var response = WorkResponse()
           ..exitCode = EXIT_CODE_ERROR
           ..output = 'Worker sent an invalid response:\n$output';
         return response;
@@ -94,10 +93,10 @@
   /// [receivePort] attached to the [SendPort] that the isolate was created
   /// with.
   static Future<IsolateDriverConnection> create(ReceivePort receivePort) async {
-    var receivePortIterator = new StreamIterator(receivePort);
+    var receivePortIterator = StreamIterator(receivePort);
     await receivePortIterator.moveNext();
     var sendPort = receivePortIterator.current as SendPort;
-    return new IsolateDriverConnection._(receivePortIterator, sendPort);
+    return IsolateDriverConnection._(receivePortIterator, sendPort);
   }
 
   @override
diff --git a/lib/src/message_grouper_state.dart b/lib/src/message_grouper_state.dart
index 6ee524b..91419bc 100644
--- a/lib/src/message_grouper_state.dart
+++ b/lib/src/message_grouper_state.dart
@@ -27,7 +27,7 @@
     if (!_lengthReader.done) {
       _lengthReader.readByte(byte);
       if (_lengthReader.done) {
-        _messageReader = new _MessageReader(_lengthReader.length);
+        _messageReader = _MessageReader(_lengthReader.length);
       }
     } else {
       assert(_messageReader != null);
@@ -45,7 +45,7 @@
 
   /// Reset the state so that we are ready to receive the next message.
   void reset() {
-    _lengthReader = new _LengthReader();
+    _lengthReader = _LengthReader();
     _messageReader = null;
   }
 }
@@ -83,7 +83,7 @@
     // Check for the last byte in the length, and then read it.
     if ((byte & 0x80) == 0) {
       _done = true;
-      var reader = new CodedBufferReader(_buffer);
+      var reader = CodedBufferReader(_buffer);
       _length = reader.readInt32();
     }
   }
@@ -112,7 +112,7 @@
   int _numMessageBytesReceived = 0;
 
   _MessageReader(int length)
-      : _message = new Uint8List(length),
+      : _message = Uint8List(length),
         _length = length,
         _done = length == 0;
 
diff --git a/lib/src/sync_message_grouper.dart b/lib/src/sync_message_grouper.dart
index 20a1139..d86ef8d 100644
--- a/lib/src/sync_message_grouper.dart
+++ b/lib/src/sync_message_grouper.dart
@@ -9,7 +9,7 @@
 
 /// Groups bytes in delimited proto format into the bytes for each message.
 class SyncMessageGrouper implements MessageGrouper {
-  final _state = new MessageGrouperState();
+  final _state = MessageGrouperState();
   final Stdin _stdin;
 
   SyncMessageGrouper(this._stdin);
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index e34112d..609b435 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -7,14 +7,14 @@
 import 'package:protobuf/protobuf.dart';
 
 List<int> protoToDelimitedBuffer(GeneratedMessage message) {
-  var messageBuffer = new CodedBufferWriter();
+  var messageBuffer = CodedBufferWriter();
   message.writeToCodedBufferWriter(messageBuffer);
 
-  var delimiterBuffer = new CodedBufferWriter();
+  var delimiterBuffer = CodedBufferWriter();
   delimiterBuffer.writeInt32NoTag(messageBuffer.lengthInBytes);
 
-  var result = new Uint8List(
-      messageBuffer.lengthInBytes + delimiterBuffer.lengthInBytes);
+  var result =
+      Uint8List(messageBuffer.lengthInBytes + delimiterBuffer.lengthInBytes);
 
   delimiterBuffer.writeTo(result);
   messageBuffer.writeTo(result, delimiterBuffer.lengthInBytes);
diff --git a/lib/src/worker/async_worker_loop.dart b/lib/src/worker/async_worker_loop.dart
index 29f6ff8..db22b9a 100644
--- a/lib/src/worker/async_worker_loop.dart
+++ b/lib/src/worker/async_worker_loop.dart
@@ -16,7 +16,7 @@
   final AsyncWorkerConnection connection;
 
   AsyncWorkerLoop({AsyncWorkerConnection connection})
-      : this.connection = connection ?? new StdAsyncWorkerConnection();
+      : this.connection = connection ?? StdAsyncWorkerConnection();
 
   /// Perform a single [WorkRequest], and return a [WorkResponse].
   Future<WorkResponse> performRequest(WorkRequest request);
@@ -29,10 +29,10 @@
       try {
         var request = await connection.readRequest();
         if (request == null) break;
-        var printMessages = new StringBuffer();
+        var printMessages = StringBuffer();
         response = await runZoned(() => performRequest(request),
             zoneSpecification:
-                new ZoneSpecification(print: (self, parent, zone, message) {
+                ZoneSpecification(print: (self, parent, zone, message) {
           printMessages.writeln();
           printMessages.write(message);
         }));
@@ -42,7 +42,7 @@
         // In case they forget to set this.
         response.exitCode ??= EXIT_CODE_OK;
       } catch (e, s) {
-        response = new WorkResponse()
+        response = WorkResponse()
           ..exitCode = EXIT_CODE_ERROR
           ..output = '$e\n$s';
       }
diff --git a/lib/src/worker/sync_worker_loop.dart b/lib/src/worker/sync_worker_loop.dart
index e1b9aaf..799ec65 100644
--- a/lib/src/worker/sync_worker_loop.dart
+++ b/lib/src/worker/sync_worker_loop.dart
@@ -15,7 +15,7 @@
   final SyncWorkerConnection connection;
 
   SyncWorkerLoop({SyncWorkerConnection connection})
-      : this.connection = connection ?? new StdSyncWorkerConnection();
+      : this.connection = connection ?? StdSyncWorkerConnection();
 
   /// Perform a single [WorkRequest], and return a [WorkResponse].
   WorkResponse performRequest(WorkRequest request);
@@ -27,9 +27,9 @@
       try {
         var request = connection.readRequest();
         if (request == null) break;
-        var printMessages = new StringBuffer();
+        var printMessages = StringBuffer();
         response = runZoned(() => performRequest(request), zoneSpecification:
-            new ZoneSpecification(print: (self, parent, zone, message) {
+            ZoneSpecification(print: (self, parent, zone, message) {
           printMessages.writeln();
           printMessages.write(message);
         }));
@@ -39,7 +39,7 @@
         // In case they forget to set this.
         response.exitCode ??= EXIT_CODE_OK;
       } catch (e, s) {
-        response = new WorkResponse()
+        response = WorkResponse()
           ..exitCode = EXIT_CODE_ERROR
           ..output = '$e\n$s';
       }
diff --git a/lib/src/worker/worker_connection.dart b/lib/src/worker/worker_connection.dart
index c55f52d..6e072a3 100644
--- a/lib/src/worker/worker_connection.dart
+++ b/lib/src/worker/worker_connection.dart
@@ -34,9 +34,9 @@
           StreamSink<List<int>> outputStream,
           SendPort sendPort}) =>
       sendPort == null
-          ? new StdAsyncWorkerConnection(
+          ? StdAsyncWorkerConnection(
               inputStream: inputStream, outputStream: outputStream)
-          : new SendPortAsyncWorkerConnection(sendPort);
+          : SendPortAsyncWorkerConnection(sendPort);
 
   @override
   Future<WorkRequest> readRequest();
@@ -54,7 +54,7 @@
 
   StdAsyncWorkerConnection(
       {Stream<List<int>> inputStream, StreamSink<List<int>> outputStream})
-      : _messageGrouper = new AsyncMessageGrouper(inputStream ?? stdin),
+      : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin),
         _outputStream = outputStream ?? stdout;
 
   @override
@@ -62,7 +62,7 @@
     var buffer = await _messageGrouper.next;
     if (buffer == null) return null;
 
-    return new WorkRequest.fromBuffer(buffer);
+    return WorkRequest.fromBuffer(buffer);
   }
 
   @override
@@ -78,18 +78,18 @@
   final SendPort sendPort;
 
   factory SendPortAsyncWorkerConnection(SendPort sendPort) {
-    var receivePort = new ReceivePort();
+    var receivePort = ReceivePort();
     sendPort.send(receivePort.sendPort);
     return SendPortAsyncWorkerConnection._(receivePort, sendPort);
   }
 
   SendPortAsyncWorkerConnection._(this.receivePort, this.sendPort)
-      : receivePortIterator = new StreamIterator(receivePort.cast());
+      : receivePortIterator = StreamIterator(receivePort.cast());
 
   @override
   Future<WorkRequest> readRequest() async {
     if (!await receivePortIterator.moveNext()) return null;
-    return new WorkRequest.fromBuffer(receivePortIterator.current);
+    return WorkRequest.fromBuffer(receivePortIterator.current);
   }
 
   @override
@@ -105,7 +105,7 @@
   final Stdout _stdoutStream;
 
   StdSyncWorkerConnection({Stdin stdinStream, Stdout stdoutStream})
-      : _messageGrouper = new SyncMessageGrouper(stdinStream ?? stdin),
+      : _messageGrouper = SyncMessageGrouper(stdinStream ?? stdin),
         _stdoutStream = stdoutStream ?? stdout;
 
   @override
@@ -113,7 +113,7 @@
     var buffer = _messageGrouper.next;
     if (buffer == null) return null;
 
-    return new WorkRequest.fromBuffer(buffer);
+    return WorkRequest.fromBuffer(buffer);
   }
 
   @override
diff --git a/lib/testing.dart b/lib/testing.dart
index 1e7ccc3..08e6bd0 100644
--- a/lib/testing.dart
+++ b/lib/testing.dart
@@ -23,7 +23,7 @@
 /// A [Stdin] mock object which only implements `readByteSync`.
 class TestStdinSync implements TestStdin {
   /// Pending bytes to be delivered synchronously.
-  final Queue<int> pendingBytes = new Queue<int>();
+  final Queue<int> pendingBytes = Queue<int>();
 
   /// Adds all the [bytes] to this stream.
   void addInputBytes(List<int> bytes) {
@@ -42,7 +42,7 @@
 
   @override
   void noSuchMethod(Invocation invocation) {
-    throw new StateError('Unexpected invocation ${invocation.memberName}.');
+    throw StateError('Unexpected invocation ${invocation.memberName}.');
   }
 }
 
@@ -51,7 +51,7 @@
 /// Note: You must call [close] in order for the loop to exit properly.
 class TestStdinAsync implements TestStdin {
   /// Controls the stream for async delivery of bytes.
-  final StreamController<Uint8List> _controller = new StreamController();
+  final StreamController<Uint8List> _controller = StreamController();
   StreamController<Uint8List> get controller => _controller;
 
   /// Adds all the [bytes] to this stream.
@@ -73,7 +73,7 @@
 
   @override
   void noSuchMethod(Invocation invocation) {
-    throw new StateError('Unexpected invocation ${invocation.memberName}.');
+    throw StateError('Unexpected invocation ${invocation.memberName}.');
   }
 }
 
@@ -88,7 +88,7 @@
 
   @override
   void noSuchMethod(Invocation invocation) {
-    throw new StateError('Unexpected invocation ${invocation.memberName}.');
+    throw StateError('Unexpected invocation ${invocation.memberName}.');
   }
 }
 
@@ -123,7 +123,7 @@
 /// A [SyncWorkerLoop] for testing.
 class TestSyncWorkerLoop extends SyncWorkerLoop implements TestWorkerLoop {
   final List<WorkRequest> requests = <WorkRequest>[];
-  final Queue<WorkResponse> _responses = new Queue<WorkResponse>();
+  final Queue<WorkResponse> _responses = Queue<WorkResponse>();
 
   @override
   final String printMessage;
@@ -165,7 +165,7 @@
 /// A [AsyncWorkerLoop] for testing.
 class TestAsyncWorkerLoop extends AsyncWorkerLoop implements TestWorkerLoop {
   final List<WorkRequest> requests = <WorkRequest>[];
-  final Queue<WorkResponse> _responses = new Queue<WorkResponse>();
+  final Queue<WorkResponse> _responses = Queue<WorkResponse>();
 
   @override
   final String printMessage;
diff --git a/pubspec.yaml b/pubspec.yaml
index bc7edf1..1d63f92 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -10,7 +10,8 @@
 
 dependencies:
   async: '>1.9.0 <3.0.0'
-  protobuf: ^0.14.0
+  pedantic: ^1.8.0
+  protobuf: '>=0.14.0 <2.0.0'
 
 dev_dependencies:
   test: ^1.2.0
diff --git a/test/driver_test.dart b/test/driver_test.dart
index 9b664e9..8318e51 100644
--- a/test/driver_test.dart
+++ b/test/driver_test.dart
@@ -24,7 +24,7 @@
         () async {
       int maxWorkers = 4;
       int maxIdleWorkers = 2;
-      driver = new BazelWorkerDriver(MockWorker.spawn,
+      driver = BazelWorkerDriver(MockWorker.spawn,
           maxWorkers: maxWorkers, maxIdleWorkers: maxIdleWorkers);
       for (int i = 0; i < 10; i++) {
         await _doRequests(driver: driver);
@@ -39,7 +39,7 @@
     test('can run multiple requests through one worker', () async {
       int maxWorkers = 1;
       int maxIdleWorkers = 1;
-      driver = new BazelWorkerDriver(MockWorker.spawn,
+      driver = BazelWorkerDriver(MockWorker.spawn,
           maxWorkers: maxWorkers, maxIdleWorkers: maxIdleWorkers);
       for (int i = 0; i < 10; i++) {
         await _doRequests(driver: driver);
@@ -49,8 +49,8 @@
     });
 
     test('can run one request through multiple workers', () async {
-      driver = new BazelWorkerDriver(MockWorker.spawn,
-          maxWorkers: 4, maxIdleWorkers: 4);
+      driver =
+          BazelWorkerDriver(MockWorker.spawn, maxWorkers: 4, maxIdleWorkers: 4);
       for (int i = 0; i < 10; i++) {
         await _doRequests(driver: driver, count: 1);
         expect(MockWorker.liveWorkers.length, 1);
@@ -60,7 +60,7 @@
 
     test('can run with maxIdleWorkers == 0', () async {
       int maxWorkers = 4;
-      driver = new BazelWorkerDriver(MockWorker.spawn,
+      driver = BazelWorkerDriver(MockWorker.spawn,
           maxWorkers: maxWorkers, maxIdleWorkers: 0);
       for (int i = 0; i < 10; i++) {
         await _doRequests(driver: driver);
@@ -71,14 +71,17 @@
 
     test('trackWork gets invoked when a worker is actually ready', () async {
       var maxWorkers = 2;
-      driver = new BazelWorkerDriver(MockWorker.spawn, maxWorkers: maxWorkers);
+      driver = BazelWorkerDriver(MockWorker.spawn, maxWorkers: maxWorkers);
       var tracking = <Future>[];
-      await _doRequests(driver: driver, count: 10, trackWork: (Future response) {
-          // We should never be tracking more than `maxWorkers` jobs at a time.
-          expect(tracking.length, lessThan(maxWorkers));
-          tracking.add(response);
-          response.then((_) => tracking.remove(response));
-        });
+      await _doRequests(
+          driver: driver,
+          count: 10,
+          trackWork: (Future response) {
+            // We should never be tracking more than `maxWorkers` jobs at a time.
+            expect(tracking.length, lessThan(maxWorkers));
+            tracking.add(response);
+            response.then((_) => tracking.remove(response));
+          });
     });
 
     group('failing workers', () {
@@ -86,17 +89,17 @@
       /// ones after that, and which will retry [maxRetries] times.
       void createDriver({int maxRetries = 2, int numBadWorkers = 2}) {
         int numSpawned = 0;
-        driver = new BazelWorkerDriver(
-            () async => new MockWorker(workerLoopFactory: (MockWorker worker) {
-                  var connection = new StdAsyncWorkerConnection(
+        driver = BazelWorkerDriver(
+            () async => MockWorker(workerLoopFactory: (MockWorker worker) {
+                  var connection = StdAsyncWorkerConnection(
                       inputStream: worker._stdinController.stream,
                       outputStream: worker._stdoutController.sink);
                   if (numSpawned < numBadWorkers) {
                     numSpawned++;
-                    return new ThrowingMockWorkerLoop(
+                    return ThrowingMockWorkerLoop(
                         worker, MockWorker.responseQueue, connection);
                   } else {
-                    return new MockWorkerLoop(MockWorker.responseQueue,
+                    return MockWorkerLoop(MockWorker.responseQueue,
                         connection: connection);
                   }
                 }),
@@ -105,9 +108,9 @@
 
       test('should retry up to maxRetries times', () async {
         createDriver();
-        var expectedResponse = new WorkResponse();
+        var expectedResponse = WorkResponse();
         MockWorker.responseQueue.addAll([null, null, expectedResponse]);
-        var actualResponse = await driver.doWork(new WorkRequest());
+        var actualResponse = await driver.doWork(WorkRequest());
         // The first 2 null responses are thrown away, and we should get the
         // third one.
         expect(actualResponse, expectedResponse);
@@ -118,8 +121,8 @@
 
       test('should fail if it exceeds maxRetries failures', () async {
         createDriver(maxRetries: 2, numBadWorkers: 3);
-        MockWorker.responseQueue.addAll([null, null, new WorkResponse()]);
-        var actualResponse = await driver.doWork(new WorkRequest());
+        MockWorker.responseQueue.addAll([null, null, WorkResponse()]);
+        var actualResponse = await driver.doWork(WorkRequest());
         // Should actually get a bad response.
         expect(actualResponse.exitCode, 15);
         expect(
@@ -148,11 +151,11 @@
     Function(Future<WorkResponse>) trackWork}) async {
   // If we create a driver, we need to make sure and terminate it.
   var terminateDriver = driver == null;
-  driver ??= new BazelWorkerDriver(MockWorker.spawn);
+  driver ??= BazelWorkerDriver(MockWorker.spawn);
   count ??= 100;
   terminateDriver ??= true;
-  var requests = new List.generate(count, (_) => new WorkRequest());
-  var responses = new List.generate(count, (_) => new WorkResponse());
+  var requests = List.generate(count, (_) => WorkRequest());
+  var responses = List.generate(count, (_) => WorkResponse());
   MockWorker.responseQueue.addAll(responses);
   var actualResponses = await Future.wait(
       requests.map((request) => driver.doWork(request, trackWork: trackWork)));
@@ -179,9 +182,7 @@
 class ThrowingMockWorkerLoop extends MockWorkerLoop {
   final MockWorker _mockWorker;
 
-  ThrowingMockWorkerLoop(
-      this._mockWorker,
-      Queue<WorkResponse> responseQueue,
+  ThrowingMockWorkerLoop(this._mockWorker, Queue<WorkResponse> responseQueue,
       AsyncWorkerConnection connection)
       : super(responseQueue, connection: connection);
 
@@ -205,7 +206,7 @@
 /// If there are no items left in [responseQueue] then it will throw.
 class MockWorker implements Process {
   /// Spawns a new [MockWorker].
-  static Future<MockWorker> spawn() async => new MockWorker();
+  static Future<MockWorker> spawn() async => MockWorker();
 
   /// Worker loop that handles reading requests and responding.
   AsyncWorkerLoop _workerLoop;
@@ -213,7 +214,7 @@
   /// Static queue of pending responses, these are shared by all workers.
   ///
   /// If this is empty and a request is received then it will throw.
-  static final responseQueue = new Queue<WorkResponse>();
+  static final responseQueue = Queue<WorkResponse>();
 
   /// Static list of all live workers.
   static final liveWorkers = <MockWorker>[];
@@ -226,37 +227,37 @@
     liveWorkers.add(this);
     var workerLoop = workerLoopFactory != null
         ? workerLoopFactory(this)
-        : new MockWorkerLoop(responseQueue,
-            connection: new StdAsyncWorkerConnection(
+        : MockWorkerLoop(responseQueue,
+            connection: StdAsyncWorkerConnection(
                 inputStream: this._stdinController.stream,
                 outputStream: this._stdoutController.sink));
     _workerLoop = workerLoop..run();
   }
 
   Future<int> get exitCode => _exitCodeCompleter.future;
-  final _exitCodeCompleter = new Completer<int>();
+  final _exitCodeCompleter = Completer<int>();
 
   @override
   Stream<List<int>> get stdout => _stdoutController.stream;
-  final _stdoutController = new StreamController<List<int>>();
+  final _stdoutController = StreamController<List<int>>();
 
   @override
   Stream<List<int>> get stderr => _stderrController.stream;
-  final _stderrController = new StreamController<List<int>>();
+  final _stderrController = StreamController<List<int>>();
 
   @override
   IOSink get stdin {
-    _stdin ??= new IOSink(_stdinController.sink);
+    _stdin ??= IOSink(_stdinController.sink);
     return _stdin;
   }
 
   IOSink _stdin;
-  final _stdinController = new StreamController<List<int>>();
+  final _stdinController = StreamController<List<int>>();
 
-  int get pid => throw new UnsupportedError('Not needed.');
+  int get pid => throw UnsupportedError('Not needed.');
 
   @override
-  bool kill([ProcessSignal = ProcessSignal.sigterm, int exitCode = 0]) {
+  bool kill([processSignal = ProcessSignal.sigterm, int exitCode = 0]) {
     if (_killed) return false;
     () async {
       await _stdoutController.close();
diff --git a/test/message_grouper_test.dart b/test/message_grouper_test.dart
index 39dcb9e..7ce26fa 100644
--- a/test/message_grouper_test.dart
+++ b/test/message_grouper_test.dart
@@ -14,13 +14,13 @@
 
 void main() {
   group('AsyncMessageGrouper', () {
-    runTests(() => new TestStdinAsync(),
-        (Stdin stdinStream) => new AsyncMessageGrouper(stdinStream));
+    runTests(() => TestStdinAsync(),
+        (Stdin stdinStream) => AsyncMessageGrouper(stdinStream));
   });
 
   group('SyncMessageGrouper', () {
-    runTests(() => new TestStdinSync(),
-        (Stdin stdinStream) => new SyncMessageGrouper(stdinStream));
+    runTests(() => TestStdinSync(),
+        (Stdin stdinStream) => SyncMessageGrouper(stdinStream));
   });
 }
 
diff --git a/test/worker_loop_test.dart b/test/worker_loop_test.dart
index 2356060..fd2fcff 100644
--- a/test/worker_loop_test.dart
+++ b/test/worker_loop_test.dart
@@ -13,38 +13,38 @@
 void main() {
   group('SyncWorkerLoop', () {
     runTests(
-        () => new TestStdinSync(),
+        () => TestStdinSync(),
         (Stdin stdinStream, Stdout stdoutStream) =>
-            new TestSyncWorkerConnection(stdinStream, stdoutStream),
+            TestSyncWorkerConnection(stdinStream, stdoutStream),
         (TestSyncWorkerConnection connection) =>
-            new TestSyncWorkerLoop(connection));
+            TestSyncWorkerLoop(connection));
   });
 
   group('AsyncWorkerLoop', () {
     runTests(
-        () => new TestStdinAsync(),
+        () => TestStdinAsync(),
         (Stdin stdinStream, Stdout stdoutStream) =>
-            new TestAsyncWorkerConnection(stdinStream, stdoutStream),
+            TestAsyncWorkerConnection(stdinStream, stdoutStream),
         (TestAsyncWorkerConnection connection) =>
-            new TestAsyncWorkerLoop(connection));
+            TestAsyncWorkerLoop(connection));
   });
 
   group('SyncWorkerLoopWithPrint', () {
     runTests(
-        () => new TestStdinSync(),
+        () => TestStdinSync(),
         (Stdin stdinStream, Stdout stdoutStream) =>
-            new TestSyncWorkerConnection(stdinStream, stdoutStream),
+            TestSyncWorkerConnection(stdinStream, stdoutStream),
         (TestSyncWorkerConnection connection) =>
-            new TestSyncWorkerLoop(connection, printMessage: 'Goodbye!'));
+            TestSyncWorkerLoop(connection, printMessage: 'Goodbye!'));
   });
 
   group('AsyncWorkerLoopWithPrint', () {
     runTests(
-        () => new TestStdinAsync(),
+        () => TestStdinAsync(),
         (Stdin stdinStream, Stdout stdoutStream) =>
-            new TestAsyncWorkerConnection(stdinStream, stdoutStream),
+            TestAsyncWorkerConnection(stdinStream, stdoutStream),
         (TestAsyncWorkerConnection connection) =>
-            new TestAsyncWorkerLoop(connection, printMessage: 'Goodbye!'));
+            TestAsyncWorkerLoop(connection, printMessage: 'Goodbye!'));
   });
 }
 
@@ -59,24 +59,24 @@
 
   setUp(() {
     stdinStream = stdinFactory();
-    stdoutStream = new TestStdoutStream();
+    stdoutStream = TestStdoutStream();
     connection = workerConnectionFactory(stdinStream, stdoutStream);
     workerLoop = workerLoopFactory(connection);
   });
 
   test('basic', () async {
-    var request = new WorkRequest();
+    var request = WorkRequest();
     request.arguments.addAll(['--foo=bar']);
     stdinStream.addInputBytes(protoToDelimitedBuffer(request));
     stdinStream.close();
 
-    var response = new WorkResponse()..output = 'Hello World';
+    var response = WorkResponse()..output = 'Hello World';
     workerLoop.enqueueResponse(response);
 
     // Make sure `print` never gets called in the parent zone.
     var printMessages = <String>[];
     await runZoned(() => workerLoop.run(), zoneSpecification:
-        new ZoneSpecification(print: (self, parent, zone, message) {
+        ZoneSpecification(print: (self, parent, zone, message) {
       printMessages.add(message);
     }));
     expect(printMessages, isEmpty,
@@ -96,7 +96,7 @@
   });
 
   test('Exception in the worker.', () async {
-    var request = new WorkRequest();
+    var request = WorkRequest();
     request.arguments.addAll(['--foo=bar']);
     stdinStream.addInputBytes(protoToDelimitedBuffer(request));
     stdinStream.close();
@@ -125,7 +125,7 @@
       (stdinStream as TestStdinSync).pendingBytes.clear();
       await workerLoop.run();
     } else if (stdinStream is TestStdinAsync) {
-      var done = new Completer();
+      var done = Completer();
       workerLoop.run().then((_) => done.complete(null));
       (stdinStream as TestStdinAsync).controller.addError('Error!!');
       await done.future;