lint cleanup (#456)

diff --git a/analysis_options.yaml b/analysis_options.yaml
index 8dc8263..4190e9a 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -20,10 +20,12 @@
     - directives_ordering
     - only_throw_errors
     - package_api_docs
+    - prefer_const_declarations
+    - prefer_final_locals
+    - prefer_single_quotes
     - test_types_in_equals
     - throw_in_finally
-    - prefer_final_locals
+    - unnecessary_raw_strings
     - use_if_null_to_convert_nulls_to_bools
     - use_raw_strings
     - use_super_parameters
-    - unnecessary_raw_strings
diff --git a/lib/src/inline_syntaxes/code_syntax.dart b/lib/src/inline_syntaxes/code_syntax.dart
index efc415d..afd6371 100644
--- a/lib/src/inline_syntaxes/code_syntax.dart
+++ b/lib/src/inline_syntaxes/code_syntax.dart
@@ -20,7 +20,7 @@
   //
   // This conforms to the delimiters of inline code, both in Markdown.pl, and
   // CommonMark.
-  static final String _pattern = r'(`+(?!`))((?:.|\n)*?[^`])\1(?!`)';
+  static const _pattern = r'(`+(?!`))((?:.|\n)*?[^`])\1(?!`)';
 
   CodeSyntax() : super(_pattern);
 
diff --git a/lib/src/inline_syntaxes/color_swatch_syntax.dart b/lib/src/inline_syntaxes/color_swatch_syntax.dart
index 0998d74..e44fdbf 100644
--- a/lib/src/inline_syntaxes/color_swatch_syntax.dart
+++ b/lib/src/inline_syntaxes/color_swatch_syntax.dart
@@ -35,7 +35,7 @@
   /// * `hsl(540,70%,50%)`
   /// * `HSLA(540,70%,50%,0.3)`
   /// * `Hsla(540,70%,50%,0.3)`
-  static final String _pattern =
+  static const _pattern =
       '`((#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8}))|'
       r'([Rr][Gg][Bb][Aa]?\((\d+[%]?),(\d+[%]?),(\d+[%]?),?(\d+\.?\d+[%]?)?\))|'
       r'([Hh][Ss][Ll][Aa]?\((\d+[%]?),(\d+[%]?),(\d+[%]?),?(\d+\.?\d+[%]?)?\)))`';
diff --git a/lib/src/inline_syntaxes/delimiter_syntax.dart b/lib/src/inline_syntaxes/delimiter_syntax.dart
index 7b48ce2..4c71b17 100644
--- a/lib/src/inline_syntaxes/delimiter_syntax.dart
+++ b/lib/src/inline_syntaxes/delimiter_syntax.dart
@@ -217,7 +217,7 @@
       ']');
 
   // TODO(srawlins): Unicode whitespace
-  static final String whitespace = ' \t\r\n';
+  static const whitespace = ' \t\r\n';
 
   @override
   Text node;
