diff --git a/pkgs/markdown/.analysis_options b/pkgs/markdown/.analysis_options
index a10d4c5..37b2ae0 100644
--- a/pkgs/markdown/.analysis_options
+++ b/pkgs/markdown/.analysis_options
@@ -1,2 +1,49 @@
 analyzer:
   strong-mode: true
+linter:
+  rules:
+    - always_declare_return_types
+    #- always_specify_types
+    #- annotate_overrides
+    #- avoid_as
+    - avoid_empty_else
+    - avoid_init_to_null
+    - avoid_return_types_on_setters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - close_sinks
+    #- comment_references
+    - constant_identifier_names
+    - control_flow_in_finally
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - hash_and_equals
+    #- implementation_imports
+    - iterable_contains_unrelated_type
+    - library_names
+    - library_prefixes
+    - list_remove_unrelated_type
+    #- non_constant_identifier_names
+    #- one_member_abstracts
+    #- only_throw_errors
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_is_not_empty
+    #- public_member_api_docs
+    - slash_for_doc_comments
+    #- sort_constructors_first
+    #- sort_unnamed_constructors_first
+    - super_goes_last
+    - test_types_in_equals
+    - throw_in_finally
+    #- type_annotate_public_apis
+    - type_init_formals
+    #- unawaited_futures
+    #- unnecessary_brace_in_string_interp
+    #- unnecessary_getters_setters
+    - unrelated_type_equality_checks
+    - valid_regexps
diff --git a/pkgs/markdown/bin/markdown.dart b/pkgs/markdown/bin/markdown.dart
index b21e097..0df8040 100644
--- a/pkgs/markdown/bin/markdown.dart
+++ b/pkgs/markdown/bin/markdown.dart
@@ -1,8 +1,9 @@
+import 'dart:async';
 import 'dart:io';
 
 import 'package:markdown/markdown.dart';
 
