[analysis_server] Update to latest published 3.17 (TS) spec

Some minor tweaks + fix for `NotebookDocumentSyncOptions` since the original publish.

Change-Id: I3962222a984e2617ebcb023453a16580cd787b7b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245700
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 4d212ef..663c89b 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -6729,6 +6729,7 @@
 
   CompletionListItemDefaults({
     this.commitCharacters,
+    this.data,
     this.editRange,
     this.insertTextFormat,
     this.insertTextMode,
@@ -6738,6 +6739,8 @@
     final commitCharacters = (commitCharactersJson as List<Object?>?)
         ?.map((item) => item as String)
         .toList();
+    final dataJson = json['data'];
+    final data = dataJson;
     final editRangeJson = json['editRange'];
     final editRange = editRangeJson == null
         ? null
@@ -6759,6 +6762,7 @@
         : null;
     return CompletionListItemDefaults(
       commitCharacters: commitCharacters,
+      data: data,
       editRange: editRange,
       insertTextFormat: insertTextFormat,
       insertTextMode: insertTextMode,
@@ -6769,6 +6773,10 @@
   ///  @since 3.17.0
   final List<String>? commitCharacters;
 
+  /// A default data value.
+  ///  @since 3.17.0
+  final Object? data;
+
   /// A default edit range
   ///  @since 3.17.0
   final Either2<CompletionItemEditRange, Range>? editRange;
@@ -6786,6 +6794,9 @@
     if (commitCharacters != null) {
       result['commitCharacters'] = commitCharacters;
     }
+    if (data != null) {
+      result['data'] = data;
+    }
     if (editRange != null) {
       result['editRange'] = editRange;
     }
@@ -6860,6 +6871,7 @@
         other.runtimeType == CompletionListItemDefaults) {
       return listEqual(commitCharacters, other.commitCharacters,
               (String a, String b) => a == b) &&
+          data == other.data &&
           editRange == other.editRange &&
           insertTextFormat == other.insertTextFormat &&
           insertTextMode == other.insertTextMode &&
@@ -6871,6 +6883,7 @@
   @override
   int get hashCode => Object.hash(
         lspHashCode(commitCharacters),
+        data,
         editRange,
         insertTextFormat,
         insertTextMode,
@@ -26487,13 +26500,17 @@
 
   NotebookDocumentSyncClientCapabilities({
     this.dynamicRegistration,
+    this.executionSummarySupport,
   });
   static NotebookDocumentSyncClientCapabilities fromJson(
       Map<String, Object?> json) {
     final dynamicRegistrationJson = json['dynamicRegistration'];
     final dynamicRegistration = dynamicRegistrationJson as bool?;
+    final executionSummarySupportJson = json['executionSummarySupport'];
+    final executionSummarySupport = executionSummarySupportJson as bool?;
     return NotebookDocumentSyncClientCapabilities(
       dynamicRegistration: dynamicRegistration,
+      executionSummarySupport: executionSummarySupport,
     );
   }
 
@@ -26503,11 +26520,17 @@
   /// capability as well.
   final bool? dynamicRegistration;
 
+  /// The client supports sending execution summary data per cell.
+  final bool? executionSummarySupport;
+
   Map<String, Object?> toJson() {
     var result = <String, Object?>{};
     if (dynamicRegistration != null) {
       result['dynamicRegistration'] = dynamicRegistration;
     }
+    if (executionSummarySupport != null) {
+      result['executionSummarySupport'] = executionSummarySupport;
+    }
     return result;
   }
 
@@ -26523,6 +26546,17 @@
       } finally {
         reporter.pop();
       }
+      reporter.push('executionSummarySupport');
+      try {
+        final executionSummarySupport = obj['executionSummarySupport'];
+        if (executionSummarySupport != null &&
+            !(executionSummarySupport is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
       return true;
     } else {
       reporter.reportError(
@@ -26535,13 +26569,18 @@
   bool operator ==(Object other) {
     if (other is NotebookDocumentSyncClientCapabilities &&
         other.runtimeType == NotebookDocumentSyncClientCapabilities) {
-      return dynamicRegistration == other.dynamicRegistration && true;
+      return dynamicRegistration == other.dynamicRegistration &&
+          executionSummarySupport == other.executionSummarySupport &&
+          true;
     }
     return false;
   }
 
   @override
-  int get hashCode => dynamicRegistration.hashCode;
+  int get hashCode => Object.hash(
+        dynamicRegistration,
+        executionSummarySupport,
+      );
 
   @override
   String toString() => jsonEncoder.convert(toJson());
@@ -26691,7 +26730,7 @@
 
   NotebookDocumentSyncOptionsNotebookSelector({
     this.cells,
-    required this.notebookDocument,
+    required this.notebook,
   });
   static NotebookDocumentSyncOptionsNotebookSelector fromJson(
       Map<String, Object?> json) {
@@ -26701,26 +26740,25 @@
             NotebookDocumentSyncOptionsNotebookSelectorCells.fromJson(
                 item as Map<String, Object?>))
         .toList();
-    final notebookDocumentJson = json['notebookDocument'];
-    final notebookDocument = (NotebookDocumentFilter1.canParse(
-                notebookDocumentJson, nullLspJsonReporter) ||
+    final notebookJson = json['notebook'];
+    final notebook = (NotebookDocumentFilter1.canParse(notebookJson, nullLspJsonReporter) ||
             NotebookDocumentFilter2.canParse(
-                notebookDocumentJson, nullLspJsonReporter) ||
-            NotebookDocumentFilter3.canParse(
-                notebookDocumentJson, nullLspJsonReporter))
+                notebookJson, nullLspJsonReporter) ||
+            NotebookDocumentFilter3.canParse(notebookJson, nullLspJsonReporter))
         ? Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>.t1(
-            NotebookDocumentFilter1.canParse(notebookDocumentJson, nullLspJsonReporter)
-                ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t1(
-                    NotebookDocumentFilter1.fromJson(
-                        notebookDocumentJson as Map<String, Object?>))
-                : (NotebookDocumentFilter2.canParse(notebookDocumentJson, nullLspJsonReporter)
-                    ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t2(
-                        NotebookDocumentFilter2.fromJson(notebookDocumentJson as Map<String, Object?>))
-                    : (NotebookDocumentFilter3.canParse(notebookDocumentJson, nullLspJsonReporter) ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t3(NotebookDocumentFilter3.fromJson(notebookDocumentJson as Map<String, Object?>)) : (throw '''$notebookDocumentJson was not one of (NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3)'''))))
-        : (notebookDocumentJson is String ? Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>.t2(notebookDocumentJson) : (throw '''$notebookDocumentJson was not one of (Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String)'''));
+            NotebookDocumentFilter1.canParse(notebookJson, nullLspJsonReporter)
+                ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t1(NotebookDocumentFilter1.fromJson(
+                    notebookJson as Map<String, Object?>))
+                : (NotebookDocumentFilter2.canParse(notebookJson, nullLspJsonReporter)
+                    ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t2(NotebookDocumentFilter2.fromJson(
+                        notebookJson as Map<String, Object?>))
+                    : (NotebookDocumentFilter3.canParse(notebookJson, nullLspJsonReporter)
+                        ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t3(NotebookDocumentFilter3.fromJson(notebookJson as Map<String, Object?>))
+                        : (throw '''$notebookJson was not one of (NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3)'''))))
+        : (notebookJson is String ? Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>.t2(notebookJson) : (throw '''$notebookJson was not one of (Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String)'''));
     return NotebookDocumentSyncOptionsNotebookSelector(
       cells: cells,
-      notebookDocument: notebookDocument,
+      notebook: notebook,
     );
   }
 
@@ -26732,14 +26770,14 @@
   final Either2<
       Either3<NotebookDocumentFilter1, NotebookDocumentFilter2,
           NotebookDocumentFilter3>,
-      String> notebookDocument;
+      String> notebook;
 
   Map<String, Object?> toJson() {
     var result = <String, Object?>{};
     if (cells != null) {
       result['cells'] = cells?.map((item) => item.toJson()).toList();
     }
-    result['notebookDocument'] = notebookDocument;
+    result['notebook'] = notebook;
     return result;
   }
 
@@ -26760,21 +26798,21 @@
       } finally {
         reporter.pop();
       }
-      reporter.push('notebookDocument');
+      reporter.push('notebook');
       try {
-        if (!obj.containsKey('notebookDocument')) {
+        if (!obj.containsKey('notebook')) {
           reporter.reportError('must not be undefined');
           return false;
         }
-        final notebookDocument = obj['notebookDocument'];
-        if (notebookDocument == null) {
+        final notebook = obj['notebook'];
+        if (notebook == null) {
           reporter.reportError('must not be null');
           return false;
         }
-        if (!(((NotebookDocumentFilter1.canParse(notebookDocument, reporter) ||
-                NotebookDocumentFilter2.canParse(notebookDocument, reporter) ||
-                NotebookDocumentFilter3.canParse(notebookDocument, reporter)) ||
-            notebookDocument is String))) {
+        if (!(((NotebookDocumentFilter1.canParse(notebook, reporter) ||
+                NotebookDocumentFilter2.canParse(notebook, reporter) ||
+                NotebookDocumentFilter3.canParse(notebook, reporter)) ||
+            notebook is String))) {
           reporter.reportError(
               'must be of type Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>');
           return false;
@@ -26800,7 +26838,7 @@
               (NotebookDocumentSyncOptionsNotebookSelectorCells a,
                       NotebookDocumentSyncOptionsNotebookSelectorCells b) =>
                   a == b) &&
-          notebookDocument == other.notebookDocument &&
+          notebook == other.notebook &&
           true;
     }
     return false;
@@ -26809,7 +26847,7 @@
   @override
   int get hashCode => Object.hash(
         lspHashCode(cells),
-        notebookDocument,
+        notebook,
       );
 
   @override
@@ -26824,7 +26862,7 @@
 
   NotebookDocumentSyncOptionsNotebookSelector2({
     required this.cells,
-    this.notebookDocument,
+    this.notebook,
   });
   static NotebookDocumentSyncOptionsNotebookSelector2 fromJson(
       Map<String, Object?> json) {
@@ -26834,27 +26872,27 @@
             NotebookDocumentSyncOptionsNotebookSelector2Cells.fromJson(
                 item as Map<String, Object?>))
         .toList();
-    final notebookDocumentJson = json['notebookDocument'];
-    final notebookDocument = notebookDocumentJson == null
+    final notebookJson = json['notebook'];
+    final notebook = notebookJson == null
         ? null
-        : ((NotebookDocumentFilter1.canParse(notebookDocumentJson, nullLspJsonReporter) ||
+        : ((NotebookDocumentFilter1.canParse(notebookJson, nullLspJsonReporter) ||
                 NotebookDocumentFilter2.canParse(
-                    notebookDocumentJson, nullLspJsonReporter) ||
+                    notebookJson, nullLspJsonReporter) ||
                 NotebookDocumentFilter3.canParse(
-                    notebookDocumentJson, nullLspJsonReporter))
+                    notebookJson, nullLspJsonReporter))
             ? Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>.t1(
-                NotebookDocumentFilter1.canParse(notebookDocumentJson, nullLspJsonReporter)
+                NotebookDocumentFilter1.canParse(notebookJson, nullLspJsonReporter)
                     ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t1(
                         NotebookDocumentFilter1.fromJson(
-                            notebookDocumentJson as Map<String, Object?>))
-                    : (NotebookDocumentFilter2.canParse(notebookDocumentJson, nullLspJsonReporter)
+                            notebookJson as Map<String, Object?>))
+                    : (NotebookDocumentFilter2.canParse(notebookJson, nullLspJsonReporter)
                         ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t2(
-                            NotebookDocumentFilter2.fromJson(notebookDocumentJson as Map<String, Object?>))
-                        : (NotebookDocumentFilter3.canParse(notebookDocumentJson, nullLspJsonReporter) ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t3(NotebookDocumentFilter3.fromJson(notebookDocumentJson as Map<String, Object?>)) : (throw '''$notebookDocumentJson was not one of (NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3)'''))))
-            : (notebookDocumentJson is String ? Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>.t2(notebookDocumentJson) : (throw '''$notebookDocumentJson was not one of (Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String)''')));
+                            NotebookDocumentFilter2.fromJson(notebookJson as Map<String, Object?>))
+                        : (NotebookDocumentFilter3.canParse(notebookJson, nullLspJsonReporter) ? Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>.t3(NotebookDocumentFilter3.fromJson(notebookJson as Map<String, Object?>)) : (throw '''$notebookJson was not one of (NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3)'''))))
+            : (notebookJson is String ? Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>.t2(notebookJson) : (throw '''$notebookJson was not one of (Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String)''')));
     return NotebookDocumentSyncOptionsNotebookSelector2(
       cells: cells,
-      notebookDocument: notebookDocument,
+      notebook: notebook,
     );
   }
 
