diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..108d105
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1 @@
+include: package:pedantic/analysis_options.yaml
diff --git a/lib/src/generated/ascii_glyph_set.dart b/lib/src/generated/ascii_glyph_set.dart
index f470fe4..c233bf5 100644
--- a/lib/src/generated/ascii_glyph_set.dart
+++ b/lib/src/generated/ascii_glyph_set.dart
@@ -12,311 +12,372 @@
 
   /// Returns [glyph] if [this] supports Unicode glyphs and [alternative]
   /// otherwise.
+  @override
   String glyphOrAscii(String glyph, String alternative) => alternative;
 
   /// A bullet point.
   ///
-  /// Always "*" for [this].
-  String get bullet => "*";
+  /// Always '*' for [this].
+  @override
+  String get bullet => '*';
 
   /// A left-pointing arrow.
   ///
   /// Note that the Unicode arrow glyphs may overlap with adjacent characters in some
   /// terminal fonts, and should generally be surrounding by spaces.
   ///
-  /// Always "<" for [this].
-  String get leftArrow => "<";
+  /// Always '<' for [this].
+  @override
+  String get leftArrow => '<';
 
   /// A right-pointing arrow.
   ///
   /// Note that the Unicode arrow glyphs may overlap with adjacent characters in some
   /// terminal fonts, and should generally be surrounding by spaces.
   ///
-  /// Always ">" for [this].
-  String get rightArrow => ">";
+  /// Always '>' for [this].
+  @override
+  String get rightArrow => '>';
 
   /// An upwards-pointing arrow.
   ///
-  /// Always "^" for [this].
-  String get upArrow => "^";
+  /// Always '^' for [this].
+  @override
+  String get upArrow => '^';
 
   /// A downwards-pointing arrow.
   ///
-  /// Always "v" for [this].
-  String get downArrow => "v";
+  /// Always 'v' for [this].
+  @override
+  String get downArrow => 'v';
 
   /// A two-character left-pointing arrow.
   ///
-  /// Always "<=" for [this].
-  String get longLeftArrow => "<=";
+  /// Always '<=' for [this].
+  @override
+  String get longLeftArrow => '<=';
 
   /// A two-character right-pointing arrow.
   ///
-  /// Always "=>" for [this].
-  String get longRightArrow => "=>";
+  /// Always '=>' for [this].
+  @override
+  String get longRightArrow => '=>';
 
   /// A horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLine => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLine => '-';
 
   /// A vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLine => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLine => '|';
 
   /// The upper left-hand corner of a box.
   ///
-  /// Always "," for [this].
-  String get topLeftCorner => ",";
+  /// Always ',' for [this].
+  @override
+  String get topLeftCorner => ',';
 
   /// The upper right-hand corner of a box.
   ///
-  /// Always "," for [this].
-  String get topRightCorner => ",";
+  /// Always ',' for [this].
+  @override
+  String get topRightCorner => ',';
 
   /// The lower left-hand corner of a box.
   ///
   /// Always "'" for [this].
+  @override
   String get bottomLeftCorner => "'";
 
   /// The lower right-hand corner of a box.
   ///
   /// Always "'" for [this].
+  @override
   String get bottomRightCorner => "'";
 
   /// An intersection of vertical and horizontal box lines.
   ///
-  /// Always "+" for [this].
-  String get cross => "+";
+  /// Always '+' for [this].
+  @override
+  String get cross => '+';
 
   /// A horizontal box line with a vertical line going up from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeUp => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeUp => '+';
 
   /// A horizontal box line with a vertical line going down from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeDown => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeDown => '+';
 
   /// A vertical box line with a horizontal line going left from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeLeft => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeLeft => '+';
 
   /// A vertical box line with a horizontal line going right from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeRight => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeRight => '+';
 
   /// The top half of a vertical box line.
   ///
   /// Always "'" for [this].
+  @override
   String get upEnd => "'";
 
   /// The bottom half of a vertical box line.
   ///
-  /// Always "," for [this].
-  String get downEnd => ",";
+  /// Always ',' for [this].
+  @override
+  String get downEnd => ',';
 
   /// The left half of a horizontal box line.
   ///
-  /// Always "-" for [this].
-  String get leftEnd => "-";
+  /// Always '-' for [this].
+  @override
+  String get leftEnd => '-';
 
   /// The right half of a horizontal box line.
   ///
-  /// Always "-" for [this].
-  String get rightEnd => "-";
+  /// Always '-' for [this].
+  @override
+  String get rightEnd => '-';
 
   /// A bold horizontal line that can be used to draw a box.
   ///
