Version 2.18.0-120.0.dev

Merge commit '60bf3d51b64fe0aef1cdc35ae1b790d5d8360d2f' into 'dev'
diff --git a/DEPS b/DEPS
index d5d5a11..a5498ba 100644
--- a/DEPS
+++ b/DEPS
@@ -151,7 +151,7 @@
   "stream_channel_rev": "3fa3e40c75c210d617b8b943b9b8f580e9866a89",
   "string_scanner_rev": "6579871b528036767b3200b390a3ecef28e4900d",
   "sync_http_rev": "b6bd47965694dddffb6e62fb8a6c12d17c4ae4cd",
-  "term_glyph_rev": "4885b7f8af6931e23d3aa6d1767ee3f9a626923d",
+  "term_glyph_rev": "d0f205c67ea70eea47b9f41c8440129a72a9c86e",
   "test_descriptor_rev": "ead23c1e7df079ac0f6457a35f7a71432892e527",
   "test_process_rev": "7c73ec8a8a6e0e63d0ec27d70c21ca4323fb5e8f",
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 6738b31..299fa4e 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -1682,7 +1682,7 @@
     final experimental = experimentalJson;
     final generalJson = json['general'];
     final general = generalJson != null
-        ? ClientCapabilitiesGeneral.fromJson(
+        ? GeneralClientCapabilities.fromJson(
             generalJson as Map<String, Object?>)
         : null;
     final notebookDocumentJson = json['notebookDocument'];
@@ -1719,7 +1719,7 @@
 
   /// General client capabilities.
   ///  @since 3.16.0
-  final ClientCapabilitiesGeneral? general;
+  final GeneralClientCapabilities? general;
 
   /// Capabilities specific to the notebook document support.
   ///  @since 3.17.0
@@ -1763,8 +1763,8 @@
       try {
         final general = obj['general'];
         if (general != null &&
-            !(ClientCapabilitiesGeneral.canParse(general, reporter))) {
-          reporter.reportError('must be of type ClientCapabilitiesGeneral');
+            !(GeneralClientCapabilities.canParse(general, reporter))) {
+          reporter.reportError('must be of type GeneralClientCapabilities');
           return false;
         }
       } finally {
@@ -1854,486 +1854,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class ClientCapabilitiesFileOperations implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    ClientCapabilitiesFileOperations.canParse,
-    ClientCapabilitiesFileOperations.fromJson,
-  );
-
-  ClientCapabilitiesFileOperations({
-    this.didCreate,
-    this.didDelete,
-    this.didRename,
-    this.dynamicRegistration,
-    this.willCreate,
-    this.willDelete,
-    this.willRename,
-  });
-  static ClientCapabilitiesFileOperations fromJson(Map<String, Object?> json) {
-    final didCreateJson = json['didCreate'];
-    final didCreate = didCreateJson as bool?;
-    final didDeleteJson = json['didDelete'];
-    final didDelete = didDeleteJson as bool?;
-    final didRenameJson = json['didRename'];
-    final didRename = didRenameJson as bool?;
-    final dynamicRegistrationJson = json['dynamicRegistration'];
-    final dynamicRegistration = dynamicRegistrationJson as bool?;
-    final willCreateJson = json['willCreate'];
-    final willCreate = willCreateJson as bool?;
-    final willDeleteJson = json['willDelete'];
-    final willDelete = willDeleteJson as bool?;
-    final willRenameJson = json['willRename'];
-    final willRename = willRenameJson as bool?;
-    return ClientCapabilitiesFileOperations(
-      didCreate: didCreate,
-      didDelete: didDelete,
-      didRename: didRename,
-      dynamicRegistration: dynamicRegistration,
-      willCreate: willCreate,
-      willDelete: willDelete,
-      willRename: willRename,
-    );
-  }
-
-  /// The client has support for sending didCreateFiles notifications.
-  final bool? didCreate;
-
-  /// The client has support for sending didDeleteFiles notifications.
-  final bool? didDelete;
-
-  /// The client has support for sending didRenameFiles notifications.
-  final bool? didRename;
-
-  /// Whether the client supports dynamic registration for file
-  /// requests/notifications.
-  final bool? dynamicRegistration;
-
-  /// The client has support for sending willCreateFiles requests.
-  final bool? willCreate;
-
-  /// The client has support for sending willDeleteFiles requests.
-  final bool? willDelete;
-
-  /// The client has support for sending willRenameFiles requests.
-  final bool? willRename;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (didCreate != null) {
-      __result['didCreate'] = didCreate;
-    }
-    if (didDelete != null) {
-      __result['didDelete'] = didDelete;
-    }
-    if (didRename != null) {
-      __result['didRename'] = didRename;
-    }
-    if (dynamicRegistration != null) {
-      __result['dynamicRegistration'] = dynamicRegistration;
-    }
-    if (willCreate != null) {
-      __result['willCreate'] = willCreate;
-    }
-    if (willDelete != null) {
-      __result['willDelete'] = willDelete;
-    }
-    if (willRename != null) {
-      __result['willRename'] = willRename;
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('didCreate');
-      try {
-        final didCreate = obj['didCreate'];
-        if (didCreate != null && !(didCreate is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('didDelete');
-      try {
-        final didDelete = obj['didDelete'];
-        if (didDelete != null && !(didDelete is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('didRename');
-      try {
-        final didRename = obj['didRename'];
-        if (didRename != null && !(didRename is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('dynamicRegistration');
-      try {
-        final dynamicRegistration = obj['dynamicRegistration'];
-        if (dynamicRegistration != null && !(dynamicRegistration is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('willCreate');
-      try {
-        final willCreate = obj['willCreate'];
-        if (willCreate != null && !(willCreate is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('willDelete');
-      try {
-        final willDelete = obj['willDelete'];
-        if (willDelete != null && !(willDelete is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('willRename');
-      try {
-        final willRename = obj['willRename'];
-        if (willRename != null && !(willRename is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type ClientCapabilitiesFileOperations');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is ClientCapabilitiesFileOperations &&
-        other.runtimeType == ClientCapabilitiesFileOperations) {
-      return didCreate == other.didCreate &&
-          didDelete == other.didDelete &&
-          didRename == other.didRename &&
-          dynamicRegistration == other.dynamicRegistration &&
-          willCreate == other.willCreate &&
-          willDelete == other.willDelete &&
-          willRename == other.willRename &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        didCreate,
-        didDelete,
-        didRename,
-        dynamicRegistration,
-        willCreate,
-        willDelete,
-        willRename,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
-class ClientCapabilitiesGeneral implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    ClientCapabilitiesGeneral.canParse,
-    ClientCapabilitiesGeneral.fromJson,
-  );
-
-  ClientCapabilitiesGeneral({
-    this.markdown,
-    this.positionEncodings,
-    this.regularExpressions,
-    this.staleRequestSupport,
-  });
-  static ClientCapabilitiesGeneral fromJson(Map<String, Object?> json) {
-    final markdownJson = json['markdown'];
-    final markdown = markdownJson != null
-        ? MarkdownClientCapabilities.fromJson(
-            markdownJson as Map<String, Object?>)
-        : null;
-    final positionEncodingsJson = json['positionEncodings'];
-    final positionEncodings = (positionEncodingsJson as List<Object?>?)
-        ?.map((item) => PositionEncodingKind.fromJson(item as String))
-        .toList();
-    final regularExpressionsJson = json['regularExpressions'];
-    final regularExpressions = regularExpressionsJson != null
-        ? RegularExpressionsClientCapabilities.fromJson(
-            regularExpressionsJson as Map<String, Object?>)
-        : null;
-    final staleRequestSupportJson = json['staleRequestSupport'];
-    final staleRequestSupport = staleRequestSupportJson != null
-        ? ClientCapabilitiesStaleRequestSupport.fromJson(
-            staleRequestSupportJson as Map<String, Object?>)
-        : null;
-    return ClientCapabilitiesGeneral(
-      markdown: markdown,
-      positionEncodings: positionEncodings,
-      regularExpressions: regularExpressions,
-      staleRequestSupport: staleRequestSupport,
-    );
-  }
-
-  /// Client capabilities specific to the client's markdown parser.
-  ///  @since 3.16.0
-  final MarkdownClientCapabilities? markdown;
-
-  /// The position encodings supported by the client. Client and server have to
-  /// agree on the same position encoding to ensure that offsets (e.g. character
-  /// position in a line) are interpreted the same on both side.
-  ///
-  /// To keep the protocol backwards compatible the following applies: if the
-  /// value 'utf-16' is missing from the array of position encodings servers can
-  /// assume that the client supports UTF-16. UTF-16 is therefore a mandatory
-  /// encoding.
-  ///
-  /// If omitted it defaults to ['utf-16'].
-  ///
-  /// Implementation considerations: since the conversion from one encoding into
-  /// another requires the content of the file / line the conversion is best
-  /// done where the file is read which is usually on the server side.
-  ///  @since 3.17.0
-  final List<PositionEncodingKind>? positionEncodings;
-
-  /// Client capabilities specific to regular expressions.
-  ///  @since 3.16.0
-  final RegularExpressionsClientCapabilities? regularExpressions;
-
-  /// Client capability that signals how the client handles stale requests (e.g.
-  /// a request for which the client will not process the response anymore since
-  /// the information is outdated).
-  ///  @since 3.17.0
-  final ClientCapabilitiesStaleRequestSupport? staleRequestSupport;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (markdown != null) {
-      __result['markdown'] = markdown?.toJson();
-    }
-    if (positionEncodings != null) {
-      __result['positionEncodings'] =
-          positionEncodings?.map((item) => item.toJson()).toList();
-    }
-    if (regularExpressions != null) {
-      __result['regularExpressions'] = regularExpressions?.toJson();
-    }
-    if (staleRequestSupport != null) {
-      __result['staleRequestSupport'] = staleRequestSupport?.toJson();
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('markdown');
-      try {
-        final markdown = obj['markdown'];
-        if (markdown != null &&
-            !(MarkdownClientCapabilities.canParse(markdown, reporter))) {
-          reporter.reportError('must be of type MarkdownClientCapabilities');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('positionEncodings');
-      try {
-        final positionEncodings = obj['positionEncodings'];
-        if (positionEncodings != null &&
-            !((positionEncodings is List<Object?> &&
-                (positionEncodings.every((item) =>
-                    PositionEncodingKind.canParse(item, reporter)))))) {
-          reporter.reportError('must be of type List<PositionEncodingKind>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('regularExpressions');
-      try {
-        final regularExpressions = obj['regularExpressions'];
-        if (regularExpressions != null &&
-            !(RegularExpressionsClientCapabilities.canParse(
-                regularExpressions, reporter))) {
-          reporter.reportError(
-              'must be of type RegularExpressionsClientCapabilities');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('staleRequestSupport');
-      try {
-        final staleRequestSupport = obj['staleRequestSupport'];
-        if (staleRequestSupport != null &&
-            !(ClientCapabilitiesStaleRequestSupport.canParse(
-                staleRequestSupport, reporter))) {
-          reporter.reportError(
-              'must be of type ClientCapabilitiesStaleRequestSupport');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type ClientCapabilitiesGeneral');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is ClientCapabilitiesGeneral &&
-        other.runtimeType == ClientCapabilitiesGeneral) {
-      return markdown == other.markdown &&
-          listEqual(positionEncodings, other.positionEncodings,
-              (PositionEncodingKind a, PositionEncodingKind b) => a == b) &&
-          regularExpressions == other.regularExpressions &&
-          staleRequestSupport == other.staleRequestSupport &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        markdown,
-        lspHashCode(positionEncodings),
-        regularExpressions,
-        staleRequestSupport,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
-class ClientCapabilitiesStaleRequestSupport implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    ClientCapabilitiesStaleRequestSupport.canParse,
-    ClientCapabilitiesStaleRequestSupport.fromJson,
-  );
-
-  ClientCapabilitiesStaleRequestSupport({
-    required this.cancel,
-    required this.retryOnContentModified,
-  });
-  static ClientCapabilitiesStaleRequestSupport fromJson(
-      Map<String, Object?> json) {
-    final cancelJson = json['cancel'];
-    final cancel = cancelJson as bool;
-    final retryOnContentModifiedJson = json['retryOnContentModified'];
-    final retryOnContentModified = (retryOnContentModifiedJson as List<Object?>)
-        .map((item) => item as String)
-        .toList();
-    return ClientCapabilitiesStaleRequestSupport(
-      cancel: cancel,
-      retryOnContentModified: retryOnContentModified,
-    );
-  }
-
-  /// The client will actively cancel the request.
-  final bool cancel;
-
-  /// The list of requests for which the client will retry the request if it
-  /// receives a response with error code `ContentModified``
-  final List<String> retryOnContentModified;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['cancel'] = cancel;
-    __result['retryOnContentModified'] = retryOnContentModified;
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('cancel');
-      try {
-        if (!obj.containsKey('cancel')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final cancel = obj['cancel'];
-        if (cancel == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(cancel is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('retryOnContentModified');
-      try {
-        if (!obj.containsKey('retryOnContentModified')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final retryOnContentModified = obj['retryOnContentModified'];
-        if (retryOnContentModified == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!((retryOnContentModified is List<Object?> &&
-            (retryOnContentModified.every((item) => item is String))))) {
-          reporter.reportError('must be of type List<String>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter
-          .reportError('must be of type ClientCapabilitiesStaleRequestSupport');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is ClientCapabilitiesStaleRequestSupport &&
-        other.runtimeType == ClientCapabilitiesStaleRequestSupport) {
-      return cancel == other.cancel &&
-          listEqual(retryOnContentModified, other.retryOnContentModified,
-              (String a, String b) => a == b) &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        cancel,
-        lspHashCode(retryOnContentModified),
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 /// A code action represents a change that can be performed in code, e.g. to fix
 /// a problem or to refactor code.
 ///
@@ -2819,85 +2339,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class CodeActionClientCapabilitiesCodeActionKind implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    CodeActionClientCapabilitiesCodeActionKind.canParse,
-    CodeActionClientCapabilitiesCodeActionKind.fromJson,
-  );
-
-  CodeActionClientCapabilitiesCodeActionKind({
-    required this.valueSet,
-  });
-  static CodeActionClientCapabilitiesCodeActionKind fromJson(
-      Map<String, Object?> json) {
-    final valueSetJson = json['valueSet'];
-    final valueSet = (valueSetJson as List<Object?>)
-        .map((item) => CodeActionKind.fromJson(item as String))
-        .toList();
-    return CodeActionClientCapabilitiesCodeActionKind(
-      valueSet: valueSet,
-    );
-  }
-
-  /// The code action kind values the client supports. When this property exists
-  /// the client also guarantees that it will handle values outside its set
-  /// gracefully and falls back to a default value when unknown.
-  final List<CodeActionKind> valueSet;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['valueSet'] = valueSet.map((item) => item.toJson()).toList();
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('valueSet');
-      try {
-        if (!obj.containsKey('valueSet')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final valueSet = obj['valueSet'];
-        if (valueSet == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!((valueSet is List<Object?> &&
-            (valueSet
-                .every((item) => CodeActionKind.canParse(item, reporter)))))) {
-          reporter.reportError('must be of type List<CodeActionKind>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError(
-          'must be of type CodeActionClientCapabilitiesCodeActionKind');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is CodeActionClientCapabilitiesCodeActionKind &&
-        other.runtimeType == CodeActionClientCapabilitiesCodeActionKind) {
-      return listEqual(valueSet, other.valueSet,
-              (CodeActionKind a, CodeActionKind b) => a == b) &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => lspHashCode(valueSet);
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class CodeActionClientCapabilitiesCodeActionLiteralSupport
     implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
@@ -2911,7 +2352,7 @@
   static CodeActionClientCapabilitiesCodeActionLiteralSupport fromJson(
       Map<String, Object?> json) {
     final codeActionKindJson = json['codeActionKind'];
-    final codeActionKind = CodeActionClientCapabilitiesCodeActionKind.fromJson(
+    final codeActionKind = CodeActionLiteralSupportCodeActionKind.fromJson(
         codeActionKindJson as Map<String, Object?>);
     return CodeActionClientCapabilitiesCodeActionLiteralSupport(
       codeActionKind: codeActionKind,
@@ -2919,7 +2360,7 @@
   }
 
   /// The code action kind is supported with the following value set.
-  final CodeActionClientCapabilitiesCodeActionKind codeActionKind;
+  final CodeActionLiteralSupportCodeActionKind codeActionKind;
 
   Map<String, Object?> toJson() {
     var __result = <String, Object?>{};
@@ -2940,10 +2381,10 @@
           reporter.reportError('must not be null');
           return false;
         }
-        if (!(CodeActionClientCapabilitiesCodeActionKind.canParse(
+        if (!(CodeActionLiteralSupportCodeActionKind.canParse(
             codeActionKind, reporter))) {
           reporter.reportError(
-              'must be of type CodeActionClientCapabilitiesCodeActionKind');
+              'must be of type CodeActionLiteralSupportCodeActionKind');
           return false;
         }
       } finally {
@@ -3340,6 +2781,85 @@
   bool operator ==(Object o) => o is CodeActionKind && o._value == _value;
 }
 
+class CodeActionLiteralSupportCodeActionKind implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    CodeActionLiteralSupportCodeActionKind.canParse,
+    CodeActionLiteralSupportCodeActionKind.fromJson,
+  );
+
+  CodeActionLiteralSupportCodeActionKind({
+    required this.valueSet,
+  });
+  static CodeActionLiteralSupportCodeActionKind fromJson(
+      Map<String, Object?> json) {
+    final valueSetJson = json['valueSet'];
+    final valueSet = (valueSetJson as List<Object?>)
+        .map((item) => CodeActionKind.fromJson(item as String))
+        .toList();
+    return CodeActionLiteralSupportCodeActionKind(
+      valueSet: valueSet,
+    );
+  }
+
+  /// The code action kind values the client supports. When this property exists
+  /// the client also guarantees that it will handle values outside its set
+  /// gracefully and falls back to a default value when unknown.
+  final List<CodeActionKind> valueSet;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['valueSet'] = valueSet.map((item) => item.toJson()).toList();
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('valueSet');
+      try {
+        if (!obj.containsKey('valueSet')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final valueSet = obj['valueSet'];
+        if (valueSet == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!((valueSet is List<Object?> &&
+            (valueSet
+                .every((item) => CodeActionKind.canParse(item, reporter)))))) {
+          reporter.reportError('must be of type List<CodeActionKind>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError(
+          'must be of type CodeActionLiteralSupportCodeActionKind');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is CodeActionLiteralSupportCodeActionKind &&
+        other.runtimeType == CodeActionLiteralSupportCodeActionKind) {
+      return listEqual(valueSet, other.valueSet,
+              (CodeActionKind a, CodeActionKind b) => a == b) &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => lspHashCode(valueSet);
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 class CodeActionOptions implements WorkDoneProgressOptions, ToJsonable {
   static const jsonHandler = LspJsonHandler(
     CodeActionOptions.canParse,
@@ -5424,7 +4944,7 @@
     final insertReplaceSupport = insertReplaceSupportJson as bool?;
     final insertTextModeSupportJson = json['insertTextModeSupport'];
     final insertTextModeSupport = insertTextModeSupportJson != null
-        ? CompletionClientCapabilitiesInsertTextModeSupport.fromJson(
+        ? CompletionItemInsertTextModeSupport.fromJson(
             insertTextModeSupportJson as Map<String, Object?>)
         : null;
     final labelDetailsSupportJson = json['labelDetailsSupport'];
@@ -5433,14 +4953,14 @@
     final preselectSupport = preselectSupportJson as bool?;
     final resolveSupportJson = json['resolveSupport'];
     final resolveSupport = resolveSupportJson != null
-        ? CompletionClientCapabilitiesResolveSupport.fromJson(
+        ? CompletionItemResolveSupport.fromJson(
             resolveSupportJson as Map<String, Object?>)
         : null;
     final snippetSupportJson = json['snippetSupport'];
     final snippetSupport = snippetSupportJson as bool?;
     final tagSupportJson = json['tagSupport'];
     final tagSupport = tagSupportJson != null
-        ? CompletionClientCapabilitiesTagSupport.fromJson(
+        ? CompletionItemTagSupport.fromJson(
             tagSupportJson as Map<String, Object?>)
         : null;
     return CompletionClientCapabilitiesCompletionItem(
@@ -5476,8 +4996,7 @@
   /// override the whitespace handling mode as defined by the client (see
   /// `insertTextMode`).
   ///  @since 3.16.0
-  final CompletionClientCapabilitiesInsertTextModeSupport?
-      insertTextModeSupport;
+  final CompletionItemInsertTextModeSupport? insertTextModeSupport;
 
   /// The client has support for completion item label details (see also
   /// `CompletionItemLabelDetails`).
@@ -5491,7 +5010,7 @@
   /// item. Before version 3.16.0 only the predefined properties `documentation`
   /// and `detail` could be resolved lazily.
   ///  @since 3.16.0
-  final CompletionClientCapabilitiesResolveSupport? resolveSupport;
+  final CompletionItemResolveSupport? resolveSupport;
 
   /// Client supports snippets as insert text.
   ///
@@ -5506,7 +5025,7 @@
   /// preserve unknown tags when sending a completion item back to the server in
   /// a resolve call.
   ///  @since 3.15.0
-  final CompletionClientCapabilitiesTagSupport? tagSupport;
+  final CompletionItemTagSupport? tagSupport;
 
   Map<String, Object?> toJson() {
     var __result = <String, Object?>{};
@@ -5594,10 +5113,10 @@
       try {
         final insertTextModeSupport = obj['insertTextModeSupport'];
         if (insertTextModeSupport != null &&
-            !(CompletionClientCapabilitiesInsertTextModeSupport.canParse(
+            !(CompletionItemInsertTextModeSupport.canParse(
                 insertTextModeSupport, reporter))) {
           reporter.reportError(
-              'must be of type CompletionClientCapabilitiesInsertTextModeSupport');
+              'must be of type CompletionItemInsertTextModeSupport');
           return false;
         }
       } finally {
@@ -5627,10 +5146,9 @@
       try {
         final resolveSupport = obj['resolveSupport'];
         if (resolveSupport != null &&
-            !(CompletionClientCapabilitiesResolveSupport.canParse(
+            !(CompletionItemResolveSupport.canParse(
                 resolveSupport, reporter))) {
-          reporter.reportError(
-              'must be of type CompletionClientCapabilitiesResolveSupport');
+          reporter.reportError('must be of type CompletionItemResolveSupport');
           return false;
         }
       } finally {
@@ -5650,10 +5168,8 @@
       try {
         final tagSupport = obj['tagSupport'];
         if (tagSupport != null &&
-            !(CompletionClientCapabilitiesTagSupport.canParse(
-                tagSupport, reporter))) {
-          reporter.reportError(
-              'must be of type CompletionClientCapabilitiesTagSupport');
+            !(CompletionItemTagSupport.canParse(tagSupport, reporter))) {
+          reporter.reportError('must be of type CompletionItemTagSupport');
           return false;
         }
       } finally {
@@ -5859,236 +5375,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class CompletionClientCapabilitiesInsertTextModeSupport implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    CompletionClientCapabilitiesInsertTextModeSupport.canParse,
-    CompletionClientCapabilitiesInsertTextModeSupport.fromJson,
-  );
-
-  CompletionClientCapabilitiesInsertTextModeSupport({
-    required this.valueSet,
-  });
-  static CompletionClientCapabilitiesInsertTextModeSupport fromJson(
-      Map<String, Object?> json) {
-    final valueSetJson = json['valueSet'];
-    final valueSet = (valueSetJson as List<Object?>)
-        .map((item) => InsertTextMode.fromJson(item as int))
-        .toList();
-    return CompletionClientCapabilitiesInsertTextModeSupport(
-      valueSet: valueSet,
-    );
-  }
-
-  final List<InsertTextMode> valueSet;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['valueSet'] = valueSet.map((item) => item.toJson()).toList();
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('valueSet');
-      try {
-        if (!obj.containsKey('valueSet')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final valueSet = obj['valueSet'];
-        if (valueSet == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!((valueSet is List<Object?> &&
-            (valueSet
-                .every((item) => InsertTextMode.canParse(item, reporter)))))) {
-          reporter.reportError('must be of type List<InsertTextMode>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError(
-          'must be of type CompletionClientCapabilitiesInsertTextModeSupport');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is CompletionClientCapabilitiesInsertTextModeSupport &&
-        other.runtimeType ==
-            CompletionClientCapabilitiesInsertTextModeSupport) {
-      return listEqual(valueSet, other.valueSet,
-              (InsertTextMode a, InsertTextMode b) => a == b) &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => lspHashCode(valueSet);
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
-class CompletionClientCapabilitiesResolveSupport implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    CompletionClientCapabilitiesResolveSupport.canParse,
-    CompletionClientCapabilitiesResolveSupport.fromJson,
-  );
-
-  CompletionClientCapabilitiesResolveSupport({
-    required this.properties,
-  });
-  static CompletionClientCapabilitiesResolveSupport fromJson(
-      Map<String, Object?> json) {
-    final propertiesJson = json['properties'];
-    final properties = (propertiesJson as List<Object?>)
-        .map((item) => item as String)
-        .toList();
-    return CompletionClientCapabilitiesResolveSupport(
-      properties: properties,
-    );
-  }
-
-  /// The properties that a client can resolve lazily.
-  final List<String> properties;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['properties'] = properties;
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('properties');
-      try {
-        if (!obj.containsKey('properties')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final properties = obj['properties'];
-        if (properties == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!((properties is List<Object?> &&
-            (properties.every((item) => item is String))))) {
-          reporter.reportError('must be of type List<String>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError(
-          'must be of type CompletionClientCapabilitiesResolveSupport');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is CompletionClientCapabilitiesResolveSupport &&
-        other.runtimeType == CompletionClientCapabilitiesResolveSupport) {
-      return listEqual(
-              properties, other.properties, (String a, String b) => a == b) &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => lspHashCode(properties);
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
-class CompletionClientCapabilitiesTagSupport implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    CompletionClientCapabilitiesTagSupport.canParse,
-    CompletionClientCapabilitiesTagSupport.fromJson,
-  );
-
-  CompletionClientCapabilitiesTagSupport({
-    required this.valueSet,
-  });
-  static CompletionClientCapabilitiesTagSupport fromJson(
-      Map<String, Object?> json) {
-    final valueSetJson = json['valueSet'];
-    final valueSet = (valueSetJson as List<Object?>)
-        .map((item) => CompletionItemTag.fromJson(item as int))
-        .toList();
-    return CompletionClientCapabilitiesTagSupport(
-      valueSet: valueSet,
-    );
-  }
-
-  /// The tags supported by the client.
-  final List<CompletionItemTag> valueSet;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['valueSet'] = valueSet.map((item) => item.toJson()).toList();
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('valueSet');
-      try {
-        if (!obj.containsKey('valueSet')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final valueSet = obj['valueSet'];
-        if (valueSet == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!((valueSet is List<Object?> &&
-            (valueSet.every(
-                (item) => CompletionItemTag.canParse(item, reporter)))))) {
-          reporter.reportError('must be of type List<CompletionItemTag>');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError(
-          'must be of type CompletionClientCapabilitiesTagSupport');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is CompletionClientCapabilitiesTagSupport &&
-        other.runtimeType == CompletionClientCapabilitiesTagSupport) {
-      return listEqual(valueSet, other.valueSet,
-              (CompletionItemTag a, CompletionItemTag b) => a == b) &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => lspHashCode(valueSet);
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 /// Contains additional information about the context in which a completion
 /// request is triggered.
 class CompletionContext implements ToJsonable {
@@ -6785,6 +6071,82 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class CompletionItemInsertTextModeSupport implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    CompletionItemInsertTextModeSupport.canParse,
+    CompletionItemInsertTextModeSupport.fromJson,
+  );
+
+  CompletionItemInsertTextModeSupport({
+    required this.valueSet,
+  });
+  static CompletionItemInsertTextModeSupport fromJson(
+      Map<String, Object?> json) {
+    final valueSetJson = json['valueSet'];
+    final valueSet = (valueSetJson as List<Object?>)
+        .map((item) => InsertTextMode.fromJson(item as int))
+        .toList();
+    return CompletionItemInsertTextModeSupport(
+      valueSet: valueSet,
+    );
+  }
+
+  final List<InsertTextMode> valueSet;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['valueSet'] = valueSet.map((item) => item.toJson()).toList();
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('valueSet');
+      try {
+        if (!obj.containsKey('valueSet')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final valueSet = obj['valueSet'];
+        if (valueSet == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!((valueSet is List<Object?> &&
+            (valueSet
+                .every((item) => InsertTextMode.canParse(item, reporter)))))) {
+          reporter.reportError('must be of type List<InsertTextMode>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter
+          .reportError('must be of type CompletionItemInsertTextModeSupport');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is CompletionItemInsertTextModeSupport &&
+        other.runtimeType == CompletionItemInsertTextModeSupport) {
+      return listEqual(valueSet, other.valueSet,
+              (InsertTextMode a, InsertTextMode b) => a == b) &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => lspHashCode(valueSet);
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// The kind of a completion entry.
 class CompletionItemKind implements ToJsonable {
   const CompletionItemKind(this._value);
@@ -6925,6 +6287,80 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class CompletionItemResolveSupport implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    CompletionItemResolveSupport.canParse,
+    CompletionItemResolveSupport.fromJson,
+  );
+
+  CompletionItemResolveSupport({
+    required this.properties,
+  });
+  static CompletionItemResolveSupport fromJson(Map<String, Object?> json) {
+    final propertiesJson = json['properties'];
+    final properties = (propertiesJson as List<Object?>)
+        .map((item) => item as String)
+        .toList();
+    return CompletionItemResolveSupport(
+      properties: properties,
+    );
+  }
+
+  /// The properties that a client can resolve lazily.
+  final List<String> properties;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['properties'] = properties;
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('properties');
+      try {
+        if (!obj.containsKey('properties')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final properties = obj['properties'];
+        if (properties == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!((properties is List<Object?> &&
+            (properties.every((item) => item is String))))) {
+          reporter.reportError('must be of type List<String>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type CompletionItemResolveSupport');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is CompletionItemResolveSupport &&
+        other.runtimeType == CompletionItemResolveSupport) {
+      return listEqual(
+              properties, other.properties, (String a, String b) => a == b) &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => lspHashCode(properties);
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// Completion item tags are extra annotations that tweak the rendering of a
 /// completion item.
 ///  @since 3.15.0
@@ -6952,6 +6388,81 @@
   bool operator ==(Object o) => o is CompletionItemTag && o._value == _value;
 }
 
+class CompletionItemTagSupport implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    CompletionItemTagSupport.canParse,
+    CompletionItemTagSupport.fromJson,
+  );
+
+  CompletionItemTagSupport({
+    required this.valueSet,
+  });
+  static CompletionItemTagSupport fromJson(Map<String, Object?> json) {
+    final valueSetJson = json['valueSet'];
+    final valueSet = (valueSetJson as List<Object?>)
+        .map((item) => CompletionItemTag.fromJson(item as int))
+        .toList();
+    return CompletionItemTagSupport(
+      valueSet: valueSet,
+    );
+  }
+
+  /// The tags supported by the client.
+  final List<CompletionItemTag> valueSet;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['valueSet'] = valueSet.map((item) => item.toJson()).toList();
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('valueSet');
+      try {
+        if (!obj.containsKey('valueSet')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final valueSet = obj['valueSet'];
+        if (valueSet == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!((valueSet is List<Object?> &&
+            (valueSet.every(
+                (item) => CompletionItemTag.canParse(item, reporter)))))) {
+          reporter.reportError('must be of type List<CompletionItemTag>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type CompletionItemTagSupport');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is CompletionItemTagSupport &&
+        other.runtimeType == CompletionItemTagSupport) {
+      return listEqual(valueSet, other.valueSet,
+              (CompletionItemTag a, CompletionItemTag b) => a == b) &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => lspHashCode(valueSet);
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// Represents a collection of completion items ([CompletionItem]) to be
 /// presented in the editor.
 class CompletionList implements ToJsonable {
@@ -15950,12 +15461,12 @@
   static const InvalidParams = ErrorCodes(-32602);
   static const InvalidRequest = ErrorCodes(-32600);
 
-  /// This is the end range of JSON RPC reserved error codes. It doesn't denote
+  /// This is the end range of JSON-RPC reserved error codes. It doesn't denote
   /// a real error code.
   ///  @since 3.16.0
   static const jsonrpcReservedErrorRangeEnd = ErrorCodes(-32000);
 
-  /// This is the start range of JSON RPC reserved error codes. It doesn't
+  /// This is the start range of JSON-RPC reserved error codes. It doesn't
   /// denote a real error code. No LSP error codes should be defined between the
   /// start and end range. For backwards compatibility the
   /// `ServerNotInitialized` and the `UnknownErrorCode` are left in the range.
@@ -15973,7 +15484,7 @@
   static const lspReservedErrorRangeStart = ErrorCodes(-32899);
   static const MethodNotFound = ErrorCodes(-32601);
 
-  /// Defined by JSON RPC
+  /// Defined by JSON-RPC
   static const ParseError = ErrorCodes(-32700);
 
   /// The client has canceled a request and a server as detected the cancel.
@@ -16801,6 +16312,205 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class FileOperationClientCapabilities implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    FileOperationClientCapabilities.canParse,
+    FileOperationClientCapabilities.fromJson,
+  );
+
+  FileOperationClientCapabilities({
+    this.didCreate,
+    this.didDelete,
+    this.didRename,
+    this.dynamicRegistration,
+    this.willCreate,
+    this.willDelete,
+    this.willRename,
+  });
+  static FileOperationClientCapabilities fromJson(Map<String, Object?> json) {
+    final didCreateJson = json['didCreate'];
+    final didCreate = didCreateJson as bool?;
+    final didDeleteJson = json['didDelete'];
+    final didDelete = didDeleteJson as bool?;
+    final didRenameJson = json['didRename'];
+    final didRename = didRenameJson as bool?;
+    final dynamicRegistrationJson = json['dynamicRegistration'];
+    final dynamicRegistration = dynamicRegistrationJson as bool?;
+    final willCreateJson = json['willCreate'];
+    final willCreate = willCreateJson as bool?;
+    final willDeleteJson = json['willDelete'];
+    final willDelete = willDeleteJson as bool?;
+    final willRenameJson = json['willRename'];
+    final willRename = willRenameJson as bool?;
+    return FileOperationClientCapabilities(
+      didCreate: didCreate,
+      didDelete: didDelete,
+      didRename: didRename,
+      dynamicRegistration: dynamicRegistration,
+      willCreate: willCreate,
+      willDelete: willDelete,
+      willRename: willRename,
+    );
+  }
+
+  /// The client has support for sending didCreateFiles notifications.
+  final bool? didCreate;
+
+  /// The client has support for sending didDeleteFiles notifications.
+  final bool? didDelete;
+
+  /// The client has support for sending didRenameFiles notifications.
+  final bool? didRename;
+
+  /// Whether the client supports dynamic registration for file
+  /// requests/notifications.
+  final bool? dynamicRegistration;
+
+  /// The client has support for sending willCreateFiles requests.
+  final bool? willCreate;
+
+  /// The client has support for sending willDeleteFiles requests.
+  final bool? willDelete;
+
+  /// The client has support for sending willRenameFiles requests.
+  final bool? willRename;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (didCreate != null) {
+      __result['didCreate'] = didCreate;
+    }
+    if (didDelete != null) {
+      __result['didDelete'] = didDelete;
+    }
+    if (didRename != null) {
+      __result['didRename'] = didRename;
+    }
+    if (dynamicRegistration != null) {
+      __result['dynamicRegistration'] = dynamicRegistration;
+    }
+    if (willCreate != null) {
+      __result['willCreate'] = willCreate;
+    }
+    if (willDelete != null) {
+      __result['willDelete'] = willDelete;
+    }
+    if (willRename != null) {
+      __result['willRename'] = willRename;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('didCreate');
+      try {
+        final didCreate = obj['didCreate'];
+        if (didCreate != null && !(didCreate is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('didDelete');
+      try {
+        final didDelete = obj['didDelete'];
+        if (didDelete != null && !(didDelete is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('didRename');
+      try {
+        final didRename = obj['didRename'];
+        if (didRename != null && !(didRename is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('dynamicRegistration');
+      try {
+        final dynamicRegistration = obj['dynamicRegistration'];
+        if (dynamicRegistration != null && !(dynamicRegistration is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('willCreate');
+      try {
+        final willCreate = obj['willCreate'];
+        if (willCreate != null && !(willCreate is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('willDelete');
+      try {
+        final willDelete = obj['willDelete'];
+        if (willDelete != null && !(willDelete is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('willRename');
+      try {
+        final willRename = obj['willRename'];
+        if (willRename != null && !(willRename is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type FileOperationClientCapabilities');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is FileOperationClientCapabilities &&
+        other.runtimeType == FileOperationClientCapabilities) {
+      return didCreate == other.didCreate &&
+          didDelete == other.didDelete &&
+          didRename == other.didRename &&
+          dynamicRegistration == other.dynamicRegistration &&
+          willCreate == other.willCreate &&
+          willDelete == other.willDelete &&
+          willRename == other.willRename &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        didCreate,
+        didDelete,
+        didRename,
+        dynamicRegistration,
+        willCreate,
+        willDelete,
+        willRename,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// A filter to describe in which file operation requests or notifications the
 /// server is interested in.
 ///  @since 3.16.0
@@ -16897,6 +16607,215 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class FileOperationOptions implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    FileOperationOptions.canParse,
+    FileOperationOptions.fromJson,
+  );
+
+  FileOperationOptions({
+    this.didCreate,
+    this.didDelete,
+    this.didRename,
+    this.willCreate,
+    this.willDelete,
+    this.willRename,
+  });
+  static FileOperationOptions fromJson(Map<String, Object?> json) {
+    final didCreateJson = json['didCreate'];
+    final didCreate = didCreateJson != null
+        ? FileOperationRegistrationOptions.fromJson(
+            didCreateJson as Map<String, Object?>)
+        : null;
+    final didDeleteJson = json['didDelete'];
+    final didDelete = didDeleteJson != null
+        ? FileOperationRegistrationOptions.fromJson(
+            didDeleteJson as Map<String, Object?>)
+        : null;
+    final didRenameJson = json['didRename'];
+    final didRename = didRenameJson != null
+        ? FileOperationRegistrationOptions.fromJson(
+            didRenameJson as Map<String, Object?>)
+        : null;
+    final willCreateJson = json['willCreate'];
+    final willCreate = willCreateJson != null
+        ? FileOperationRegistrationOptions.fromJson(
+            willCreateJson as Map<String, Object?>)
+        : null;
+    final willDeleteJson = json['willDelete'];
+    final willDelete = willDeleteJson != null
+        ? FileOperationRegistrationOptions.fromJson(
+            willDeleteJson as Map<String, Object?>)
+        : null;
+    final willRenameJson = json['willRename'];
+    final willRename = willRenameJson != null
+        ? FileOperationRegistrationOptions.fromJson(
+            willRenameJson as Map<String, Object?>)
+        : null;
+    return FileOperationOptions(
+      didCreate: didCreate,
+      didDelete: didDelete,
+      didRename: didRename,
+      willCreate: willCreate,
+      willDelete: willDelete,
+      willRename: willRename,
+    );
+  }
+
+  /// The server is interested in receiving didCreateFiles notifications.
+  final FileOperationRegistrationOptions? didCreate;
+
+  /// The server is interested in receiving didDeleteFiles file notifications.
+  final FileOperationRegistrationOptions? didDelete;
+
+  /// The server is interested in receiving didRenameFiles notifications.
+  final FileOperationRegistrationOptions? didRename;
+
+  /// The server is interested in receiving willCreateFiles requests.
+  final FileOperationRegistrationOptions? willCreate;
+
+  /// The server is interested in receiving willDeleteFiles file requests.
+  final FileOperationRegistrationOptions? willDelete;
+
+  /// The server is interested in receiving willRenameFiles requests.
+  final FileOperationRegistrationOptions? willRename;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (didCreate != null) {
+      __result['didCreate'] = didCreate?.toJson();
+    }
+    if (didDelete != null) {
+      __result['didDelete'] = didDelete?.toJson();
+    }
+    if (didRename != null) {
+      __result['didRename'] = didRename?.toJson();
+    }
+    if (willCreate != null) {
+      __result['willCreate'] = willCreate?.toJson();
+    }
+    if (willDelete != null) {
+      __result['willDelete'] = willDelete?.toJson();
+    }
+    if (willRename != null) {
+      __result['willRename'] = willRename?.toJson();
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('didCreate');
+      try {
+        final didCreate = obj['didCreate'];
+        if (didCreate != null &&
+            !(FileOperationRegistrationOptions.canParse(didCreate, reporter))) {
+          reporter
+              .reportError('must be of type FileOperationRegistrationOptions');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('didDelete');
+      try {
+        final didDelete = obj['didDelete'];
+        if (didDelete != null &&
+            !(FileOperationRegistrationOptions.canParse(didDelete, reporter))) {
+          reporter
+              .reportError('must be of type FileOperationRegistrationOptions');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('didRename');
+      try {
+        final didRename = obj['didRename'];
+        if (didRename != null &&
+            !(FileOperationRegistrationOptions.canParse(didRename, reporter))) {
+          reporter
+              .reportError('must be of type FileOperationRegistrationOptions');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('willCreate');
+      try {
+        final willCreate = obj['willCreate'];
+        if (willCreate != null &&
+            !(FileOperationRegistrationOptions.canParse(
+                willCreate, reporter))) {
+          reporter
+              .reportError('must be of type FileOperationRegistrationOptions');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('willDelete');
+      try {
+        final willDelete = obj['willDelete'];
+        if (willDelete != null &&
+            !(FileOperationRegistrationOptions.canParse(
+                willDelete, reporter))) {
+          reporter
+              .reportError('must be of type FileOperationRegistrationOptions');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('willRename');
+      try {
+        final willRename = obj['willRename'];
+        if (willRename != null &&
+            !(FileOperationRegistrationOptions.canParse(
+                willRename, reporter))) {
+          reporter
+              .reportError('must be of type FileOperationRegistrationOptions');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type FileOperationOptions');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is FileOperationOptions &&
+        other.runtimeType == FileOperationOptions) {
+      return didCreate == other.didCreate &&
+          didDelete == other.didDelete &&
+          didRename == other.didRename &&
+          willCreate == other.willCreate &&
+          willDelete == other.willDelete &&
+          willRename == other.willRename &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        didCreate,
+        didDelete,
+        didRename,
+        willCreate,
+        willDelete,
+        willRename,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// A pattern to describe in which file operation requests or notifications the
 /// server is interested in.
 ///  @since 3.16.0
@@ -18590,6 +18509,287 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class GeneralClientCapabilities implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    GeneralClientCapabilities.canParse,
+    GeneralClientCapabilities.fromJson,
+  );
+
+  GeneralClientCapabilities({
+    this.markdown,
+    this.positionEncodings,
+    this.regularExpressions,
+    this.staleRequestSupport,
+  });
+  static GeneralClientCapabilities fromJson(Map<String, Object?> json) {
+    final markdownJson = json['markdown'];
+    final markdown = markdownJson != null
+        ? MarkdownClientCapabilities.fromJson(
+            markdownJson as Map<String, Object?>)
+        : null;
+    final positionEncodingsJson = json['positionEncodings'];
+    final positionEncodings = (positionEncodingsJson as List<Object?>?)
+        ?.map((item) => PositionEncodingKind.fromJson(item as String))
+        .toList();
+    final regularExpressionsJson = json['regularExpressions'];
+    final regularExpressions = regularExpressionsJson != null
+        ? RegularExpressionsClientCapabilities.fromJson(
+            regularExpressionsJson as Map<String, Object?>)
+        : null;
+    final staleRequestSupportJson = json['staleRequestSupport'];
+    final staleRequestSupport = staleRequestSupportJson != null
+        ? GeneralClientCapabilitiesStaleRequestSupport.fromJson(
+            staleRequestSupportJson as Map<String, Object?>)
+        : null;
+    return GeneralClientCapabilities(
+      markdown: markdown,
+      positionEncodings: positionEncodings,
+      regularExpressions: regularExpressions,
+      staleRequestSupport: staleRequestSupport,
+    );
+  }
+
+  /// Client capabilities specific to the client's markdown parser.
+  ///  @since 3.16.0
+  final MarkdownClientCapabilities? markdown;
+
+  /// The position encodings supported by the client. Client and server have to
+  /// agree on the same position encoding to ensure that offsets (e.g. character
+  /// position in a line) are interpreted the same on both side.
+  ///
+  /// To keep the protocol backwards compatible the following applies: if the
+  /// value 'utf-16' is missing from the array of position encodings servers can
+  /// assume that the client supports UTF-16. UTF-16 is therefore a mandatory
+  /// encoding.
+  ///
+  /// If omitted it defaults to ['utf-16'].
+  ///
+  /// Implementation considerations: since the conversion from one encoding into
+  /// another requires the content of the file / line the conversion is best
+  /// done where the file is read which is usually on the server side.
+  ///  @since 3.17.0
+  final List<PositionEncodingKind>? positionEncodings;
+
+  /// Client capabilities specific to regular expressions.
+  ///  @since 3.16.0
+  final RegularExpressionsClientCapabilities? regularExpressions;
+
+  /// Client capability that signals how the client handles stale requests (e.g.
+  /// a request for which the client will not process the response anymore since
+  /// the information is outdated).
+  ///  @since 3.17.0
+  final GeneralClientCapabilitiesStaleRequestSupport? staleRequestSupport;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (markdown != null) {
+      __result['markdown'] = markdown?.toJson();
+    }
+    if (positionEncodings != null) {
+      __result['positionEncodings'] =
+          positionEncodings?.map((item) => item.toJson()).toList();
+    }
+    if (regularExpressions != null) {
+      __result['regularExpressions'] = regularExpressions?.toJson();
+    }
+    if (staleRequestSupport != null) {
+      __result['staleRequestSupport'] = staleRequestSupport?.toJson();
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('markdown');
+      try {
+        final markdown = obj['markdown'];
+        if (markdown != null &&
+            !(MarkdownClientCapabilities.canParse(markdown, reporter))) {
+          reporter.reportError('must be of type MarkdownClientCapabilities');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('positionEncodings');
+      try {
+        final positionEncodings = obj['positionEncodings'];
+        if (positionEncodings != null &&
+            !((positionEncodings is List<Object?> &&
+                (positionEncodings.every((item) =>
+                    PositionEncodingKind.canParse(item, reporter)))))) {
+          reporter.reportError('must be of type List<PositionEncodingKind>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('regularExpressions');
+      try {
+        final regularExpressions = obj['regularExpressions'];
+        if (regularExpressions != null &&
+            !(RegularExpressionsClientCapabilities.canParse(
+                regularExpressions, reporter))) {
+          reporter.reportError(
+              'must be of type RegularExpressionsClientCapabilities');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('staleRequestSupport');
+      try {
+        final staleRequestSupport = obj['staleRequestSupport'];
+        if (staleRequestSupport != null &&
+            !(GeneralClientCapabilitiesStaleRequestSupport.canParse(
+                staleRequestSupport, reporter))) {
+          reporter.reportError(
+              'must be of type GeneralClientCapabilitiesStaleRequestSupport');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type GeneralClientCapabilities');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is GeneralClientCapabilities &&
+        other.runtimeType == GeneralClientCapabilities) {
+      return markdown == other.markdown &&
+          listEqual(positionEncodings, other.positionEncodings,
+              (PositionEncodingKind a, PositionEncodingKind b) => a == b) &&
+          regularExpressions == other.regularExpressions &&
+          staleRequestSupport == other.staleRequestSupport &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        markdown,
+        lspHashCode(positionEncodings),
+        regularExpressions,
+        staleRequestSupport,
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
+class GeneralClientCapabilitiesStaleRequestSupport implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    GeneralClientCapabilitiesStaleRequestSupport.canParse,
+    GeneralClientCapabilitiesStaleRequestSupport.fromJson,
+  );
+
+  GeneralClientCapabilitiesStaleRequestSupport({
+    required this.cancel,
+    required this.retryOnContentModified,
+  });
+  static GeneralClientCapabilitiesStaleRequestSupport fromJson(
+      Map<String, Object?> json) {
+    final cancelJson = json['cancel'];
+    final cancel = cancelJson as bool;
+    final retryOnContentModifiedJson = json['retryOnContentModified'];
+    final retryOnContentModified = (retryOnContentModifiedJson as List<Object?>)
+        .map((item) => item as String)
+        .toList();
+    return GeneralClientCapabilitiesStaleRequestSupport(
+      cancel: cancel,
+      retryOnContentModified: retryOnContentModified,
+    );
+  }
+
+  /// The client will actively cancel the request.
+  final bool cancel;
+
+  /// The list of requests for which the client will retry the request if it
+  /// receives a response with error code `ContentModified``
+  final List<String> retryOnContentModified;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['cancel'] = cancel;
+    __result['retryOnContentModified'] = retryOnContentModified;
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('cancel');
+      try {
+        if (!obj.containsKey('cancel')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final cancel = obj['cancel'];
+        if (cancel == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(cancel is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('retryOnContentModified');
+      try {
+        if (!obj.containsKey('retryOnContentModified')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final retryOnContentModified = obj['retryOnContentModified'];
+        if (retryOnContentModified == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!((retryOnContentModified is List<Object?> &&
+            (retryOnContentModified.every((item) => item is String))))) {
+          reporter.reportError('must be of type List<String>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError(
+          'must be of type GeneralClientCapabilitiesStaleRequestSupport');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is GeneralClientCapabilitiesStaleRequestSupport &&
+        other.runtimeType == GeneralClientCapabilitiesStaleRequestSupport) {
+      return cancel == other.cancel &&
+          listEqual(retryOnContentModified, other.retryOnContentModified,
+              (String a, String b) => a == b) &&
+          true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(
+        cancel,
+        lspHashCode(retryOnContentModified),
+      );
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// The result of a hover request.
 class Hover implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
@@ -18983,101 +19183,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class HoverParamsPosition implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    HoverParamsPosition.canParse,
-    HoverParamsPosition.fromJson,
-  );
-
-  HoverParamsPosition({
-    required this.character,
-    required this.line,
-  });
-  static HoverParamsPosition fromJson(Map<String, Object?> json) {
-    final characterJson = json['character'];
-    final character = characterJson as int;
-    final lineJson = json['line'];
-    final line = lineJson as int;
-    return HoverParamsPosition(
-      character: character,
-      line: line,
-    );
-  }
-
-  final int character;
-  final int line;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['character'] = character;
-    __result['line'] = line;
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('character');
-      try {
-        if (!obj.containsKey('character')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final character = obj['character'];
-        if (character == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(character is int)) {
-          reporter.reportError('must be of type int');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('line');
-      try {
-        if (!obj.containsKey('line')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final line = obj['line'];
-        if (line == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(line is int)) {
-          reporter.reportError('must be of type int');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type HoverParamsPosition');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is HoverParamsPosition &&
-        other.runtimeType == HoverParamsPosition) {
-      return character == other.character && line == other.line && true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        character,
-        line,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class HoverRegistrationOptions
     implements HoverOptions, TextDocumentRegistrationOptions, ToJsonable {
   static const jsonHandler = LspJsonHandler(
@@ -19175,73 +19280,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class HoverResult implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    HoverResult.canParse,
-    HoverResult.fromJson,
-  );
-
-  HoverResult({
-    required this.value,
-  });
-  static HoverResult fromJson(Map<String, Object?> json) {
-    final valueJson = json['value'];
-    final value = valueJson as String;
-    return HoverResult(
-      value: value,
-    );
-  }
-
-  final String value;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    __result['value'] = value;
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('value');
-      try {
-        if (!obj.containsKey('value')) {
-          reporter.reportError('must not be undefined');
-          return false;
-        }
-        final value = obj['value'];
-        if (value == null) {
-          reporter.reportError('must not be null');
-          return false;
-        }
-        if (!(value is String)) {
-          reporter.reportError('must be of type String');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type HoverResult');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is HoverResult && other.runtimeType == HoverResult) {
-      return value == other.value && true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => value.hashCode;
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class ImplementationClientCapabilities implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
     ImplementationClientCapabilities.canParse,
@@ -19687,28 +19725,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-/// Known error codes for an `InitializeErrorCodes`;
-class InitializeErrorCodes implements ToJsonable {
-  const InitializeErrorCodes(this._value);
-  const InitializeErrorCodes.fromJson(this._value);
-
-  final int _value;
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    return obj is int;
-  }
-
-  Object toJson() => _value;
-
-  @override
-  String toString() => _value.toString();
-
-  @override
-  int get hashCode => _value.hashCode;
-
-  bool operator ==(Object o) => o is InitializeErrorCodes && o._value == _value;
-}
-
 class InitializeParams implements WorkDoneProgressParams, ToJsonable {
   static const jsonHandler = LspJsonHandler(
     InitializeParams.canParse,
@@ -21497,29 +21513,55 @@
   );
 
   InlineValueContext({
+    required this.frameId,
     required this.stoppedLocation,
   });
   static InlineValueContext fromJson(Map<String, Object?> json) {
+    final frameIdJson = json['frameId'];
+    final frameId = frameIdJson as int;
     final stoppedLocationJson = json['stoppedLocation'];
     final stoppedLocation =
         Range.fromJson(stoppedLocationJson as Map<String, Object?>);
     return InlineValueContext(
+      frameId: frameId,
       stoppedLocation: stoppedLocation,
     );
   }
 
+  /// The stack frame (as a DAP Id) where the execution has stopped.
+  final int frameId;
+
   /// The document range where execution has stopped. Typically the end position
   /// of the range denotes the line where the inline values are shown.
   final Range stoppedLocation;
 
   Map<String, Object?> toJson() {
     var __result = <String, Object?>{};
+    __result['frameId'] = frameId;
     __result['stoppedLocation'] = stoppedLocation.toJson();
     return __result;
   }
 
   static bool canParse(Object? obj, LspJsonReporter reporter) {
     if (obj is Map<String, Object?>) {
+      reporter.push('frameId');
+      try {
+        if (!obj.containsKey('frameId')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final frameId = obj['frameId'];
+        if (frameId == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(frameId is int)) {
+          reporter.reportError('must be of type int');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
       reporter.push('stoppedLocation');
       try {
         if (!obj.containsKey('stoppedLocation')) {
@@ -21549,13 +21591,18 @@
   bool operator ==(Object other) {
     if (other is InlineValueContext &&
         other.runtimeType == InlineValueContext) {
-      return stoppedLocation == other.stoppedLocation && true;
+      return frameId == other.frameId &&
+          stoppedLocation == other.stoppedLocation &&
+          true;
     }
     return false;
   }
 
   @override
-  int get hashCode => stoppedLocation.hashCode;
+  int get hashCode => Object.hash(
+        frameId,
+        stoppedLocation,
+      );
 
   @override
   String toString() => jsonEncoder.convert(toJson());
@@ -24036,6 +24083,9 @@
   /// Constant for the 'textDocument/definition' method.
   static const textDocument_definition = Method('textDocument/definition');
 
+  /// Constant for the 'textDocument/diagnostic' method.
+  static const textDocument_diagnostic = Method('textDocument/diagnostic');
+
   /// Constant for the 'textDocument/didChange' method.
   static const textDocument_didChange = Method('textDocument/didChange');
 
@@ -24186,6 +24236,9 @@
   /// Constant for the 'workspace/configuration' method.
   static const workspace_configuration = Method('workspace/configuration');
 
+  /// Constant for the 'workspace/diagnostic' method.
+  static const workspace_diagnostic = Method('workspace/diagnostic');
+
   /// Constant for the 'workspace/diagnostic/refresh' method.
   static const workspace_diagnostic_refresh =
       Method('workspace/diagnostic/refresh');
@@ -25529,7 +25582,7 @@
         .toList();
     final structureJson = json['structure'];
     final structure = structureJson != null
-        ? NotebookDocumentChangeEventStructure.fromJson(
+        ? NotebookDocumentChangeEventCellsStructure.fromJson(
             structureJson as Map<String, Object?>)
         : null;
     final textContentJson = json['textContent'];
@@ -25549,7 +25602,7 @@
   final List<NotebookCell>? data;
 
   /// Changes to the cell structure to add or remove cells.
-  final NotebookDocumentChangeEventStructure? structure;
+  final NotebookDocumentChangeEventCellsStructure? structure;
 
   /// Changes to the text content of notebook cells.
   final List<NotebookDocumentChangeEventTextContent>? textContent;
@@ -25588,10 +25641,10 @@
       try {
         final structure = obj['structure'];
         if (structure != null &&
-            !(NotebookDocumentChangeEventStructure.canParse(
+            !(NotebookDocumentChangeEventCellsStructure.canParse(
                 structure, reporter))) {
           reporter.reportError(
-              'must be of type NotebookDocumentChangeEventStructure');
+              'must be of type NotebookDocumentChangeEventCellsStructure');
           return false;
         }
       } finally {
@@ -25648,18 +25701,18 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class NotebookDocumentChangeEventStructure implements ToJsonable {
+class NotebookDocumentChangeEventCellsStructure implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
-    NotebookDocumentChangeEventStructure.canParse,
-    NotebookDocumentChangeEventStructure.fromJson,
+    NotebookDocumentChangeEventCellsStructure.canParse,
+    NotebookDocumentChangeEventCellsStructure.fromJson,
   );
 
-  NotebookDocumentChangeEventStructure({
+  NotebookDocumentChangeEventCellsStructure({
     required this.array,
     this.didClose,
     this.didOpen,
   });
-  static NotebookDocumentChangeEventStructure fromJson(
+  static NotebookDocumentChangeEventCellsStructure fromJson(
       Map<String, Object?> json) {
     final arrayJson = json['array'];
     final array =
@@ -25673,7 +25726,7 @@
     final didOpen = (didOpenJson as List<Object?>?)
         ?.map((item) => TextDocumentItem.fromJson(item as Map<String, Object?>))
         .toList();
-    return NotebookDocumentChangeEventStructure(
+    return NotebookDocumentChangeEventCellsStructure(
       array: array,
       didClose: didClose,
       didOpen: didOpen,
@@ -25749,16 +25802,16 @@
       }
       return true;
     } else {
-      reporter
-          .reportError('must be of type NotebookDocumentChangeEventStructure');
+      reporter.reportError(
+          'must be of type NotebookDocumentChangeEventCellsStructure');
       return false;
     }
   }
 
   @override
   bool operator ==(Object other) {
-    if (other is NotebookDocumentChangeEventStructure &&
-        other.runtimeType == NotebookDocumentChangeEventStructure) {
+    if (other is NotebookDocumentChangeEventCellsStructure &&
+        other.runtimeType == NotebookDocumentChangeEventCellsStructure) {
       return array == other.array &&
           listEqual(didClose, other.didClose,
               (TextDocumentIdentifier a, TextDocumentIdentifier b) => a == b) &&
@@ -35133,215 +35186,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class ServerCapabilitiesFileOperations implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    ServerCapabilitiesFileOperations.canParse,
-    ServerCapabilitiesFileOperations.fromJson,
-  );
-
-  ServerCapabilitiesFileOperations({
-    this.didCreate,
-    this.didDelete,
-    this.didRename,
-    this.willCreate,
-    this.willDelete,
-    this.willRename,
-  });
-  static ServerCapabilitiesFileOperations fromJson(Map<String, Object?> json) {
-    final didCreateJson = json['didCreate'];
-    final didCreate = didCreateJson != null
-        ? FileOperationRegistrationOptions.fromJson(
-            didCreateJson as Map<String, Object?>)
-        : null;
-    final didDeleteJson = json['didDelete'];
-    final didDelete = didDeleteJson != null
-        ? FileOperationRegistrationOptions.fromJson(
-            didDeleteJson as Map<String, Object?>)
-        : null;
-    final didRenameJson = json['didRename'];
-    final didRename = didRenameJson != null
-        ? FileOperationRegistrationOptions.fromJson(
-            didRenameJson as Map<String, Object?>)
-        : null;
-    final willCreateJson = json['willCreate'];
-    final willCreate = willCreateJson != null
-        ? FileOperationRegistrationOptions.fromJson(
-            willCreateJson as Map<String, Object?>)
-        : null;
-    final willDeleteJson = json['willDelete'];
-    final willDelete = willDeleteJson != null
-        ? FileOperationRegistrationOptions.fromJson(
-            willDeleteJson as Map<String, Object?>)
-        : null;
-    final willRenameJson = json['willRename'];
-    final willRename = willRenameJson != null
-        ? FileOperationRegistrationOptions.fromJson(
-            willRenameJson as Map<String, Object?>)
-        : null;
-    return ServerCapabilitiesFileOperations(
-      didCreate: didCreate,
-      didDelete: didDelete,
-      didRename: didRename,
-      willCreate: willCreate,
-      willDelete: willDelete,
-      willRename: willRename,
-    );
-  }
-
-  /// The server is interested in receiving didCreateFiles notifications.
-  final FileOperationRegistrationOptions? didCreate;
-
-  /// The server is interested in receiving didDeleteFiles file notifications.
-  final FileOperationRegistrationOptions? didDelete;
-
-  /// The server is interested in receiving didRenameFiles notifications.
-  final FileOperationRegistrationOptions? didRename;
-
-  /// The server is interested in receiving willCreateFiles requests.
-  final FileOperationRegistrationOptions? willCreate;
-
-  /// The server is interested in receiving willDeleteFiles file requests.
-  final FileOperationRegistrationOptions? willDelete;
-
-  /// The server is interested in receiving willRenameFiles requests.
-  final FileOperationRegistrationOptions? willRename;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (didCreate != null) {
-      __result['didCreate'] = didCreate?.toJson();
-    }
-    if (didDelete != null) {
-      __result['didDelete'] = didDelete?.toJson();
-    }
-    if (didRename != null) {
-      __result['didRename'] = didRename?.toJson();
-    }
-    if (willCreate != null) {
-      __result['willCreate'] = willCreate?.toJson();
-    }
-    if (willDelete != null) {
-      __result['willDelete'] = willDelete?.toJson();
-    }
-    if (willRename != null) {
-      __result['willRename'] = willRename?.toJson();
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('didCreate');
-      try {
-        final didCreate = obj['didCreate'];
-        if (didCreate != null &&
-            !(FileOperationRegistrationOptions.canParse(didCreate, reporter))) {
-          reporter
-              .reportError('must be of type FileOperationRegistrationOptions');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('didDelete');
-      try {
-        final didDelete = obj['didDelete'];
-        if (didDelete != null &&
-            !(FileOperationRegistrationOptions.canParse(didDelete, reporter))) {
-          reporter
-              .reportError('must be of type FileOperationRegistrationOptions');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('didRename');
-      try {
-        final didRename = obj['didRename'];
-        if (didRename != null &&
-            !(FileOperationRegistrationOptions.canParse(didRename, reporter))) {
-          reporter
-              .reportError('must be of type FileOperationRegistrationOptions');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('willCreate');
-      try {
-        final willCreate = obj['willCreate'];
-        if (willCreate != null &&
-            !(FileOperationRegistrationOptions.canParse(
-                willCreate, reporter))) {
-          reporter
-              .reportError('must be of type FileOperationRegistrationOptions');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('willDelete');
-      try {
-        final willDelete = obj['willDelete'];
-        if (willDelete != null &&
-            !(FileOperationRegistrationOptions.canParse(
-                willDelete, reporter))) {
-          reporter
-              .reportError('must be of type FileOperationRegistrationOptions');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      reporter.push('willRename');
-      try {
-        final willRename = obj['willRename'];
-        if (willRename != null &&
-            !(FileOperationRegistrationOptions.canParse(
-                willRename, reporter))) {
-          reporter
-              .reportError('must be of type FileOperationRegistrationOptions');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError('must be of type ServerCapabilitiesFileOperations');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is ServerCapabilitiesFileOperations &&
-        other.runtimeType == ServerCapabilitiesFileOperations) {
-      return didCreate == other.didCreate &&
-          didDelete == other.didDelete &&
-          didRename == other.didRename &&
-          willCreate == other.willCreate &&
-          willDelete == other.willDelete &&
-          willRename == other.willRename &&
-          true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        didCreate,
-        didDelete,
-        didRename,
-        willCreate,
-        willDelete,
-        willRename,
-      );
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class ServerCapabilitiesWorkspace implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
     ServerCapabilitiesWorkspace.canParse,
@@ -35355,7 +35199,7 @@
   static ServerCapabilitiesWorkspace fromJson(Map<String, Object?> json) {
     final fileOperationsJson = json['fileOperations'];
     final fileOperations = fileOperationsJson != null
-        ? ServerCapabilitiesFileOperations.fromJson(
+        ? FileOperationOptions.fromJson(
             fileOperationsJson as Map<String, Object?>)
         : null;
     final workspaceFoldersJson = json['workspaceFolders'];
@@ -35371,7 +35215,7 @@
 
   /// The server is interested in file notifications/requests.
   ///  @since 3.16.0
-  final ServerCapabilitiesFileOperations? fileOperations;
+  final FileOperationOptions? fileOperations;
 
   /// The server supports workspace folder.
   ///  @since 3.6.0
@@ -35394,10 +35238,8 @@
       try {
         final fileOperations = obj['fileOperations'];
         if (fileOperations != null &&
-            !(ServerCapabilitiesFileOperations.canParse(
-                fileOperations, reporter))) {
-          reporter
-              .reportError('must be of type ServerCapabilitiesFileOperations');
+            !(FileOperationOptions.canParse(fileOperations, reporter))) {
+          reporter.reportError('must be of type FileOperationOptions');
           return false;
         }
       } finally {
@@ -36434,75 +36276,6 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
-class SignatureHelpClientCapabilitiesParameterInformation
-    implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    SignatureHelpClientCapabilitiesParameterInformation.canParse,
-    SignatureHelpClientCapabilitiesParameterInformation.fromJson,
-  );
-
-  SignatureHelpClientCapabilitiesParameterInformation({
-    this.labelOffsetSupport,
-  });
-  static SignatureHelpClientCapabilitiesParameterInformation fromJson(
-      Map<String, Object?> json) {
-    final labelOffsetSupportJson = json['labelOffsetSupport'];
-    final labelOffsetSupport = labelOffsetSupportJson as bool?;
-    return SignatureHelpClientCapabilitiesParameterInformation(
-      labelOffsetSupport: labelOffsetSupport,
-    );
-  }
-
-  /// The client supports processing label offsets instead of a simple label
-  /// string.
-  ///  @since 3.14.0
-  final bool? labelOffsetSupport;
-
-  Map<String, Object?> toJson() {
-    var __result = <String, Object?>{};
-    if (labelOffsetSupport != null) {
-      __result['labelOffsetSupport'] = labelOffsetSupport;
-    }
-    return __result;
-  }
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      reporter.push('labelOffsetSupport');
-      try {
-        final labelOffsetSupport = obj['labelOffsetSupport'];
-        if (labelOffsetSupport != null && !(labelOffsetSupport is bool)) {
-          reporter.reportError('must be of type bool');
-          return false;
-        }
-      } finally {
-        reporter.pop();
-      }
-      return true;
-    } else {
-      reporter.reportError(
-          'must be of type SignatureHelpClientCapabilitiesParameterInformation');
-      return false;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (other is SignatureHelpClientCapabilitiesParameterInformation &&
-        other.runtimeType ==
-            SignatureHelpClientCapabilitiesParameterInformation) {
-      return labelOffsetSupport == other.labelOffsetSupport && true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => labelOffsetSupport.hashCode;
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-}
-
 class SignatureHelpClientCapabilitiesSignatureInformation
     implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
@@ -36525,7 +36298,7 @@
         .toList();
     final parameterInformationJson = json['parameterInformation'];
     final parameterInformation = parameterInformationJson != null
-        ? SignatureHelpClientCapabilitiesParameterInformation.fromJson(
+        ? SignatureInformationParameterInformation.fromJson(
             parameterInformationJson as Map<String, Object?>)
         : null;
     return SignatureHelpClientCapabilitiesSignatureInformation(
@@ -36545,8 +36318,7 @@
   final List<MarkupKind>? documentationFormat;
 
   /// Client capabilities specific to parameter information.
-  final SignatureHelpClientCapabilitiesParameterInformation?
-      parameterInformation;
+  final SignatureInformationParameterInformation? parameterInformation;
 
   Map<String, Object?> toJson() {
     var __result = <String, Object?>{};
@@ -36593,10 +36365,10 @@
       try {
         final parameterInformation = obj['parameterInformation'];
         if (parameterInformation != null &&
-            !(SignatureHelpClientCapabilitiesParameterInformation.canParse(
+            !(SignatureInformationParameterInformation.canParse(
                 parameterInformation, reporter))) {
           reporter.reportError(
-              'must be of type SignatureHelpClientCapabilitiesParameterInformation');
+              'must be of type SignatureInformationParameterInformation');
           return false;
         }
       } finally {
@@ -37435,6 +37207,73 @@
   String toString() => jsonEncoder.convert(toJson());
 }
 
+class SignatureInformationParameterInformation implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+    SignatureInformationParameterInformation.canParse,
+    SignatureInformationParameterInformation.fromJson,
+  );
+
+  SignatureInformationParameterInformation({
+    this.labelOffsetSupport,
+  });
+  static SignatureInformationParameterInformation fromJson(
+      Map<String, Object?> json) {
+    final labelOffsetSupportJson = json['labelOffsetSupport'];
+    final labelOffsetSupport = labelOffsetSupportJson as bool?;
+    return SignatureInformationParameterInformation(
+      labelOffsetSupport: labelOffsetSupport,
+    );
+  }
+
+  /// The client supports processing label offsets instead of a simple label
+  /// string.
+  ///  @since 3.14.0
+  final bool? labelOffsetSupport;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    if (labelOffsetSupport != null) {
+      __result['labelOffsetSupport'] = labelOffsetSupport;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('labelOffsetSupport');
+      try {
+        final labelOffsetSupport = obj['labelOffsetSupport'];
+        if (labelOffsetSupport != null && !(labelOffsetSupport is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError(
+          'must be of type SignatureInformationParameterInformation');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is SignatureInformationParameterInformation &&
+        other.runtimeType == SignatureInformationParameterInformation) {
+      return labelOffsetSupport == other.labelOffsetSupport && true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => labelOffsetSupport.hashCode;
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
+
 /// Static registration options to be returned in the initialize request.
 class StaticRegistrationOptions implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
@@ -43510,7 +43349,7 @@
         : null;
     final fileOperationsJson = json['fileOperations'];
     final fileOperations = fileOperationsJson != null
-        ? ClientCapabilitiesFileOperations.fromJson(
+        ? FileOperationClientCapabilities.fromJson(
             fileOperationsJson as Map<String, Object?>)
         : null;
     final inlayHintJson = json['inlayHint'];
@@ -43587,7 +43426,7 @@
 
   /// The client has support for file requests/notifications.
   ///  @since 3.16.0
-  final ClientCapabilitiesFileOperations? fileOperations;
+  final FileOperationClientCapabilities? fileOperations;
 
   /// Client workspace capabilities specific to inlay hints.
   ///  @since 3.17.0
@@ -43750,10 +43589,10 @@
       try {
         final fileOperations = obj['fileOperations'];
         if (fileOperations != null &&
-            !(ClientCapabilitiesFileOperations.canParse(
+            !(FileOperationClientCapabilities.canParse(
                 fileOperations, reporter))) {
           reporter
-              .reportError('must be of type ClientCapabilitiesFileOperations');
+              .reportError('must be of type FileOperationClientCapabilities');
           return false;
         }
       } finally {
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 7147ebd..5b47d0a 100644
--- a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
+++ b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
@@ -283,7 +283,7 @@
         ),
         fileOperations: dynamicRegistrations.fileOperations
             ? null
-            : ServerCapabilitiesFileOperations(
+            : FileOperationOptions(
                 willRename: fileOperationRegistrationOptions,
               ),
       ),
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
index 41b97d1..f2046c1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
@@ -39,7 +39,7 @@
       if (enumElement.isEnum) {
         enumName = enumElement.name;
         for (var field in enumElement.fields) {
-          if (!field.isSynthetic) {
+          if (field.isEnumConstant) {
             enumConstantNames.add(field.name);
           }
         }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart
index 5cf8e0f..17327b7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart
@@ -106,6 +106,9 @@
     var parameterElement = expression.staticElement;
     for (var parameter in constructor.parameters.parameters) {
       if (parameter.declaredElement == parameterElement) {
+        if (parameter is DefaultFormalParameter) {
+          parameter = parameter.parameter;
+        }
         return parameter is SimpleFormalParameter ? parameter : null;
       }
     }
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index eaa1e0a..a397b81 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -583,18 +583,51 @@
     // don't check regions, but there should be no exceptions
   }
 
-  Future<void> test_class_fieldFormalParameter() async {
+  Future<void> test_class_fieldFormalParameter_requiredNamed() async {
     addTestFile('''
-class AAA {
-  int fff = 123;
-  AAA(this.fff);
+class A {
+  final int f;
+  A({required this.f}) : assert(f > 0);
 }
 ''');
     await prepareNavigation();
-    assertHasRegionTarget('fff);', 'fff = 123');
+    assertHasRegionTarget('this.f', 'f;');
+    assertHasRegionTarget('f}) :', 'f;');
+    assertHasRegionTarget('f > 0', 'f}) :');
   }
 
-  Future<void> test_class_fieldFormalParameter_unresolved() async {
+  Future<void> test_class_fieldFormalParameter_requiredPositional() async {
+    addTestFile('''
+class A {
+  final int f;
+  A(this.f) : assert(f > 0);
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('this.f', 'f;');
+    assertHasRegionTarget('f) :', 'f;');
+    assertHasRegionTarget('f > 0', 'f) :');
+  }
+
+  Future<void>
+      test_class_fieldFormalParameter_requiredPositional_functionTyped() async {
+    addTestFile('''
+class B {
+  final Object f;
+  B(int this.f<T>(T a)) : assert(f is Object);
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('f<T>', 'f;');
+    assertHasRegion('int ');
+    assertHasRegionTarget('T>', 'T>');
+    assertHasRegionTarget('T a', 'T>');
+    assertHasRegionTarget('a))', 'a))');
+    assertHasRegionTarget('f is', 'f<T>');
+  }
+
+  Future<void>
+      test_class_fieldFormalParameter_requiredPositional_unresolved() async {
     addTestFile('''
 class AAA {
   AAA(this.fff);
@@ -1343,28 +1376,30 @@
   Future<void> test_superFormalParameter_requiredNamed() async {
     addTestFile('''
 class A {
-  A({required int a}); // 0
+  A({required int a});
 }
 class B extends A {
-  B({required super.a}); // 1
+  B({required super.a}) : assert(a > 0);
 }
 ''');
     await prepareNavigation();
-    assertHasRegionTarget('a}); // 1', 'a}); // 0');
+    assertHasRegionTarget('a}) :', 'a});');
+    assertHasRegionTarget('a > 0', 'a}) :');
   }
 
   Future<void> test_superFormalParameter_requiredPositional() async {
     addTestFile('''
 class A {
-  A(int a); // 0
+  A(int a);
 }
 class B extends A {
-  B(super.a); // 1
+  B(super.a) : assert(a > 0);
 }
 ''');
     await prepareNavigation();
-    assertHasRegionTarget('super.a', 'a); // 0');
-    assertHasRegionTarget('a); // 1', 'a); // 0');
+    assertHasRegionTarget('super.a', 'a);');
+    assertHasRegionTarget('a) :', 'a);');
+    assertHasRegionTarget('a > 0', 'a) :');
   }
 
   Future<void>
@@ -1374,7 +1409,7 @@
   A(Object a); // 0
 }
 class B extends A {
-  B(int super.a<T>(T b)); // 1
+  B(int super.a<T>(T b)) : assert(a is Object);
 }
 ''');
     await prepareNavigation();
@@ -1383,6 +1418,8 @@
     assertHasRegionTarget('T>', 'T>');
     assertHasRegionTarget('T b', 'T>');
     assertHasRegionTarget('b))', 'b))');
+    assertHasRegionTarget('b))', 'b))');
+    assertHasRegionTarget('a is', 'a<T>');
   }
 
   Future<void> test_superFormalParameter_requiredPositional_unresolved() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
index 2d950bd..8c6eaea 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
@@ -89,6 +89,43 @@
 ''');
   }
 
+  Future<void> test_final() async {
+    await resolveTestCode('''
+enum E {
+  a(0),
+  b(1);
+
+  final int f;
+  const E(this.f);
+}
+
+void f(E e) {
+  switch (e) {
+  }
+}
+''');
+    await assertHasFixWithFilter('''
+enum E {
+  a(0),
+  b(1);
+
+  final int f;
+  const E(this.f);
+}
+
+void f(E e) {
+  switch (e) {
+    case E.a:
+      // TODO: Handle this case.
+      break;
+    case E.b:
+      // TODO: Handle this case.
+      break;
+  }
+}
+''');
+  }
+
   Future<void> test_incomplete_switchStatement() async {
     await resolveTestCode(r'''
 enum E {a, b, c}
@@ -125,4 +162,74 @@
 }
 ''');
   }
+
+  Future<void> test_static() async {
+    await resolveTestCode('''
+enum E {
+  a,
+  b;
+
+  static int s = 1;
+}
+
+void f(E e) {
+  switch (e) {
+  }
+}
+''');
+    await assertHasFixWithFilter('''
+enum E {
+  a,
+  b;
+
+  static int s = 1;
+}
+
+void f(E e) {
+  switch (e) {
+    case E.a:
+      // TODO: Handle this case.
+      break;
+    case E.b:
+      // TODO: Handle this case.
+      break;
+  }
+}
+''');
+  }
+
+  Future<void> test_static_const() async {
+    await resolveTestCode('''
+enum E {
+  a,
+  b;
+
+  static const int s = 1;
+}
+
+void f(E e) {
+  switch (e) {
+  }
+}
+''');
+    await assertHasFixWithFilter('''
+enum E {
+  a,
+  b;
+
+  static const int s = 1;
+}
+
+void f(E e) {
+  switch (e) {
+    case E.a:
+      // TODO: Handle this case.
+      break;
+    case E.b:
+      // TODO: Handle this case.
+      break;
+  }
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_initializing_formal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_initializing_formal_test.dart
index e082d34..d926b29 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_initializing_formal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_initializing_formal_test.dart
@@ -23,7 +23,7 @@
   @override
   String get lintCode => LintNames.prefer_initializing_formals;
 
-  Future<void> test_assignment_different_type() async {
+  Future<void> test_assignment_differentType() async {
     await resolveTestCode('''
 class C {
   Object a = '';
@@ -59,6 +59,23 @@
 ''');
   }
 
+  Future<void> test_assignment_named() async {
+    await resolveTestCode('''
+class C {
+  int? a;
+  C({int? a = 1}) {
+    this.a = a;
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  int? a;
+  C({this.a = 1});
+}
+''');
+  }
+
   Future<void> test_assignment_notEmptyAfterRemoval() async {
     await resolveTestCode('''
 class C {
@@ -79,7 +96,24 @@
 ''');
   }
 
-  Future<void> test_initializer_different_type() async {
+  Future<void> test_assignment_positional_differentType() async {
+    await resolveTestCode('''
+class C {
+  Object? a;
+  C([String? a]) {
+    this.a = a;
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Object? a;
+  C([String? this.a]);
+}
+''');
+  }
+
+  Future<void> test_initializer_differentType() async {
     await resolveTestCode('''
 class C {
   final Object name;
@@ -109,6 +143,21 @@
 ''');
   }
 
+  Future<void> test_initializer_named_differentType() async {
+    await resolveTestCode('''
+class C {
+  Object? a;
+  C({String? a}) : a = a;
+}
+''');
+    await assertHasFix('''
+class C {
+  Object? a;
+  C({String? this.a});
+}
+''');
+  }
+
   Future<void> test_initializer_notEmptyAfterRemoval() async {
     await resolveTestCode('''
 class C {
@@ -125,4 +174,19 @@
 }
 ''');
   }
+
+  Future<void> test_initializer_positional() async {
+    await resolveTestCode('''
+class C {
+  int? a;
+  C([int? a = 1]): a = a;
+}
+''');
+    await assertHasFix('''
+class C {
+  int? a;
+  C([this.a = 1]);
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/tool/lsp_spec/generated_classes_test.dart b/pkg/analysis_server/test/tool/lsp_spec/generated_classes_test.dart
index 4661b5c..f10b8ce 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/generated_classes_test.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/generated_classes_test.dart
@@ -16,10 +16,10 @@
     });
 
     test('with list fields can be checked for equality', () {
-      final a = CodeActionClientCapabilitiesCodeActionKind(
+      final a = CodeActionLiteralSupportCodeActionKind(
         valueSet: [CodeActionKind.QuickFix],
       );
-      final b = CodeActionClientCapabilitiesCodeActionKind(
+      final b = CodeActionLiteralSupportCodeActionKind(
         valueSet: [CodeActionKind.QuickFix],
       );
 
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index 13931a9..d01feea 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -73,7 +73,23 @@
     //   the migration to JSON meta_model.
     'ClientCapabilitiesWindow': 'WindowClientCapabilities',
     'ClientCapabilitiesWorkspace': 'WorkspaceClientCapabilities',
+    'ClientCapabilitiesFileOperations': 'FileOperationClientCapabilities',
+    'ServerCapabilitiesFileOperations': 'FileOperationOptions',
+    'ClientCapabilitiesGeneral': 'GeneralClientCapabilities',
+    'CompletionClientCapabilitiesInsertTextModeSupport':
+        'CompletionItemInsertTextModeSupport',
+    'CompletionClientCapabilitiesResolveSupport':
+        'CompletionItemResolveSupport',
+    'CompletionClientCapabilitiesTagSupport': 'CompletionItemTagSupport',
+    'CodeActionClientCapabilitiesCodeActionKind':
+        'CodeActionLiteralSupportCodeActionKind',
     'DocumentFilter': 'TextDocumentFilter',
+    'ClientCapabilitiesStaleRequestSupport':
+        'GeneralClientCapabilitiesStaleRequestSupport',
+    'SignatureHelpClientCapabilitiesParameterInformation':
+        'SignatureInformationParameterInformation',
+    'NotebookDocumentChangeEventStructure':
+        'NotebookDocumentChangeEventCellsStructure',
   };
 
   for (final type in types) {
diff --git a/pkg/analysis_server/tool/lsp_spec/generate_all.dart b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
index 86764dc..57b545b 100644
--- a/pkg/analysis_server/tool/lsp_spec/generate_all.dart
+++ b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
@@ -386,7 +386,11 @@
   // of the LSP spec.
   if (input.trim() == r"export const EOL: string[] = ['\n', '\r\n', '\r'];" ||
       input.startsWith('textDocument.codeAction.resolveSupport =') ||
-      input.startsWith('textDocument.inlayHint.resolveSupport =')) {
+      input.startsWith('textDocument.inlayHint.resolveSupport =') ||
+      // These two are example definitions, the real definitions start "export"
+      // and contain some base classes.
+      input.startsWith('interface HoverParams {') ||
+      input.startsWith('interface HoverResult {')) {
     return false;
   }
 
diff --git a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
index fb1e6d3..55fd7f4 100644
--- a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
+++ b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
@@ -29,11 +29,13 @@
 fullTitle: Language Server Protocol Specification - 3.17
 index: 2
 redirect_from:
-  - /specification
-  - /specifications/specification-current
+  - specification
+  - specification/
+  - specifications/specification-current
+  - specifications/specification-current/
 ---
 
-This document describes the upcoming 3.17.x version of the language server protocol. An implementation for node of the 3.17.x version of the protocol can be found [here](https://github.com/Microsoft/vscode-languageserver-node).
+This document describes the 3.17.x version of the language server protocol. An implementation for node of the 3.17.x version of the protocol can be found [here](https://github.com/Microsoft/vscode-languageserver-node).
 
 **Note:** edits to this specification can be made via a pull request against this markdown [document](https://github.com/Microsoft/language-server-protocol/blob/gh-pages/_specifications/lsp/3.17/specification.md).
 
@@ -194,7 +196,7 @@
 
 #### <a href="#responseMessage" name="responseMessage" class="anchor"> Response Message </a>
 
-A Response Message sent as a result of a request. If a request doesn't provide a result value the receiver of a request still needs to return a response message to conform to the JSON RPC specification. The result property of the ResponseMessage should be set to `null` in this case to signal a successful request.
+A Response Message sent as a result of a request. If a request doesn't provide a result value the receiver of a request still needs to return a response message to conform to the JSON-RPC specification. The result property of the ResponseMessage should be set to `null` in this case to signal a successful request.
 
 ```typescript
 interface ResponseMessage extends Message {
@@ -242,7 +244,7 @@
 
 ```typescript
 export namespace ErrorCodes {
-	// Defined by JSON RPC
+	// Defined by JSON-RPC
 	export const ParseError: integer = -32700;
 	export const InvalidRequest: integer = -32600;
 	export const MethodNotFound: integer = -32601;
@@ -250,7 +252,7 @@
 	export const InternalError: integer = -32603;
 
 	/**
-	 * This is the start range of JSON RPC reserved error codes.
+	 * This is the start range of JSON-RPC reserved error codes.
 	 * It doesn't denote a real error code. No LSP error codes should
 	 * be defined between the start and end range. For backwards
 	 * compatibility the `ServerNotInitialized` and the `UnknownErrorCode`
@@ -270,7 +272,7 @@
 	export const UnknownErrorCode: integer = -32001;
 
 	/**
-	 * This is the end range of JSON RPC reserved error codes.
+	 * This is the end range of JSON-RPC reserved error codes.
 	 * It doesn't denote a real error code.
 	 *
 	 * @since 3.16.0
@@ -372,7 +374,7 @@
 }
 ```
 
-A request that got canceled still needs to return from the server and send a response back. It can not be left open / hanging. This is in line with the JSON RPC protocol that requires that every request sends a response back. In addition it allows for returning partial results on cancel. If the request returns an error response on cancellation it is advised to set the error code to `ErrorCodes.RequestCancelled`.
+A request that got canceled still needs to return from the server and send a response back. It can not be left open / hanging. This is in line with the JSON-RPC protocol that requires that every request sends a response back. In addition it allows for returning partial results on cancel. If the request returns an error response on cancellation it is advised to set the error code to `ErrorCodes.RequestCancelled`.
 
 #### <a href="#progress" name="progress" class="anchor"> Progress Support (:arrow_right: :arrow_left:)</a>
 
@@ -2884,7 +2886,7 @@
 
 Since most of the registration options require to specify a document selector there is a base interface that can be used. See `TextDocumentRegistrationOptions`.
 
-An example JSON RPC message to register dynamically for the `textDocument/willSaveWaitUntil` feature on the client side is as follows (only details shown):
+An example JSON-RPC message to register dynamically for the `textDocument/willSaveWaitUntil` feature on the client side is as follows (only details shown):
 
 ```json
 {
@@ -2985,7 +2987,7 @@
 }
 ```
 
-An example JSON RPC message to unregister the above registered `textDocument/willSaveWaitUntil` feature looks like this:
+An example JSON-RPC message to unregister the above registered `textDocument/willSaveWaitUntil` feature looks like this:
 
 ```json
 {
@@ -6902,6 +6904,11 @@
  */
 export interface InlineValueContext {
 	/**
+	 * The stack frame (as a DAP Id) where the execution has stopped.
+	 */
+	frameId: integer;
+
+	/**
 	 * The document range where execution has stopped.
 	 * Typically the end position of the range denotes the line where the
 	 * inline values are shown.
diff --git a/pkg/analysis_server/tool/lsp_spec/markdown.dart b/pkg/analysis_server/tool/lsp_spec/markdown.dart
index 530ee49..2a245f0 100644
--- a/pkg/analysis_server/tool/lsp_spec/markdown.dart
+++ b/pkg/analysis_server/tool/lsp_spec/markdown.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 final _methodNamesPattern =
-    RegExp(r'''\* method: ['`](.*?)[`'],?\r?\n''', multiLine: true);
+    RegExp(r'''\* method: ['`](.*?)[`'][,.]?\r?\n''', multiLine: true);
 final _typeScriptBlockPattern =
     RegExp(r'\B```typescript([\S\s]*?)\n\s*```', multiLine: true);
 
diff --git a/pkg/analysis_server/tool/lsp_spec/typescript.dart b/pkg/analysis_server/tool/lsp_spec/typescript.dart
index 44e6f02..0027724 100644
--- a/pkg/analysis_server/tool/lsp_spec/typescript.dart
+++ b/pkg/analysis_server/tool/lsp_spec/typescript.dart
@@ -149,6 +149,9 @@
   // have to handle any cases where both a namespace and interfaces are declared
   // with the same name.
   return node.name != 'InitializeError' &&
+      // We don't use `InitializeErrorCodes` as it contains only one error code
+      // that has been deprecated and we've never used.
+      node.name != 'InitializeErrorCodes' &&
       // We don't emit MarkedString because it gets mapped to a simple String
       // when getting the .dartType for it.
       // .startsWith() because there are inline types that will be generated.
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 7e6d842..c28b106 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -190,7 +190,8 @@
     enableString: EnableString.inference_update_1,
     isEnabledByDefault: IsEnabledByDefault.inference_update_1,
     isExpired: IsExpired.inference_update_1,
-    documentation: 'Enhanced type inference',
+    documentation:
+        'Horizontal type inference for function expressions passed to generic invocations.',
     experimentalReleaseVersion: null,
     releaseVersion: null,
   );
diff --git a/pkg/analyzer/lib/src/error/use_result_verifier.dart b/pkg/analyzer/lib/src/error/use_result_verifier.dart
index 3a0fd4f..0fec4a1 100644
--- a/pkg/analyzer/lib/src/error/use_result_verifier.dart
+++ b/pkg/analyzer/lib/src/error/use_result_verifier.dart
@@ -223,6 +223,7 @@
         parent is ListLiteral ||
         parent is MapLiteralEntry ||
         parent is MethodInvocation ||
+        parent is NamedExpression ||
         parent is PropertyAccess ||
         parent is ReturnStatement ||
         parent is SetOrMapLiteral ||
diff --git a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
index df5b5d2..f45f182 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
@@ -1117,6 +1117,23 @@
 ''');
   }
 
+  test_namedExpression() async {
+    await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int m() => 1;
+}
+
+void g({int? i}) {}
+
+void f() {
+  g(i: A().m());
+}
+''');
+  }
+
   test_topLevelFunction_result_assigned() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 56ec6a3..38053a2 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -71,9 +71,6 @@
 
   void _addRegion(int offset, int length, Element? element) {
     element = element?.nonSynthetic;
-    if (element is FieldFormalParameterElement) {
-      element = element.field;
-    }
     if (element == null || element == DynamicElementImpl.instance) {
       return;
     }
@@ -346,6 +343,19 @@
   }
 
   @override
+  void visitFieldFormalParameter(FieldFormalParameter node) {
+    final element = node.declaredElement;
+    if (element is FieldFormalParameterElementImpl) {
+      computer._addRegionForToken(node.thisKeyword, element.field);
+      computer._addRegionForNode(node.identifier, element.field);
+    }
+
+    node.type?.accept(this);
+    node.typeParameters?.accept(this);
+    node.parameters?.accept(this);
+  }
+
+  @override
   void visitImportDirective(ImportDirective node) {
     var importElement = node.element;
     if (importElement != null) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index e737994..bce15d9 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -272,10 +272,10 @@
                                  ->object_store()
                                  ->build_nongeneric_method_extractor_code());
 
-  const intptr_t stub_index = __ object_pool_builder().AddObject(
-      build_method_extractor, ObjectPool::Patchability::kNotPatchable);
-  const intptr_t function_index = __ object_pool_builder().AddObject(
-      extracted_method, ObjectPool::Patchability::kNotPatchable);
+  const intptr_t stub_index =
+      __ object_pool_builder().FindObject(build_method_extractor);
+  const intptr_t function_index =
+      __ object_pool_builder().FindObject(extracted_method);
 
   // We use a custom pool register to preserve caller PP.
   Register kPoolReg = R0;
@@ -728,11 +728,15 @@
     __ Push(reg);
     __ PushObject(obj);
     if (is_optimizing()) {
-      __ BranchLinkPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      // No breakpoints in optimized code.
+      __ BranchLink(StubCode::OptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kOther, deopt_id, source);
     } else {
+      // Patchable to support breakpoints.
       __ BranchLinkPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id,
+                           source);
     }
-    AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id, source);
     // Stub returns result in flags (result of a cmp, we need Z computed).
     __ Drop(1);   // Discard constant.
     __ Pop(reg);  // Restore 'reg'.
@@ -752,7 +756,7 @@
     __ Push(left);
     __ Push(right);
     if (is_optimizing()) {
-      __ BranchLinkPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      __ BranchLink(StubCode::OptimizedIdenticalWithNumberCheck());
     } else {
       __ BranchLinkPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
     }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index d7a6ff6..7f86e88 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -263,10 +263,10 @@
                                  ->object_store()
                                  ->build_nongeneric_method_extractor_code());
 
-  const intptr_t stub_index = __ object_pool_builder().AddObject(
-      build_method_extractor, ObjectPool::Patchability::kNotPatchable);
-  const intptr_t function_index = __ object_pool_builder().AddObject(
-      extracted_method, ObjectPool::Patchability::kNotPatchable);
+  const intptr_t stub_index =
+      __ object_pool_builder().FindObject(build_method_extractor);
+  const intptr_t function_index =
+      __ object_pool_builder().FindObject(extracted_method);
 
   // We use a custom pool register to preserve caller PP.
   Register kPoolReg = R0;
@@ -717,11 +717,15 @@
     __ LoadObject(TMP, obj);
     __ PushPair(TMP, reg);
     if (is_optimizing()) {
-      __ BranchLinkPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      // No breakpoints in optimized code.
+      __ BranchLink(StubCode::OptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kOther, deopt_id, source);
     } else {
+      // Patchable to support breakpoints.
       __ BranchLinkPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id,
+                           source);
     }
-    AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id, source);
     // Stub returns result in flags (result of a cmp, we need Z computed).
     // Discard constant.
     // Restore 'reg'.
@@ -741,7 +745,7 @@
   if (needs_number_check) {
     __ PushPair(right, left);
     if (is_optimizing()) {
-      __ BranchLinkPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      __ BranchLink(StubCode::OptimizedIdenticalWithNumberCheck());
     } else {
       __ BranchLinkPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
     }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index 6e0172d..7a3215d 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -252,10 +252,10 @@
                                  ->object_store()
                                  ->build_nongeneric_method_extractor_code());
 
-  const intptr_t stub_index = __ object_pool_builder().AddObject(
-      build_method_extractor, ObjectPool::Patchability::kNotPatchable);
-  const intptr_t function_index = __ object_pool_builder().AddObject(
-      extracted_method, ObjectPool::Patchability::kNotPatchable);
+  const intptr_t stub_index =
+      __ object_pool_builder().FindObject(build_method_extractor);
+  const intptr_t function_index =
+      __ object_pool_builder().FindObject(extracted_method);
 
   // We use a custom pool register to preserve caller PP.
   Register kPoolReg = A1;
@@ -693,11 +693,15 @@
     __ LoadObject(TMP, obj);
     __ PushRegisterPair(TMP, reg);
     if (is_optimizing()) {
-      __ JumpAndLinkPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      // No breakpoints in optimized code.
+      __ JumpAndLink(StubCode::OptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kOther, deopt_id, source);
     } else {
+      // Patchable to support breakpoints.
       __ JumpAndLinkPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id,
+                           source);
     }
-    AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id, source);
     __ PopRegisterPair(ZR, reg);
     // RISC-V has no condition flags, so the result is instead returned as
     // TMP zero if equal, non-zero if non-equal.
@@ -718,7 +722,7 @@
   if (needs_number_check) {
     __ PushRegisterPair(right, left);
     if (is_optimizing()) {
-      __ JumpAndLinkPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      __ JumpAndLink(StubCode::OptimizedIdenticalWithNumberCheck());
     } else {
       __ JumpAndLinkPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
     }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index fe8bf0d..1c87031 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -268,10 +268,10 @@
                                  ->build_nongeneric_method_extractor_code());
   ASSERT(!build_method_extractor.IsNull());
 
-  const intptr_t stub_index = __ object_pool_builder().AddObject(
-      build_method_extractor, compiler::ObjectPoolBuilderEntry::kNotPatchable);
-  const intptr_t function_index = __ object_pool_builder().AddObject(
-      extracted_method, compiler::ObjectPoolBuilderEntry::kNotPatchable);
+  const intptr_t stub_index =
+      __ object_pool_builder().FindObject(build_method_extractor);
+  const intptr_t function_index =
+      __ object_pool_builder().FindObject(extracted_method);
 
   // We use a custom pool register to preserve caller PP.
   Register kPoolReg = RAX;
@@ -705,11 +705,15 @@
     __ pushq(reg);
     __ PushObject(obj);
     if (is_optimizing()) {
-      __ CallPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      // No breakpoints in optimized code.
+      __ Call(StubCode::OptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kOther, deopt_id, source);
     } else {
+      // Patchable to support breakpoints.
       __ CallPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
+      AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id,
+                           source);
     }
-    AddCurrentDescriptor(UntaggedPcDescriptors::kRuntimeCall, deopt_id, source);
     // Stub returns result in flags (result of a cmpq, we need ZF computed).
     __ popq(reg);  // Discard constant.
     __ popq(reg);  // Restore 'reg'.
@@ -729,7 +733,7 @@
     __ pushq(left);
     __ pushq(right);
     if (is_optimizing()) {
-      __ CallPatchable(StubCode::OptimizedIdenticalWithNumberCheck());
+      __ Call(StubCode::OptimizedIdenticalWithNumberCheck());
     } else {
       __ CallPatchable(StubCode::UnoptimizedIdenticalWithNumberCheck());
     }
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index a7a7eda..ff3d890 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -43,7 +43,7 @@
 /// Can be used internally in platform library implementations of
 /// data structures, where a value is known to have a type different
 /// from its static type (like knowing that a string is definitely
-/// a "_OneByteString" or that the value stored into a heterogenous
+/// a "_OneByteString" or that the value stored into a heterogeneous
 /// list is really a value of the surrounding map).
 ///
 /// Must only be used for casts which would definitely *succeed*
@@ -53,7 +53,7 @@
 external T unsafeCast<T>(dynamic value);
 
 // Powers of 10 up to 10^22 are representable as doubles.
-// Powers of 10 above that are only approximate due to lack of precission.
+// Powers of 10 above that are only approximate due to lack of precision.
 // Used by double-parsing.
 const POWERS_OF_TEN = const [
   1.0, // 0
@@ -136,7 +136,7 @@
   return digit1 * 16 + digit2 - (digit2 & 256);
 }
 
-/// A resusable `null`-valued future used by `dart:async`.
+/// A reusable `null`-valued future used by `dart:async`.
 ///
 /// **DO NOT USE.**
 ///
@@ -723,7 +723,7 @@
 /// If applied to a class method, or parameter of such,
 /// any method implementing that interface method is also annotated.
 /// If multiple `Since` annotations apply to the same declaration or
-/// parameter, the latest version takes precendence.
+/// parameter, the latest version takes precedence.
 ///
 /// Any use of a marked API may trigger a warning if the using code
 /// does not require an SDK version guaranteeing that the API is available,
diff --git a/tools/VERSION b/tools/VERSION
index 8b0a251..8f16444 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 119
+PRERELEASE 120
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index fbaa9d7..c1b6308 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -126,7 +126,7 @@
     help: "Static meta-programming"
 
   inference-update-1:
-    help: "Enhanced type inference"
+    help: "Horizontal type inference for function expressions passed to generic invocations."
 
 # Experiment flag only used for testing.
   test-experiment: