diff --git a/analysis_options.yaml b/analysis_options.yaml
index 9d14291..a20ed49 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -4,6 +4,7 @@
   rules:
   - prefer_equal_for_default_values
   - prefer_generic_function_type_aliases
+  - prefer_typing_uninitialized_variables
   - slash_for_doc_comments
   - unnecessary_const
   - unnecessary_new
diff --git a/lib/parser.dart b/lib/parser.dart
index 1f3d185..ca1f465 100644
--- a/lib/parser.dart
+++ b/lib/parser.dart
@@ -549,7 +549,7 @@
         _next();
 
         // Page name
-        var name;
+        Identifier name;
         if (_peekIdentifier()) {
           name = identifier();
         }
@@ -666,7 +666,7 @@
         //     '}'
         _next();
 
-        var name;
+        dynamic name;
         if (_peekIdentifier()) {
           name = identifier();
         }
@@ -897,7 +897,7 @@
       }
     } else if (mixinParameter && _peekToken.kind == TokenKind.VAR_DEFINITION) {
       _next();
-      var definedName;
+      Identifier definedName;
       if (_peekIdentifier()) definedName = identifier();
 
       Expressions exprs;
@@ -917,7 +917,7 @@
     //     @include IDENT [(args,...)];
     _next();
 
-    var name;
+    Identifier name;
     if (_peekIdentifier()) {
       name = identifier();
     }
@@ -931,7 +931,7 @@
     // the first has 3 terms and the second has 1 term.
     if (_maybeEat(TokenKind.LPAREN)) {
       var terms = <Expression>[];
-      var expr;
+      dynamic expr;
       var keepGoing = true;
       while (keepGoing && (expr = processTerm()) != null) {
         // VarUsage is returns as a list
@@ -960,7 +960,7 @@
     _next(); // '@-moz-document'
     var functions = <LiteralTerm>[];
     do {
-      var function;
+      LiteralTerm function;
 
       // Consume function token: IDENT '('
       var ident = identifier();
@@ -1431,7 +1431,7 @@
     //              than the error message for element.  Should consolidate the
     //              code.
     // TODO(terry): Need to handle attribute namespace too.
-    var first;
+    dynamic first;
     var start = _peekToken.span;
     switch (_peek()) {
       case TokenKind.ASTERISK:
@@ -1632,7 +1632,7 @@
     var expressions = <Expression>[];
 
     Token termToken;
-    var value;
+    dynamic value;
 
     var keepParsing = true;
     while (keepParsing) {
@@ -1719,7 +1719,7 @@
           op = TokenKind.NO_MATCH;
       }
 
-      var value;
+      dynamic value;
       if (op != TokenKind.NO_MATCH) {
         // Operator hit so we require a value too.
         if (_peekIdentifier()) {
@@ -2158,7 +2158,7 @@
     var expressions = Expressions(_makeSpan(start));
 
     var keepGoing = true;
-    var expr;
+    dynamic expr;
     while (keepGoing && (expr = processTerm(ieFilter)) != null) {
       Expression op;
 
@@ -2242,7 +2242,7 @@
       [bool ieFilter = false]) {
     var start = _peekToken.span;
     Token t; // token for term's value
-    var value; // value of term (numeric values)
+    dynamic value; // value of term (numeric values)
 
     var unary = '';
     switch (_peek()) {
diff --git a/lib/src/analyzer.dart b/lib/src/analyzer.dart
index e9fd7c9..2f6d449 100644
--- a/lib/src/analyzer.dart
+++ b/lib/src/analyzer.dart
@@ -547,7 +547,7 @@
 /// Utility function to match an include to a list of either Declarations or
 /// RuleSets, depending on type of mixin (ruleset or declaration).  The include
 /// can be an include in a declaration or an include directive (top-level).
-int _findInclude(List list, var node) {
+int _findInclude(List list, TreeNode node) {
   IncludeDirective matchNode =
       (node is IncludeMixinAtDeclaration) ? node.include : node;
 
@@ -844,13 +844,13 @@
 
 /// @include as a top-level with ruleset(s).
 class _IncludeReplacer extends Visitor {
-  final _include;
+  final TreeNode _include;
   final List<TreeNode> _newDeclarations;
 
   /// Look for the [ruleSet] inside of a @media directive; if found then replace
   /// with the [newRules].
   static void replace(
-      StyleSheet ss, var include, List<TreeNode> newDeclarations) {
+      StyleSheet ss, TreeNode include, List<TreeNode> newDeclarations) {
     var visitor = _IncludeReplacer(include, newDeclarations);
     visitor.visitStyleSheet(ss);
   }
diff --git a/lib/src/polyfill.dart b/lib/src/polyfill.dart
index 2582bae..0c2ef04 100644
--- a/lib/src/polyfill.dart
+++ b/lib/src/polyfill.dart
@@ -174,7 +174,7 @@
     var result = <Expression>[];
 
     var varDef = _knownVarDefs[usage.name];
-    var expressions;
+    List<Expression> expressions;
     if (varDef == null) {
       // VarDefinition not found try the defaultValues.
       expressions = usage.defaultValues;
diff --git a/lib/src/token.dart b/lib/src/token.dart
index 7c5ef65..444b8ee 100644
--- a/lib/src/token.dart
+++ b/lib/src/token.dart
@@ -41,7 +41,7 @@
 
 /// A token containing a parsed literal value.
 class LiteralToken extends Token {
-  var value;
+  dynamic value;
   LiteralToken(int kind, FileSpan span, this.value) : super(kind, span);
 }
 
diff --git a/lib/src/tokenizer_base.dart b/lib/src/tokenizer_base.dart
index a648e62..5f22112 100644
--- a/lib/src/tokenizer_base.dart
+++ b/lib/src/tokenizer_base.dart
@@ -261,7 +261,7 @@
   }
 
   Token _makeRawStringToken(bool isMultiline) {
-    var s;
+    String s;
     if (isMultiline) {
       // Skip initial newline in multiline strings
       var start = _startIndex + 4;
diff --git a/lib/src/tree.dart b/lib/src/tree.dart
index b050442..8a17b53 100644
--- a/lib/src/tree.dart
+++ b/lib/src/tree.dart
@@ -171,7 +171,7 @@
 // All other selectors (element, #id, .class, attribute, pseudo, negation,
 // namespace, *) are derived from this selector.
 abstract class SimpleSelector extends TreeNode {
-  final _name; // Wildcard, ThisOperator, Identifier, Negation, others?
+  final dynamic _name; // Wildcard, ThisOperator, Identifier, Negation, others?
 
   SimpleSelector(this._name, SourceSpan span) : super(span);
 
@@ -200,7 +200,7 @@
 
 // namespace|element
 class NamespaceSelector extends SimpleSelector {
-  final _namespace; // null, Wildcard or Identifier
+  final dynamic _namespace; // null, Wildcard or Identifier
 
   NamespaceSelector(this._namespace, var name, SourceSpan span)
       : super(name, span);
@@ -1689,7 +1689,7 @@
 }
 
 class HeightExpression extends DartStyleExpression {
-  final height;
+  final dynamic height;
 
   HeightExpression(SourceSpan span, this.height)
       : super(DartStyleExpression.heightStyle, span);
@@ -1712,7 +1712,7 @@
 }
 
 class WidthExpression extends DartStyleExpression {
-  final width;
+  final dynamic width;
 
   WidthExpression(SourceSpan span, this.width)
       : super(DartStyleExpression.widthStyle, span);