-  /// Always "=" for [this].
-  String get horizontalLineBold => "=";
+  /// Always '=' for [this].
+  @override
+  String get horizontalLineBold => '=';
 
   /// A bold vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineBold => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineBold => '|';
 
   /// The bold upper left-hand corner of a box.
   ///
-  /// Always "," for [this].
-  String get topLeftCornerBold => ",";
+  /// Always ',' for [this].
+  @override
+  String get topLeftCornerBold => ',';
 
   /// The bold upper right-hand corner of a box.
   ///
-  /// Always "," for [this].
-  String get topRightCornerBold => ",";
+  /// Always ',' for [this].
+  @override
+  String get topRightCornerBold => ',';
 
   /// The bold lower left-hand corner of a box.
   ///
   /// Always "'" for [this].
+  @override
   String get bottomLeftCornerBold => "'";
 
   /// The bold lower right-hand corner of a box.
   ///
   /// Always "'" for [this].
+  @override
   String get bottomRightCornerBold => "'";
 
   /// An intersection of bold vertical and horizontal box lines.
   ///
-  /// Always "+" for [this].
-  String get crossBold => "+";
+  /// Always '+' for [this].
+  @override
+  String get crossBold => '+';
 
   /// A bold horizontal box line with a vertical line going up from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeUpBold => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeUpBold => '+';
 
   /// A bold horizontal box line with a vertical line going down from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeDownBold => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeDownBold => '+';
 
   /// A bold vertical box line with a horizontal line going left from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeLeftBold => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeLeftBold => '+';
 
   /// A bold vertical box line with a horizontal line going right from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeRightBold => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeRightBold => '+';
 
   /// The top half of a bold vertical box line.
   ///
   /// Always "'" for [this].
+  @override
   String get upEndBold => "'";
 
   /// The bottom half of a bold vertical box line.
   ///
-  /// Always "," for [this].
-  String get downEndBold => ",";
+  /// Always ',' for [this].
+  @override
+  String get downEndBold => ',';
 
   /// The left half of a bold horizontal box line.
   ///
-  /// Always "-" for [this].
-  String get leftEndBold => "-";
+  /// Always '-' for [this].
+  @override
+  String get leftEndBold => '-';
 
   /// The right half of a bold horizontal box line.
   ///
-  /// Always "-" for [this].
-  String get rightEndBold => "-";
+  /// Always '-' for [this].
+  @override
+  String get rightEndBold => '-';
 
   /// A double horizontal line that can be used to draw a box.
   ///
-  /// Always "=" for [this].
-  String get horizontalLineDouble => "=";
+  /// Always '=' for [this].
+  @override
+  String get horizontalLineDouble => '=';
 
   /// A double vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineDouble => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineDouble => '|';
 
   /// The double upper left-hand corner of a box.
   ///
-  /// Always "," for [this].
-  String get topLeftCornerDouble => ",";
+  /// Always ',' for [this].
+  @override
+  String get topLeftCornerDouble => ',';
 
   /// The double upper right-hand corner of a box.
   ///
-  /// Always "," for [this].
-  String get topRightCornerDouble => ",";
+  /// Always ',' for [this].
+  @override
+  String get topRightCornerDouble => ',';
 
   /// The double lower left-hand corner of a box.
   ///
   /// Always '"' for [this].
+  @override
   String get bottomLeftCornerDouble => '"';
 
   /// The double lower right-hand corner of a box.
   ///
   /// Always '"' for [this].
+  @override
   String get bottomRightCornerDouble => '"';
 
   /// An intersection of double vertical and horizontal box lines.
   ///
-  /// Always "+" for [this].
-  String get crossDouble => "+";
+  /// Always '+' for [this].
+  @override
+  String get crossDouble => '+';
 
   /// A double horizontal box line with a vertical line going up from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeUpDouble => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeUpDouble => '+';
 
   /// A double horizontal box line with a vertical line going down from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeDownDouble => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeDownDouble => '+';
 
   /// A double vertical box line with a horizontal line going left from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeLeftDouble => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeLeftDouble => '+';
 
   /// A double vertical box line with a horizontal line going right from the middle.
   ///
