diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a94e4e..96caad8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2067,11 +2067,11 @@
 
 ### Dart2JS
 
-- Adds support for deferred loading of types seperately from classes. This
+- Adds support for deferred loading of types separately from classes. This
   enables dart2js to make better optimization choices when deferred loading.
   This work is necessary to address unsoundness in the deferred loading
   algorithm. Currently, fixing this unsoundness would result in code bloat, but
-  loading types seperately from classes will allow us to fix the unsoundness
+  loading types separately from classes will allow us to fix the unsoundness
   with only a minimal regression. To explicitly disable deferred loading of
   types, pass `--no-defer-class-types`. See the original post on the
   [unsoundness in the deferred loading algorithm][].
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 0fd1cc0..0e557c3 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -7081,7 +7081,7 @@
       Token afterIdentifier = next.next!;
       //
       // found <typeref> `?` <identifier>
-      // with no annotations or modifiers preceeding it
+      // with no annotations or modifiers preceding it
       //
       if (optional('=', afterIdentifier)) {
         //
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
index 356601f..63c9ba7 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
@@ -782,7 +782,7 @@
   /**
    * Initialize a newly created token to have the given [type] and [offset].
    */
-  factory Token(TokenType type, int offset, [CommentToken? preceedingComment]) =
+  factory Token(TokenType type, int offset, [CommentToken? precedingComment]) =
       SimpleToken;
 
   /**
diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/analysis_server/benchmark/perf/memory_tests.dart
index c751542..488c61c 100644
--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
+++ b/pkg/analysis_server/benchmark/perf/memory_tests.dart
@@ -175,7 +175,7 @@
     _test.projectFolderPath = roots.single;
     _test.projectFolderUri = Uri.file(_test.projectFolderPath);
     // Use some reasonable default client capabilities that will activate
-    // features that will excercise more code that benchmarks should measure
+    // features that will exercise more code that benchmarks should measure
     // (such as applyEdit to allow suggestion sets results to be merged in).
     await _test.initialize(
       textDocumentCapabilities: withCompletionItemSnippetSupport(
diff --git a/pkg/analysis_server/lib/protocol/protocol.dart b/pkg/analysis_server/lib/protocol/protocol.dart
index b093fc0..27ea015 100644
--- a/pkg/analysis_server/lib/protocol/protocol.dart
+++ b/pkg/analysis_server/lib/protocol/protocol.dart
@@ -202,7 +202,7 @@
   ///     'id': String,
   ///     'method': methodName,
   ///     'params': {
-  ///       paramter_name: value
+  ///       parameter_name: value
   ///     }
   ///   }
   ///
@@ -238,7 +238,7 @@
   ///     'id': String,
   ///     'method': methodName,
   ///     'params': {
-  ///       paramter_name: value
+  ///       parameter_name: value
   ///     }
   ///   }
   ///
@@ -268,7 +268,7 @@
   /// The response to be returned as a result of the failure.
   final Response response;
 
-  /// Initialize a newly created exception to return the given reponse.
+  /// Initialize a newly created exception to return the given response.
   RequestFailure(this.response);
 }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_folding.dart b/pkg/analysis_server/lib/src/computer/computer_folding.dart
index be1efd5..816e3cd 100644
--- a/pkg/analysis_server/lib/src/computer/computer_folding.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_folding.dart
@@ -145,7 +145,7 @@
       }
       isFirstToken = false;
       // Only exit the loop when hitting EOF *after* processing the token as
-      // the EOF token may have preceeding comments.
+      // the EOF token may have preceding comments.
       if (token.type == TokenType.EOF) {
         break;
       }
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 5c6934c..503a8ec 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -86,7 +86,7 @@
       }
       if (token.type == TokenType.EOF) {
         // Only exit the loop *after* processing the EOF token as it may
-        // have preceeding comments.
+        // have preceding comments.
         break;
       }
       token = token.next;
@@ -517,7 +517,7 @@
       _regions.add(HighlightRegion(type, offset, length));
     }
     if (_computeSemanticTokens) {
-      // Use default mappings if an overriden type/modifiers were not supplied.
+      // Use default mappings if an overridden type/modifiers were not supplied.
       semanticTokenType ??= highlightRegionTokenTypes[type];
       semanticTokenModifiers ??= highlightRegionTokenModifiers[type];
       if (semanticTokenType != null) {
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index a3a718d..49ae1ca 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -16,7 +16,7 @@
 ///     myLongFunctionName();
 ///     print(myLong^)
 ///
-/// The `.` is not included because it falsely triggers whenver typing a
+/// The `.` is not included because it falsely triggers whenever typing a
 /// cascade (`..`), inserting the very first completion instead of just a second
 /// period.
 const dartCompletionCommitCharacters = ['('];
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
index a0a34fa..d7e9c3a 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_initialized.dart
@@ -6,9 +6,9 @@
 import 'package:analysis_server/src/lsp/handlers/handler_states.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 
-class IntializedMessageHandler extends MessageHandler<InitializedParams, void> {
+class InitializedMessageHandler extends MessageHandler<InitializedParams, void> {
   final List<String> openWorkspacePaths;
-  IntializedMessageHandler(
+  InitializedMessageHandler(
     super.server,
     this.openWorkspacePaths,
   );
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart
index 866b7e8..0f72ab1 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_references.dart
@@ -37,7 +37,7 @@
     final unit = await path.mapResult(requireResolvedUnit);
     final offset = await unit.mapResult((unit) => toOffset(unit.lineInfo, pos));
     return offset.mapResult(
-        (offset) => _getRefererences(path.result, offset, params, unit.result));
+        (offset) => _getReferences(path.result, offset, params, unit.result));
   }
 
   List<Location> _getDeclarations(CompilationUnit unit, int offset) {
@@ -53,7 +53,7 @@
     }).whereNotNull().toList();
   }
 
-  Future<ErrorOr<List<Location>?>> _getRefererences(String path, int offset,
+  Future<ErrorOr<List<Location>?>> _getReferences(String path, int offset,
       ReferenceParams params, ResolvedUnitResult unit) async {
     var element = await server.getElementAtOffset(path, offset);
     if (element is ImportElement) {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_reject.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_reject.dart
index 14348e8..715170e 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_reject.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_reject.dart
@@ -5,7 +5,7 @@
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 
-/// A [MessageHandler] that rejects specific tpyes of messages with a given
+/// A [MessageHandler] that rejects specific types of messages with a given
 /// error code/message.
 class RejectMessageHandler extends MessageHandler<Object?, void> {
   @override
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
index c73c919..98d4e5f 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
@@ -114,7 +114,7 @@
     final path = pathOfDoc(params.textDocument);
     // If the client provided us a version doc identifier, we'll use it to ensure
     // we're not computing a rename for an old document. If not, we'll just assume
-    // the version the server had at the time of recieving the request is valid
+    // the version the server had at the time of receiving the request is valid
     // and then use it to verify the document hadn't changed again before we
     // send the edits.
     final docIdentifier = await path.mapResult((path) => success(
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
index 5369d17..d9a9cfa 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
@@ -42,7 +42,7 @@
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 
-/// The server moves to this state when a critical unrecoverrable error (for
+/// The server moves to this state when a critical unrecoverable error (for
 /// example, inconsistent document state between server/client) occurs and will
 /// reject all messages.
 class FailureStateMessageHandler extends ServerStateMessageHandler {
@@ -118,7 +118,7 @@
         'Server already initialized');
     registerHandler(ShutdownMessageHandler(server));
     registerHandler(ExitMessageHandler(server));
-    registerHandler(IntializedMessageHandler(
+    registerHandler(InitializedMessageHandler(
       server,
       openWorkspacePaths,
     ));
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
index 9689ab2..fc3cc26 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
@@ -106,7 +106,7 @@
     }
   }
 
-  /// Splits overlapping/nested tokens into descrete ranges for the "top-most"
+  /// Splits overlapping/nested tokens into discrete ranges for the "top-most"
   /// token.
   ///
   /// Tokens must be pre-sorted by offset, with tokens having the same offset
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/legend.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/legend.dart
index 1a49ca3..a79a488 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/legend.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/legend.dart
@@ -23,7 +23,7 @@
   late List<SemanticTokenModifiers> _usedTokenModifiers;
 
   /// All [SemanticTokenTypes] the server may generate. The order of these
-  /// items is important as the indexes will be used in communication betewen
+  /// items is important as the indexes will be used in communication between
   /// server and client.
   late List<SemanticTokenTypes> _usedTokenTypes;
 
diff --git a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
index a3255c5..ca9e238 100644
--- a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
+++ b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
@@ -8,7 +8,7 @@
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/semantic_tokens/legend.dart';
 
-/// Helper for reading client dynamic registrations which may be ommitted by the
+/// Helper for reading client dynamic registrations which may be omitted by the
 /// client.
 class ClientDynamicRegistrations {
   /// All dynamic registrations supported by the Dart LSP server.
@@ -42,7 +42,7 @@
     // workspace.fileOperations covers all file operation methods but we only
     // support this one.
     Method.workspace_willRenameFiles,
-    // Sematic tokens are all registered under a single "method" as the
+    // Semantic tokens are all registered under a single "method" as the
     // actual methods are controlled by the server capabilities.
     CustomMethods.semanticTokenDynamicRegistration,
   ];
@@ -168,7 +168,7 @@
 
     // When adding new capabilities to the server that may apply to specific file
     // types, it's important to update
-    // [IntializedMessageHandler._performDynamicRegistration()] to notify
+    // [InitializedMessageHandler._performDynamicRegistration()] to notify
     // supporting clients of this. This avoids clients needing to hard-code the
     // list of what files types we support (and allows them to avoid sending
     // requests where we have only partial support for some types).
@@ -332,7 +332,7 @@
 
     // Completion is supported for some synchronised files that we don't _fully_
     // support (eg. YAML). If these gain support for things like hover, we may
-    // wish to move them to fullySupprtedTypes but add an exclusion for formatting.
+    // wish to move them to fullySupportedTypes but add an exclusion for formatting.
     final completionSupportedTypesExcludingDart = {
       // Dart is excluded here at it's registered separately with trigger/commit
       // characters.
diff --git a/pkg/analysis_server/lib/src/lsp/snippets.dart b/pkg/analysis_server/lib/src/lsp/snippets.dart
index 48d7511..4ccdf33 100644
--- a/pkg/analysis_server/lib/src/lsp/snippets.dart
+++ b/pkg/analysis_server/lib/src/lsp/snippets.dart
@@ -182,7 +182,7 @@
       );
     }
 
-    // Otherwise, we will use a choice. In a choice it'snot valid to be the
+    // Otherwise, we will use a choice. In a choice it's not valid to be the
     // final (0th) tabstop.
     assert(placeholderNumber == null || placeholderNumber > 0);
 
@@ -193,7 +193,7 @@
       placeholderNumber = null;
     }
 
-    placeholderNumber = _usePlaceholerNumber(placeholderNumber);
+    placeholderNumber = _usePlaceholderNumber(placeholderNumber);
 
     final escapedChoices = uniqueChoices.map(escapeSnippetChoiceText).join(',');
     _buffer.write('\${$placeholderNumber|$escapedChoices|}');
@@ -212,7 +212,7 @@
       return appendTabStop(placeholderNumber: placeholderNumber);
     }
 
-    placeholderNumber = _usePlaceholerNumber(placeholderNumber);
+    placeholderNumber = _usePlaceholderNumber(placeholderNumber);
 
     final escapedText = escapeSnippetVariableText(text);
     _buffer.write(r'${');
@@ -228,7 +228,7 @@
   ///
   /// Returns the placeholder number used.
   int appendTabStop({int? placeholderNumber}) {
-    placeholderNumber = _usePlaceholerNumber(placeholderNumber);
+    placeholderNumber = _usePlaceholderNumber(placeholderNumber);
 
     _buffer.write(r'$');
     _buffer.write(placeholderNumber);
@@ -242,7 +242,7 @@
   }
 
   /// Generates the current and next placeholder numbers.
-  int _usePlaceholerNumber(int? placeholderNumber) {
+  int _usePlaceholderNumber(int? placeholderNumber) {
     // If a number was not supplied, use the next available one.
     placeholderNumber ??= _nextPlaceholder;
     // If the number we used was the highest seen, set the next one after it.
@@ -332,13 +332,13 @@
       appendText(text.substring(offset, placeholder.offset));
 
       final linkedGroupId = placeholder.linkedGroupId;
-      int? thisPaceholderNumber;
+      int? thisPlaceholderNumber;
       // Override the placeholder number if it's the final one (0) or needs to
       // re-use an existing one for a linked group.
       if (placeholder.isFinal) {
-        thisPaceholderNumber = 0;
+        thisPlaceholderNumber = 0;
       } else if (linkedGroupId != null) {
-        thisPaceholderNumber = placeholderIdForLinkedGroupId[linkedGroupId];
+        thisPlaceholderNumber = placeholderIdForLinkedGroupId[linkedGroupId];
       }
 
       // Append the placeholder/choices.
@@ -350,18 +350,18 @@
       // placeholder but it's faster if we can avoid putting a single item into
       // a set and then detecting it.
       if (placeholder.suggestions == null) {
-        thisPaceholderNumber = appendPlaceholder(
+        thisPlaceholderNumber = appendPlaceholder(
           placeholderText,
-          placeholderNumber: thisPaceholderNumber,
+          placeholderNumber: thisPlaceholderNumber,
         );
       } else {
         final choices = <String>{
           if (placeholderText.isNotEmpty) placeholderText,
           ...?placeholder.suggestions,
         };
-        thisPaceholderNumber = appendChoice(
+        thisPlaceholderNumber = appendChoice(
           choices,
-          placeholderNumber: thisPaceholderNumber,
+          placeholderNumber: thisPlaceholderNumber,
         );
       }
 
@@ -371,7 +371,7 @@
       // Store the placeholder number used for linked groups so it can be reused
       // by subsequent references to it.
       if (linkedGroupId != null) {
-        placeholderIdForLinkedGroupId[linkedGroupId] = thisPaceholderNumber;
+        placeholderIdForLinkedGroupId[linkedGroupId] = thisPlaceholderNumber;
       }
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/source_edits.dart b/pkg/analysis_server/lib/src/lsp/source_edits.dart
index e41855e..99021fb 100644
--- a/pkg/analysis_server/lib/src/lsp/source_edits.dart
+++ b/pkg/analysis_server/lib/src/lsp/source_edits.dart
@@ -270,7 +270,7 @@
     final formattedToken = formattedTokens.current;
 
     if (unformattedToken.lexeme != formattedToken.lexeme) {
-      // If the token lexems do not match, there is a difference in the parsed
+      // If the token lexemes do not match, there is a difference in the parsed
       // token streams (this should not ordinarily happen) so fall back to a
       // full edit.
       return success(_generateFullEdit(lineInfo, unformatted, formatted));
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index 312937f..bc4712e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -154,7 +154,7 @@
           return true;
         }
 
-        // Caret is in the between two values that are not seperated by a comma.
+        // Caret is in the between two values that are not separated by a comma.
         //     f(one: 1, tw^'foo');
         // must be at least two and the target not last.
         var args = argumentList.arguments;
diff --git a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
index 4a34d27..30ace8f 100644
--- a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
@@ -89,9 +89,9 @@
           var offset = directive.offset;
           var end = directive.end;
 
-          final isPsuedoLibraryDirective = directive == unit.directives.first;
+          final isPseudoLibraryDirective = directive == unit.directives.first;
           Annotation? lastLibraryAnnotation;
-          if (isPsuedoLibraryDirective) {
+          if (isPseudoLibraryDirective) {
             // Find the last library-level annotation that does not come
             // after any non-library annotation. If there are already
             // non-library annotations before library annotations, we will not
@@ -196,7 +196,7 @@
               postAnnotationCommentText,
               uriContent,
               trailingCommentText,
-              isPsuedoLibraryDirective
+              isPseudoLibraryDirective
                   ? (libraryDocsAndAnnotationsEndOffset ?? offset)
                   : offset,
               end,
diff --git a/pkg/analysis_server/lib/src/services/flutter/property.dart b/pkg/analysis_server/lib/src/services/flutter/property.dart
index 2a6586d..416aaeb 100644
--- a/pkg/analysis_server/lib/src/services/flutter/property.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/property.dart
@@ -405,7 +405,7 @@
   /// of the `Container` semantic, such as `Padding`. Such wrapper should be
   /// replaced with full `Container` when `Container` is materialized.
   ///
-  /// Might be `null`, if no existing replacable wrapped.
+  /// Might be `null`, if no existing replaceable wrapped.
   InstanceCreationExpression? _parentCreation;
 
   /// The argument from the [_parentCreation] that should be moved into
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
index db78765..9a75302 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
@@ -19,9 +19,10 @@
   static const maxCacheAge = Duration(hours: 18);
   static const maxPackageDetailsRequestsInFlight = 5;
 
-  /// Requests to write the cache from fetching packge details will be debounced
-  /// by this duration to prevent many writes while the user may be cursoring
-  /// though completion requests that will trigger fetching descriptions/versions.
+  /// Requests to write the cache from fetching package details will be
+  /// debounced by this duration to prevent many writes while the user may be
+  /// cursoring though completion requests that will trigger fetching
+  /// descriptions/versions.
   static const _writeCacheDebounceDuration = Duration(seconds: 3);
 
   final Map<String, PubPackage> packages;
@@ -273,7 +274,7 @@
   /// Clears package caches for [pubspecPath].
   ///
   /// Does not remove other caches that are not pubspec-specific (for example
-  /// the latest version pulled directly from the Pub API independant of
+  /// the latest version pulled directly from the Pub API independent of
   /// pubspec).
   Future<void> flushPackageCaches(String pubspecPath) async {
     _pubspecPackageVersions.remove(pubspecPath);
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 1b16e40..f90d1e6 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -1366,7 +1366,7 @@
 
   Future<Response> _cancelMoveRequest() {
     // 0 is the id from _sendMoveRequest
-    // 1 is another aribtrary id for the cancel request
+    // 1 is another arbitrary id for the cancel request
     var request = ServerCancelRequestParams('0').toRequest('1');
     return serverChannel.sendRequest(request);
   }
diff --git a/pkg/analysis_server/test/integration/lsp_server/server_test.dart b/pkg/analysis_server/test/integration/lsp_server/server_test.dart
index 1e85c22..5690501 100644
--- a/pkg/analysis_server/test/integration/lsp_server/server_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/server_test.dart
@@ -38,21 +38,6 @@
     expect(responseBody, contains('<title>Analysis Server</title>'));
   }
 
-  Future<void> test_exit_inintializedWithShutdown() async {
-    await initialize();
-    await sendShutdown();
-    sendExit();
-
-    await channel.closed.timeout(const Duration(seconds: 10),
-        onTimeout: () =>
-            fail('Server channel did not close within 10 seconds'));
-
-    final exitCode = await client!.exitCode.timeout(const Duration(seconds: 10),
-        onTimeout: () => fail('Server process did not exit within 10 seconds'));
-
-    expect(exitCode, equals(0));
-  }
-
   Future<void> test_exit_initializedWithoutShutdown() async {
     // Send a request that we can wait for, to ensure the server is fully ready
     // before we send exit. Otherwise the exit notification won't be handled for
@@ -70,7 +55,8 @@
     expect(exitCode, equals(1));
   }
 
-  Future<void> test_exit_uninintializedWithShutdown() async {
+  Future<void> test_exit_initializedWithShutdown() async {
+    await initialize();
     await sendShutdown();
     sendExit();
 
@@ -96,4 +82,18 @@
 
     expect(exitCode, equals(1));
   }
+
+  Future<void> test_exit_uninitializedWithShutdown() async {
+    await sendShutdown();
+    sendExit();
+
+    await channel.closed.timeout(const Duration(seconds: 10),
+        onTimeout: () =>
+            fail('Server channel did not close within 10 seconds'));
+
+    final exitCode = await client!.exitCode.timeout(const Duration(seconds: 10),
+        onTimeout: () => fail('Server process did not exit within 10 seconds'));
+
+    expect(exitCode, equals(0));
+  }
 }
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 7c9fd4c..1c692e9 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -771,7 +771,7 @@
 }
 
 /// Matcher that matches a map of objects, where each key/value pair in the
-/// map satisies the given key and value matchers.
+/// map satisfies the given key and value matchers.
 class _MapOf extends _RecursiveMatcher {
   /// Matcher which every key in the map must satisfy.
   final Matcher keyMatcher;
diff --git a/pkg/analysis_server/test/lsp/code_actions_source_test.dart b/pkg/analysis_server/test/lsp/code_actions_source_test.dart
index 629faa8..dc3fd88 100644
--- a/pkg/analysis_server/test/lsp/code_actions_source_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_source_test.dart
@@ -177,7 +177,7 @@
       (codeAction) => codeAction.command!,
     );
 
-    // Ensure the request returned an error (error repsonses are thrown by
+    // Ensure the request returned an error (error responses are thrown by
     // the test helper to make consuming success results simpler).
     await expectLater(executeCommand(command),
         throwsA(isResponseError(ServerErrorCodes.FileHasErrors)));
@@ -356,7 +356,7 @@
           applied: false, failureReason: 'Document changed'),
     );
 
-    // Ensure the request returned an error (error repsonses are thrown by
+    // Ensure the request returned an error (error responses are thrown by
     // the test helper to make consuming success results simpler).
     await expectLater(commandResponse,
         throwsA(isResponseError(ServerErrorCodes.ClientFailedToApplyEdit)));
@@ -400,7 +400,7 @@
       (codeAction) => codeAction.command!,
     );
 
-    // Ensure the request returned an error (error repsonses are thrown by
+    // Ensure the request returned an error (error responses are thrown by
     // the test helper to make consuming success results simpler).
     await expectLater(executeCommand(command),
         throwsA(isResponseError(ServerErrorCodes.FileHasErrors)));
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index e4a8ece..d076789 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -107,7 +107,7 @@
   Future<void> test_completionRegistrations_withDartPlugin() async {
     // This tests for a bug that occurred with an analysis server plugin
     // that works on Dart files. When computing completion registrations we
-    // usually have seperate registrations for Dart + non-Dart to account for
+    // usually have separate registrations for Dart + non-Dart to account for
     // different trigger characters. However, the plugin types were all being
     // included in the non-Dart registration even if they included Dart.
     //
@@ -384,7 +384,7 @@
         InitializeResult.fromJson(initResponse.result as Map<String, Object?>);
     expect(initResult.capabilities, isNotNull);
 
-    // Ensure no static registrations. This list should include all server equivilents
+    // Ensure no static registrations. This list should include all server equivalents
     // of the dynamic registrations listed in `ClientDynamicRegistrations.supported`.
     expect(initResult.capabilities.textDocumentSync, isNull);
     expect(initResult.capabilities.completionProvider, isNull);
diff --git a/pkg/analysis_server/test/lsp/selection_range_test.dart b/pkg/analysis_server/test/lsp/selection_range_test.dart
index 74fb0b0..9dc2946 100644
--- a/pkg/analysis_server/test/lsp/selection_range_test.dart
+++ b/pkg/analysis_server/test/lsp/selection_range_test.dart
@@ -74,7 +74,7 @@
     final lineInfo = LineInfo.fromContent(contentWithoutMarker);
 
     // The returned List corresponds to the input list of positions, and not
-    // the set of ranges - each range within that list has a (recusrive) parent
+    // the set of ranges - each range within that list has a (recursive) parent
     // to walk up all ranges for that position.
     final regions =
         await getSelectionRanges(mainFileUri, [positionFromMarker(content)]);
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index c6de9b2..2799810 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -716,7 +716,7 @@
       Map<String, String> oldFileContent, CreateFile create) {
     final path = Uri.parse(create.uri).toFilePath();
     if (oldFileContent.containsKey(path)) {
-      throw 'Recieved create instruction for $path which already existed.';
+      throw 'Received create instruction for $path which already existed.';
     }
     oldFileContent[path] = '';
   }
@@ -726,7 +726,7 @@
     final oldPath = Uri.parse(rename.oldUri).toFilePath();
     final newPath = Uri.parse(rename.newUri).toFilePath();
     if (!oldFileContent.containsKey(oldPath)) {
-      throw 'Recieved rename instruction for $oldPath which did not exist.';
+      throw 'Received rename instruction for $oldPath which did not exist.';
     }
     oldFileContent[newPath] = oldFileContent[oldPath]!;
     oldFileContent.remove(oldPath);
@@ -741,7 +741,7 @@
     for (var edit in edits) {
       final path = Uri.parse(edit.textDocument.uri).toFilePath();
       if (!oldFileContent.containsKey(path)) {
-        throw 'Recieved edits for $path which was not provided as a file to be edited. '
+        throw 'Received edits for $path which was not provided as a file to be edited. '
             'Perhaps a CreateFile change was missing from the edits?';
       }
       oldFileContent[path] = applyTextDocumentEdit(oldFileContent[path]!, edit);
@@ -1346,7 +1346,7 @@
   ///
   /// This is used for testing things like code actions, where the client initiates
   /// a request but the server does not respond to it until it's sent its own
-  /// request to the client and it recieved a response.
+  /// request to the client and it received a response.
   ///
   ///     Client                                 Server
   ///     1. |- Req: textDocument/codeAction      ->
@@ -1819,7 +1819,7 @@
         if (message.method == CustomMethods.analyzerStatus) {
           if (_clientCapabilities!.window?.workDoneProgress == true) {
             throw Exception(
-                'Recieved ${CustomMethods.analyzerStatus} notification '
+                'Received ${CustomMethods.analyzerStatus} notification '
                 'but client supports workDoneProgress');
           }
 
@@ -1829,7 +1829,7 @@
         } else if (message.method == Method.progress) {
           if (_clientCapabilities!.window?.workDoneProgress != true) {
             throw Exception(
-                'Recieved ${CustomMethods.analyzerStatus} notification '
+                'Received ${CustomMethods.analyzerStatus} notification '
                 'but client supports workDoneProgress');
           }
 
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/painting/text_style.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/painting/text_style.dart
index 16f1685..52466e3 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/painting/text_style.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/painting/text_style.dart
@@ -85,7 +85,7 @@
   /// {@end-tool}
   final double height;
 
-  /// The thickness of the decoration stroke as a muliplier of the thickness
+  /// The thickness of the decoration stroke as a multiplier of the thickness
   /// defined by the font.
   ///
   /// The font provides a base stroke width for [decoration]s which scales off
diff --git a/pkg/analysis_server/test/mock_packages/meta/lib/meta.dart b/pkg/analysis_server/test/mock_packages/meta/lib/meta.dart
index 834640c..ed33f8b 100644
--- a/pkg/analysis_server/test/mock_packages/meta/lib/meta.dart
+++ b/pkg/analysis_server/test/mock_packages/meta/lib/meta.dart
@@ -19,7 +19,7 @@
 library meta;
 
 /// Used to annotate a function `f`. Indicates that `f` always throws an
-/// exception. Any functions that override `f`, in class inheritence, are also
+/// exception. Any functions that override `f`, in class inheritance, are also
 /// expected to conform to this contract.
 ///
 /// Tools, such as the analyzer, can use this to understand whether a block of
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index e0d0fad..6fe3606 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -1059,7 +1059,7 @@
     assertNotSuggested('r');
     assertNotSuggested('x');
 
-    // imported elements are portially filtered
+    // imported elements are partially filtered
     //assertSuggestClass('A');
     assertNotSuggested('_B');
     // hidden element not suggested
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index f8fccbe..e866095 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -1258,7 +1258,7 @@
     assertNotSuggested('r');
     assertNotSuggested('x');
 
-    // imported elements are portially filtered
+    // imported elements are partially filtered
     //assertNotSuggested('A');
     assertNotSuggested('_B');
     //assertNotSuggested('C');
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index 95dc417..226ad46 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -941,7 +941,7 @@
     assertNotSuggested('r');
     assertNotSuggested('x');
 
-    // imported elements are portially filtered
+    // imported elements are partially filtered
     //assertNotSuggested('A');
     assertNotSuggested('_B');
     //assertNotSuggested('C');
@@ -2582,7 +2582,7 @@
     assertSuggestGetter('length', 'int');
   }
 
-  Future<void> test_local_propogatedType() async {
+  Future<void> test_local_propagatedType() async {
     addTestSource('foo() {var x = "bar"; x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
diff --git a/pkg/analysis_server/test/src/computer/color_computer_test.dart b/pkg/analysis_server/test/src/computer/color_computer_test.dart
index c7b63c2..42d083f 100644
--- a/pkg/analysis_server/test/src/computer/color_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/color_computer_test.dart
@@ -25,7 +25,7 @@
   /// Values are the color that should be discovered (in 0xAARRGGBB format).
   ///
   /// Color values may not match the actual Flutter framework but are
-  /// values that are more identifyable for ease of testing. They are
+  /// values that are more identifiable for ease of testing. They are
   /// defined in:
   ///  - test/mock_packages/flutter/lib/src/material/colors.dart.
   ///  - test/mock_packages/flutter/lib/src/cupertino/colors.dart.
diff --git a/pkg/analysis_server/test/src/plugin/notification_manager_test.dart b/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
index 79665b8..2cf7d0e 100644
--- a/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/notification_manager_test.dart
@@ -79,7 +79,7 @@
     _verifyHighlightRegions(fileA, [region1, region2]);
   }
 
-  void test_handlePluginNotification_naviation() {
+  void test_handlePluginNotification_navigation() {
     manager.setSubscriptions({
       server.AnalysisService.NAVIGATION: {fileA, fileB}
     });
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
index dcbf510..4c86e82 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
@@ -153,7 +153,7 @@
 ''');
   }
 
-  Future<void> test_staticMethod_mixim_notUsed_noReference() async {
+  Future<void> test_staticMethod_mixin_notUsed_noReference() async {
     await resolveTestCode(r'''
 mixin _M {
   static int m1() => 3;
diff --git a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
index c25bdcd..b61e5f6 100644
--- a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
+++ b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
@@ -639,7 +639,7 @@
     });
   }
 
-  Future<void> test_topLevel_multiple_mixedComents() async {
+  Future<void> test_topLevel_multiple_mixedComments() async {
     await resolveTestCode('''
 import '';
 
diff --git a/pkg/analysis_server/test/tool/lsp_spec/meta_model_test.dart b/pkg/analysis_server/test/tool/lsp_spec/meta_model_test.dart
index b40c5aa..b9632ff 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/meta_model_test.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/meta_model_test.dart
@@ -77,7 +77,7 @@
       // Length is two because we'll fabricate the type of textDoc.
       expect(output, hasLength(2));
 
-      // Check there was a full fabricarted interface for this type.
+      // Check there was a full fabricated interface for this type.
       expect(output[0], const TypeMatcher<Interface>());
       var interface = output[0] as Interface;
       expect(interface.name, equals('CapabilitiesTextDoc'));
diff --git a/pkg/analysis_server/tool/lsp_spec/README.md b/pkg/analysis_server/tool/lsp_spec/README.md
index e2cdc3d..5776154 100644
--- a/pkg/analysis_server/tool/lsp_spec/README.md
+++ b/pkg/analysis_server/tool/lsp_spec/README.md
@@ -24,7 +24,7 @@
 ## Initialization Options
 
 - `onlyAnalyzeProjectsWithOpenFiles` (`bool?`): When set to `true`, workspace folders will be ignored and analysis will be performed based on the open files, as if no workspace was open at all. This allows opening large folders without causing them to be completely analyzed. Defaults to `false`.
-- `suggestFromUnimportedLibraries` (`bool?`): When set to `false`, completion will not include synbols that are not already imported into the current file. Defaults to `true`, though the client must additionally support `workspace/applyEdit` for these completions to be included.
+- `suggestFromUnimportedLibraries` (`bool?`): When set to `false`, completion will not include symbols that are not already imported into the current file. Defaults to `true`, though the client must additionally support `workspace/applyEdit` for these completions to be included.
 - `closingLabels` (`bool?`): When set to `true`, `dart/textDocument/publishClosingLabels` notifications will be sent with information to render editor closing labels.
 - `outline` (`bool?`): When set to `true`, `dart/textDocument/publishOutline` notifications will be sent with outline information for open files.
 - `flutterOutline` (`bool?`): When set to `true`, `dart/textDocument/publishFlutterOutline` notifications will be sent with Flutter outline information for open files.
@@ -163,7 +163,7 @@
 Params: None
 Returns: `{ port: number }`
 
-Starts the analzyer diagnostics server (if not already running) and returns the port number it's listening on.
+Starts the analyzer diagnostics server (if not already running) and returns the port number it's listening on.
 
 ### dart/reanalyze Method
 
@@ -224,4 +224,4 @@
 
 Notifies the client when Flutter outline information is available (or updated) for a file.
 
-Nodes contains multiple ranges as desribed for the `dart/textDocument/publishOutline` notification.
+Nodes contains multiple ranges as described for the `dart/textDocument/publishOutline` notification.
diff --git a/pkg/analysis_server/tool/lsp_spec/meta_model_cleaner.dart b/pkg/analysis_server/tool/lsp_spec/meta_model_cleaner.dart
index ef71c3d..336e9b4 100644
--- a/pkg/analysis_server/tool/lsp_spec/meta_model_cleaner.dart
+++ b/pkg/analysis_server/tool/lsp_spec/meta_model_cleaner.dart
@@ -275,7 +275,7 @@
       // Merged into InitializeParams.
       '_InitializeParams',
       'WorkspaceFoldersInitializeParams',
-      // We don't use these clases and they weren't in the TS version of the
+      // We don't use these classes and they weren't in the TS version of the
       // spec so continue to not generate them until required.
       'DidChangeConfigurationRegistrationOptions',
       // LSPAny/LSPObject are used by the LSP spec for unions of basic types.
diff --git a/pkg/analysis_server/tool/lsp_spec/meta_model_reader.dart b/pkg/analysis_server/tool/lsp_spec/meta_model_reader.dart
index 2da612d..231da08 100644
--- a/pkg/analysis_server/tool/lsp_spec/meta_model_reader.dart
+++ b/pkg/analysis_server/tool/lsp_spec/meta_model_reader.dart
@@ -215,7 +215,7 @@
 
   /// Generates a valid name for a member.
   String _generateMemberName(String name, {bool camelCase = false}) {
-    // Replace any seperators like `/` with `_`.
+    // Replace any separators like `/` with `_`.
     name = name.replaceAll(_memberNameSeparatorPattern, '_');
 
     // Replace out any characters we don't want in member names.
diff --git a/pkg/analysis_server_client/lib/listener/server_listener.dart b/pkg/analysis_server_client/lib/listener/server_listener.dart
index 6004996..2ff0dae 100644
--- a/pkg/analysis_server_client/lib/listener/server_listener.dart
+++ b/pkg/analysis_server_client/lib/listener/server_listener.dart
@@ -53,7 +53,7 @@
     log('Unexpected notification format from server', '$message');
   }
 
-  /// Called when the [Server] recieved an unexpected response
+  /// Called when the [Server] received an unexpected response
   /// where the [id] does not match the [id] of an outstanding request.
   void unexpectedResponse(Map<String, Object?> message, Object id) {
     log('Unexpected response from server', 'id=$id');
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_base.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_base.dart
index 017d34c..b89d0cd 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_base.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_base.dart
@@ -198,7 +198,7 @@
   ///     'id': String,
   ///     'method': methodName,
   ///     'params': {
-  ///       paramter_name: value
+  ///       parameter_name: value
   ///     }
   ///   }
   ///
@@ -234,7 +234,7 @@
   ///     'id': String,
   ///     'method': methodName,
   ///     'params': {
-  ///       paramter_name: value
+  ///       parameter_name: value
   ///     }
   ///   }
   ///
@@ -264,7 +264,7 @@
   /// The response to be returned as a result of the failure.
   final Response response;
 
-  /// Initialize a newly created exception to return the given reponse.
+  /// Initialize a newly created exception to return the given response.
   RequestFailure(this.response);
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index 77422fc..2e23aab 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -238,7 +238,7 @@
     // version and know the length of the function name/return type.
     var multiline = allowMultiline && this.multiline && parameters.length >= 3;
 
-    // The prefix for open groups is included in seperator for single-line but
+    // The prefix for open groups is included in separator for single-line but
     // not for multline so must be added explicitly.
     var openGroupPrefix = multiline ? ' ' : '';
     var separator = multiline ? ',' : ', ';
diff --git a/pkg/analyzer/lib/src/utilities/cancellation.dart b/pkg/analyzer/lib/src/utilities/cancellation.dart
index 822b750..4dff1bd 100644
--- a/pkg/analyzer/lib/src/utilities/cancellation.dart
+++ b/pkg/analyzer/lib/src/utilities/cancellation.dart
@@ -13,7 +13,7 @@
 
 /// A token used to signal cancellation of an operation. This allows computation
 /// to be skipped when a caller is no longer interested in the result, for example
-/// when a $/cancel request is recieved for an in-progress request.
+/// when a $/cancel request is received for an in-progress request.
 abstract class CancellationToken {
   bool get isCancellationRequested;
 }
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 4d1deaf..8bf7ab3 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -237,7 +237,7 @@
 
   test_constrainedByBounds1() async {
     // Test that upwards inference with two type variables correctly
-    // propogates from the constrained variable to the unconstrained
+    // propagates from the constrained variable to the unconstrained
     // variable if they are ordered left to right.
     String code = r'''
     T f<S, T extends S>(S x) => null;
@@ -257,7 +257,7 @@
 
   test_constrainedByBounds2() async {
     // Test that upwards inference with two type variables does
-    // propogate from the constrained variable to the unconstrained
+    // propagate from the constrained variable to the unconstrained
     // variable if they are ordered right to left.
     String code = r'''
     T f<T extends S, S>(S x) => null;
@@ -294,7 +294,7 @@
 
   test_constrainedByBounds4() async {
     // Test that upwards inference with two type variables correctly
-    // propogates from the constrained variable to the unconstrained
+    // propagates from the constrained variable to the unconstrained
     // variable if they are ordered left to right, when the variable
     // appears co and contra variantly
     String code = r'''
@@ -873,7 +873,7 @@
   }
 
   test_futureOr_downwards3() async {
-    // Test that downwards inference correctly propogates into
+    // Test that downwards inference correctly propagates into
     // arguments.
     MethodInvocation invoke = await _testFutureOr(r'''
     Future<T> mk<T>(FutureOr<T> x) => null;
diff --git a/pkg/analyzer/test/src/diagnostics/todo_test.dart b/pkg/analyzer/test/src/diagnostics/todo_test.dart
index a72d8b3..6c07527 100644
--- a/pkg/analyzer/test/src/diagnostics/todo_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/todo_test.dart
@@ -146,13 +146,13 @@
 main() {
   // TODO: Implement something
   //  that is too long for one line
-  //  TODO: This is a seperate todo that is accidentally indented
+  //  TODO: This is a separate todo that is accidentally indented
 }
 ''', [
       error(TodoCode.TODO, 14, 61,
           text: 'TODO: Implement something that is too long for one line'),
       error(TodoCode.TODO, 82, 59,
-          text: 'TODO: This is a seperate todo that is accidentally indented'),
+          text: 'TODO: This is a separate todo that is accidentally indented'),
     ]);
   }
 
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol.dart b/pkg/analyzer_plugin/lib/protocol/protocol.dart
index 57673e6..0abe5d4 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol.dart
@@ -102,7 +102,7 @@
   ///     'id': String,
   ///     'method': methodName,
   ///     'params': {
-  ///       paramter_name: value
+  ///       parameter_name: value
   ///     }
   ///   }
   ///
diff --git a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
index 52dbfbd..830140c 100644
--- a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
+++ b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
@@ -670,7 +670,7 @@
 }
 
 /// Matcher that matches a map of objects, where each key/value pair in the
-/// map satisies the given key and value matchers.
+/// map satisfies the given key and value matchers.
 class _MapOf extends _RecursiveMatcher {
   /// Matcher which every key in the map must satisfy.
   final Matcher keyMatcher;
diff --git a/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart b/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
index f4b9318..10e9c9f 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
@@ -946,7 +946,7 @@
     assertNotSuggested('r');
     assertNotSuggested('x');
 
-    // imported elements are portially filtered
+    // imported elements are partially filtered
     //assertNotSuggested('A');
     assertNotSuggested('_B');
     //assertNotSuggested('C');
@@ -2511,7 +2511,7 @@
     assertSuggestGetter('length', 'int');
   }
 
-  Future<void> test_local_propogatedType() async {
+  Future<void> test_local_propagatedType() async {
     addTestSource('foo() {var x = "bar"; x.^}');
     await computeSuggestions();
     assertSuggestGetter('length', 'int');
diff --git a/pkg/compiler/test/deferred/follow_constant_dependencies_test.dart b/pkg/compiler/test/deferred/follow_constant_dependencies_test.dart
index 3b05b87..f35da83 100644
--- a/pkg/compiler/test/deferred/follow_constant_dependencies_test.dart
+++ b/pkg/compiler/test/deferred/follow_constant_dependencies_test.dart
@@ -60,7 +60,7 @@
 }
 
 // The main library imports lib1 and lib2 deferred and use lib1.foo1 and
-// lib2.foo2.  This should trigger seperate outputunits for main, lib1 and lib2.
+// lib2.foo2.  This should trigger separate outputunits for main, lib1 and lib2.
 //
 // Both lib1 and lib2 import lib3 directly and
 // both use lib3.foo3.  Therefore a shared output unit for lib1 and lib2 should
diff --git a/pkg/compiler/test/deferred/load_graph_segmentation2_test.dart b/pkg/compiler/test/deferred/load_graph_segmentation2_test.dart
index e579680..77ec393 100644
--- a/pkg/compiler/test/deferred/load_graph_segmentation2_test.dart
+++ b/pkg/compiler/test/deferred/load_graph_segmentation2_test.dart
@@ -31,7 +31,7 @@
 }
 
 // The main library imports lib1 and lib2 deferred and use lib1.foo1 and
-// lib2.foo2.  This should trigger seperate outputunits for main, lib1 and lib2.
+// lib2.foo2.  This should trigger separate outputunits for main, lib1 and lib2.
 //
 // Both lib1 and lib2 import lib3 directly and
 // both use lib3.foo3.  Therefore a shared output unit for lib1 and lib2 should
diff --git a/pkg/compiler/test/deferred/load_graph_segmentation_test.dart b/pkg/compiler/test/deferred/load_graph_segmentation_test.dart
index 8fc553a..01efd9b 100644
--- a/pkg/compiler/test/deferred/load_graph_segmentation_test.dart
+++ b/pkg/compiler/test/deferred/load_graph_segmentation_test.dart
@@ -86,7 +86,7 @@
 }
 
 // The main library imports lib1 and lib2 deferred and use lib1.foo1 and
-// lib2.foo2.  This should trigger seperate output units for main, lib1 and
+// lib2.foo2.  This should trigger separate output units for main, lib1 and
 // lib2.
 //
 // Both lib1 and lib2 import lib3 directly and
diff --git a/pkg/compiler/tool/kernel_visitor/test/test_classes.dart b/pkg/compiler/tool/kernel_visitor/test/test_classes.dart
index 666d5ae..2fa71e8 100644
--- a/pkg/compiler/tool/kernel_visitor/test/test_classes.dart
+++ b/pkg/compiler/tool/kernel_visitor/test/test_classes.dart
@@ -57,7 +57,7 @@
   }
 }
 
-// Test class with unoverriden superclass method
+// Test class with unoverridden superclass method
 class G extends A {
   G();
 }
diff --git a/pkg/dartdev/lib/src/events.dart b/pkg/dartdev/lib/src/events.dart
index d2dad35..5b31ef1 100644
--- a/pkg/dartdev/lib/src/events.dart
+++ b/pkg/dartdev/lib/src/events.dart
@@ -69,7 +69,7 @@
   commandFlags.sort();
   specifiedExperiments.sort();
 
-  // Insert a seperator before and after the flags list to make it easier to filter
+  // Insert a separator before and after the flags list to make it easier to filter
   // for a specific flag:
   final enabledExperimentsString = ' ${specifiedExperiments.join(' ')} ';
   final commandFlagsString = ' ${commandFlags.join(' ')} ';
diff --git a/pkg/dds/lib/src/dap/adapters/dart.dart b/pkg/dds/lib/src/dap/adapters/dart.dart
index 209649a..bf7cf96 100644
--- a/pkg/dds/lib/src/dap/adapters/dart.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart.dart
@@ -1623,7 +1623,7 @@
 
   /// Creates one or more OutputEvents for the provided [message].
   ///
-  /// Messages that contain stack traces may be split up into seperate events
+  /// Messages that contain stack traces may be split up into separate events
   /// for each frame to allow location metadata to be attached.
   Future<List<OutputEventBody>> _buildOutputEvents(
     String category,
diff --git a/pkg/dds/lib/src/dap/isolate_manager.dart b/pkg/dds/lib/src/dap/isolate_manager.dart
index 5af7f41..ff6fc4a 100644
--- a/pkg/dds/lib/src/dap/isolate_manager.dart
+++ b/pkg/dds/lib/src/dap/isolate_manager.dart
@@ -104,7 +104,7 @@
   /// when asking for data so it's all stored together here.
   final _storedData = <int, _StoredData>{};
 
-  /// A pattern that matches an opening brace `{` that was not preceeded by a
+  /// A pattern that matches an opening brace `{` that was not preceded by a
   /// dollar.
   ///
   /// Any leading character matched in place of the dollar is in the first capture.
@@ -883,7 +883,7 @@
         }
       } catch (e) {
         // We can't leave dangling completers here because others may already
-        // be waiting on them, so propogate the error to them.
+        // be waiting on them, so propagate the error to them.
         completers.forEach((uri, completer) => completer.completeError(e));
         rethrow;
       }
diff --git a/pkg/dds/test/dap/integration/dart_test_test.dart b/pkg/dds/test/dap/integration/dart_test_test.dart
index de25a7e..c04535c 100644
--- a/pkg/dds/test/dap/integration/dart_test_test.dart
+++ b/pkg/dds/test/dap/integration/dart_test_test.dart
@@ -20,7 +20,7 @@
     /// A helper that verifies a full set of expected test results for the
     /// [simpleTestProgram] script.
     void expectStandardSimpleTestResults(TestEvents events) {
-      // Check we recieved all expected test events passed through from
+      // Check we received all expected test events passed through from
       // package:test.
       final eventNames =
           events.testNotifications.map((e) => e['type']).toList();
diff --git a/pkg/dds/test/dap/integration/debug_test.dart b/pkg/dds/test/dap/integration/debug_test.dart
index 9044657..b14966d 100644
--- a/pkg/dds/test/dap/integration/debug_test.dart
+++ b/pkg/dds/test/dap/integration/debug_test.dart
@@ -275,7 +275,7 @@
     test('can shutdown during startup', () async {
       final testFile = dap.createTestFile(simpleArgPrintingProgram);
 
-      // Terminate the app immediately upon recieving the first Thread event.
+      // Terminate the app immediately upon receiving the first Thread event.
       // The DAP is also responding to this event to configure the isolate (eg.
       // set breakpoints and exception pause behaviour) and will cause it to
       // receive "Service has disappeared" responses if these are in-flight as
diff --git a/pkg/dds/test/dap/integration/test_client.dart b/pkg/dds/test/dap/integration/test_client.dart
index 1a7c817..08afc51 100644
--- a/pkg/dds/test/dap/integration/test_client.dart
+++ b/pkg/dds/test/dap/integration/test_client.dart
@@ -176,7 +176,7 @@
       'Event "$event"',
       _eventController.stream.firstWhere((e) => e.event == event,
           orElse: () =>
-              throw 'Did not recieve $event event before stream closed'));
+              throw 'Did not receive $event event before stream closed'));
 
   /// Returns a stream for [event] events.
   Stream<Event> events(String event) {
@@ -673,7 +673,7 @@
 
   /// Collects all output events until the program terminates.
   ///
-  /// These results include all events in the order they are recieved, including
+  /// These results include all events in the order they are received, including
   /// console, stdout and stderr.
   ///
   /// Only one of [start] or [launch] may be provided. Use [start] to customise
@@ -701,7 +701,7 @@
 
   /// Collects all output and test events until the program terminates.
   ///
-  /// These results include all events in the order they are recieved, including
+  /// These results include all events in the order they are received, including
   /// console, stdout, stderr and test notifications from the test JSON reporter.
   ///
   /// Only one of [start] or [launch] may be provided. Use [start] to customise
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 0e143ed..b114e2b 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -11,7 +11,7 @@
 ///
 /// For example, postfix increment can be desugared as:
 ///
-///     // psuedocode mix of Scheme and JS:
+///     // pseudocode mix of Scheme and JS:
 ///     (let* (x1=expr1, x2=expr2, t=x1[x2]) { x1[x2] = t + 1; t })
 ///
 /// [MetaLet] will simplify itself automatically when [toExpression],
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index b181fd5..ba728a0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -36,7 +36,7 @@
 
 import '../type_inference/type_schema.dart' show UnknownType;
 
-import 'inference_visitor.dart';
+import '../type_inference/inference_visitor.dart';
 
 int getExtensionTypeParameterCount(Arguments arguments) {
   if (arguments is ArgumentsImpl) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart
similarity index 99%
rename from pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
rename to pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart
index 08270a4..836e680 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart
@@ -16,15 +16,8 @@
         InstrumentationValueForType,
         InstrumentationValueForTypeArgs;
 import '../fasta_codes.dart';
-import '../names.dart';
-import '../problems.dart' show unhandled;
-import '../source/source_library_builder.dart';
-import '../type_inference/type_constraint_gatherer.dart';
-import '../type_inference/type_inference_engine.dart';
-import '../type_inference/type_inferrer.dart';
-import '../type_inference/type_schema.dart' show UnknownType;
-import 'body_builder.dart' show combineStatements;
-import 'collections.dart'
+import '../kernel/body_builder.dart' show combineStatements;
+import '../kernel/collections.dart'
     show
         ForElement,
         ForInElement,
@@ -35,9 +28,16 @@
         SpreadElement,
         SpreadMapEntry,
         convertToElement;
-import 'implicit_type_argument.dart' show ImplicitTypeArgument;
-import 'internal_ast.dart';
-import 'late_lowering.dart' as late_lowering;
+import '../kernel/implicit_type_argument.dart' show ImplicitTypeArgument;
+import '../kernel/internal_ast.dart';
+import '../kernel/late_lowering.dart' as late_lowering;
+import '../names.dart';
+import '../problems.dart' show unhandled;
+import '../source/source_library_builder.dart';
+import 'type_constraint_gatherer.dart';
+import 'type_inference_engine.dart';
+import 'type_inferrer.dart';
+import 'type_schema.dart' show UnknownType;
 
 class InferenceVisitor
     implements
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 7a5c30e..b07d750 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -33,7 +33,7 @@
 import '../kernel/benchmarker.dart' show BenchmarkSubdivides, Benchmarker;
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/hierarchy/class_member.dart' show ClassMember;
-import '../kernel/inference_visitor.dart';
+import 'inference_visitor.dart';
 import '../kernel/internal_ast.dart';
 import '../kernel/invalid_type.dart';
 import '../kernel/kernel_helper.dart';
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index ca5b58f..fe79f6e 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -2266,7 +2266,6 @@
 precedence
 precedes
 preceding
-preceeding
 precise
 precisely
 precision
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index d26b884..2ea7e14 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -8752,7 +8752,7 @@
     await _checkSingleFileChanges(content, expected);
   }
 
-  Future<void> test_typedef_assign_null_type_formal_with_paramter() async {
+  Future<void> test_typedef_assign_null_type_formal_with_parameter() async {
     var content = '''
 typedef F<R> = Function<T>(T);
 
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index a843655..feca390 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -898,8 +898,8 @@
     // http://dartbug.com/45137
     // enableColors calls `stdout.supportsAnsiEscapes` which - on Windows -
     // does something with line endings. To avoid this when no error
-    // messages are do be printed anyway, we are carefull not to call it unless
-    // neccessary.
+    // messages are do be printed anyway, we are careful not to call it unless
+    // necessary.
     if (compiler.errorsColorized.isNotEmpty) {
       final List<String> errors =
           (enableColors) ? compiler.errorsColorized : compiler.errorsPlain;
diff --git a/pkg/vm/bin/protobuf_aware_treeshaker.dart b/pkg/vm/bin/protobuf_aware_treeshaker.dart
index bb746af..3f8e3bc 100644
--- a/pkg/vm/bin/protobuf_aware_treeshaker.dart
+++ b/pkg/vm/bin/protobuf_aware_treeshaker.dart
@@ -65,7 +65,7 @@
     ..addFlag('remove-source',
         help: 'Removes source code from the emitted dill', defaultsTo: false)
     ..addFlag('verbose',
-        help: 'Write to stdout about what classes and fields where remeoved')
+        help: 'Write to stdout about what classes and fields where removed')
     ..addFlag('help', help: 'Prints this help', negatable: false);
 
   ArgResults? argResults;
diff --git a/pkg/vm/lib/transformations/continuation.dart b/pkg/vm/lib/transformations/continuation.dart
index 4201896..adba50a 100644
--- a/pkg/vm/lib/transformations/continuation.dart
+++ b/pkg/vm/lib/transformations/continuation.dart
@@ -492,7 +492,7 @@
   ShadowRewriter(this.enclosingFunction) {
     for (final parameter in enclosingFunction.positionalParameters
         .followedBy(enclosingFunction.namedParameters)) {
-      // Put in placeholers so we can allocate new variables lazily- i.e. only
+      // Put in placeholders so we can allocate new variables lazily- i.e. only
       // if they're later referenced.
       _shadowedParameters[parameter] = null;
     }
diff --git a/pkg/vm/lib/transformations/deferred_loading.dart b/pkg/vm/lib/transformations/deferred_loading.dart
index 91beb11..e581096 100644
--- a/pkg/vm/lib/transformations/deferred_loading.dart
+++ b/pkg/vm/lib/transformations/deferred_loading.dart
@@ -108,7 +108,7 @@
 
   // 4. Sort loading units so parents are before children. Normally this order
   // would already exist as a side effect of loading sources in import order,
-  // but this isn't guarenteed when combining separately produced kernel files.
+  // but this isn't guaranteed when combining separately produced kernel files.
   for (var unit in loadingUnits) {
     var parent = unit.parent;
     if (parent != null) {
diff --git a/pkg/vm/lib/transformations/ffi/definitions.dart b/pkg/vm/lib/transformations/ffi/definitions.dart
index db61bcb..e859a61 100644
--- a/pkg/vm/lib/transformations/ffi/definitions.dart
+++ b/pkg/vm/lib/transformations/ffi/definitions.dart
@@ -747,7 +747,7 @@
     return result;
   }
 
-  /// Must only be called if all the depencies are already in the cache.
+  /// Must only be called if all the dependencies are already in the cache.
   CompoundNativeTypeCfe _compoundAnnotatedNativeTypeCfe(Class compoundClass) {
     final layoutConstant = _compoundAnnotatedFields(compoundClass)!;
     final fieldTypes = layoutConstant
diff --git a/pkg/vm/lib/transformations/ffi/use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
index c45cc02..725db11 100644
--- a/pkg/vm/lib/transformations/ffi/use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -134,7 +134,7 @@
       return super.visitStaticInvocation(node);
     }
     // We've just created this node. We're likely not going to need to transform
-    // this node itself. Visit its sub exprssions.
+    // this node itself. Visit its sub expressions.
     return super.defaultExpression(modifiedExpression);
   }
 
@@ -270,7 +270,7 @@
           isLeaf = false;
         }
 
-        // Inline function body to make all type arguments instatiated.
+        // Inline function body to make all type arguments instantiated.
         final replacement = StaticInvocation(
             asFunctionInternal,
             Arguments([node.arguments.positional[0], BoolLiteral(isLeaf)],
@@ -386,7 +386,7 @@
         _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
 
         // Inline the body to get rid of a generic invocation of sizeOf.
-        // TODO(http://dartbug.com/39964): Add `allignmentOf<T>()` call.
+        // TODO(http://dartbug.com/39964): Add `alignmentOf<T>()` call.
         Expression? sizeInBytes = _inlineSizeOf(nativeType as InterfaceType);
         if (sizeInBytes != null) {
           if (node.arguments.positional.length == 2) {
@@ -761,7 +761,7 @@
       return super.visitInstanceInvocation(node);
     }
     // We've just created this node. We're likely not going to need to transform
-    // this node itself. Visit its sub exprssions.
+    // this node itself. Visit its sub expressions.
     return super.defaultExpression(modifiedExpression);
   }
 
diff --git a/pkg/vm/lib/transformations/pragma.dart b/pkg/vm/lib/transformations/pragma.dart
index 2b127e7..fe33aed 100644
--- a/pkg/vm/lib/transformations/pragma.dart
+++ b/pkg/vm/lib/transformations/pragma.dart
@@ -13,7 +13,7 @@
 const kResultTypeUsesPassedTypeArguments =
     "result-type-uses-passed-type-arguments";
 const kVmRecognizedPragmaName = "vm:recognized";
-const kVmDisableUnboxedParametetersPragmaName = "vm:disable-unboxed-parameters";
+const kVmDisableUnboxedParametersPragmaName = "vm:disable-unboxed-parameters";
 
 // Pragmas recognized by dart2wasm
 const kWasmEntryPointPragmaName = "wasm:entry-point";
@@ -153,7 +153,7 @@
               "pragma: $options";
         }
         return new ParsedRecognized(type);
-      case kVmDisableUnboxedParametetersPragmaName:
+      case kVmDisableUnboxedParametersPragmaName:
         return new ParsedDisableUnboxedParameters();
       case kWasmEntryPointPragmaName:
         return ParsedEntryPointPragma(PragmaEntryPointType.Default);
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 7ce0b51..b061cb1b 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -2460,7 +2460,7 @@
 
   ConstantAllocationCollector(this.summaryCollector);
 
-  // Ensures the transtive graph of [constant] got scanned for potential
+  // Ensures the transitive graph of [constant] got scanned for potential
   // allocations and field types.  Returns the [Type] of this constant.
   Type typeFor(Constant constant) {
     return constants.putIfAbsent(constant, () => constant.accept(this));
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index ecf11c7..0b3a78c 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -425,7 +425,7 @@
           node is! StaticTearOff) {
         // The compiler uses another heuristic in addition to the call-site
         // annotation: if the call-site is non-dynamic and the interface target does
-        // not exist in the parent chain of _Smi (int is used as an approxmiation
+        // not exist in the parent chain of _Smi (int is used as an approximation
         // here), then the receiver cannot be _Smi. This heuristic covers most
         // cases, so we skip these to avoid showering the AST with annotations.
         if (interfaceTarget == null ||
diff --git a/pkg/vm/lib/transformations/unreachable_code_elimination.dart b/pkg/vm/lib/transformations/unreachable_code_elimination.dart
index d61b8f4..eb0526b 100644
--- a/pkg/vm/lib/transformations/unreachable_code_elimination.dart
+++ b/pkg/vm/lib/transformations/unreachable_code_elimination.dart
@@ -168,7 +168,7 @@
   @override
   TreeNode visitTryCatch(TryCatch node, TreeNode? removalSentinel) {
     node.transformOrRemoveChildren(this);
-    // Can replace try/catch with its body if all catches are just rethow.
+    // Can replace try/catch with its body if all catches are just rethrow.
     for (Catch catchClause in node.catches) {
       if (!_isRethrow(catchClause.body)) {
         return node;
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 0e6735f..aaf4463 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -639,7 +639,7 @@
       return coverageLines;
     }
 
-    test('compile seperatly, check coverage', () async {
+    test('compile separately, check coverage', () async {
       Directory dir = mytest.createTempSync();
 
       // First compile lib, run and verify coverage (un-named constructor
@@ -676,7 +676,7 @@
       compiler.accept();
 
       // Then compile lib, run and verify coverage (un-named constructor
-      // covered, and the named constructor coveraged too).
+      // covered, and the named constructor covered too).
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
       compilerResult = await compiler.compile(entryPoints: [main.uri]);
       component = compilerResult.component;
@@ -714,7 +714,7 @@
         //
         // Shift lines down by five
         // lines so the original
-        // lines can't be coverred
+        // lines can't be covered
         //
         class Foo {
           final int x;
diff --git a/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart b/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
index 2383312..8607c58 100644
--- a/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
+++ b/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
@@ -57,7 +57,7 @@
   }
 
   String toString() {
-    print('overriden toString'); // LINE_H
+    print('overridden toString'); // LINE_H
     return '';
   }
 }
diff --git a/runtime/bin/dartdev_isolate.cc b/runtime/bin/dartdev_isolate.cc
index 93259b0..d33b0de 100644
--- a/runtime/bin/dartdev_isolate.cc
+++ b/runtime/bin/dartdev_isolate.cc
@@ -60,7 +60,7 @@
 
 Utils::CStringUniquePtr DartDevIsolate::TryResolveArtifactPath(
     const char* filename) {
-  // |dir_prefix| includes the last path seperator.
+  // |dir_prefix| includes the last path separator.
   auto dir_prefix = EXEUtils::GetDirectoryPrefixFromExeName();
 
   // First assume we're in dart-sdk/bin.
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index e274351..30b0fd67 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -99,7 +99,7 @@
     return;
   }
 
-  // |dir_prefix| includes the last path seperator.
+  // |dir_prefix| includes the last path separator.
   auto dir_prefix = EXEUtils::GetDirectoryPrefixFromExeName();
 
   // Look for the frontend snapshot next to the executable.
diff --git a/runtime/bin/secure_socket_filter.cc b/runtime/bin/secure_socket_filter.cc
index 8a3fb56..25a9bb2 100644
--- a/runtime/bin/secure_socket_filter.cc
+++ b/runtime/bin/secure_socket_filter.cc
@@ -608,7 +608,7 @@
     //
     // If either of those functions fail, and this.callback_error has not
     // already been set, then they will set this.callback_error to an error
-    // handle i.e. only the first error will be captured and propogated.
+    // handle i.e. only the first error will be captured and propagated.
     Dart_PropagateError(callback_error);
   }
   if (SSL_want_write(ssl_) || SSL_want_read(ssl_)) {
diff --git a/runtime/docs/index.md b/runtime/docs/index.md
index 4a63f9e..8e261b0 100644
--- a/runtime/docs/index.md
+++ b/runtime/docs/index.md
@@ -205,7 +205,7 @@
            test.dart
     ```
 
-It is important to highlight that the code generated by optimizing compiler is specialized under speculative assumptions based on the execution profile of the application. For example, a dynamic call site that only observed instances of a single class `C` as a receiver will be converted into a direct call preceeded by a check verifying that receiver has an expected class `C`. However these assumptions might be violated later during execution of the program:
+It is important to highlight that the code generated by optimizing compiler is specialized under speculative assumptions based on the execution profile of the application. For example, a dynamic call site that only observed instances of a single class `C` as a receiver will be converted into a direct call preceded by a check verifying that receiver has an expected class `C`. However these assumptions might be violated later during execution of the program:
 
 ```dart
 void printAnimal(obj) {
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index f8afbcf..4f2fc30 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -1552,7 +1552,7 @@
 
 /**
  * Drains the microtask queue, then blocks the calling thread until the current
- * isolate recieves a message, then handles all messages.
+ * isolate receives a message, then handles all messages.
  *
  * \param timeout_millis When non-zero, the call returns after the indicated
           number of milliseconds even if no message was received.
@@ -3293,9 +3293,9 @@
  * call Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError before the
  * handler returns.
  *
- * If an error is returned, it will be propogated through
+ * If an error is returned, it will be propagated through
  * `prefix.loadLibrary()`. This is useful for synchronous
- * implementations, which must propogate any unwind errors from
+ * implementations, which must propagate any unwind errors from
  * Dart_DeferredLoadComplete or Dart_DeferredLoadComplete. Otherwise the handler
  * should return a non-error such as `Dart_Null()`.
  */
diff --git a/runtime/include/dart_tools_api.h b/runtime/include/dart_tools_api.h
index 027bef5..fc7bd0e 100644
--- a/runtime/include/dart_tools_api.h
+++ b/runtime/include/dart_tools_api.h
@@ -169,7 +169,7 @@
  * \param response_json_length The length of the returned json response.
  * \param error An optional error, must be free()ed by caller.
  *
- * \return Whether the call was sucessfully performed.
+ * \return Whether the call was successfully performed.
  *
  * NOTE: This method does not need a current isolate and must not have the
  * vm-isolate being the current isolate. It must be called after
@@ -350,7 +350,7 @@
  * Enable tracking of specified timeline category. This is operational
  * only when systrace timeline functionality is turned on.
  *
- * \param categories A comma seperated list of categories that need to
+ * \param categories A comma separated list of categories that need to
  *   be enabled, the categories are
  *   "all" : All categories
  *   "API" - Execution of Dart C API functions
@@ -365,7 +365,7 @@
  *   "" - None
  *
  *  When "all" is specified all the categories are enabled.
- *  When a comma seperated list of categories is specified, the categories
+ *  When a comma separated list of categories is specified, the categories
  *   that are specified will be enabled and the rest will be disabled. 
  *  When "" is specified all the categories are disabled.
  *  The category names are case sensitive.
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index f34a8e6..e921c25 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -769,7 +769,7 @@
 
   bool EnsureIsRunnable(Isolate* child) {
     // We called out to the embedder to create/initialize a new isolate. The
-    // embedder callback sucessfully did so. It is now our responsibility to
+    // embedder callback successfully did so. It is now our responsibility to
     // run the isolate.
     // If the isolate was not marked as runnable, we'll do so here and run it.
     if (!child->is_runnable()) {
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index e7bec95..486220a 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -950,7 +950,7 @@
     "../../../tests/language/deferred/shadow_load_library_test.dart",
     "../../../tests/language/deferred/shared_and_unshared_classes_test.dart",
     "../../../tests/language/deferred/split_constants_canonicalization_test.dart",
-    "../../../tests/language/deferred/static_seperate_test.dart",
+    "../../../tests/language/deferred/static_separate_test.dart",
     "../../../tests/language/deferred/super_dependency_runtime_test.dart",
     "../../../tests/language/deferred/unreachable_loading_unit_test.dart",
     "../../../tests/language/double/comparison_test.dart",
@@ -4359,7 +4359,7 @@
     "../../../tests/language_2/deferred/shadow_load_library_test.dart",
     "../../../tests/language_2/deferred/shared_and_unshared_classes_test.dart",
     "../../../tests/language_2/deferred/split_constants_canonicalization_test.dart",
-    "../../../tests/language_2/deferred/static_seperate_test.dart",
+    "../../../tests/language_2/deferred/static_separate_test.dart",
     "../../../tests/language_2/deferred/super_dependency_runtime_test.dart",
     "../../../tests/language_2/deferred/unreachable_loading_unit_test.dart",
     "../../../tests/language_2/double/comparison_test.dart",
diff --git a/runtime/tests/vm/dart/double_field_assignment_test.dart b/runtime/tests/vm/dart/double_field_assignment_test.dart
index ba95348..522964b 100644
--- a/runtime/tests/vm/dart/double_field_assignment_test.dart
+++ b/runtime/tests/vm/dart/double_field_assignment_test.dart
@@ -37,7 +37,7 @@
     a.val = 99.0;
   }
 
-  // Ensure value (aka valueAlias) was not overriden with 99.0
+  // Ensure value (aka valueAlias) was not overridden with 99.0
   Expect.equals(4.2, valueAlias);
 }
 
@@ -55,7 +55,7 @@
     a.val = 99.0;
   }
 