diff --git a/lib/src/inline_syntaxes/email_autolink_syntax.dart b/lib/src/inline_syntaxes/email_autolink_syntax.dart
index f5b5962..e7b90ff 100644
--- a/lib/src/inline_syntaxes/email_autolink_syntax.dart
+++ b/lib/src/inline_syntaxes/email_autolink_syntax.dart
@@ -12,7 +12,7 @@
 ///
 /// See <http://spec.commonmark.org/0.28/#email-address>.
 class EmailAutolinkSyntax extends InlineSyntax {
-  static final _email =
+  static const _email =
       r'''[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}'''
       r'''[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*''';
 
diff --git a/test/document_test.dart b/test/document_test.dart
index 8a26900..42ca40f 100644
--- a/test/document_test.dart
+++ b/test/document_test.dart
@@ -54,7 +54,7 @@
 
       test('encodeHtml spaces are preserved in text', () {
         // Example to get a <p> tag rendered before a text node.
-        final contents = 'Sample\n\n<pre>\n A\n B\n</pre>';
+        const contents = 'Sample\n\n<pre>\n A\n B\n</pre>';
         final document = Document(encodeHtml: true);
         final lines = LineSplitter.split(contents).toList();
         final nodes = BlockParser(lines, document).parseLines();
@@ -64,7 +64,7 @@
 
       test('encode double quotes, greater than, and less than when escaped',
           () {
-        final contents = r'\>\"\< Hello';
+        const contents = r'\>\"\< Hello';
         final document = Document(encodeHtml: true);
         final nodes = document.parseInline(contents);
         expect(nodes, hasLength(1));
@@ -113,7 +113,7 @@
       });
 
       test('leave double quotes, greater than, and less than when escaped', () {
-        final contents = r'\>\"\< Hello';
+        const contents = r'\>\"\< Hello';
         final document = Document(encodeHtml: false);
         final nodes = document.parseInline(contents);
         expect(nodes, hasLength(1));
diff --git a/tool/dartdoc_compare.dart b/tool/dartdoc_compare.dart
index e0195ba..7186d79 100644
--- a/tool/dartdoc_compare.dart
+++ b/tool/dartdoc_compare.dart
@@ -121,7 +121,7 @@
       }
       final out = Directory.systemTemp
           .createTempSync('dartdoc-compare-${markdownRef}__');
-      final cmd = 'dart';
+      const cmd = 'dart';
       final args = [dartdocBin, '--output=${out.path}'];
 
       if (sdk) {
diff --git a/tool/stats.dart b/tool/stats.dart
index a212e6c..d09b0df 100644
--- a/tool/stats.dart
+++ b/tool/stats.dart
@@ -220,7 +220,7 @@
     sink = stdout;
   }
 
-  final encoder = const JsonEncoder.withIndent(' ', _convert);
+  const encoder = JsonEncoder.withIndent(' ', _convert);
   try {
     sink.writeln(encoder.convert(scores));
   } on JsonUnsupportedObjectError catch (e) {
diff --git a/tool/update_blns.dart b/tool/update_blns.dart
index b48b8a7..1f50e36 100644
--- a/tool/update_blns.dart
+++ b/tool/update_blns.dart
@@ -2,9 +2,9 @@
 import 'dart:convert';
 import 'dart:io';
 
-final _blnsJsonRawUrl =
+const _blnsJsonRawUrl =
     'https://github.com/minimaxir/big-list-of-naughty-strings/raw/master/blns.json';
-final _blnsFilePath = 'test/blns.dart';
+const _blnsFilePath = 'test/blns.dart';
 
 Future<void> main() async {
   final client = HttpClient();
diff --git a/tool/update_emojis.dart b/tool/update_emojis.dart
index 6b11e7a..396be33 100644
--- a/tool/update_emojis.dart
+++ b/tool/update_emojis.dart
@@ -9,9 +9,9 @@
 // update_github_emojis.dart now generates the emoji list using the GitHub API
 // to retrieve the emoji list.  It uses this emoji source as a source to keep
 // binary compatibility with the Unicode sequences for each emoji found here.
-final _emojisJsonRawUrl =
+const _emojisJsonRawUrl =
     'https://raw.githubusercontent.com/muan/emojilib/v2.4.0/emojis.json';
-final _emojisFilePath = 'lib/src/legacy_emojis.dart';
+const _emojisFilePath = 'lib/src/legacy_emojis.dart';
 
 Future<void> main() async {
   final client = HttpClient();
diff --git a/tool/update_github_emojis.dart b/tool/update_github_emojis.dart
index 5431d31..5fbf60c 100644
--- a/tool/update_github_emojis.dart
+++ b/tool/update_github_emojis.dart
@@ -26,11 +26,11 @@
 /// The 'cricket' emoji changes from `🏏` to `🦗`, legacy available as 'cricket_game'.
 /// (if the -g flag us used to force using the GitHub Unicode sequences for the
 /// emoji then additionally the 'email' emoji changes from '✉️' to '📧').
-final _emojisJsonRawUrl = 'https://api.github.com/emojis';
-final _emojisFilePath = 'lib/src/emojis.dart';
+const _emojisJsonRawUrl = 'https://api.github.com/emojis';
+const _emojisFilePath = 'lib/src/emojis.dart';
 
 /// Reference to emoji map within legacy_emojis.dart
-final legacyEmojis = legacy.emojis;
+const legacyEmojis = legacy.emojis;
 
 /// AUTO GENERATED by [reconcile_emojis.dart] - this only needed to be done ONCE
 /// during the reconciliation process with the legacy emoji.