-  /// Always "+" for [this].
-  String get teeRightDouble => "+";
+  /// Always '+' for [this].
+  @override
+  String get teeRightDouble => '+';
 
   /// A dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLineDoubleDash => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLineDoubleDash => '-';
 
   /// A bold dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLineDoubleDashBold => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLineDoubleDashBold => '-';
 
   /// A dashed vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineDoubleDash => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineDoubleDash => '|';
 
   /// A bold dashed vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineDoubleDashBold => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineDoubleDashBold => '|';
 
   /// A dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLineTripleDash => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLineTripleDash => '-';
 
   /// A bold dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLineTripleDashBold => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLineTripleDashBold => '-';
 
   /// A dashed vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineTripleDash => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineTripleDash => '|';
 
   /// A bold dashed vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineTripleDashBold => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineTripleDashBold => '|';
 
   /// A dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLineQuadrupleDash => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLineQuadrupleDash => '-';
 
   /// A bold dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "-" for [this].
-  String get horizontalLineQuadrupleDashBold => "-";
+  /// Always '-' for [this].
+  @override
+  String get horizontalLineQuadrupleDashBold => '-';
 
   /// A dashed vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineQuadrupleDash => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineQuadrupleDash => '|';
 
   /// A bold dashed vertical line that can be used to draw a box.
   ///
-  /// Always "|" for [this].
-  String get verticalLineQuadrupleDashBold => "|";
+  /// Always '|' for [this].
+  @override
+  String get verticalLineQuadrupleDashBold => '|';
 }
diff --git a/lib/src/generated/glyph_set.dart b/lib/src/generated/glyph_set.dart
index 93676db..941da4f 100644
--- a/lib/src/generated/glyph_set.dart
+++ b/lib/src/generated/glyph_set.dart
@@ -14,17 +14,17 @@
 ///
 /// /// Adds a vertical line to the left of [text].
 /// ///
-/// /// If [ascii] is `true`, this uses plain ASCII for the line. If it's
-/// /// `false`, this uses Unicode characters. If it's `null`, it defaults
-/// /// to [glyph.ascii].
-/// void addVerticalLine(String text, {bool ascii}) {
+/// /// If [unicode] is `true`, this uses Unicode for the line. If it's
+/// /// `false`, this uses plain ASCII characters. If it's `null`, it
+/// /// defaults to [glyph.ascii].
+/// void addVerticalLine(String text, {bool unicode}) {
 ///   var glyphs =
-///       (ascii ?? glyph.ascii) ? glyph.asciiGlyphs : glyph.unicodeGlyphs;
+///       (unicode ?? !glyph.ascii) ? glyph.unicodeGlyphs : glyph.asciiGlyphs;
 ///
 ///   return text