-  // Ensure value (aka valueAlias) was not overriden with 99.0
+  // Ensure value (aka valueAlias) was not overridden with 99.0
   Expect.equals(4.2, valueAlias);
 }
 
diff --git a/runtime/tests/vm/dart_2/double_field_assignment_test.dart b/runtime/tests/vm/dart_2/double_field_assignment_test.dart
index ff47867..1d48183 100644
--- a/runtime/tests/vm/dart_2/double_field_assignment_test.dart
+++ b/runtime/tests/vm/dart_2/double_field_assignment_test.dart
@@ -39,7 +39,7 @@
     a.val = 99.0;
   }
 
-  // Ensure value (aka valueAlias) was not overriden with 99.0
+  // Ensure value (aka valueAlias) was not overridden with 99.0
   Expect.equals(4.2, valueAlias);
 }
 
@@ -57,7 +57,7 @@
     a.val = 99.0;
   }
 
-  // Ensure value (aka valueAlias) was not overriden with 99.0
+  // Ensure value (aka valueAlias) was not overridden with 99.0
   Expect.equals(4.2, valueAlias);
 }
 
diff --git a/runtime/tools/dartfuzz/dartfuzz.dart b/runtime/tools/dartfuzz/dartfuzz.dart
index 7326e20..fbfdce2 100644
--- a/runtime/tools/dartfuzz/dartfuzz.dart
+++ b/runtime/tools/dartfuzz/dartfuzz.dart
@@ -843,7 +843,7 @@
     while (parentClass >= 0) {
       vcm[parentClass] = <int>[];
       for (var j = 0, n = classMethods[parentClass].length; j < n; j++) {
-        // Call methods are presently always already overriden, so we
+        // Call methods are presently always already overridden, so we
         // shouldn't override them here.
         if (rollDice(8) && !(classMethods[parentClass][j] is CallMethod)) {
           currentClassIndex = parentClass;
diff --git a/runtime/tools/dartfuzz/gen_type_table.dart b/runtime/tools/dartfuzz/gen_type_table.dart
index 31fd62d..b764c28 100644
--- a/runtime/tools/dartfuzz/gen_type_table.dart
+++ b/runtime/tools/dartfuzz/gen_type_table.dart
@@ -133,7 +133,7 @@
   return false;
 }
 
-// Returns true if any of the paramters in the list fails the
+// Returns true if any of the parameters in the list fails the
 // filter criteria.
 bool shouldFilterParameterList(List<String> parameters,
     {bool fp = true, bool flatTp = false}) {
@@ -146,7 +146,7 @@
 }
 
 // Filter a set of a list of parameters according to their type.
-// A paramter list is only retained if all of the contained paramters
+// A parameter list is only retained if all of the contained parameters
 // pass the filter criteria.
 Set<List<String>> filterParameterList(Set<List<String>> parameterList,
     {bool fp = true, bool flatTp = false}) {
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 8a714cf..9ccd092 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -1458,7 +1458,7 @@
   // offset is not yet known and needs therefore relocation to the right place
   // before the code can be used.
   //
-  // The neccessary information for the "linker" (i.e. the relocation
+  // The necessary information for the "linker" (i.e. the relocation
   // information) is stored in [UntaggedCode::static_calls_target_table_]: an
   // entry of the form
   //
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index fa1d808..a13f06a7 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -2206,7 +2206,7 @@
   // is not yet known and needs therefore relocation to the right place before
   // the code can be used.
   //
-  // The neccessary information for the "linker" (i.e. the relocation
+  // The necessary information for the "linker" (i.e. the relocation
   // information) is stored in [UntaggedCode::static_calls_target_table_]: an
   // entry of the form
   //
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h
index eb2708e..f62f545 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.h
+++ b/runtime/vm/compiler/assembler/assembler_riscv.h
@@ -1320,7 +1320,7 @@
   // is not yet known and needs therefore relocation to the right place before
   // the code can be used.
   //
-  // The neccessary information for the "linker" (i.e. the relocation
+  // The necessary information for the "linker" (i.e. the relocation
   // information) is stored in [UntaggedCode::static_calls_target_table_]: an
   // entry of the form
   //
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 95d5237..58a3f56 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -5124,7 +5124,7 @@
   // better optimized by the compiler.
   //
   // TODO(dartbug.com/37291): Allow this optimization, but accumulate affected
-  // InstanceCallInstrs and the corresponding reciever cids during compilation.
+  // InstanceCallInstrs and the corresponding receiver cids during compilation.
   // After compilation, add receiver checks to the ICData for those call sites.
   if (Targets().is_empty()) return this;
 
diff --git a/runtime/vm/compiler/call_specializer.h b/runtime/vm/compiler/call_specializer.h
index 7e84402..c4ac095 100644
--- a/runtime/vm/compiler/call_specializer.h
+++ b/runtime/vm/compiler/call_specializer.h
@@ -24,7 +24,7 @@
 //
 //    * Replace a call to a binary arithmetic operator with corresponding IL
 //      instructions and necessary checks;
-//    * Replace a dynamic call with a static call, if reciever is known
+//    * Replace a dynamic call with a static call, if receiver is known
 //      to have a certain class id;
 //    * Replace type check with a range check
 //
diff --git a/runtime/vm/compiler/ffi/marshaller.h b/runtime/vm/compiler/ffi/marshaller.h
index b7607e9..175e12e 100644
--- a/runtime/vm/compiler/ffi/marshaller.h
+++ b/runtime/vm/compiler/ffi/marshaller.h
@@ -85,7 +85,7 @@
     return Location(arg_index).payload_type().AsRepresentationOverApprox(zone_);
   }
 
-  // Representation on how the value is passed to or recieved from the FfiCall
+  // Representation on how the value is passed to or received from the FfiCall
   // instruction or StaticCall, NativeParameter, and NativeReturn instructions.
   virtual Representation RepInFfiCall(intptr_t def_index_global) const;
   void RepsInFfiCall(intptr_t arg_index,
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index 37651ab..4c1d97e 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -125,7 +125,7 @@
 // kSharedWithVariable:
 //
 //   A temporary variable is allocated and initialized to 0 on normal entry
-//   and 2 on unchecked entry. Code which should be ommitted on the unchecked
+//   and 2 on unchecked entry. Code which should be omitted on the unchecked
 //   entrypoint is made conditional on this variable being equal to 0.
 //
 enum class UncheckedEntryPointStyle {
diff --git a/runtime/vm/heap/safepoint_test.cc b/runtime/vm/heap/safepoint_test.cc
index 0693ec1..1741df3 100644
--- a/runtime/vm/heap/safepoint_test.cc
+++ b/runtime/vm/heap/safepoint_test.cc
@@ -133,7 +133,7 @@
 
 // This test ensures that while a "deopt safepoint operation" is about to start
 // but is still waiting for some threads to hit a "deopt safepoint" another
-// safepoint operation can sucessfully start and finish.
+// safepoint operation can successfully start and finish.
 ISOLATE_UNIT_TEST_CASE(
     SafepointOperation_SafepointOpWhileDeoptSafepointOpBlocked) {
   auto isolate_group = thread->isolate_group();
@@ -166,7 +166,7 @@
     gc->MarkAndNotify(GcWithoutDeoptTask::kStartSafepointOperation);
     gc->WaitUntil(GcWithoutDeoptTask::kEndSafepointOperation);
 
-    // We were sucessfully doing a safepoint operation, now let's ensure the
+    // We were successfully doing a safepoint operation, now let's ensure the
     // first thread is still stuck in the starting of deopt operation.
     deopt->AssertIsIn(DeoptTask::kStartDeoptOperation);
 
diff --git a/runtime/vm/service_isolate.h b/runtime/vm/service_isolate.h
index 4dff100..274dc60 100644
--- a/runtime/vm/service_isolate.h
+++ b/runtime/vm/service_isolate.h
@@ -31,11 +31,11 @@
   static Dart_Port Port();
   static void WaitForServiceIsolateStartup();
 
-  // Returns `true` if the request was sucessfully sent.  If it was, the
+  // Returns `true` if the request was successfully sent.  If it was, the
   // [reply_port] will receive a Dart_TypedData_kUint8 response json.
   //
   // If sending the rpc failed and [error] is not `nullptr` then [error] might
-  // be set to a string containting the reason for the failure. If so, the
+  // be set to a string containing the reason for the failure. If so, the
   // caller is responsible for free()ing the error.
   static bool SendServiceRpc(uint8_t* request_json,
                              intptr_t request_json_length,
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 2a6495b..9689781 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -729,7 +729,7 @@
 //
 // Therefore, to support this assumption, we scan the stack after a scavenge
 // or when concurrent marking begins and add all live temporaries in
-// Dart frames preceeding an exit frame to the store buffer or deferred
+// Dart frames preceding an exit frame to the store buffer or deferred
 // marking stack.
 void Thread::RestoreWriteBarrierInvariant(RestoreWriteBarrierInvariantOp op) {
   ASSERT(IsAtSafepoint());
diff --git a/samples-dev/swarm/swarm_ui_lib/layout/GridLayoutParser.dart b/samples-dev/swarm/swarm_ui_lib/layout/GridLayoutParser.dart
index 71f272d..7cc87e8 100644
--- a/samples-dev/swarm/swarm_ui_lib/layout/GridLayoutParser.dart
+++ b/samples-dev/swarm/swarm_ui_lib/layout/GridLayoutParser.dart
@@ -204,7 +204,7 @@
         if (c == DOT && !dot) {
           dot = true;
         } else {
-          // Not a digit or decimal seperator
+          // Not a digit or decimal separator
           break;
         }
       }
diff --git a/samples/ffi/sample_ffi_data.dart b/samples/ffi/sample_ffi_data.dart
index fd930f1..ef7ee07 100644
--- a/samples/ffi/sample_ffi_data.dart
+++ b/samples/ffi/sample_ffi_data.dart
@@ -195,8 +195,8 @@
   }
 
   {
-    // With IntPtr pointers, one could manually setup aribtrary data
-    // structres in C memory.
+    // With IntPtr pointers, one could manually setup arbitrary data
+    // structures in C memory.
     //
     // However, it is advised to use Pointer<Pointer<...>> for that.
 
diff --git a/samples_2/ffi/sample_ffi_data.dart b/samples_2/ffi/sample_ffi_data.dart
index ba82bec..a04a15a 100644
--- a/samples_2/ffi/sample_ffi_data.dart
+++ b/samples_2/ffi/sample_ffi_data.dart
@@ -197,8 +197,8 @@
   }
 
   {
-    // With IntPtr pointers, one could manually setup aribtrary data
-    // structres in C memory.
+    // With IntPtr pointers, one could manually setup arbitrary data
+    // structures in C memory.
     //
     // However, it is advised to use Pointer<Pointer<...>> for that.
 
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index fd3ffd1..ec8addd 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -162,7 +162,7 @@
 /// `--experiment-call-instrumentation`.
 ///
 /// By default, whenever a method is invoked for the first time, it prints an id
-/// and the method name to the console. This can be overriden by adding a top
+/// and the method name to the console. This can be overridden by adding a top
 /// level `dartCallInstrumentation` hook in JavaScript.
 @pragma('dart2js:noInline')
 void traceHelper(dynamic /*int*/ id, dynamic /*String*/ qualifiedName) {
@@ -2693,7 +2693,7 @@
 
   void initializeSomeLoadedHunks() {
     for (int i = nextHunkToInitialize; i < total; ++i) {
-      // A hunk is initialized only if all the preceeding hunks have been
+      // A hunk is initialized only if all the preceding hunks have been
       // initialized.
       if (waitingForLoad[i]) return;
       nextHunkToInitialize++;
diff --git a/sdk/lib/_internal/vm/lib/isolate_patch.dart b/sdk/lib/_internal/vm/lib/isolate_patch.dart
index 4e7b164..6cd14fc 100644
--- a/sdk/lib/_internal/vm/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/vm/lib/isolate_patch.dart
@@ -367,7 +367,7 @@
     }
     if (script.isScheme("package")) {
       if (Isolate._packageSupported()) {
-        // resolving script uri is not really neccessary, but can be useful
+        // resolving script uri is not really necessary, but can be useful
         // for better failed-to-lookup-function-in-a-script spawn errors.
         script = await Isolate.resolvePackageUri(script);
       }
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index f3bd2eb..377abe2 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -637,7 +637,7 @@
   /// objects will be copied.
   ///
   /// The send happens immediately and may have a linear time cost to copy the
-  /// transtive object graph. The send itself doesn't block (i.e. doesn't wait
+  /// transitive object graph. The send itself doesn't block (i.e. doesn't wait
   /// until the receiver has received the message). The corresponding receive
   /// port can receive the message as soon as its isolate's event loop is ready
   /// to deliver it, independently of what the sending isolate is doing.
diff --git a/sdk_args.gni b/sdk_args.gni
index aee1ed9..4b2a1e4 100644
--- a/sdk_args.gni
+++ b/sdk_args.gni
@@ -9,7 +9,7 @@
   #
   # This is used in rules that need to refer to `.git/logs/HEAD` to include
   # a hash in the version string. By default the folder is `.git`, but we define
-  # it as an argument so it can be overriden by users of `git-worktree` (See
+  # it as an argument so it can be overridden by users of `git-worktree` (See
   # Issue #33619).
   #
   # When using git-worktree, you can add
diff --git a/tests/corelib/double_parse_test.dart b/tests/corelib/double_parse_test.dart
index 7dc70e7..97e5c00 100644
--- a/tests/corelib/double_parse_test.dart
+++ b/tests/corelib/double_parse_test.dart
@@ -68,7 +68,7 @@
   testParseAllWhitespace("-$source", -result);
 }
 
-// Test parsing source, optionally preceeded and/or followed by whitespace.
+// Test parsing source, optionally preceded and/or followed by whitespace.
 void testParse(String source, double result, [name = ""]) {
   expectNumEquals(result, double.parse(source), "parse '$source:$name");
   expectNumEquals(result, double.parse(" $source"), "parse ' $source':$name");
diff --git a/tests/corelib/double_try_parse_test.dart b/tests/corelib/double_try_parse_test.dart
index 11dba69..ce8306e 100644
--- a/tests/corelib/double_try_parse_test.dart
+++ b/tests/corelib/double_try_parse_test.dart
@@ -67,7 +67,7 @@
   testParseAllWhitespace("-$source", -result);
 }
 
-// Test parsing source, optionally preceeded and/or followed by whitespace.
+// Test parsing source, optionally preceded and/or followed by whitespace.
 void testParse(String source, double result, [name = ""]) {
   expectNumEquals(result, double.tryParse(source), "parse '$source:$name");
   expectNumEquals(
diff --git a/tests/corelib/num_parse_test.dart b/tests/corelib/num_parse_test.dart
index b1049e5..848a52e 100644
--- a/tests/corelib/num_parse_test.dart
+++ b/tests/corelib/num_parse_test.dart
@@ -64,7 +64,7 @@
   testParseAllWhitespace("-$source", -result);
 }
 
-// Test parsing source, optionally preceeded and/or followed by whitespace.
+// Test parsing source, optionally preceded and/or followed by whitespace.
 void testParse(String source, num result) {
   expectNumEquals(result, num.parse(source), "parse '$source'");
   expectNumEquals(result, num.parse(" $source"), "parse ' $source'");
diff --git a/tests/corelib_2/double_parse_test.dart b/tests/corelib_2/double_parse_test.dart
index 5827596..991540a 100644
--- a/tests/corelib_2/double_parse_test.dart
+++ b/tests/corelib_2/double_parse_test.dart
@@ -70,7 +70,7 @@
   testParseAllWhitespace("-$source", -result);
 }
 
-// Test parsing source, optionally preceeded and/or followed by whitespace.
+// Test parsing source, optionally preceded and/or followed by whitespace.
 void testParse(String source, double result, [name = ""]) {
   expectNumEquals(result, double.parse(source), "parse '$source:$name");
   expectNumEquals(result, double.parse(" $source"), "parse ' $source':$name");
diff --git a/tests/corelib_2/double_try_parse_test.dart b/tests/corelib_2/double_try_parse_test.dart
index 19cdd92..c1f53d0 100644
--- a/tests/corelib_2/double_try_parse_test.dart
+++ b/tests/corelib_2/double_try_parse_test.dart
@@ -69,7 +69,7 @@
   testParseAllWhitespace("-$source", -result);
 }
 
-// Test parsing source, optionally preceeded and/or followed by whitespace.
+// Test parsing source, optionally preceded and/or followed by whitespace.
 void testParse(String source, double result, [name = ""]) {
   expectNumEquals(result, double.tryParse(source), "parse '$source:$name");
   expectNumEquals(
diff --git a/tests/corelib_2/num_parse_test.dart b/tests/corelib_2/num_parse_test.dart
index aae0428..3d6567e 100644
--- a/tests/corelib_2/num_parse_test.dart
+++ b/tests/corelib_2/num_parse_test.dart
@@ -66,7 +66,7 @@
   testParseAllWhitespace("-$source", -result);
 }
 
-// Test parsing source, optionally preceeded and/or followed by whitespace.
+// Test parsing source, optionally preceded and/or followed by whitespace.
 void testParse(String source, num result) {
   expectNumEquals(result, num.parse(source), "parse '$source'");
   expectNumEquals(result, num.parse(" $source"), "parse ' $source'");
diff --git a/tests/language/covariant_override/tear_off_type_test.dart b/tests/language/covariant_override/tear_off_type_test.dart
index 732aaf6..bd1012b 100644
--- a/tests/language/covariant_override/tear_off_type_test.dart
+++ b/tests/language/covariant_override/tear_off_type_test.dart
@@ -102,7 +102,7 @@
 void main() {
   testDirect();
   testInherited();
-  testOverriden();
+  testOverridden();
   testImplemented();
   testMixed();
 }
@@ -135,7 +135,7 @@
   Expect.isTrue(named is TakeNamedObjectsAndInts);
 }
 
-void testOverriden() {
+void testOverridden() {
   var method2 = new Override2().method;
   Expect.isTrue(method2 is TakeInts);
   Expect.isTrue(method2 is TakeObjectsAndInts);
diff --git a/tests/language/deferred/static_seperate_lib1.dart b/tests/language/deferred/static_separate_lib1.dart
similarity index 100%
rename from tests/language/deferred/static_seperate_lib1.dart
rename to tests/language/deferred/static_separate_lib1.dart
diff --git a/tests/language/deferred/static_seperate_lib2.dart b/tests/language/deferred/static_separate_lib2.dart
similarity index 93%
rename from tests/language/deferred/static_seperate_lib2.dart
rename to tests/language/deferred/static_separate_lib2.dart
index 683b9a4..48bf271 100644
--- a/tests/language/deferred/static_seperate_lib2.dart
+++ b/tests/language/deferred/static_separate_lib2.dart
@@ -5,7 +5,7 @@
 library lib2;
 
 import "package:expect/expect.dart";
-import "static_seperate_lib1.dart";
+import "static_separate_lib1.dart";
 
 foo() {
   Expect.equals(1, C.foo());
diff --git a/tests/language/deferred/static_seperate_test.dart b/tests/language/deferred/static_separate_test.dart
similarity index 86%
rename from tests/language/deferred/static_seperate_test.dart
rename to tests/language/deferred/static_separate_test.dart
index c920eb8..86e8826 100644
--- a/tests/language/deferred/static_seperate_test.dart
+++ b/tests/language/deferred/static_separate_test.dart
@@ -4,13 +4,13 @@
 
 // The class lib1.C is referenced via lib1
 // The static function lib1.C.foo is referenced via lib2
-// Dart2js will put them in seperate hunks.
+// Dart2js will put them in separate hunks.
 // Similarly for C2, ..., C5.
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
-import "static_seperate_lib1.dart" deferred as lib1;
-import "static_seperate_lib2.dart" deferred as lib2;
+import "static_separate_lib1.dart" deferred as lib1;
+import "static_separate_lib2.dart" deferred as lib2;
 
 void main() {
   asyncStart();
diff --git a/tests/language/mixin/super_with_initializer_test.dart b/tests/language/mixin/super_with_initializer_test.dart
index a59164b..f5d3482 100644
--- a/tests/language/mixin/super_with_initializer_test.dart
+++ b/tests/language/mixin/super_with_initializer_test.dart
@@ -5,7 +5,7 @@
 /// Regression test for mixin overrides (dartbug.com/44636).
 ///
 /// Prior to the fix, B's initializer was accidentally being applied on the
-/// overriden definition in C, and as a result, the program would stack
+/// overridden definition in C, and as a result, the program would stack
 /// overflow.
 import 'package:expect/expect.dart';
 
diff --git a/tests/language/nonfunction_type_aliases/private_names/private_name_extension_test.dart b/tests/language/nonfunction_type_aliases/private_names/private_name_extension_test.dart
index f7cfb84..61d1d3f 100644
--- a/tests/language/nonfunction_type_aliases/private_names/private_name_extension_test.dart
+++ b/tests/language/nonfunction_type_aliases/private_names/private_name_extension_test.dart
@@ -16,7 +16,7 @@
 }
 
 /// Extend a private class via a public typedef overriding methods and
-/// properties.  The final field `x` is overriden with a getter which returns
+/// properties.  The final field `x` is overridden with a getter which returns
 /// different values every time it is called.
 class AlsoDerived extends AlsoPublicClass {
   int backingStore = publicLibrarySentinel;
@@ -43,15 +43,15 @@
   Expect.throwsNoSuchMethodError(() => (p as dynamic)._privateInstanceMethod());
 }
 
-/// Test that overriden methods work correctly.
+/// Test that overridden methods work correctly.
 void test2() {
   var p = AlsoDerived();
   Expect.equals(publicLibrarySentinel, p.instanceMethod());
-  // Calling the overriden private method from this library should work.
+  // Calling the overridden private method from this library should work.
   Expect.equals(publicLibrarySentinel, p._privateInstanceMethod());
   // Calling the inherited private method from the private library should work.
   Expect.equals(privateLibrarySentinel, callPrivateInstanceMethod(p));
-  // Calling the overriden private method dynamically from this library should
+  // Calling the overridden private method dynamically from this library should
   // work.
   Expect.equals(publicLibrarySentinel, (p as dynamic)._privateInstanceMethod());
 }
@@ -66,7 +66,7 @@
   Expect.equals(privateLibrarySentinel, readInstanceField(p));
 }
 
-/// Test that overriden properties work correctly.
+/// Test that overridden properties work correctly.
 void test4() {
   var p = AlsoDerived();
   // Reading the original virtual field should give the private value.
diff --git a/tests/language/nonfunction_type_aliases/private_names/private_name_mixin_test.dart b/tests/language/nonfunction_type_aliases/private_names/private_name_mixin_test.dart
index 387d31b..797f425 100644
--- a/tests/language/nonfunction_type_aliases/private_names/private_name_mixin_test.dart
+++ b/tests/language/nonfunction_type_aliases/private_names/private_name_mixin_test.dart
@@ -30,7 +30,7 @@
 }
 
 void test1() {
-  // Test that the mixed in methods have been overriden correctly, and that the
+  // Test that the mixed in methods have been overridden correctly, and that the
   // private methods from the two libraries resolve correctly.
   var p = Derived1();
   Expect.equals(publicLibrarySentinel, p.mixinMethod());
diff --git a/tests/language/type_object/literal_type_literal_test.dart b/tests/language/type_object/literal_type_literal_test.dart
index 92da452..27f5085 100644
--- a/tests/language/type_object/literal_type_literal_test.dart
+++ b/tests/language/type_object/literal_type_literal_test.dart
@@ -30,13 +30,13 @@
 /// A typedef that defines a generic function type.
 typedef GenericFunc = int Function<T>(T);
 
-/// A typedef with a type paramter that defines a non-generic function type.
+/// A typedef with a type parameter that defines a non-generic function type.
 typedef int GenericTypedef<T>(T t);
 
 /// Semantically identical to [GenericTypedef], but using the Dart 2 syntax.
 typedef GenericTypedef2<T> = int Function(T);
 
-/// A typedef with a type paramter that defines a generic function type.
+/// A typedef with a type parameter that defines a generic function type.
 typedef GenericTypedefAndFunc<S> = S Function<T>(T);
 
 main() {
diff --git a/tests/language_2/covariant_override/tear_off_type_test.dart b/tests/language_2/covariant_override/tear_off_type_test.dart
index eb3b19f..fe676cd 100644
--- a/tests/language_2/covariant_override/tear_off_type_test.dart
+++ b/tests/language_2/covariant_override/tear_off_type_test.dart
@@ -102,7 +102,7 @@
 void main() {
   testDirect();
   testInherited();
-  testOverriden();
+  testOverridden();
   testImplemented();
   testMixed();
 }
@@ -135,7 +135,7 @@
   Expect.isTrue(named is TakeNamedObjectsAndInts);
 }
 
-void testOverriden() {
+void testOverridden() {
   var method2 = new Override2().method;
   Expect.isTrue(method2 is TakeInts);
   Expect.isTrue(method2 is TakeObjectsAndInts);
diff --git a/tests/language_2/deferred/static_seperate_lib1.dart b/tests/language_2/deferred/static_separate_lib1.dart
similarity index 100%
rename from tests/language_2/deferred/static_seperate_lib1.dart
rename to tests/language_2/deferred/static_separate_lib1.dart
diff --git a/tests/language_2/deferred/static_seperate_lib2.dart b/tests/language_2/deferred/static_separate_lib2.dart
similarity index 93%
rename from tests/language_2/deferred/static_seperate_lib2.dart
rename to tests/language_2/deferred/static_separate_lib2.dart
index e4dd526..c0d1377 100644
--- a/tests/language_2/deferred/static_seperate_lib2.dart
+++ b/tests/language_2/deferred/static_separate_lib2.dart
@@ -7,7 +7,7 @@
 library lib2;
 
 import "package:expect/expect.dart";
-import "static_seperate_lib1.dart";
+import "static_separate_lib1.dart";
 
 foo() {
   Expect.equals(1, C.foo());
diff --git a/tests/language_2/deferred/static_seperate_test.dart b/tests/language_2/deferred/static_separate_test.dart
similarity index 86%
rename from tests/language_2/deferred/static_seperate_test.dart
rename to tests/language_2/deferred/static_separate_test.dart
index c609597..366c61b 100644
--- a/tests/language_2/deferred/static_seperate_test.dart
+++ b/tests/language_2/deferred/static_separate_test.dart
@@ -6,13 +6,13 @@
 
 // The class lib1.C is referenced via lib1
 // The static function lib1.C.foo is referenced via lib2
-// Dart2js will put them in seperate hunks.
+// Dart2js will put them in separate hunks.
 // Similarly for C2, ..., C5.
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
-import "static_seperate_lib1.dart" deferred as lib1;
-import "static_seperate_lib2.dart" deferred as lib2;
+import "static_separate_lib1.dart" deferred as lib1;
+import "static_separate_lib2.dart" deferred as lib2;
 
 void main() {
   asyncStart();
diff --git a/tests/language_2/mixin/super_with_initializer_test.dart b/tests/language_2/mixin/super_with_initializer_test.dart
index cbbbbee..3a374d2 100644
--- a/tests/language_2/mixin/super_with_initializer_test.dart
+++ b/tests/language_2/mixin/super_with_initializer_test.dart
@@ -7,7 +7,7 @@
 /// Regression test for mixin overrides (dartbug.com/44636).
 ///
 /// Prior to the fix, B's initializer was accidentally being applied on the
-/// overriden definition in C, and as a result, the program would stack
+/// overridden definition in C, and as a result, the program would stack
 /// overflow.
 import 'package:expect/expect.dart';
 
diff --git a/tests/language_2/type_object/literal_type_literal_test.dart b/tests/language_2/type_object/literal_type_literal_test.dart
index 81eb9e2..6d64115 100644
--- a/tests/language_2/type_object/literal_type_literal_test.dart
+++ b/tests/language_2/type_object/literal_type_literal_test.dart
@@ -32,13 +32,13 @@
 /// A typedef that defines a generic function type.
 typedef GenericFunc = int Function<T>(T);
 
-/// A typedef with a type paramter that defines a non-generic function type.
+/// A typedef with a type parameter that defines a non-generic function type.
 typedef int GenericTypedef<T>(T t);
 
 /// Semantically identical to [GenericTypedef], but using the Dart 2 syntax.
 typedef GenericTypedef2<T> = int Function(T);
 
-/// A typedef with a type paramter that defines a generic function type.
+/// A typedef with a type parameter that defines a generic function type.
 typedef GenericTypedefAndFunc<S> = S Function<T>(T);
 
 main() {
diff --git a/tests/lib/async/stream_from_iterable_test.dart b/tests/lib/async/stream_from_iterable_test.dart
index 45c4014..e729dc3 100644
--- a/tests/lib/async/stream_from_iterable_test.dart
+++ b/tests/lib/async/stream_from_iterable_test.dart
@@ -210,7 +210,7 @@
 }
 
 // Collects value and error events in a list.
-// Value events preceeded by "value", error events by "error".
+// Value events preceded by "value", error events by "error".
 // Completes on done event.
 Future<List<Object>> collectEvents(Stream<Object> stream) {
   var c = new Completer<List<Object>>();
diff --git a/tests/lib/isolate/timer_multiple_isolates_test.dart b/tests/lib/isolate/timer_multiple_isolates_test.dart
index 0e47a88..f277e63 100644
--- a/tests/lib/isolate/timer_multiple_isolates_test.dart
+++ b/tests/lib/isolate/timer_multiple_isolates_test.dart
@@ -9,7 +9,7 @@
 
 child(msg) {
   var i = msg[0] as int;
-  var reponsePort = msg[1];
+  var responsePort = msg[1];
   print("Starting child $i");
 
   // Keep this isolate running to prevent its shutdown from touching the event
@@ -19,7 +19,7 @@
   // Try to get separate wakeups for each isolate.
   new Timer(new Duration(milliseconds: 100 * (i + 1)), () {
     print("Timer fired $i");
-    reponsePort.send(null);
+    responsePort.send(null);
   });
 }
 
diff --git a/tests/lib/js/external_nonjs_static_test.dart b/tests/lib/js/external_nonjs_static_test.dart
index 87c4615..71e5ab4 100644
--- a/tests/lib/js/external_nonjs_static_test.dart
+++ b/tests/lib/js/external_nonjs_static_test.dart
@@ -136,7 +136,7 @@
   external optionalParameterMethod([int? a, int b = 0]);
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
-  external overridenMethod();
+  external overriddenMethod();
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
 
@@ -145,7 +145,7 @@
 }
 
 class NonJSClass {
-  void overridenMethod() => 5;
+  void overriddenMethod() => 5;
 }
 
 extension ExtensionGenericNonJS<T> on GenericNonJSClass<T> {
diff --git a/tests/lib/js/external_static_test.dart b/tests/lib/js/external_static_test.dart
index a455de0..e4c503d 100644
--- a/tests/lib/js/external_static_test.dart
+++ b/tests/lib/js/external_static_test.dart
@@ -124,7 +124,7 @@
   external optionalParameterMethod([int? a, int b = 0]);
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
-  external overridenMethod();
+  external overriddenMethod();
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
 
@@ -142,7 +142,7 @@
 }
 
 class NonJSClass {
-  void overridenMethod() => 5;
+  void overriddenMethod() => 5;
 }
 
 extension ExtensionGenericNonJS<T> on GenericNonJSClass<T> {
diff --git a/tests/lib_2/async/stream_from_iterable_test.dart b/tests/lib_2/async/stream_from_iterable_test.dart
index fb26553..406b637 100644
--- a/tests/lib_2/async/stream_from_iterable_test.dart
+++ b/tests/lib_2/async/stream_from_iterable_test.dart
@@ -212,7 +212,7 @@
 }
 
 // Collects value and error events in a list.
-// Value events preceeded by "value", error events by "error".
+// Value events preceded by "value", error events by "error".
 // Completes on done event.
 Future<List<Object>> collectEvents(Stream<Object> stream) {
   var c = new Completer<List<Object>>();
diff --git a/tests/lib_2/isolate/timer_multiple_isolates_test.dart b/tests/lib_2/isolate/timer_multiple_isolates_test.dart
index d8b6fb7..ed401c1 100644
--- a/tests/lib_2/isolate/timer_multiple_isolates_test.dart
+++ b/tests/lib_2/isolate/timer_multiple_isolates_test.dart
@@ -11,7 +11,7 @@
 
 child(msg) {
   var i = msg[0];
-  var reponsePort = msg[1];
+  var responsePort = msg[1];
   print("Starting child $i");
 
   // Keep this isolate running to prevent its shutdown from touching the event
@@ -21,7 +21,7 @@
   // Try to get separate wakeups for each isolate.
   new Timer(new Duration(milliseconds: 100 * (i + 1)), () {
     print("Timer fired $i");
-    reponsePort.send(null);
+    responsePort.send(null);
   });
 }
 
diff --git a/tests/lib_2/js/external_nonjs_static_test.dart b/tests/lib_2/js/external_nonjs_static_test.dart
index d0fa7df..ca8d944 100644
--- a/tests/lib_2/js/external_nonjs_static_test.dart
+++ b/tests/lib_2/js/external_nonjs_static_test.dart
@@ -97,7 +97,7 @@
   external optionalParameterMethod([int a, int b = 0]);
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
-  external overridenMethod();
+  external overriddenMethod();
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
 
@@ -106,7 +106,7 @@
 }
 
 class NonJSClass {
-  void overridenMethod() => 5;
+  void overriddenMethod() => 5;
 }
 
 extension ExtensionGenericNonJS<T> on GenericNonJSClass<T> {
diff --git a/tests/lib_2/js/external_static_test.dart b/tests/lib_2/js/external_static_test.dart
index 8084a72..0a1e510 100644
--- a/tests/lib_2/js/external_static_test.dart
+++ b/tests/lib_2/js/external_static_test.dart
@@ -91,7 +91,7 @@
   external optionalParameterMethod([int a, int b = 0]);
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
-  external overridenMethod();
+  external overriddenMethod();
   //       ^
   // [web] JS interop or Native class required for 'external' extension members.
 
@@ -105,7 +105,7 @@
 }
 
 class NonJSClass {
-  void overridenMethod() => 5;
+  void overriddenMethod() => 5;
 }
 
 extension ExtensionGenericNonJS<T> on GenericNonJSClass<T> {
diff --git a/tests/modular/private_class_exposed_by_typedef/main.dart b/tests/modular/private_class_exposed_by_typedef/main.dart
index 70c26d1..34c86cb 100644
--- a/tests/modular/private_class_exposed_by_typedef/main.dart
+++ b/tests/modular/private_class_exposed_by_typedef/main.dart
@@ -21,7 +21,7 @@
 }
 
 /// Extend a private class via a public typedef overriding methods and
-/// properties.  The final field `x` is overriden with a getter which returns
+/// properties.  The final field `x` is overridden with a getter which returns
 /// different values every time it is called.
 class AlsoDerived extends AlsoPublicClass {
   int backingStore = publicNameSentinel;
diff --git a/tests/standalone/io/http_linklocal_ipv6_test.dart b/tests/standalone/io/http_linklocal_ipv6_test.dart
index e99162b..48f0e18 100644
--- a/tests/standalone/io/http_linklocal_ipv6_test.dart
+++ b/tests/standalone/io/http_linklocal_ipv6_test.dart
@@ -40,7 +40,7 @@
           .then((request) => request.close())
           .then((response) {
         print(
-            'reponse: status code: ${response.statusCode}, reason: ${response.reasonPhrase}');
+            'response: status code: ${response.statusCode}, reason: ${response.reasonPhrase}');
         int bytes = 0;
         response.listen((data) {
           bytes += data.length;
diff --git a/tests/standalone_2/io/http_linklocal_ipv6_test.dart b/tests/standalone_2/io/http_linklocal_ipv6_test.dart
index b301afd..44c6130 100644
--- a/tests/standalone_2/io/http_linklocal_ipv6_test.dart
+++ b/tests/standalone_2/io/http_linklocal_ipv6_test.dart
@@ -42,7 +42,7 @@
           .then((request) => request.close())
           .then((response) {
         print(
-            'reponse: status code: ${response.statusCode}, reason: ${response.reasonPhrase}');
+            'response: status code: ${response.statusCode}, reason: ${response.reasonPhrase}');
         int bytes = 0;
         response.listen((data) {
           bytes += data.length;
diff --git a/tools/VERSION b/tools/VERSION
index 5e77a13..0ab344f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 191
+PRERELEASE 192
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/line_doc_comments.dart b/tools/line_doc_comments.dart
index b4a5c92..c15beb7 100755
--- a/tools/line_doc_comments.dart
+++ b/tools/line_doc_comments.dart
@@ -18,7 +18,7 @@
     print('Converts "/**"-style block doc comments in a directory ');
     print('containing Dart code to "///"-style line doc comments.');
     print('');
-    print('Usage: line_doc_coments.dart <dir>');
+    print('Usage: line_doc_comments.dart <dir>');
     return;
   }
 
