diff --git a/benchmark/after.dart.txt b/benchmark/after.dart.txt
index 8b8ec92..30a35b1 100644
--- a/benchmark/after.dart.txt
+++ b/benchmark/after.dart.txt
@@ -133,10 +133,10 @@
   /// packages.
   final _forceLatest = new Set<String>();
 
-  /// The set of packages whose dependecy is being overridden by the root
+  /// The set of packages whose dependency is being overridden by the root
   /// package, keyed by the name of the package.
   ///
-  /// Any dependency on a package that appears in this map will be overriden
+  /// Any dependency on a package that appears in this map will be overridden
   /// to use the one here.
   final _overrides = new Map<String, PackageDep>();
 
@@ -259,8 +259,8 @@
   /// Generates a map containing all of the known available versions for each
   /// package in [packages].
   ///
-  /// The version list may not always be complete. The the package is the root
-  /// root package, or its a package that we didn't unlock while solving
+  /// The version list may not always be complete. The package is the root
+  /// root package, or it's a package that we didn't unlock while solving
   /// because we weren't trying to upgrade it, we will just know the current
   /// version.
   Map<String, List<Version>> _getAvailableVersions(List<PackageId> packages) {
@@ -286,7 +286,7 @@
   /// package, to the set of versions to consider for solutions.
   ///
   /// The first item in the list will be the currently selected version of that
-  /// package. Subsequent items will be tried if it the current selection fails.
+  /// package. Subsequent items will be tried if the current selection fails.
   /// Returns the first selected version.
   PackageId select(VersionQueue versions) {
     _selected.add(versions);
@@ -294,7 +294,7 @@
     return versions.current;
   }
 
-  /// Returns the the currently selected id for the package [name] or `null` if
+  /// Returns the currently selected id for the package [name] or `null` if
   /// no concrete version has been selected for that package yet.
   PackageId getSelected(String name) {
     // Always prefer the root package.
@@ -629,7 +629,7 @@
 
   /// Traverses the references that [depender] depends on, stored in [deps].
   ///
-  /// Desctructively modifies [deps]. Completes to a list of packages if the
+  /// Destructively modifies [deps]. Completes to a list of packages if the
   /// traversal is complete. Completes it to an error if a failure occurred.
   /// Otherwise, recurses.
   Future<List<PackageId>> _traverseDeps(
diff --git a/benchmark/before.dart.txt b/benchmark/before.dart.txt
index 25f129a..b0fb12e 100644
--- a/benchmark/before.dart.txt
+++ b/benchmark/before.dart.txt
@@ -133,10 +133,10 @@
   /// packages.
   final _forceLatest = new Set<String>();
 
-  /// The set of packages whose dependecy is being overridden by the root
+  /// The set of packages whose dependency is being overridden by the root
   /// package, keyed by the name of the package.
   ///
-  /// Any dependency on a package that appears in this map will be overriden
+  /// Any dependency on a package that appears in this map will be overridden
   /// to use the one here.
   final _overrides = new Map<String, PackageDep>();
 
@@ -274,8 +274,8 @@
   /// Generates a map containing all of the known available versions for each
   /// package in [packages].
   ///
-  /// The version list may not always be complete. The the package is the root
-  /// root package, or its a package that we didn't unlock while solving
+  /// The version list may not always be complete. The package is the root
+  /// root package, or it's a package that we didn't unlock while solving
   /// because we weren't trying to upgrade it, we will just know the current
   /// version.
   Map<String, List<Version>> _getAvailableVersions(List<PackageId> packages) {
@@ -301,7 +301,7 @@
   /// package, to the set of versions to consider for solutions.
   ///
   /// The first item in the list will be the currently selected version of that
-  /// package. Subsequent items will be tried if it the current selection fails.
+  /// package. Subsequent items will be tried if the current selection fails.
   /// Returns the first selected version.
   PackageId select(VersionQueue versions) {
     _selected.add(versions);
@@ -309,7 +309,7 @@
     return versions.current;
   }
 
-  /// Returns the the currently selected id for the package [name] or `null` if
+  /// Returns the currently selected id for the package [name] or `null` if
   /// no concrete version has been selected for that package yet.
   PackageId getSelected(String name) {
     // Always prefer the root package.
@@ -645,7 +645,7 @@
 
   /// Traverses the references that [depender] depends on, stored in [deps].
   ///
-  /// Desctructively modifies [deps]. Completes to a list of packages if the
+  /// Destructively modifies [deps]. Completes to a list of packages if the
   /// traversal is complete. Completes it to an error if a failure occurred.
   /// Otherwise, recurses.
   Future<List<PackageId>> _traverseDeps(PackageId depender,
diff --git a/test/regression/other/enhanced_enum.unit b/test/regression/other/enhanced_enum.unit
index 590cdba..9367a9c 100644
--- a/test/regression/other/enhanced_enum.unit
+++ b/test/regression/other/enhanced_enum.unit
@@ -53,7 +53,7 @@
   // constructors and the implicit element creation expressions.)
   // Cannot have const factory constructor, because they *must* redirect to
   // generative constructors.
-  // Cannot have `super`-constuctor invocations in initializer lists.
+  // Cannot have `super`-constructor invocations in initializer lists.
 
   // Instance members.
 
@@ -145,7 +145,7 @@
   // constructors and the implicit element creation expressions.)
   // Cannot have const factory constructor, because they *must* redirect to
   // generative constructors.
-  // Cannot have `super`-constuctor invocations in initializer lists.
+  // Cannot have `super`-constructor invocations in initializer lists.
 
   // Instance members.
 