-///       .split("\n")
-///       .map((line) => "${glyphs.verticalLine} $line")
-///       .join("\n");
+///       .split('\n')
+///       .map((line) => '${glyphs.verticalLine} $line')
+///       .join('\n');
 /// }
 /// ```
 abstract class GlyphSet {
diff --git a/lib/src/generated/unicode_glyph_set.dart b/lib/src/generated/unicode_glyph_set.dart
index 4e54068..bc6ad33 100644
--- a/lib/src/generated/unicode_glyph_set.dart
+++ b/lib/src/generated/unicode_glyph_set.dart
@@ -12,311 +12,372 @@
 
   /// Returns [glyph] if [this] supports Unicode glyphs and [alternative]
   /// otherwise.
+  @override
   String glyphOrAscii(String glyph, String alternative) => glyph;
 
   /// A bullet point.
   ///
-  /// Always "•" for [this].
-  String get bullet => "•";
+  /// Always '•' for [this].
+  @override
+  String get bullet => '•';
 
   /// A left-pointing arrow.
   ///
   /// Note that the Unicode arrow glyphs may overlap with adjacent characters in some
   /// terminal fonts, and should generally be surrounding by spaces.
   ///
-  /// Always "←" for [this].
-  String get leftArrow => "←";
+  /// Always '←' for [this].
+  @override
+  String get leftArrow => '←';
 
   /// A right-pointing arrow.
   ///
   /// Note that the Unicode arrow glyphs may overlap with adjacent characters in some
   /// terminal fonts, and should generally be surrounding by spaces.
   ///
-  /// Always "→" for [this].
-  String get rightArrow => "→";
+  /// Always '→' for [this].
+  @override
+  String get rightArrow => '→';
 
   /// An upwards-pointing arrow.
   ///
-  /// Always "↑" for [this].
-  String get upArrow => "↑";
+  /// Always '↑' for [this].
+  @override
+  String get upArrow => '↑';
 
   /// A downwards-pointing arrow.
   ///
-  /// Always "↓" for [this].
-  String get downArrow => "↓";
+  /// Always '↓' for [this].
+  @override
+  String get downArrow => '↓';
 
   /// A two-character left-pointing arrow.
   ///
-  /// Always "◀━" for [this].
-  String get longLeftArrow => "◀━";
+  /// Always '◀━' for [this].
+  @override
+  String get longLeftArrow => '◀━';
 
   /// A two-character right-pointing arrow.
   ///
-  /// Always "━▶" for [this].
-  String get longRightArrow => "━▶";
+  /// Always '━▶' for [this].
+  @override
+  String get longRightArrow => '━▶';
 
   /// A horizontal line that can be used to draw a box.
   ///
-  /// Always "─" for [this].
-  String get horizontalLine => "─";
+  /// Always '─' for [this].
+  @override
+  String get horizontalLine => '─';
 
   /// A vertical line that can be used to draw a box.
   ///
-  /// Always "│" for [this].
-  String get verticalLine => "│";
+  /// Always '│' for [this].
+  @override
+  String get verticalLine => '│';
 
   /// The upper left-hand corner of a box.
   ///
-  /// Always "┌" for [this].
-  String get topLeftCorner => "┌";
+  /// Always '┌' for [this].
+  @override
+  String get topLeftCorner => '┌';
 
   /// The upper right-hand corner of a box.
   ///
-  /// Always "┐" for [this].
-  String get topRightCorner => "┐";
+  /// Always '┐' for [this].
+  @override
+  String get topRightCorner => '┐';
 
   /// The lower left-hand corner of a box.
   ///
-  /// Always "└" for [this].
-  String get bottomLeftCorner => "└";
+  /// Always '└' for [this].
+  @override
+  String get bottomLeftCorner => '└';
 
   /// The lower right-hand corner of a box.
   ///
-  /// Always "┘" for [this].
-  String get bottomRightCorner => "┘";
+  /// Always '┘' for [this].
+  @override
+  String get bottomRightCorner => '┘';
 
   /// An intersection of vertical and horizontal box lines.
   ///
-  /// Always "┼" for [this].
-  String get cross => "┼";
+  /// Always '┼' for [this].
+  @override
+  String get cross => '┼';
 
   /// A horizontal box line with a vertical line going up from the middle.
   ///
-  /// Always "┴" for [this].
-  String get teeUp => "┴";
+  /// Always '┴' for [this].
+  @override
+  String get teeUp => '┴';
 
   /// A horizontal box line with a vertical line going down from the middle.
   ///
-  /// Always "┬" for [this].
-  String get teeDown => "┬";
+  /// Always '┬' for [this].
+  @override
+  String get teeDown => '┬';
 
   /// A vertical box line with a horizontal line going left from the middle.
   ///
-  /// Always "┤" for [this].
-  String get teeLeft => "┤";
+  /// Always '┤' for [this].
+  @override
+  String get teeLeft => '┤';
 
   /// A vertical box line with a horizontal line going right from the middle.
   ///
-  /// Always "├" for [this].
-  String get teeRight => "├";
+  /// Always '├' for [this].
+  @override
+  String get teeRight => '├';
 
   /// The top half of a vertical box line.
   ///
-  /// Always "╵" for [this].
-  String get upEnd => "╵";
+  /// Always '╵' for [this].
+  @override
+  String get upEnd => '╵';
 
   /// The bottom half of a vertical box line.
   ///
-  /// Always "╷" for [this].
-  String get downEnd => "╷";
+  /// Always '╷' for [this].
+  @override
+  String get downEnd => '╷';
 
   /// The left half of a horizontal box line.
   ///
-  /// Always "╴" for [this].
-  String get leftEnd => "╴";
+  /// Always '╴' for [this].
+  @override
+  String get leftEnd => '╴';
 
   /// The right half of a horizontal box line.
   ///
-  /// Always "╶" for [this].
-  String get rightEnd => "╶";
+  /// Always '╶' for [this].
+  @override
+  String get rightEnd => '╶';
 
   /// A bold horizontal line that can be used to draw a box.
   ///
-  /// Always "━" for [this].
-  String get horizontalLineBold => "━";
+  /// Always '━' for [this].
+  @override
+  String get horizontalLineBold => '━';
 
   /// A bold vertical line that can be used to draw a box.
   ///
-  /// Always "┃" for [this].
-  String get verticalLineBold => "┃";
+  /// Always '┃' for [this].
+  @override
+  String get verticalLineBold => '┃';
 
   /// The bold upper left-hand corner of a box.
   ///
-  /// Always "┏" for [this].
-  String get topLeftCornerBold => "┏";
+  /// Always '┏' for [this].
+  @override
+  String get topLeftCornerBold => '┏';
 
   /// The bold upper right-hand corner of a box.
   ///
-  /// Always "┓" for [this].
-  String get topRightCornerBold => "┓";
+  /// Always '┓' for [this].
+  @override
+  String get topRightCornerBold => '┓';
 
   /// The bold lower left-hand corner of a box.
   ///
-  /// Always "┗" for [this].
-  String get bottomLeftCornerBold => "┗";
+  /// Always '┗' for [this].
+  @override
+  String get bottomLeftCornerBold => '┗';
 
   /// The bold lower right-hand corner of a box.
   ///
-  /// Always "┛" for [this].
-  String get bottomRightCornerBold => "┛";
+  /// Always '┛' for [this].
+  @override
+  String get bottomRightCornerBold => '┛';
 
   /// An intersection of bold vertical and horizontal box lines.
   ///
-  /// Always "╋" for [this].
-  String get crossBold => "╋";
+  /// Always '╋' for [this].
+  @override
+  String get crossBold => '╋';
 
   /// A bold horizontal box line with a vertical line going up from the middle.
   ///
-  /// Always "┻" for [this].
-  String get teeUpBold => "┻";
+  /// Always '┻' for [this].
+  @override
+  String get teeUpBold => '┻';
 
   /// A bold horizontal box line with a vertical line going down from the middle.
   ///
-  /// Always "┳" for [this].
-  String get teeDownBold => "┳";
+  /// Always '┳' for [this].
+  @override
+  String get teeDownBold => '┳';
 
   /// A bold vertical box line with a horizontal line going left from the middle.
   ///
-  /// Always "┫" for [this].
-  String get teeLeftBold => "┫";
+  /// Always '┫' for [this].
+  @override
+  String get teeLeftBold => '┫';
 
   /// A bold vertical box line with a horizontal line going right from the middle.
   ///
-  /// Always "┣" for [this].
-  String get teeRightBold => "┣";
+  /// Always '┣' for [this].
+  @override
+  String get teeRightBold => '┣';
 
   /// The top half of a bold vertical box line.
   ///
-  /// Always "╹" for [this].
-  String get upEndBold => "╹";
+  /// Always '╹' for [this].
+  @override
+  String get upEndBold => '╹';
 
   /// The bottom half of a bold vertical box line.
   ///
-  /// Always "╻" for [this].
-  String get downEndBold => "╻";
+  /// Always '╻' for [this].
+  @override
+  String get downEndBold => '╻';
 
   /// The left half of a bold horizontal box line.
   ///
-  /// Always "╸" for [this].
-  String get leftEndBold => "╸";
+  /// Always '╸' for [this].
+  @override
+  String get leftEndBold => '╸';
 
   /// The right half of a bold horizontal box line.
   ///
-  /// Always "╺" for [this].
-  String get rightEndBold => "╺";
+  /// Always '╺' for [this].
+  @override
+  String get rightEndBold => '╺';
 
   /// A double horizontal line that can be used to draw a box.
   ///
-  /// Always "═" for [this].
-  String get horizontalLineDouble => "═";
+  /// Always '═' for [this].
+  @override
+  String get horizontalLineDouble => '═';
 
   /// A double vertical line that can be used to draw a box.
   ///
-  /// Always "║" for [this].
-  String get verticalLineDouble => "║";
+  /// Always '║' for [this].
+  @override
+  String get verticalLineDouble => '║';
 
   /// The double upper left-hand corner of a box.
   ///
-  /// Always "╔" for [this].
-  String get topLeftCornerDouble => "╔";
+  /// Always '╔' for [this].
+  @override
+  String get topLeftCornerDouble => '╔';
 
   /// The double upper right-hand corner of a box.
   ///
-  /// Always "╗" for [this].
-  String get topRightCornerDouble => "╗";
+  /// Always '╗' for [this].
+  @override
+  String get topRightCornerDouble => '╗';
 
   /// The double lower left-hand corner of a box.
   ///
-  /// Always "╚" for [this].
-  String get bottomLeftCornerDouble => "╚";
+  /// Always '╚' for [this].
+  @override
+  String get bottomLeftCornerDouble => '╚';
 
   /// The double lower right-hand corner of a box.
   ///
-  /// Always "╝" for [this].
-  String get bottomRightCornerDouble => "╝";
+  /// Always '╝' for [this].
+  @override
+  String get bottomRightCornerDouble => '╝';
 
   /// An intersection of double vertical and horizontal box lines.
   ///
-  /// Always "╬" for [this].
-  String get crossDouble => "╬";
+  /// Always '╬' for [this].
+  @override
+  String get crossDouble => '╬';
 
   /// A double horizontal box line with a vertical line going up from the middle.
   ///
-  /// Always "╩" for [this].
-  String get teeUpDouble => "╩";
+  /// Always '╩' for [this].
+  @override
+  String get teeUpDouble => '╩';
 
   /// A double horizontal box line with a vertical line going down from the middle.
   ///
-  /// Always "╦" for [this].
-  String get teeDownDouble => "╦";
+  /// Always '╦' for [this].
+  @override
+  String get teeDownDouble => '╦';
 
   /// A double vertical box line with a horizontal line going left from the middle.
   ///
-  /// Always "╣" for [this].
-  String get teeLeftDouble => "╣";
+  /// Always '╣' for [this].
+  @override
+  String get teeLeftDouble => '╣';
 
   /// A double vertical box line with a horizontal line going right from the middle.
   ///
-  /// Always "╠" for [this].
-  String get teeRightDouble => "╠";
+  /// Always '╠' for [this].
+  @override
+  String get teeRightDouble => '╠';
 
   /// A dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "╌" for [this].
-  String get horizontalLineDoubleDash => "╌";
+  /// Always '╌' for [this].
+  @override
+  String get horizontalLineDoubleDash => '╌';
 
   /// A bold dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "╍" for [this].
-  String get horizontalLineDoubleDashBold => "╍";
+  /// Always '╍' for [this].
+  @override
+  String get horizontalLineDoubleDashBold => '╍';
 
   /// A dashed vertical line that can be used to draw a box.
   ///
-  /// Always "╎" for [this].
-  String get verticalLineDoubleDash => "╎";
+  /// Always '╎' for [this].
+  @override
+  String get verticalLineDoubleDash => '╎';
 
   /// A bold dashed vertical line that can be used to draw a box.
   ///
-  /// Always "╏" for [this].
-  String get verticalLineDoubleDashBold => "╏";
+  /// Always '╏' for [this].
+  @override
+  String get verticalLineDoubleDashBold => '╏';
 
   /// A dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "┄" for [this].
-  String get horizontalLineTripleDash => "┄";
+  /// Always '┄' for [this].
+  @override
+  String get horizontalLineTripleDash => '┄';
 
   /// A bold dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "┅" for [this].
-  String get horizontalLineTripleDashBold => "┅";
+  /// Always '┅' for [this].
+  @override
+  String get horizontalLineTripleDashBold => '┅';
 
   /// A dashed vertical line that can be used to draw a box.
   ///
-  /// Always "┆" for [this].
-  String get verticalLineTripleDash => "┆";
+  /// Always '┆' for [this].
+  @override
+  String get verticalLineTripleDash => '┆';
 
   /// A bold dashed vertical line that can be used to draw a box.
   ///
-  /// Always "┇" for [this].
-  String get verticalLineTripleDashBold => "┇";
+  /// Always '┇' for [this].
+  @override
+  String get verticalLineTripleDashBold => '┇';
 
   /// A dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "┈" for [this].
-  String get horizontalLineQuadrupleDash => "┈";
+  /// Always '┈' for [this].
+  @override
+  String get horizontalLineQuadrupleDash => '┈';
 
   /// A bold dashed horizontal line that can be used to draw a box.
   ///
-  /// Always "┉" for [this].
-  String get horizontalLineQuadrupleDashBold => "┉";
+  /// Always '┉' for [this].
+  @override
+  String get horizontalLineQuadrupleDashBold => '┉';
 
   /// A dashed vertical line that can be used to draw a box.
   ///
-  /// Always "┊" for [this].
-  String get verticalLineQuadrupleDash => "┊";
+  /// Always '┊' for [this].
+  @override
+  String get verticalLineQuadrupleDash => '┊';
 
   /// A bold dashed vertical line that can be used to draw a box.
   ///
-  /// Always "┋" for [this].
-  String get verticalLineQuadrupleDashBold => "┋";
+  /// Always '┋' for [this].
+  @override
+  String get verticalLineQuadrupleDashBold => '┋';
 }