@@ -26866,13 +26904,13 @@
   final Either2<
       Either3<NotebookDocumentFilter1, NotebookDocumentFilter2,
           NotebookDocumentFilter3>,
-      String>? notebookDocument;
+      String>? notebook;
 
   Map<String, Object?> toJson() {
     var result = <String, Object?>{};
     result['cells'] = cells.map((item) => item.toJson()).toList();
-    if (notebookDocument != null) {
-      result['notebookDocument'] = notebookDocument;
+    if (notebook != null) {
+      result['notebook'] = notebook;
     }
     return result;
   }
@@ -26901,16 +26939,14 @@
       } finally {
         reporter.pop();
       }
-      reporter.push('notebookDocument');
+      reporter.push('notebook');
       try {
-        final notebookDocument = obj['notebookDocument'];
-        if (notebookDocument != null &&
-            !(((NotebookDocumentFilter1.canParse(notebookDocument, reporter) ||
-                    NotebookDocumentFilter2.canParse(
-                        notebookDocument, reporter) ||
-                    NotebookDocumentFilter3.canParse(
-                        notebookDocument, reporter)) ||
-                notebookDocument is String))) {
+        final notebook = obj['notebook'];
+        if (notebook != null &&
+            !(((NotebookDocumentFilter1.canParse(notebook, reporter) ||
+                    NotebookDocumentFilter2.canParse(notebook, reporter) ||
+                    NotebookDocumentFilter3.canParse(notebook, reporter)) ||
+                notebook is String))) {
           reporter.reportError(
               'must be of type Either2<Either3<NotebookDocumentFilter1, NotebookDocumentFilter2, NotebookDocumentFilter3>, String>');
           return false;
@@ -26936,7 +26972,7 @@
               (NotebookDocumentSyncOptionsNotebookSelector2Cells a,
                       NotebookDocumentSyncOptionsNotebookSelector2Cells b) =>
                   a == b) &&
-          notebookDocument == other.notebookDocument &&
+          notebook == other.notebook &&
           true;
     }
     return false;
@@ -26945,7 +26981,7 @@
   @override
   int get hashCode => Object.hash(
         lspHashCode(cells),
-        notebookDocument,
+        notebook,
       );
 
   @override
@@ -27852,7 +27888,8 @@
       other is PositionEncodingKind && other._value == _value;
 }
 
