Enable lint prefer_typing_uninitialized_variables (#187)

Gives some safety against mistakes since there are fewer calls on a
statically dynamic variable.
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 03843d0..b7dcb08 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -24,6 +24,7 @@
     - package_prefixed_library_names
     - prefer_final_fields
     - prefer_generic_function_type_aliases
+    - prefer_typing_uninitialized_variables
     - test_types_in_equals
     - throw_in_finally
     - unnecessary_brace_in_string_interps
diff --git a/lib/src/usage.dart b/lib/src/usage.dart
index d37a2f2..f583ece 100644
--- a/lib/src/usage.dart
+++ b/lib/src/usage.dart
@@ -119,7 +119,7 @@
       option.abbr == null ? '' : '-${option.abbr}, ';
 
   String _longOption(Option option) {
-    var result;
+    String result;
     if (option.negatable!) {
       result = '--[no-]${option.name}';
     } else {
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 4516848..648e554 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -41,7 +41,7 @@
     var trimmedText = line.trimLeft();
     final leadingWhitespace =
         line.substring(0, line.length - trimmedText.length);
-    var notIndented;
+    List<String> notIndented;
     if (hangingIndent != 0) {
       // When we have a hanging indent, we want to wrap the first line at one
       // width, and the rest at another (offset by hangingIndent), so we wrap
@@ -115,7 +115,7 @@
     }
 
     var currentLineStart = 0;
-    var lastWhitespace;
+    int? lastWhitespace;
     for (var i = 0; i < line.length; ++i) {
       if (isWhitespace(line, i)) lastWhitespace = i;
 
diff --git a/test/command_runner_test.dart b/test/command_runner_test.dart
index ed29e08..f030adc 100644
--- a/test/command_runner_test.dart
+++ b/test/command_runner_test.dart
@@ -19,7 +19,7 @@
 Run "test help <command>" for more information about a command.''';
 
 void main() {
-  late var runner;
+  late CommandRunner runner;
   setUp(() {
     runner = CommandRunner('test', 'A test command runner.');
   });
diff --git a/test/command_test.dart b/test/command_test.dart
index d4be4ae..bae9136 100644
--- a/test/command_test.dart
+++ b/test/command_test.dart
@@ -7,7 +7,7 @@
 import 'test_utils.dart';
 
 void main() {
-  late var foo;
+  late FooCommand foo;
   setUp(() {
     foo = FooCommand();
 
diff --git a/test/parse_test.dart b/test/parse_test.dart
index 4714d16..b68241a 100644
--- a/test/parse_test.dart
+++ b/test/parse_test.dart
@@ -122,7 +122,7 @@
 
     group('callbacks', () {
       test('for present flags are invoked with the value', () {
-        var a;
+        bool? a;
         var parser = ArgParser();
         parser.addFlag('a', callback: (value) => a = value);
 
@@ -131,7 +131,7 @@
       });
 
       test('for absent flags are invoked with the default value', () {
-        var a;
+        bool? a;
         var parser = ArgParser();
         parser.addFlag('a', defaultsTo: false, callback: (value) => a = value);
 
@@ -149,7 +149,7 @@
       });
 
       test('for present options are invoked with the value', () {
-        var a;
+        String? a;
         var parser = ArgParser();
         parser.addOption('a', callback: (value) => a = value);
 
@@ -178,7 +178,7 @@
       group('with addMultiOption', () {
         test('for multiple present, options are invoked with value as a list',
             () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a', callback: (value) => a = value);
 
@@ -193,7 +193,7 @@
         test(
             'for single present, options are invoked with value as a single '
             'element list', () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a', callback: (value) => a = value);
 
@@ -202,7 +202,7 @@
         });
 
         test('for absent, options are invoked with default value', () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a',
               defaultsTo: ['v', 'w'], callback: (value) => a = value);
@@ -212,7 +212,7 @@
         });
 
         test('for absent, options are invoked with value as an empty list', () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a', callback: (value) => a = value);
 
@@ -221,7 +221,7 @@
         });
 
         test('parses comma-separated strings', () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a', callback: (value) => a = value);
 
@@ -231,7 +231,7 @@
 
         test("doesn't parse comma-separated strings with splitCommas: false",
             () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a',
               splitCommas: false, callback: (value) => a = value);
@@ -241,7 +241,7 @@
         });
 
         test('parses empty strings', () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a', callback: (value) => a = value);
 
@@ -250,7 +250,7 @@
         });
 
         test('with allowed parses comma-separated strings', () {
-          var a;
+          List<String>? a;
           var parser = ArgParser();
           parser.addMultiOption('a',
               allowed: ['v', 'w', 'x'], callback: (value) => a = value);
diff --git a/test/trailing_options_test.dart b/test/trailing_options_test.dart
index 323f582..8475d3c 100644
--- a/test/trailing_options_test.dart
+++ b/test/trailing_options_test.dart
@@ -12,7 +12,7 @@
   });
 
   group('when trailing options are allowed', () {
-    late var parser;
+    late ArgParser parser;
     setUp(() {
       parser = ArgParser(allowTrailingOptions: true);
     });