-main(List<String> args) async {
+Future main(List<String> args) async {
   if (args.length > 1) {
     print('Usage: markdown.dart [file]');
     exit(1);
@@ -27,7 +28,7 @@
   print(markdownToHtml(buffer.toString()));
 }
 
-usage() {
+void usage() {
   print('''Usage:
     markdown [markdown file]
         Convert [markdown-file] from Markdown to HTML. If no file is passed on
diff --git a/pkgs/markdown/example/app.dart b/pkgs/markdown/example/app.dart
index ccb0de9..1e005b1 100644
--- a/pkgs/markdown/example/app.dart
+++ b/pkgs/markdown/example/app.dart
@@ -68,7 +68,7 @@
   markdownInput.onKeyUp.listen((_) {
     timer?.cancel();
   });
-  addCharacter() {
+  void addCharacter() {
     if (pos > msg.length) {
       return;
     }
diff --git a/pkgs/markdown/lib/src/block_parser.dart b/pkgs/markdown/lib/src/block_parser.dart
index ed24f50..91a368e 100644
--- a/pkgs/markdown/lib/src/block_parser.dart
+++ b/pkgs/markdown/lib/src/block_parser.dart
@@ -588,24 +588,24 @@
     var items = <ListItem>[];
     var childLines = <String>[];
 
-    endItem() {
+    void endItem() {
       if (childLines.length > 0) {
         items.add(new ListItem(childLines));
         childLines = <String>[];
       }
     }
 
-    var match;
-    tryMatch(RegExp pattern) {
+    Match match;
+    bool tryMatch(RegExp pattern) {
       match = pattern.firstMatch(parser.current);
       return match != null;
     }
 
-    var listMarker = null;
-    var indent;
+    String listMarker;
+    String indent;
     // In case the first number in an ordered list is not 1, use it as the
     // "start".
-    var startNumber;
+    int startNumber;
 
     while (!parser.isDone) {
       if (tryMatch(_emptyPattern)) {
diff --git a/pkgs/markdown/lib/src/html_renderer.dart b/pkgs/markdown/lib/src/html_renderer.dart
index 95ce7c1..f88f2c4 100644
--- a/pkgs/markdown/lib/src/html_renderer.dart
+++ b/pkgs/markdown/lib/src/html_renderer.dart
@@ -62,7 +62,7 @@
 
   bool visitElementBefore(Element element) {
     // Hackish. Separate block-level elements with newlines.
-    if (!buffer.isEmpty && _blockTags.firstMatch(element.tag) != null) {
+    if (buffer.isNotEmpty && _blockTags.firstMatch(element.tag) != null) {
       buffer.write('\n');
     }
 
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart
index 7e53666..b942601 100644
--- a/pkgs/markdown/lib/src/inline_parser.dart
+++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -289,7 +289,7 @@
   /// This handles both reference-style and inline-style links as well as
   /// optional titles for inline links. To make that a bit more palatable, this
   /// breaks it into pieces.
-  static get linkPattern {
+  static String get linkPattern {
     var refLink = r'\[([^\]]*)\]'; // `[id]` reflink id.
     var title = r'(?:\s*"([^"]+?)"\s*|)'; // Optional title in quotes.
     var inlineLink = '\\((\\S*?)$title\\)'; // `(url "title")` link.
diff --git a/pkgs/markdown/tool/common_mark_stats.dart b/pkgs/markdown/tool/common_mark_stats.dart
index d25f4fa..dd09637 100644
--- a/pkgs/markdown/tool/common_mark_stats.dart
+++ b/pkgs/markdown/tool/common_mark_stats.dart
@@ -18,7 +18,7 @@
 String get _currentDir => p
     .dirname((reflect(main) as ClosureMirror).function.location.sourceUri.path);
 
-main(List<String> args) async {
+Future main(List<String> args) async {
   final parser = new ArgParser()
     ..addOption('section',
         help: 'Restrict tests to one section, provided after the option.')
@@ -132,7 +132,7 @@
 
 enum CompareLevel { strict, loose, fail, error }
 
-_convert(obj) {
+Object _convert(obj) {
   if (obj is CompareLevel) {
     switch (obj) {
       case CompareLevel.strict:
diff --git a/pkgs/markdown/tool/dartdoc-compare.dart b/pkgs/markdown/tool/dartdoc-compare.dart
index 5b9cff7..ca8ea30 100644
--- a/pkgs/markdown/tool/dartdoc-compare.dart
+++ b/pkgs/markdown/tool/dartdoc-compare.dart
@@ -6,16 +6,16 @@
 import 'package:yaml/yaml.dart' show loadYaml;
 
 int main(List<String> arguments) {
-  const dartdoc_dir = 'dartdoc-dir';
-  const markdown_before = 'before';
-  const markdown_after = 'after';
+  const dartdocDir = 'dartdoc-dir';
+  const markdownBefore = 'before';
+  const markdownAfter = 'after';
   const sdk = 'sdk';
   const help = 'help';
   final parser = new ArgParser()
     ..addSeparator("Usage: dartdoc-compare.dart [OPTIONS] <dart-package>")
-    ..addOption(dartdoc_dir, help: "Directory of the dartdoc package")
-    ..addOption(markdown_before, help: "Markdown package 'before' ref")
-    ..addOption(markdown_after,
+    ..addOption(dartdocDir, help: "Directory of the dartdoc package")
+    ..addOption(markdownBefore, help: "Markdown package 'before' ref")
+    ..addOption(markdownAfter,
         defaultsTo: "HEAD", help: "Markdown package 'after' ref")
     ..addFlag(sdk,
         defaultsTo: false, negatable: false, help: "Is the package the SDK?")
@@ -25,18 +25,18 @@
     print(parser.usage);
     return 0;
   }
-  if (options[dartdoc_dir] == null || options[markdown_before] == null) {
+  if (options[dartdocDir] == null || options[markdownBefore] == null) {
     print(
-        "Invalid arguments: Options --$dartdoc_dir and --$markdown_before must be specified");
+        "Invalid arguments: Options --$dartdocDir and --$markdownBefore must be specified");
     print(parser.usage);
     return 1;
   }
   var comparer = new DartdocCompare()
-    ..dartdoc_dir = options[dartdoc_dir]
-    ..markdown_before = options[markdown_before]
-    ..markdown_after = options[markdown_after]
-    ..dartdoc_bin = absolute(options[dartdoc_dir], "bin/dartdoc.dart")
-    ..dartdoc_pubspec_path = absolute(options[dartdoc_dir], "pubspec.yaml")
+    ..dartdoc_dir = options[dartdocDir]
+    ..markdown_before = options[markdownBefore]
+    ..markdown_after = options[markdownAfter]
+    ..dartdoc_bin = absolute(options[dartdocDir], "bin/dartdoc.dart")
+    ..dartdoc_pubspec_path = absolute(options[dartdocDir], "pubspec.yaml")
     ..sdk = options[sdk];
 
   var package = options.rest.first;
@@ -65,7 +65,7 @@
     var nlines = "\n".allMatches(result.stdout).length;
     print("Diff lines: ${ nlines }");
     print("diff ${diffOptions.join(" ")}");
-    return result == 0;
+    return result.exitCode == 0;
   }
 
   String run_dartdoc(markdown_ref, package) {
@@ -90,7 +90,7 @@
     });
   }
 
-  update_dartdoc_pubspec(markdown_ref) {
+  int update_dartdoc_pubspec(markdown_ref) {
     var dartdoc_pubspec =
         loadYaml(new File(dartdoc_pubspec_path).readAsStringSync());
     // make modifiable copy
@@ -108,14 +108,14 @@
     return system('pub', ['get']);
   }
 
-  static system(String cmd, List<String> args) {
+  static int system(String cmd, List<String> args) {
     var result = Process.runSync(cmd, args);
     print(result.stdout);
     print(result.stderr);
     return result.exitCode;
   }
 
-  static doInPath(String path, Function f) {
+  static Object doInPath(String path, Function f) {
     var former = Directory.current.path;
     Directory.current = path;
     var result = f();
