Merge branch 'master' of github.com:dart-lang/markdown

* 'master' of github.com:dart-lang/markdown:
  Use more lints – related fixes
diff --git a/.analysis_options b/.analysis_options
index a10d4c5..37b2ae0 100644
--- a/.analysis_options
+++ b/.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/bin/markdown.dart b/bin/markdown.dart
index b21e097..0df8040 100644
--- a/bin/markdown.dart
+++ b/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/example/app.dart b/example/app.dart
index ccb0de9..1e005b1 100644
--- a/example/app.dart
+++ b/example/app.dart
@@ -68,7 +68,7 @@
   markdownInput.onKeyUp.listen((_) {
     timer?.cancel();
   });
-  addCharacter() {
+  void addCharacter() {
     if (pos > msg.length) {
       return;
     }
diff --git a/lib/src/block_parser.dart b/lib/src/block_parser.dart
index ed24f50..91a368e 100644
--- a/lib/src/block_parser.dart
+++ b/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/lib/src/html_renderer.dart b/lib/src/html_renderer.dart
index 95ce7c1..f88f2c4 100644
--- a/lib/src/html_renderer.dart
+++ b/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/lib/src/inline_parser.dart b/lib/src/inline_parser.dart
index 7e53666..b942601 100644
--- a/lib/src/inline_parser.dart
+++ b/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/tool/common_mark_stats.dart b/tool/common_mark_stats.dart
index d25f4fa..dd09637 100644
--- a/tool/common_mark_stats.dart
+++ b/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/tool/dartdoc-compare.dart b/tool/dartdoc-compare.dart
index 5b9cff7..ca8ea30 100644
--- a/tool/dartdoc-compare.dart
+++ b/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();