Enable and fix prefer_conditional_assignment (#30)

Migrate to `??=` for all cases where the assignment was the only behavior behind the condition. Refactor to `=>` for the pattern of memoized getters.
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 0711aca..aefc435 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -28,6 +28,7 @@
     - package_api_docs
     - package_names
     - package_prefixed_library_names
+    - prefer_conditional_assignment
     - prefer_equal_for_default_values
     - prefer_final_fields
     - prefer_generic_function_type_aliases
diff --git a/lib/glob.dart b/lib/glob.dart
index c2f7f6f..c43c40f 100644
--- a/lib/glob.dart
+++ b/lib/glob.dart
@@ -52,32 +52,20 @@
   ListTree _listTree;
 
   /// Whether [context]'s current directory is absolute.
-  bool get _contextIsAbsolute {
-    if (_contextIsAbsoluteCache == null) {
-      _contextIsAbsoluteCache = context.isAbsolute(context.current);
-    }
-    return _contextIsAbsoluteCache;
-  }
+  bool get _contextIsAbsolute =>
+      _contextIsAbsoluteCache ??= context.isAbsolute(context.current);
 
   bool _contextIsAbsoluteCache;
 
   /// Whether [pattern] could match absolute paths.
-  bool get _patternCanMatchAbsolute {
-    if (_patternCanMatchAbsoluteCache == null) {
-      _patternCanMatchAbsoluteCache = _ast.canMatchAbsolute;
-    }
-    return _patternCanMatchAbsoluteCache;
-  }
+  bool get _patternCanMatchAbsolute =>
+      _patternCanMatchAbsoluteCache ??= _ast.canMatchAbsolute;
 
   bool _patternCanMatchAbsoluteCache;
 
   /// Whether [pattern] could match relative paths.
-  bool get _patternCanMatchRelative {
-    if (_patternCanMatchRelativeCache == null) {
-      _patternCanMatchRelativeCache = _ast.canMatchRelative;
-    }
-    return _patternCanMatchRelativeCache;
-  }
+  bool get _patternCanMatchRelative =>
+      _patternCanMatchRelativeCache ??= _ast.canMatchRelative;
 
   bool _patternCanMatchRelativeCache;
 
@@ -126,7 +114,7 @@
           "${context.style} paths, but this platform uses ${p.style} paths.");
     }
 
-    if (_listTree == null) _listTree = ListTree(_ast);
+    _listTree ??= ListTree(_ast);
     return _listTree.list(root: root, followLinks: followLinks);
   }
 
@@ -147,7 +135,7 @@
           "${context.style} paths, but this platform uses ${p.style} paths.");
     }
 
-    if (_listTree == null) _listTree = ListTree(_ast);
+    _listTree ??= ListTree(_ast);
     return _listTree.listSync(root: root, followLinks: followLinks);
   }
 
diff --git a/lib/src/ast.dart b/lib/src/ast.dart
index c8f4328..5620c56 100644
--- a/lib/src/ast.dart
+++ b/lib/src/ast.dart
@@ -44,9 +44,7 @@
 
   /// Returns whether this glob matches [string].
   bool matches(String string) {
-    if (_regExp == null) {
-      _regExp = RegExp('^${_toRegExp()}\$', caseSensitive: caseSensitive);
-    }
+    _regExp ??= RegExp('^${_toRegExp()}\$', caseSensitive: caseSensitive);
     return _regExp.hasMatch(string);
   }
 
@@ -122,7 +120,7 @@
     List<AstNode> currentComponent;
 
     addNode(AstNode node) {
-      if (currentComponent == null) currentComponent = [];
+      currentComponent ??= [];
       currentComponent.add(node);
     }