diff --git a/test/symbol_test.dart b/test/symbol_test.dart
index 1e665e8..22993a7 100644
--- a/test/symbol_test.dart
+++ b/test/symbol_test.dart
@@ -7,55 +7,55 @@
 import 'package:term_glyph/term_glyph.dart' as glyph;
 
 void main() {
-  group("with ascii = false", () {
+  group('with ascii = false', () {
     setUpAll(() {
       glyph.ascii = false;
     });
 
-    test("glyph getters return Unicode versions", () {
-      expect(glyph.topLeftCorner, equals("┌"));
-      expect(glyph.teeUpBold, equals("┻"));
-      expect(glyph.longLeftArrow, equals("◀━"));
+    test('glyph getters return Unicode versions', () {
+      expect(glyph.topLeftCorner, equals('┌'));
+      expect(glyph.teeUpBold, equals('┻'));
+      expect(glyph.longLeftArrow, equals('◀━'));
     });
 
-    test("glyphOrAscii returns the first argument", () {
-      expect(glyph.glyphOrAscii("A", "B"), equals("A"));
+    test('glyphOrAscii returns the first argument', () {
+      expect(glyph.glyphOrAscii('A', 'B'), equals('A'));
     });
 
-    test("glyphs returns unicodeGlyphs", () {
+    test('glyphs returns unicodeGlyphs', () {
       expect(glyph.glyphs, equals(glyph.unicodeGlyphs));
     });
 
-    test("asciiGlyphs still returns ASCII characters", () {
-      expect(glyph.asciiGlyphs.topLeftCorner, equals(","));
-      expect(glyph.asciiGlyphs.teeUpBold, equals("+"));
-      expect(glyph.asciiGlyphs.longLeftArrow, equals("<="));
+    test('asciiGlyphs still returns ASCII characters', () {
+      expect(glyph.asciiGlyphs.topLeftCorner, equals(','));
+      expect(glyph.asciiGlyphs.teeUpBold, equals('+'));
+      expect(glyph.asciiGlyphs.longLeftArrow, equals('<='));
     });
   });
 
-  group("with ascii = true", () {
+  group('with ascii = true', () {
     setUpAll(() {
       glyph.ascii = true;
     });
 
-    test("glyphs return ASCII versions", () {
-      expect(glyph.topLeftCorner, equals(","));
-      expect(glyph.teeUpBold, equals("+"));
-      expect(glyph.longLeftArrow, equals("<="));
+    test('glyphs return ASCII versions', () {
+      expect(glyph.topLeftCorner, equals(','));
+      expect(glyph.teeUpBold, equals('+'));
+      expect(glyph.longLeftArrow, equals('<='));
     });
 
-    test("glyphOrAscii returns the second argument", () {
-      expect(glyph.glyphOrAscii("A", "B"), equals("B"));
+    test('glyphOrAscii returns the second argument', () {
+      expect(glyph.glyphOrAscii('A', 'B'), equals('B'));
     });
 
-    test("glyphs returns asciiGlyphs", () {
+    test('glyphs returns asciiGlyphs', () {
       expect(glyph.glyphs, equals(glyph.asciiGlyphs));
     });
 
-    test("unicodeGlyphs still returns Unicode characters", () {
-      expect(glyph.unicodeGlyphs.topLeftCorner, equals("┌"));
-      expect(glyph.unicodeGlyphs.teeUpBold, equals("┻"));
-      expect(glyph.unicodeGlyphs.longLeftArrow, equals("◀━"));
+    test('unicodeGlyphs still returns Unicode characters', () {
+      expect(glyph.unicodeGlyphs.topLeftCorner, equals('┌'));
+      expect(glyph.unicodeGlyphs.teeUpBold, equals('┻'));
+      expect(glyph.unicodeGlyphs.longLeftArrow, equals('◀━'));
     });
   });
 }
diff --git a/tool/generate.dart b/tool/generate.dart
index 370994f..04a919b 100644
--- a/tool/generate.dart
+++ b/tool/generate.dart
@@ -8,13 +8,13 @@
 import 'package:meta/meta.dart';
 
 void main() {
-  var csv = CsvCodec(eol: "\n");
-  var data = csv.decoder.convert(File("data.csv").readAsStringSync());
+  var csv = CsvCodec(eol: '\n');
+  var data = csv.decoder.convert(File('data.csv').readAsStringSync());
 
   // Remove comments and empty lines.
   data.removeWhere((row) => row.length < 3);
 
-  Directory("lib/src/generated").createSync(recursive: true);
+  Directory('lib/src/generated').createSync(recursive: true);
 
   _writeGlyphSetInterface(data);
   _writeGlyphSet(data, ascii: false);
@@ -22,7 +22,7 @@
   _writeTopLevel(data);
 
   var result = Process.runSync(
-      "pub", ["run", "dart_style:format", "-w", "lib/src/generated"]);
+      'pub', ['run', 'dart_style:format', '-w', 'lib/src/generated']);
   print(result.stderr);
   exit(result.exitCode);
 }
@@ -30,8 +30,8 @@
 /// Writes `lib/src/generated/glyph_set.dart`.
 void _writeGlyphSetInterface(List<List> data) {
   var file =
-      File("lib/src/generated/glyph_set.dart").openSync(mode: FileMode.write);
-  file.writeStringSync(r"""
+      File('lib/src/generated/glyph_set.dart').openSync(mode: FileMode.write);
+  file.writeStringSync(r'''
     // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
     // for details. All rights reserved. Use of this source code is governed by a
     // BSD-style license that can be found in the LICENSE file.
@@ -56,26 +56,26 @@
     ///       (unicode ?? !glyph.ascii) ? glyph.unicodeGlyphs : glyph.asciiGlyphs;
     ///
     ///   return text
-    ///       .split("\n")
-    ///       .map((line) => "${glyphs.verticalLine} $line")
-    ///       .join("\n");
+    ///       .split('\n')
+    ///       .map((line) => '${glyphs.verticalLine} $line')
+    ///       .join('\n');
     /// }
     /// ```
     abstract class GlyphSet {
       /// Returns [glyph] if [this] supports Unicode glyphs and [alternative]
       /// otherwise.
       String glyphOrAscii(String glyph, String alternative);
-  """);
+  ''');
 
   for (var glyph in data) {
-    for (var line in glyph[3].split("\n")) {
-      file.writeStringSync("/// $line\n");
+    for (var line in glyph[3].split('\n')) {
+      file.writeStringSync('/// $line\n');
     }
 
-    file.writeStringSync("String get ${glyph[0]};");
+    file.writeStringSync('String get ${glyph[0]};');
   }
 
-  file.writeStringSync("}");
+  file.writeStringSync('}');
   file.closeSync();
 }
 
@@ -85,11 +85,11 @@
 /// the Unicode glyph set.
 void _writeGlyphSet(List<List> data, {@required bool ascii}) {
   var file =
-      File("lib/src/generated/${ascii ? "ascii" : "unicode"}_glyph_set.dart")
+      File('lib/src/generated/${ascii ? "ascii" : "unicode"}_glyph_set.dart')
           .openSync(mode: FileMode.write);
 
-  var className = "${ascii ? "Ascii" : "Unicode"}GlyphSet";
-  file.writeStringSync("""
+  var className = '${ascii ? "Ascii" : "Unicode"}GlyphSet';
+  file.writeStringSync('''
     // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
     // for details. All rights reserved. Use of this source code is governed by a
     // BSD-style license that can be found in the LICENSE file.
@@ -103,33 +103,35 @@
       const $className();
       /// Returns [glyph] if [this] supports Unicode glyphs and [alternative]
       /// otherwise.
+      @override
       String glyphOrAscii(String glyph, String alternative) =>
           ${ascii ? "alternative" : "glyph"};
-  """);
+  ''');
 
   var index = ascii ? 2 : 1;
   for (var glyph in data) {
-    for (var line in glyph[3].split("\n")) {
-      file.writeStringSync("/// $line\n");
+    for (var line in glyph[3].split('\n')) {
+      file.writeStringSync('/// $line\n');
     }
 
-    file.writeStringSync("""
+    file.writeStringSync('''
       ///
       /// Always ${_quote(glyph[index])} for [this].
+      @override
       String get ${glyph[0]} => ${_quote(glyph[index])};
-    """);
+    ''');
   }
 
-  file.writeStringSync("}");
+  file.writeStringSync('}');
   file.closeSync();
 }
 
 /// Writes `lib/src/generated/top_level.dart`.
 void _writeTopLevel(List<List> data) {
   var file =
-      File("lib/src/generated/top_level.dart").openSync(mode: FileMode.write);
+      File('lib/src/generated/top_level.dart').openSync(mode: FileMode.write);
 
-  file.writeStringSync("""
+  file.writeStringSync('''
     // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
     // for details. All rights reserved. Use of this source code is governed by a
     // BSD-style license that can be found in the LICENSE file.
@@ -137,22 +139,22 @@
     // Don't modify this file by hand! It's generated by tool/generate.dart.
 
     import '../../term_glyph.dart' as glyph;
-  """);
+  ''');
 
   for (var glyph in data) {
-    for (var line in glyph[3].split("\n")) {
-      file.writeStringSync("/// $line\n");
+    for (var line in glyph[3].split('\n')) {
+      file.writeStringSync('/// $line\n');
     }
 
-    file.writeStringSync("""
+    file.writeStringSync('''
       ///
       /// If [ascii] is `false`, this is "${glyph[1]}". If it's `true`, this is
       /// "${glyph[2]}" instead.
       String get ${glyph[0]} => glyph.glyphs.${glyph[0]};
-    """);
+    ''');
   }
 
   file.closeSync();
 }
 
-String _quote(String input) => input.contains('"') ? "'$input'" : '"$input"';
+String _quote(String input) => input.contains("'") ? '"$input"' : "'$input'";