-class PrepareRenameParams implements TextDocumentPositionParams, ToJsonable {
+class PrepareRenameParams
+    implements TextDocumentPositionParams, WorkDoneProgressParams, ToJsonable {
   static const jsonHandler = LspJsonHandler(
     PrepareRenameParams.canParse,
     PrepareRenameParams.fromJson,
@@ -27861,6 +27898,7 @@
   PrepareRenameParams({
     required this.position,
     required this.textDocument,
+    this.workDoneToken,
   });
   static PrepareRenameParams fromJson(Map<String, Object?> json) {
     final positionJson = json['position'];
@@ -27868,9 +27906,18 @@
     final textDocumentJson = json['textDocument'];
     final textDocument = TextDocumentIdentifier.fromJson(
         textDocumentJson as Map<String, Object?>);
+    final workDoneTokenJson = json['workDoneToken'];
+    final workDoneToken = workDoneTokenJson == null
+        ? null
+        : (workDoneTokenJson is int
+            ? Either2<int, String>.t1(workDoneTokenJson)
+            : (workDoneTokenJson is String
+                ? Either2<int, String>.t2(workDoneTokenJson)
+                : (throw '''$workDoneTokenJson was not one of (int, String)''')));
     return PrepareRenameParams(
       position: position,
       textDocument: textDocument,
+      workDoneToken: workDoneToken,
     );
   }
 
@@ -27880,10 +27927,16 @@
   /// The text document.
   final TextDocumentIdentifier textDocument;
 
+  /// An optional token that a server can use to report work done progress.
+  final Either2<int, String>? workDoneToken;
+
   Map<String, Object?> toJson() {
     var result = <String, Object?>{};
     result['position'] = position.toJson();
     result['textDocument'] = textDocument.toJson();
+    if (workDoneToken != null) {
+      result['workDoneToken'] = workDoneToken;
+    }
     return result;
   }
 
@@ -27925,6 +27978,17 @@
       } finally {
         reporter.pop();
       }
+      reporter.push('workDoneToken');
+      try {
+        final workDoneToken = obj['workDoneToken'];
+        if (workDoneToken != null &&
+            !((workDoneToken is int || workDoneToken is String))) {
+          reporter.reportError('must be of type Either2<int, String>');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
       return true;
     } else {
       reporter.reportError('must be of type PrepareRenameParams');
@@ -27938,6 +28002,7 @@
         other.runtimeType == PrepareRenameParams) {
       return position == other.position &&
           textDocument == other.textDocument &&
+          workDoneToken == other.workDoneToken &&
           true;
     }
     return false;
@@ -27947,6 +28012,7 @@
   int get hashCode => Object.hash(
         position,
         textDocument,
+        workDoneToken,
       );
 
   @override
@@ -27963,7 +28029,7 @@
     return obj is int;
   }
 
-  /// The client's default behavior is to select the identifier according the to
+  /// The client's default behavior is to select the identifier according to the
   /// language's syntax rule.
   static const Identifier = PrepareSupportDefaultBehavior(1);
 
@@ -31415,6 +31481,9 @@
 
   static const class_ = SemanticTokenTypes('class');
   static const comment = SemanticTokenTypes('comment');
+
+  /// @since 3.17.0
+  static const decorator = SemanticTokenTypes('decorator');
   static const enum_ = SemanticTokenTypes('enum');
   static const enumMember = SemanticTokenTypes('enumMember');
   static const event = SemanticTokenTypes('event');
@@ -42823,6 +42892,9 @@
     if (MonikerParams.canParse(json, nullLspJsonReporter)) {
       return MonikerParams.fromJson(json);
     }
+    if (PrepareRenameParams.canParse(json, nullLspJsonReporter)) {
+      return PrepareRenameParams.fromJson(json);
+    }
     if (TypeDefinitionParams.canParse(json, nullLspJsonReporter)) {
       return TypeDefinitionParams.fromJson(json);
     }
diff --git a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
index e2f0775..5bee93f 100644
--- a/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
+++ b/pkg/analysis_server/tool/lsp_spec/lsp_specification.md
@@ -3819,6 +3819,11 @@
 	 * return value for the corresponding server capability as well.
 	 */
 	dynamicRegistration?: boolean;
+
+	/**
+	 * The client supports sending execution summary data per cell.
+	 */
+	executionSummarySupport?: boolean;
 }
 ```
 
@@ -3857,7 +3862,7 @@
 	 	 * value is provided it matches against the
 	     * notebook type. '*' matches every notebook.
 		 */
-		notebookDocument: string | NotebookDocumentFilter;
+		notebook: string | NotebookDocumentFilter;
 
 		/**
 		 * The cells of the matching notebook to be synced.
@@ -3869,7 +3874,7 @@
 	 	 * value is provided it matches against the
 	     * notebook type. '*' matches every notebook.
 		 */
-		notebookDocument?: string | NotebookDocumentFilter;
+		notebook?: string | NotebookDocumentFilter;
 
 		/**
 		 * The cells of the matching notebook to be synced.
@@ -5998,6 +6003,10 @@
 	number = 'number',
 	regexp = 'regexp',
 	operator = 'operator'
+	/**
+	 * @since 3.17.0
+	 */
+	decorator = 'decorator'
 }
 ```
 
@@ -7601,6 +7610,13 @@
 		 * @since 3.17.0
 		 */
 		insertTextMode?: InsertTextMode;
+
+		/**
+		 * A default data value.
+		 *
+		 * @since 3.17.0
+		 */
+		data?: LSPAny;
 	}
 
 	/**
@@ -9883,7 +9899,7 @@
 export namespace PrepareSupportDefaultBehavior {
 	/**
 	 * The client's default behavior is to select the identifier
-	 * according the to language's syntax rule.
+	 * according to the language's syntax rule.
 	 */
 	 export const Identifier: 1 = 1;
 }
@@ -9992,7 +10008,7 @@
 <div class="anchorHolder"><a href="#prepareRenameParams" name="prepareRenameParams" class="linkableAnchor"></a></div>
 
 ```typescript
-export interface PrepareRenameParams extends TextDocumentPositionParams {
+export interface PrepareRenameParams extends TextDocumentPositionParams, WorkDoneProgressParams {
 }
 ```