// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // This file has been automatically generated. Please do not edit it manually. // To regenerate the file, use the script // "pkg/analysis_server/tool/lsp_spec/generate_all.dart". // ignore_for_file: annotate_overrides // ignore_for_file: no_leading_underscores_for_local_identifiers // ignore_for_file: prefer_is_not_operator // ignore_for_file: unnecessary_parenthesis import 'dart:core' hide deprecated; import 'dart:core' as core show deprecated; import 'dart:convert' show JsonEncoder; import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart'; import 'package:analysis_server/lsp_protocol/protocol_special.dart'; import 'package:analysis_server/src/lsp/json_parsing.dart'; import 'package:analysis_server/src/protocol/protocol_internal.dart'; const jsonEncoder = JsonEncoder.withIndent(' '); /// A special text edit with an additional change annotation. /// @since 3.16.0. class AnnotatedTextEdit implements TextEdit, ToJsonable { static const jsonHandler = LspJsonHandler(AnnotatedTextEdit.canParse, AnnotatedTextEdit.fromJson); AnnotatedTextEdit( {required this.annotationId, required this.range, required this.newText}); static AnnotatedTextEdit fromJson(Map json) { final annotationIdJson = json['annotationId']; final annotationId = annotationIdJson as String; final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final newTextJson = json['newText']; final newText = newTextJson as String; return AnnotatedTextEdit( annotationId: annotationId, range: range, newText: newText); } /// The actual annotation identifier. final String annotationId; /// The string to be inserted. For delete operations use an empty string. final String newText; /// The range of the text document to be manipulated. To insert text into a /// document create a range where start === end. final Range range; Map toJson() { var __result = {}; __result['annotationId'] = annotationId; __result['range'] = range.toJson(); __result['newText'] = newText; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('annotationId'); try { if (!obj.containsKey('annotationId')) { reporter.reportError('must not be undefined'); return false; } final annotationId = obj['annotationId']; if (annotationId == null) { reporter.reportError('must not be null'); return false; } if (!(annotationId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('newText'); try { if (!obj.containsKey('newText')) { reporter.reportError('must not be undefined'); return false; } final newText = obj['newText']; if (newText == null) { reporter.reportError('must not be null'); return false; } if (!(newText is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type AnnotatedTextEdit'); return false; } } @override bool operator ==(Object other) { if (other is AnnotatedTextEdit && other.runtimeType == AnnotatedTextEdit) { return annotationId == other.annotationId && range == other.range && newText == other.newText && true; } return false; } @override int get hashCode => Object.hash(annotationId, range, newText); @override String toString() => jsonEncoder.convert(toJson()); } class ApplyWorkspaceEditParams implements ToJsonable { static const jsonHandler = LspJsonHandler( ApplyWorkspaceEditParams.canParse, ApplyWorkspaceEditParams.fromJson); ApplyWorkspaceEditParams({this.label, required this.edit}); static ApplyWorkspaceEditParams fromJson(Map json) { final labelJson = json['label']; final label = labelJson as String?; final editJson = json['edit']; final edit = WorkspaceEdit.fromJson(editJson as Map); return ApplyWorkspaceEditParams(label: label, edit: edit); } /// The edits to apply. final WorkspaceEdit edit; /// An optional label of the workspace edit. This label is presented in the /// user interface for example on an undo stack to undo the workspace edit. final String? label; Map toJson() { var __result = {}; if (label != null) { __result['label'] = label; } __result['edit'] = edit.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { final label = obj['label']; if (label != null && !(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('edit'); try { if (!obj.containsKey('edit')) { reporter.reportError('must not be undefined'); return false; } final edit = obj['edit']; if (edit == null) { reporter.reportError('must not be null'); return false; } if (!(WorkspaceEdit.canParse(edit, reporter))) { reporter.reportError('must be of type WorkspaceEdit'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ApplyWorkspaceEditParams'); return false; } } @override bool operator ==(Object other) { if (other is ApplyWorkspaceEditParams && other.runtimeType == ApplyWorkspaceEditParams) { return label == other.label && edit == other.edit && true; } return false; } @override int get hashCode => Object.hash(label, edit); @override String toString() => jsonEncoder.convert(toJson()); } class ApplyWorkspaceEditResponse implements ToJsonable { static const jsonHandler = LspJsonHandler( ApplyWorkspaceEditResponse.canParse, ApplyWorkspaceEditResponse.fromJson); ApplyWorkspaceEditResponse( {required this.applied, this.failureReason, this.failedChange}); static ApplyWorkspaceEditResponse fromJson(Map json) { final appliedJson = json['applied']; final applied = appliedJson as bool; final failureReasonJson = json['failureReason']; final failureReason = failureReasonJson as String?; final failedChangeJson = json['failedChange']; final failedChange = failedChangeJson as int?; return ApplyWorkspaceEditResponse( applied: applied, failureReason: failureReason, failedChange: failedChange); } /// Indicates whether the edit was applied or not. final bool applied; /// Depending on the client's failure handling strategy `failedChange` might /// contain the index of the change that failed. This property is only /// available if the client signals a `failureHandlingStrategy` in its client /// capabilities. final int? failedChange; /// An optional textual description for why the edit was not applied. This may /// be used by the server for diagnostic logging or to provide a suitable /// error for a request that triggered the edit. final String? failureReason; Map toJson() { var __result = {}; __result['applied'] = applied; if (failureReason != null) { __result['failureReason'] = failureReason; } if (failedChange != null) { __result['failedChange'] = failedChange; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('applied'); try { if (!obj.containsKey('applied')) { reporter.reportError('must not be undefined'); return false; } final applied = obj['applied']; if (applied == null) { reporter.reportError('must not be null'); return false; } if (!(applied is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('failureReason'); try { final failureReason = obj['failureReason']; if (failureReason != null && !(failureReason is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('failedChange'); try { final failedChange = obj['failedChange']; if (failedChange != null && !(failedChange is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ApplyWorkspaceEditResponse'); return false; } } @override bool operator ==(Object other) { if (other is ApplyWorkspaceEditResponse && other.runtimeType == ApplyWorkspaceEditResponse) { return applied == other.applied && failureReason == other.failureReason && failedChange == other.failedChange && true; } return false; } @override int get hashCode => Object.hash(applied, failureReason, failedChange); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyClientCapabilities.canParse, CallHierarchyClientCapabilities.fromJson); CallHierarchyClientCapabilities({this.dynamicRegistration}); static CallHierarchyClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return CallHierarchyClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether implementation supports dynamic registration. If this is set to /// `true` the client supports the new `(TextDocumentRegistrationOptions & /// StaticRegistrationOptions)` return value for the corresponding server /// capability as well. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type CallHierarchyClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyClientCapabilities && other.runtimeType == CallHierarchyClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyIncomingCall implements ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyIncomingCall.canParse, CallHierarchyIncomingCall.fromJson); CallHierarchyIncomingCall({required this.from, required this.fromRanges}); static CallHierarchyIncomingCall fromJson(Map json) { final fromJson = json['from']; final from = CallHierarchyItem.fromJson(fromJson as Map); final fromRangesJson = json['fromRanges']; final fromRanges = (fromRangesJson as List) .map((item) => Range.fromJson(item as Map)) .toList(); return CallHierarchyIncomingCall(from: from, fromRanges: fromRanges); } /// The item that makes the call. final CallHierarchyItem from; /// The ranges at which the calls appear. This is relative to the caller /// denoted by [`this.from`](#CallHierarchyIncomingCall.from). final List fromRanges; Map toJson() { var __result = {}; __result['from'] = from.toJson(); __result['fromRanges'] = fromRanges.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('from'); try { if (!obj.containsKey('from')) { reporter.reportError('must not be undefined'); return false; } final from = obj['from']; if (from == null) { reporter.reportError('must not be null'); return false; } if (!(CallHierarchyItem.canParse(from, reporter))) { reporter.reportError('must be of type CallHierarchyItem'); return false; } } finally { reporter.pop(); } reporter.push('fromRanges'); try { if (!obj.containsKey('fromRanges')) { reporter.reportError('must not be undefined'); return false; } final fromRanges = obj['fromRanges']; if (fromRanges == null) { reporter.reportError('must not be null'); return false; } if (!((fromRanges is List && (fromRanges.every((item) => Range.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyIncomingCall'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyIncomingCall && other.runtimeType == CallHierarchyIncomingCall) { return from == other.from && listEqual( fromRanges, other.fromRanges, (Range a, Range b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(from, lspHashCode(fromRanges)); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyIncomingCallsParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyIncomingCallsParams.canParse, CallHierarchyIncomingCallsParams.fromJson); CallHierarchyIncomingCallsParams( {required this.item, this.workDoneToken, this.partialResultToken}); static CallHierarchyIncomingCallsParams fromJson(Map json) { final itemJson = json['item']; final item = CallHierarchyItem.fromJson(itemJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return CallHierarchyIncomingCallsParams( item: item, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } final CallHierarchyItem item; /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['item'] = item.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('item'); try { if (!obj.containsKey('item')) { reporter.reportError('must not be undefined'); return false; } final item = obj['item']; if (item == null) { reporter.reportError('must not be null'); return false; } if (!(CallHierarchyItem.canParse(item, reporter))) { reporter.reportError('must be of type CallHierarchyItem'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyIncomingCallsParams'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyIncomingCallsParams && other.runtimeType == CallHierarchyIncomingCallsParams) { return item == other.item && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(item, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyItem implements ToJsonable { static const jsonHandler = LspJsonHandler(CallHierarchyItem.canParse, CallHierarchyItem.fromJson); CallHierarchyItem( {required this.name, required this.kind, this.tags, this.detail, required this.uri, required this.range, required this.selectionRange, this.data}); static CallHierarchyItem fromJson(Map json) { final nameJson = json['name']; final name = nameJson as String; final kindJson = json['kind']; final kind = SymbolKind.fromJson(kindJson as int); final tagsJson = json['tags']; final tags = (tagsJson as List?) ?.map((item) => SymbolTag.fromJson(item as int)) .toList(); final detailJson = json['detail']; final detail = detailJson as String?; final uriJson = json['uri']; final uri = uriJson as String; final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final selectionRangeJson = json['selectionRange']; final selectionRange = Range.fromJson(selectionRangeJson as Map); final dataJson = json['data']; final data = dataJson; return CallHierarchyItem( name: name, kind: kind, tags: tags, detail: detail, uri: uri, range: range, selectionRange: selectionRange, data: data); } /// A data entry field that is preserved between a call hierarchy prepare and /// incoming calls or outgoing calls requests. final Object? data; /// More detail for this item, e.g. the signature of a function. final String? detail; /// The kind of this item. final SymbolKind kind; /// The name of this item. final String name; /// The range enclosing this symbol not including leading/trailing whitespace /// but everything else, e.g. comments and code. final Range range; /// The range that should be selected and revealed when this symbol is being /// picked, e.g. the name of a function. Must be contained by the /// [`range`](#CallHierarchyItem.range). final Range selectionRange; /// Tags for this item. final List? tags; /// The resource identifier of this item. final String uri; Map toJson() { var __result = {}; __result['name'] = name; __result['kind'] = kind.toJson(); if (tags != null) { __result['tags'] = tags?.map((item) => item.toJson()).toList(); } if (detail != null) { __result['detail'] = detail; } __result['uri'] = uri; __result['range'] = range.toJson(); __result['selectionRange'] = selectionRange.toJson(); if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('name'); try { if (!obj.containsKey('name')) { reporter.reportError('must not be undefined'); return false; } final name = obj['name']; if (name == null) { reporter.reportError('must not be null'); return false; } if (!(name is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(SymbolKind.canParse(kind, reporter))) { reporter.reportError('must be of type SymbolKind'); return false; } } finally { reporter.pop(); } reporter.push('tags'); try { final tags = obj['tags']; if (tags != null && !((tags is List && (tags.every((item) => SymbolTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('detail'); try { final detail = obj['detail']; if (detail != null && !(detail is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('selectionRange'); try { if (!obj.containsKey('selectionRange')) { reporter.reportError('must not be undefined'); return false; } final selectionRange = obj['selectionRange']; if (selectionRange == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(selectionRange, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyItem'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyItem && other.runtimeType == CallHierarchyItem) { return name == other.name && kind == other.kind && listEqual(tags, other.tags, (SymbolTag a, SymbolTag b) => a == b) && detail == other.detail && uri == other.uri && range == other.range && selectionRange == other.selectionRange && data == other.data && true; } return false; } @override int get hashCode => Object.hash( name, kind, lspHashCode(tags), detail, uri, range, selectionRange, data); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyOptions.canParse, CallHierarchyOptions.fromJson); CallHierarchyOptions({this.workDoneProgress}); static CallHierarchyOptions fromJson(Map json) { if (CallHierarchyRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CallHierarchyRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CallHierarchyOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyOptions'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyOptions && other.runtimeType == CallHierarchyOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyOutgoingCall implements ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyOutgoingCall.canParse, CallHierarchyOutgoingCall.fromJson); CallHierarchyOutgoingCall({required this.to, required this.fromRanges}); static CallHierarchyOutgoingCall fromJson(Map json) { final toJson = json['to']; final to = CallHierarchyItem.fromJson(toJson as Map); final fromRangesJson = json['fromRanges']; final fromRanges = (fromRangesJson as List) .map((item) => Range.fromJson(item as Map)) .toList(); return CallHierarchyOutgoingCall(to: to, fromRanges: fromRanges); } /// The range at which this item is called. This is the range relative to the /// caller, e.g the item passed to `callHierarchy/outgoingCalls` request. final List fromRanges; /// The item that is called. final CallHierarchyItem to; Map toJson() { var __result = {}; __result['to'] = to.toJson(); __result['fromRanges'] = fromRanges.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('to'); try { if (!obj.containsKey('to')) { reporter.reportError('must not be undefined'); return false; } final to = obj['to']; if (to == null) { reporter.reportError('must not be null'); return false; } if (!(CallHierarchyItem.canParse(to, reporter))) { reporter.reportError('must be of type CallHierarchyItem'); return false; } } finally { reporter.pop(); } reporter.push('fromRanges'); try { if (!obj.containsKey('fromRanges')) { reporter.reportError('must not be undefined'); return false; } final fromRanges = obj['fromRanges']; if (fromRanges == null) { reporter.reportError('must not be null'); return false; } if (!((fromRanges is List && (fromRanges.every((item) => Range.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyOutgoingCall'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyOutgoingCall && other.runtimeType == CallHierarchyOutgoingCall) { return to == other.to && listEqual( fromRanges, other.fromRanges, (Range a, Range b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(to, lspHashCode(fromRanges)); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyOutgoingCallsParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyOutgoingCallsParams.canParse, CallHierarchyOutgoingCallsParams.fromJson); CallHierarchyOutgoingCallsParams( {required this.item, this.workDoneToken, this.partialResultToken}); static CallHierarchyOutgoingCallsParams fromJson(Map json) { final itemJson = json['item']; final item = CallHierarchyItem.fromJson(itemJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return CallHierarchyOutgoingCallsParams( item: item, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } final CallHierarchyItem item; /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['item'] = item.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('item'); try { if (!obj.containsKey('item')) { reporter.reportError('must not be undefined'); return false; } final item = obj['item']; if (item == null) { reporter.reportError('must not be null'); return false; } if (!(CallHierarchyItem.canParse(item, reporter))) { reporter.reportError('must be of type CallHierarchyItem'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyOutgoingCallsParams'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyOutgoingCallsParams && other.runtimeType == CallHierarchyOutgoingCallsParams) { return item == other.item && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(item, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyPrepareParams implements TextDocumentPositionParams, WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyPrepareParams.canParse, CallHierarchyPrepareParams.fromJson); CallHierarchyPrepareParams( {required this.textDocument, required this.position, this.workDoneToken}); static CallHierarchyPrepareParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return CallHierarchyPrepareParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken); } /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyPrepareParams'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyPrepareParams && other.runtimeType == CallHierarchyPrepareParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class CallHierarchyRegistrationOptions implements TextDocumentRegistrationOptions, CallHierarchyOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( CallHierarchyRegistrationOptions.canParse, CallHierarchyRegistrationOptions.fromJson); CallHierarchyRegistrationOptions( {this.documentSelector, this.workDoneProgress, this.id}); static CallHierarchyRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final idJson = json['id']; final id = idJson as String?; return CallHierarchyRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CallHierarchyRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is CallHierarchyRegistrationOptions && other.runtimeType == CallHierarchyRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && id == other.id && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress, id); @override String toString() => jsonEncoder.convert(toJson()); } class CancelParams implements ToJsonable { static const jsonHandler = LspJsonHandler(CancelParams.canParse, CancelParams.fromJson); CancelParams({required this.id}); static CancelParams fromJson(Map json) { final idJson = json['id']; final id = idJson is int ? Either2.t1(idJson) : (idJson is String ? Either2.t2(idJson) : (throw '''$idJson was not one of (int, String)''')); return CancelParams(id: id); } /// The request id to cancel. final Either2 id; Map toJson() { var __result = {}; __result['id'] = id; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { if (!obj.containsKey('id')) { reporter.reportError('must not be undefined'); return false; } final id = obj['id']; if (id == null) { reporter.reportError('must not be null'); return false; } if (!((id is int || id is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CancelParams'); return false; } } @override bool operator ==(Object other) { if (other is CancelParams && other.runtimeType == CancelParams) { return id == other.id && true; } return false; } @override int get hashCode => id.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// Additional information that describes document changes. /// @since 3.16.0 class ChangeAnnotation implements ToJsonable { static const jsonHandler = LspJsonHandler(ChangeAnnotation.canParse, ChangeAnnotation.fromJson); ChangeAnnotation( {required this.label, this.needsConfirmation, this.description}); static ChangeAnnotation fromJson(Map json) { final labelJson = json['label']; final label = labelJson as String; final needsConfirmationJson = json['needsConfirmation']; final needsConfirmation = needsConfirmationJson as bool?; final descriptionJson = json['description']; final description = descriptionJson as String?; return ChangeAnnotation( label: label, needsConfirmation: needsConfirmation, description: description); } /// A human-readable string which is rendered less prominent in the user /// interface. final String? description; /// A human-readable string describing the actual change. The string is /// rendered prominent in the user interface. final String label; /// A flag which indicates that user confirmation is needed before applying /// the change. final bool? needsConfirmation; Map toJson() { var __result = {}; __result['label'] = label; if (needsConfirmation != null) { __result['needsConfirmation'] = needsConfirmation; } if (description != null) { __result['description'] = description; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { if (!obj.containsKey('label')) { reporter.reportError('must not be undefined'); return false; } final label = obj['label']; if (label == null) { reporter.reportError('must not be null'); return false; } if (!(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('needsConfirmation'); try { final needsConfirmation = obj['needsConfirmation']; if (needsConfirmation != null && !(needsConfirmation is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('description'); try { final description = obj['description']; if (description != null && !(description is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ChangeAnnotation'); return false; } } @override bool operator ==(Object other) { if (other is ChangeAnnotation && other.runtimeType == ChangeAnnotation) { return label == other.label && needsConfirmation == other.needsConfirmation && description == other.description && true; } return false; } @override int get hashCode => Object.hash(label, needsConfirmation, description); @override String toString() => jsonEncoder.convert(toJson()); } class ClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler(ClientCapabilities.canParse, ClientCapabilities.fromJson); ClientCapabilities( {this.workspace, this.textDocument, this.window, this.general, this.experimental}); static ClientCapabilities fromJson(Map json) { final workspaceJson = json['workspace']; final workspace = workspaceJson != null ? ClientCapabilitiesWorkspace.fromJson( workspaceJson as Map) : null; final textDocumentJson = json['textDocument']; final textDocument = textDocumentJson != null ? TextDocumentClientCapabilities.fromJson( textDocumentJson as Map) : null; final windowJson = json['window']; final window = windowJson != null ? ClientCapabilitiesWindow.fromJson(windowJson as Map) : null; final generalJson = json['general']; final general = generalJson != null ? ClientCapabilitiesGeneral.fromJson( generalJson as Map) : null; final experimentalJson = json['experimental']; final experimental = experimentalJson; return ClientCapabilities( workspace: workspace, textDocument: textDocument, window: window, general: general, experimental: experimental); } /// Experimental client capabilities. final Object? experimental; /// General client capabilities. /// @since 3.16.0 final ClientCapabilitiesGeneral? general; /// Text document specific client capabilities. final TextDocumentClientCapabilities? textDocument; /// Window specific client capabilities. final ClientCapabilitiesWindow? window; /// Workspace specific client capabilities. final ClientCapabilitiesWorkspace? workspace; Map toJson() { var __result = {}; if (workspace != null) { __result['workspace'] = workspace?.toJson(); } if (textDocument != null) { __result['textDocument'] = textDocument?.toJson(); } if (window != null) { __result['window'] = window?.toJson(); } if (general != null) { __result['general'] = general?.toJson(); } if (experimental != null) { __result['experimental'] = experimental; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workspace'); try { final workspace = obj['workspace']; if (workspace != null && !(ClientCapabilitiesWorkspace.canParse(workspace, reporter))) { reporter.reportError('must be of type ClientCapabilitiesWorkspace'); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { final textDocument = obj['textDocument']; if (textDocument != null && !(TextDocumentClientCapabilities.canParse( textDocument, reporter))) { reporter .reportError('must be of type TextDocumentClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('window'); try { final window = obj['window']; if (window != null && !(ClientCapabilitiesWindow.canParse(window, reporter))) { reporter.reportError('must be of type ClientCapabilitiesWindow'); return false; } } finally { reporter.pop(); } reporter.push('general'); try { final general = obj['general']; if (general != null && !(ClientCapabilitiesGeneral.canParse(general, reporter))) { reporter.reportError('must be of type ClientCapabilitiesGeneral'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ClientCapabilities && other.runtimeType == ClientCapabilities) { return workspace == other.workspace && textDocument == other.textDocument && window == other.window && general == other.general && experimental == other.experimental && true; } return false; } @override int get hashCode => Object.hash(workspace, textDocument, window, general, experimental); @override String toString() => jsonEncoder.convert(toJson()); } class ClientCapabilitiesFileOperations implements ToJsonable { static const jsonHandler = LspJsonHandler( ClientCapabilitiesFileOperations.canParse, ClientCapabilitiesFileOperations.fromJson); ClientCapabilitiesFileOperations( {this.dynamicRegistration, this.didCreate, this.willCreate, this.didRename, this.willRename, this.didDelete, this.willDelete}); static ClientCapabilitiesFileOperations fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final didCreateJson = json['didCreate']; final didCreate = didCreateJson as bool?; final willCreateJson = json['willCreate']; final willCreate = willCreateJson as bool?; final didRenameJson = json['didRename']; final didRename = didRenameJson as bool?; final willRenameJson = json['willRename']; final willRename = willRenameJson as bool?; final didDeleteJson = json['didDelete']; final didDelete = didDeleteJson as bool?; final willDeleteJson = json['willDelete']; final willDelete = willDeleteJson as bool?; return ClientCapabilitiesFileOperations( dynamicRegistration: dynamicRegistration, didCreate: didCreate, willCreate: willCreate, didRename: didRename, willRename: willRename, didDelete: didDelete, willDelete: willDelete); } /// 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 toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (didCreate != null) { __result['didCreate'] = didCreate; } if (willCreate != null) { __result['willCreate'] = willCreate; } if (didRename != null) { __result['didRename'] = didRename; } if (willRename != null) { __result['willRename'] = willRename; } if (didDelete != null) { __result['didDelete'] = didDelete; } if (willDelete != null) { __result['willDelete'] = willDelete; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('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('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('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('willRename'); try { final willRename = obj['willRename']; if (willRename != null && !(willRename 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('willDelete'); try { final willDelete = obj['willDelete']; if (willDelete != null && !(willDelete 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 dynamicRegistration == other.dynamicRegistration && didCreate == other.didCreate && willCreate == other.willCreate && didRename == other.didRename && willRename == other.willRename && didDelete == other.didDelete && willDelete == other.willDelete && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, didCreate, willCreate, didRename, willRename, didDelete, willDelete); @override String toString() => jsonEncoder.convert(toJson()); } class ClientCapabilitiesGeneral implements ToJsonable { static const jsonHandler = LspJsonHandler( ClientCapabilitiesGeneral.canParse, ClientCapabilitiesGeneral.fromJson); ClientCapabilitiesGeneral({this.regularExpressions, this.markdown}); static ClientCapabilitiesGeneral fromJson(Map json) { final regularExpressionsJson = json['regularExpressions']; final regularExpressions = regularExpressionsJson != null ? RegularExpressionsClientCapabilities.fromJson( regularExpressionsJson as Map) : null; final markdownJson = json['markdown']; final markdown = markdownJson != null ? MarkdownClientCapabilities.fromJson( markdownJson as Map) : null; return ClientCapabilitiesGeneral( regularExpressions: regularExpressions, markdown: markdown); } /// Client capabilities specific to the client's markdown parser. /// @since 3.16.0 final MarkdownClientCapabilities? markdown; /// Client capabilities specific to regular expressions. /// @since 3.16.0 final RegularExpressionsClientCapabilities? regularExpressions; Map toJson() { var __result = {}; if (regularExpressions != null) { __result['regularExpressions'] = regularExpressions?.toJson(); } if (markdown != null) { __result['markdown'] = markdown?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('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(); } 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 regularExpressions == other.regularExpressions && markdown == other.markdown && true; } return false; } @override int get hashCode => Object.hash(regularExpressions, markdown); @override String toString() => jsonEncoder.convert(toJson()); } class ClientCapabilitiesWindow implements ToJsonable { static const jsonHandler = LspJsonHandler( ClientCapabilitiesWindow.canParse, ClientCapabilitiesWindow.fromJson); ClientCapabilitiesWindow( {this.workDoneProgress, this.showMessage, this.showDocument}); static ClientCapabilitiesWindow fromJson(Map json) { final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final showMessageJson = json['showMessage']; final showMessage = showMessageJson != null ? ShowMessageRequestClientCapabilities.fromJson( showMessageJson as Map) : null; final showDocumentJson = json['showDocument']; final showDocument = showDocumentJson != null ? ShowDocumentClientCapabilities.fromJson( showDocumentJson as Map) : null; return ClientCapabilitiesWindow( workDoneProgress: workDoneProgress, showMessage: showMessage, showDocument: showDocument); } /// Client capabilities for the show document request. /// @since 3.16.0 final ShowDocumentClientCapabilities? showDocument; /// Capabilities specific to the showMessage request /// @since 3.16.0 final ShowMessageRequestClientCapabilities? showMessage; /// Whether client supports handling progress notifications. If set servers /// are allowed to report in `workDoneProgress` property in the request /// specific server capabilities. /// @since 3.15.0 final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (showMessage != null) { __result['showMessage'] = showMessage?.toJson(); } if (showDocument != null) { __result['showDocument'] = showDocument?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('showMessage'); try { final showMessage = obj['showMessage']; if (showMessage != null && !(ShowMessageRequestClientCapabilities.canParse( showMessage, reporter))) { reporter.reportError( 'must be of type ShowMessageRequestClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('showDocument'); try { final showDocument = obj['showDocument']; if (showDocument != null && !(ShowDocumentClientCapabilities.canParse( showDocument, reporter))) { reporter .reportError('must be of type ShowDocumentClientCapabilities'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ClientCapabilitiesWindow'); return false; } } @override bool operator ==(Object other) { if (other is ClientCapabilitiesWindow && other.runtimeType == ClientCapabilitiesWindow) { return workDoneProgress == other.workDoneProgress && showMessage == other.showMessage && showDocument == other.showDocument && true; } return false; } @override int get hashCode => Object.hash(workDoneProgress, showMessage, showDocument); @override String toString() => jsonEncoder.convert(toJson()); } class ClientCapabilitiesWorkspace implements ToJsonable { static const jsonHandler = LspJsonHandler( ClientCapabilitiesWorkspace.canParse, ClientCapabilitiesWorkspace.fromJson); ClientCapabilitiesWorkspace( {this.applyEdit, this.workspaceEdit, this.didChangeConfiguration, this.didChangeWatchedFiles, this.symbol, this.executeCommand, this.workspaceFolders, this.configuration, this.semanticTokens, this.codeLens, this.fileOperations}); static ClientCapabilitiesWorkspace fromJson(Map json) { final applyEditJson = json['applyEdit']; final applyEdit = applyEditJson as bool?; final workspaceEditJson = json['workspaceEdit']; final workspaceEdit = workspaceEditJson != null ? WorkspaceEditClientCapabilities.fromJson( workspaceEditJson as Map) : null; final didChangeConfigurationJson = json['didChangeConfiguration']; final didChangeConfiguration = didChangeConfigurationJson != null ? DidChangeConfigurationClientCapabilities.fromJson( didChangeConfigurationJson as Map) : null; final didChangeWatchedFilesJson = json['didChangeWatchedFiles']; final didChangeWatchedFiles = didChangeWatchedFilesJson != null ? DidChangeWatchedFilesClientCapabilities.fromJson( didChangeWatchedFilesJson as Map) : null; final symbolJson = json['symbol']; final symbol = symbolJson != null ? WorkspaceSymbolClientCapabilities.fromJson( symbolJson as Map) : null; final executeCommandJson = json['executeCommand']; final executeCommand = executeCommandJson != null ? ExecuteCommandClientCapabilities.fromJson( executeCommandJson as Map) : null; final workspaceFoldersJson = json['workspaceFolders']; final workspaceFolders = workspaceFoldersJson as bool?; final configurationJson = json['configuration']; final configuration = configurationJson as bool?; final semanticTokensJson = json['semanticTokens']; final semanticTokens = semanticTokensJson != null ? SemanticTokensWorkspaceClientCapabilities.fromJson( semanticTokensJson as Map) : null; final codeLensJson = json['codeLens']; final codeLens = codeLensJson != null ? CodeLensWorkspaceClientCapabilities.fromJson( codeLensJson as Map) : null; final fileOperationsJson = json['fileOperations']; final fileOperations = fileOperationsJson != null ? ClientCapabilitiesFileOperations.fromJson( fileOperationsJson as Map) : null; return ClientCapabilitiesWorkspace( applyEdit: applyEdit, workspaceEdit: workspaceEdit, didChangeConfiguration: didChangeConfiguration, didChangeWatchedFiles: didChangeWatchedFiles, symbol: symbol, executeCommand: executeCommand, workspaceFolders: workspaceFolders, configuration: configuration, semanticTokens: semanticTokens, codeLens: codeLens, fileOperations: fileOperations); } /// The client supports applying batch edits to the workspace by supporting /// the request 'workspace/applyEdit' final bool? applyEdit; /// Capabilities specific to the code lens requests scoped to the workspace. /// @since 3.16.0 final CodeLensWorkspaceClientCapabilities? codeLens; /// The client supports `workspace/configuration` requests. /// @since 3.6.0 final bool? configuration; /// Capabilities specific to the `workspace/didChangeConfiguration` /// notification. final DidChangeConfigurationClientCapabilities? didChangeConfiguration; /// Capabilities specific to the `workspace/didChangeWatchedFiles` /// notification. final DidChangeWatchedFilesClientCapabilities? didChangeWatchedFiles; /// Capabilities specific to the `workspace/executeCommand` request. final ExecuteCommandClientCapabilities? executeCommand; /// The client has support for file requests/notifications. /// @since 3.16.0 final ClientCapabilitiesFileOperations? fileOperations; /// Capabilities specific to the semantic token requests scoped to the /// workspace. /// @since 3.16.0 final SemanticTokensWorkspaceClientCapabilities? semanticTokens; /// Capabilities specific to the `workspace/symbol` request. final WorkspaceSymbolClientCapabilities? symbol; /// Capabilities specific to `WorkspaceEdit`s final WorkspaceEditClientCapabilities? workspaceEdit; /// The client has support for workspace folders. /// @since 3.6.0 final bool? workspaceFolders; Map toJson() { var __result = {}; if (applyEdit != null) { __result['applyEdit'] = applyEdit; } if (workspaceEdit != null) { __result['workspaceEdit'] = workspaceEdit?.toJson(); } if (didChangeConfiguration != null) { __result['didChangeConfiguration'] = didChangeConfiguration?.toJson(); } if (didChangeWatchedFiles != null) { __result['didChangeWatchedFiles'] = didChangeWatchedFiles?.toJson(); } if (symbol != null) { __result['symbol'] = symbol?.toJson(); } if (executeCommand != null) { __result['executeCommand'] = executeCommand?.toJson(); } if (workspaceFolders != null) { __result['workspaceFolders'] = workspaceFolders; } if (configuration != null) { __result['configuration'] = configuration; } if (semanticTokens != null) { __result['semanticTokens'] = semanticTokens?.toJson(); } if (codeLens != null) { __result['codeLens'] = codeLens?.toJson(); } if (fileOperations != null) { __result['fileOperations'] = fileOperations?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('applyEdit'); try { final applyEdit = obj['applyEdit']; if (applyEdit != null && !(applyEdit is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workspaceEdit'); try { final workspaceEdit = obj['workspaceEdit']; if (workspaceEdit != null && !(WorkspaceEditClientCapabilities.canParse( workspaceEdit, reporter))) { reporter .reportError('must be of type WorkspaceEditClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('didChangeConfiguration'); try { final didChangeConfiguration = obj['didChangeConfiguration']; if (didChangeConfiguration != null && !(DidChangeConfigurationClientCapabilities.canParse( didChangeConfiguration, reporter))) { reporter.reportError( 'must be of type DidChangeConfigurationClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('didChangeWatchedFiles'); try { final didChangeWatchedFiles = obj['didChangeWatchedFiles']; if (didChangeWatchedFiles != null && !(DidChangeWatchedFilesClientCapabilities.canParse( didChangeWatchedFiles, reporter))) { reporter.reportError( 'must be of type DidChangeWatchedFilesClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('symbol'); try { final symbol = obj['symbol']; if (symbol != null && !(WorkspaceSymbolClientCapabilities.canParse(symbol, reporter))) { reporter .reportError('must be of type WorkspaceSymbolClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('executeCommand'); try { final executeCommand = obj['executeCommand']; if (executeCommand != null && !(ExecuteCommandClientCapabilities.canParse( executeCommand, reporter))) { reporter .reportError('must be of type ExecuteCommandClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('workspaceFolders'); try { final workspaceFolders = obj['workspaceFolders']; if (workspaceFolders != null && !(workspaceFolders is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('configuration'); try { final configuration = obj['configuration']; if (configuration != null && !(configuration is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('semanticTokens'); try { final semanticTokens = obj['semanticTokens']; if (semanticTokens != null && !(SemanticTokensWorkspaceClientCapabilities.canParse( semanticTokens, reporter))) { reporter.reportError( 'must be of type SemanticTokensWorkspaceClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('codeLens'); try { final codeLens = obj['codeLens']; if (codeLens != null && !(CodeLensWorkspaceClientCapabilities.canParse( codeLens, reporter))) { reporter.reportError( 'must be of type CodeLensWorkspaceClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('fileOperations'); try { final fileOperations = obj['fileOperations']; if (fileOperations != null && !(ClientCapabilitiesFileOperations.canParse( fileOperations, reporter))) { reporter .reportError('must be of type ClientCapabilitiesFileOperations'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ClientCapabilitiesWorkspace'); return false; } } @override bool operator ==(Object other) { if (other is ClientCapabilitiesWorkspace && other.runtimeType == ClientCapabilitiesWorkspace) { return applyEdit == other.applyEdit && workspaceEdit == other.workspaceEdit && didChangeConfiguration == other.didChangeConfiguration && didChangeWatchedFiles == other.didChangeWatchedFiles && symbol == other.symbol && executeCommand == other.executeCommand && workspaceFolders == other.workspaceFolders && configuration == other.configuration && semanticTokens == other.semanticTokens && codeLens == other.codeLens && fileOperations == other.fileOperations && true; } return false; } @override int get hashCode => Object.hash( applyEdit, workspaceEdit, didChangeConfiguration, didChangeWatchedFiles, symbol, executeCommand, workspaceFolders, configuration, semanticTokens, codeLens, fileOperations); @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. /// /// A CodeAction must set either `edit` and/or a `command`. If both are /// supplied, the `edit` is applied first, then the `command` is executed. class CodeAction implements ToJsonable { static const jsonHandler = LspJsonHandler(CodeAction.canParse, CodeAction.fromJson); CodeAction( {required this.title, this.kind, this.diagnostics, this.isPreferred, this.disabled, this.edit, this.command, this.data}); static CodeAction fromJson(Map json) { final titleJson = json['title']; final title = titleJson as String; final kindJson = json['kind']; final kind = kindJson != null ? CodeActionKind.fromJson(kindJson as String) : null; final diagnosticsJson = json['diagnostics']; final diagnostics = (diagnosticsJson as List?) ?.map((item) => Diagnostic.fromJson(item as Map)) .toList(); final isPreferredJson = json['isPreferred']; final isPreferred = isPreferredJson as bool?; final disabledJson = json['disabled']; final disabled = disabledJson != null ? CodeActionDisabled.fromJson(disabledJson as Map) : null; final editJson = json['edit']; final edit = editJson != null ? WorkspaceEdit.fromJson(editJson as Map) : null; final commandJson = json['command']; final command = commandJson != null ? Command.fromJson(commandJson as Map) : null; final dataJson = json['data']; final data = dataJson; return CodeAction( title: title, kind: kind, diagnostics: diagnostics, isPreferred: isPreferred, disabled: disabled, edit: edit, command: command, data: data); } /// A command this code action executes. If a code action provides an edit and /// a command, first the edit is executed and then the command. final Command? command; /// A data entry field that is preserved on a code action between a /// `textDocument/codeAction` and a `codeAction/resolve` request. /// @since 3.16.0 final Object? data; /// The diagnostics that this code action resolves. final List? diagnostics; /// Marks that the code action cannot currently be applied. /// /// Clients should follow the following guidelines regarding disabled code /// actions: /// /// - Disabled code actions are not shown in automatic lightbulbs code /// action menus. /// /// - Disabled actions are shown as faded out in the code action menu when /// the user request a more specific type of code action, such as /// refactorings. /// /// - If the user has a keybinding that auto applies a code action and only /// a disabled code actions are returned, the client should show the user /// an error message with `reason` in the editor. /// @since 3.16.0 final CodeActionDisabled? disabled; /// The workspace edit this code action performs. final WorkspaceEdit? edit; /// Marks this as a preferred action. Preferred actions are used by the `auto /// fix` command and can be targeted by keybindings. /// /// A quick fix should be marked preferred if it properly addresses the /// underlying error. A refactoring should be marked preferred if it is the /// most reasonable choice of actions to take. /// @since 3.15.0 final bool? isPreferred; /// The kind of the code action. /// /// Used to filter code actions. final CodeActionKind? kind; /// A short, human-readable, title for this code action. final String title; Map toJson() { var __result = {}; __result['title'] = title; if (kind != null) { __result['kind'] = kind?.toJson(); } if (diagnostics != null) { __result['diagnostics'] = diagnostics?.map((item) => item.toJson()).toList(); } if (isPreferred != null) { __result['isPreferred'] = isPreferred; } if (disabled != null) { __result['disabled'] = disabled?.toJson(); } if (edit != null) { __result['edit'] = edit?.toJson(); } if (command != null) { __result['command'] = command?.toJson(); } if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('title'); try { if (!obj.containsKey('title')) { reporter.reportError('must not be undefined'); return false; } final title = obj['title']; if (title == null) { reporter.reportError('must not be null'); return false; } if (!(title is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { final kind = obj['kind']; if (kind != null && !(CodeActionKind.canParse(kind, reporter))) { reporter.reportError('must be of type CodeActionKind'); return false; } } finally { reporter.pop(); } reporter.push('diagnostics'); try { final diagnostics = obj['diagnostics']; if (diagnostics != null && !((diagnostics is List && (diagnostics .every((item) => Diagnostic.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('isPreferred'); try { final isPreferred = obj['isPreferred']; if (isPreferred != null && !(isPreferred is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('disabled'); try { final disabled = obj['disabled']; if (disabled != null && !(CodeActionDisabled.canParse(disabled, reporter))) { reporter.reportError('must be of type CodeActionDisabled'); return false; } } finally { reporter.pop(); } reporter.push('edit'); try { final edit = obj['edit']; if (edit != null && !(WorkspaceEdit.canParse(edit, reporter))) { reporter.reportError('must be of type WorkspaceEdit'); return false; } } finally { reporter.pop(); } reporter.push('command'); try { final command = obj['command']; if (command != null && !(Command.canParse(command, reporter))) { reporter.reportError('must be of type Command'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeAction'); return false; } } @override bool operator ==(Object other) { if (other is CodeAction && other.runtimeType == CodeAction) { return title == other.title && kind == other.kind && listEqual(diagnostics, other.diagnostics, (Diagnostic a, Diagnostic b) => a == b) && isPreferred == other.isPreferred && disabled == other.disabled && edit == other.edit && command == other.command && data == other.data && true; } return false; } @override int get hashCode => Object.hash(title, kind, lspHashCode(diagnostics), isPreferred, disabled, edit, command, data); @override String toString() => jsonEncoder.convert(toJson()); } class CodeActionClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( CodeActionClientCapabilities.canParse, CodeActionClientCapabilities.fromJson); CodeActionClientCapabilities( {this.dynamicRegistration, this.codeActionLiteralSupport, this.isPreferredSupport, this.disabledSupport, this.dataSupport, this.resolveSupport, this.honorsChangeAnnotations}); static CodeActionClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final codeActionLiteralSupportJson = json['codeActionLiteralSupport']; final codeActionLiteralSupport = codeActionLiteralSupportJson != null ? CodeActionClientCapabilitiesCodeActionLiteralSupport.fromJson( codeActionLiteralSupportJson as Map) : null; final isPreferredSupportJson = json['isPreferredSupport']; final isPreferredSupport = isPreferredSupportJson as bool?; final disabledSupportJson = json['disabledSupport']; final disabledSupport = disabledSupportJson as bool?; final dataSupportJson = json['dataSupport']; final dataSupport = dataSupportJson as bool?; final resolveSupportJson = json['resolveSupport']; final resolveSupport = resolveSupportJson != null ? CodeActionClientCapabilitiesResolveSupport.fromJson( resolveSupportJson as Map) : null; final honorsChangeAnnotationsJson = json['honorsChangeAnnotations']; final honorsChangeAnnotations = honorsChangeAnnotationsJson as bool?; return CodeActionClientCapabilities( dynamicRegistration: dynamicRegistration, codeActionLiteralSupport: codeActionLiteralSupport, isPreferredSupport: isPreferredSupport, disabledSupport: disabledSupport, dataSupport: dataSupport, resolveSupport: resolveSupport, honorsChangeAnnotations: honorsChangeAnnotations); } /// The client supports code action literals as a valid response of the /// `textDocument/codeAction` request. /// @since 3.8.0 final CodeActionClientCapabilitiesCodeActionLiteralSupport? codeActionLiteralSupport; /// Whether code action supports the `data` property which is preserved /// between a `textDocument/codeAction` and a `codeAction/resolve` request. /// @since 3.16.0 final bool? dataSupport; /// Whether code action supports the `disabled` property. /// @since 3.16.0 final bool? disabledSupport; /// Whether code action supports dynamic registration. final bool? dynamicRegistration; /// Whether th client honors the change annotations in text edits and resource /// operations returned via the `CodeAction#edit` property by for example /// presenting the workspace edit in the user interface and asking for /// confirmation. /// @since 3.16.0 final bool? honorsChangeAnnotations; /// Whether code action supports the `isPreferred` property. /// @since 3.15.0 final bool? isPreferredSupport; /// Whether the client supports resolving additional code action properties /// via a separate `codeAction/resolve` request. /// @since 3.16.0 final CodeActionClientCapabilitiesResolveSupport? resolveSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (codeActionLiteralSupport != null) { __result['codeActionLiteralSupport'] = codeActionLiteralSupport?.toJson(); } if (isPreferredSupport != null) { __result['isPreferredSupport'] = isPreferredSupport; } if (disabledSupport != null) { __result['disabledSupport'] = disabledSupport; } if (dataSupport != null) { __result['dataSupport'] = dataSupport; } if (resolveSupport != null) { __result['resolveSupport'] = resolveSupport?.toJson(); } if (honorsChangeAnnotations != null) { __result['honorsChangeAnnotations'] = honorsChangeAnnotations; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('codeActionLiteralSupport'); try { final codeActionLiteralSupport = obj['codeActionLiteralSupport']; if (codeActionLiteralSupport != null && !(CodeActionClientCapabilitiesCodeActionLiteralSupport.canParse( codeActionLiteralSupport, reporter))) { reporter.reportError( 'must be of type CodeActionClientCapabilitiesCodeActionLiteralSupport'); return false; } } finally { reporter.pop(); } reporter.push('isPreferredSupport'); try { final isPreferredSupport = obj['isPreferredSupport']; if (isPreferredSupport != null && !(isPreferredSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('disabledSupport'); try { final disabledSupport = obj['disabledSupport']; if (disabledSupport != null && !(disabledSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('dataSupport'); try { final dataSupport = obj['dataSupport']; if (dataSupport != null && !(dataSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('resolveSupport'); try { final resolveSupport = obj['resolveSupport']; if (resolveSupport != null && !(CodeActionClientCapabilitiesResolveSupport.canParse( resolveSupport, reporter))) { reporter.reportError( 'must be of type CodeActionClientCapabilitiesResolveSupport'); return false; } } finally { reporter.pop(); } reporter.push('honorsChangeAnnotations'); try { final honorsChangeAnnotations = obj['honorsChangeAnnotations']; if (honorsChangeAnnotations != null && !(honorsChangeAnnotations is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeActionClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionClientCapabilities && other.runtimeType == CodeActionClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && codeActionLiteralSupport == other.codeActionLiteralSupport && isPreferredSupport == other.isPreferredSupport && disabledSupport == other.disabledSupport && dataSupport == other.dataSupport && resolveSupport == other.resolveSupport && honorsChangeAnnotations == other.honorsChangeAnnotations && true; } return false; } @override int get hashCode => Object.hash( dynamicRegistration, codeActionLiteralSupport, isPreferredSupport, disabledSupport, dataSupport, resolveSupport, honorsChangeAnnotations); @override 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 json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List) .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 valueSet; Map toJson() { var __result = {}; __result['valueSet'] = valueSet.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (valueSet .every((item) => CodeActionKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); 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( CodeActionClientCapabilitiesCodeActionLiteralSupport.canParse, CodeActionClientCapabilitiesCodeActionLiteralSupport.fromJson); CodeActionClientCapabilitiesCodeActionLiteralSupport( {required this.codeActionKind}); static CodeActionClientCapabilitiesCodeActionLiteralSupport fromJson( Map json) { final codeActionKindJson = json['codeActionKind']; final codeActionKind = CodeActionClientCapabilitiesCodeActionKind.fromJson( codeActionKindJson as Map); return CodeActionClientCapabilitiesCodeActionLiteralSupport( codeActionKind: codeActionKind); } /// The code action kind is supported with the following value set. final CodeActionClientCapabilitiesCodeActionKind codeActionKind; Map toJson() { var __result = {}; __result['codeActionKind'] = codeActionKind.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('codeActionKind'); try { if (!obj.containsKey('codeActionKind')) { reporter.reportError('must not be undefined'); return false; } final codeActionKind = obj['codeActionKind']; if (codeActionKind == null) { reporter.reportError('must not be null'); return false; } if (!(CodeActionClientCapabilitiesCodeActionKind.canParse( codeActionKind, reporter))) { reporter.reportError( 'must be of type CodeActionClientCapabilitiesCodeActionKind'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type CodeActionClientCapabilitiesCodeActionLiteralSupport'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionClientCapabilitiesCodeActionLiteralSupport && other.runtimeType == CodeActionClientCapabilitiesCodeActionLiteralSupport) { return codeActionKind == other.codeActionKind && true; } return false; } @override int get hashCode => codeActionKind.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class CodeActionClientCapabilitiesResolveSupport implements ToJsonable { static const jsonHandler = LspJsonHandler( CodeActionClientCapabilitiesResolveSupport.canParse, CodeActionClientCapabilitiesResolveSupport.fromJson); CodeActionClientCapabilitiesResolveSupport({required this.properties}); static CodeActionClientCapabilitiesResolveSupport fromJson( Map json) { final propertiesJson = json['properties']; final properties = (propertiesJson as List) .map((item) => item as String) .toList(); return CodeActionClientCapabilitiesResolveSupport(properties: properties); } /// The properties that a client can resolve lazily. final List properties; Map toJson() { var __result = {}; __result['properties'] = properties; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (properties.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type CodeActionClientCapabilitiesResolveSupport'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionClientCapabilitiesResolveSupport && other.runtimeType == CodeActionClientCapabilitiesResolveSupport) { 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()); } /// Contains additional diagnostic information about the context in which a code /// action is run. class CodeActionContext implements ToJsonable { static const jsonHandler = LspJsonHandler(CodeActionContext.canParse, CodeActionContext.fromJson); CodeActionContext({required this.diagnostics, this.only}); static CodeActionContext fromJson(Map json) { final diagnosticsJson = json['diagnostics']; final diagnostics = (diagnosticsJson as List) .map((item) => Diagnostic.fromJson(item as Map)) .toList(); final onlyJson = json['only']; final only = (onlyJson as List?) ?.map((item) => CodeActionKind.fromJson(item as String)) .toList(); return CodeActionContext(diagnostics: diagnostics, only: only); } /// An array of diagnostics known on the client side overlapping the range /// provided to the `textDocument/codeAction` request. They are provided so /// that the server knows which errors are currently presented to the user for /// the given range. There is no guarantee that these accurately reflect the /// error state of the resource. The primary parameter to compute code actions /// is the provided range. final List diagnostics; /// Requested kind of actions to return. /// /// Actions not of this kind are filtered out by the client before being /// shown. So servers can omit computing them. final List? only; Map toJson() { var __result = {}; __result['diagnostics'] = diagnostics.map((item) => item.toJson()).toList(); if (only != null) { __result['only'] = only?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('diagnostics'); try { if (!obj.containsKey('diagnostics')) { reporter.reportError('must not be undefined'); return false; } final diagnostics = obj['diagnostics']; if (diagnostics == null) { reporter.reportError('must not be null'); return false; } if (!((diagnostics is List && (diagnostics .every((item) => Diagnostic.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('only'); try { final only = obj['only']; if (only != null && !((only is List && (only.every( (item) => CodeActionKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeActionContext'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionContext && other.runtimeType == CodeActionContext) { return listEqual(diagnostics, other.diagnostics, (Diagnostic a, Diagnostic b) => a == b) && listEqual(only, other.only, (CodeActionKind a, CodeActionKind b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(diagnostics), lspHashCode(only)); @override String toString() => jsonEncoder.convert(toJson()); } class CodeActionDisabled implements ToJsonable { static const jsonHandler = LspJsonHandler(CodeActionDisabled.canParse, CodeActionDisabled.fromJson); CodeActionDisabled({required this.reason}); static CodeActionDisabled fromJson(Map json) { final reasonJson = json['reason']; final reason = reasonJson as String; return CodeActionDisabled(reason: reason); } /// Human readable description of why the code action is currently disabled. /// /// This is displayed in the code actions UI. final String reason; Map toJson() { var __result = {}; __result['reason'] = reason; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('reason'); try { if (!obj.containsKey('reason')) { reporter.reportError('must not be undefined'); return false; } final reason = obj['reason']; if (reason == null) { reporter.reportError('must not be null'); return false; } if (!(reason is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeActionDisabled'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionDisabled && other.runtimeType == CodeActionDisabled) { return reason == other.reason && true; } return false; } @override int get hashCode => reason.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// A set of predefined code action kinds. class CodeActionKind { const CodeActionKind(this._value); const CodeActionKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } /// Empty kind. static const Empty = CodeActionKind(''); /// Base kind for quickfix actions: 'quickfix'. static const QuickFix = CodeActionKind('quickfix'); /// Base kind for refactoring actions: 'refactor'. static const Refactor = CodeActionKind('refactor'); /// Base kind for refactoring extraction actions: 'refactor.extract'. /// /// Example extract actions: /// /// - Extract method /// - Extract function /// - Extract variable /// - Extract interface from class /// - ... static const RefactorExtract = CodeActionKind('refactor.extract'); /// Base kind for refactoring inline actions: 'refactor.inline'. /// /// Example inline actions: /// /// - Inline function /// - Inline variable /// - Inline constant /// - ... static const RefactorInline = CodeActionKind('refactor.inline'); /// Base kind for refactoring rewrite actions: 'refactor.rewrite'. /// /// Example rewrite actions: /// /// - Convert JavaScript function to class /// - Add or remove parameter /// - Encapsulate field /// - Make method static /// - Move method to base class /// - ... static const RefactorRewrite = CodeActionKind('refactor.rewrite'); /// Base kind for source actions: `source`. /// /// Source code actions apply to the entire file. static const Source = CodeActionKind('source'); /// Base kind for an organize imports source action: `source.organizeImports`. static const SourceOrganizeImports = CodeActionKind('source.organizeImports'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is CodeActionKind && o._value == _value; } class CodeActionOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(CodeActionOptions.canParse, CodeActionOptions.fromJson); CodeActionOptions( {this.codeActionKinds, this.resolveProvider, this.workDoneProgress}); static CodeActionOptions fromJson(Map json) { if (CodeActionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CodeActionRegistrationOptions.fromJson(json); } final codeActionKindsJson = json['codeActionKinds']; final codeActionKinds = (codeActionKindsJson as List?) ?.map((item) => CodeActionKind.fromJson(item as String)) .toList(); final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CodeActionOptions( codeActionKinds: codeActionKinds, resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// CodeActionKinds that this server may return. /// /// The list of kinds may be generic, such as `CodeActionKind.Refactor`, or /// the server may list out every specific kind they provide. final List? codeActionKinds; /// The server provides support to resolve additional information for a code /// action. /// @since 3.16.0 final bool? resolveProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; if (codeActionKinds != null) { __result['codeActionKinds'] = codeActionKinds?.map((item) => item.toJson()).toList(); } if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('codeActionKinds'); try { final codeActionKinds = obj['codeActionKinds']; if (codeActionKinds != null && !((codeActionKinds is List && (codeActionKinds.every( (item) => CodeActionKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeActionOptions'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionOptions && other.runtimeType == CodeActionOptions) { return listEqual(codeActionKinds, other.codeActionKinds, (CodeActionKind a, CodeActionKind b) => a == b) && resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(codeActionKinds), resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// Params for the CodeActionRequest class CodeActionParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(CodeActionParams.canParse, CodeActionParams.fromJson); CodeActionParams( {required this.textDocument, required this.range, required this.context, this.workDoneToken, this.partialResultToken}); static CodeActionParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final contextJson = json['context']; final context = CodeActionContext.fromJson(contextJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return CodeActionParams( textDocument: textDocument, range: range, context: context, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// Context carrying additional information. final CodeActionContext context; /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The range for which the command was invoked. final Range range; /// The document in which the command was invoked. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['range'] = range.toJson(); __result['context'] = context.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('context'); try { if (!obj.containsKey('context')) { reporter.reportError('must not be undefined'); return false; } final context = obj['context']; if (context == null) { reporter.reportError('must not be null'); return false; } if (!(CodeActionContext.canParse(context, reporter))) { reporter.reportError('must be of type CodeActionContext'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeActionParams'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionParams && other.runtimeType == CodeActionParams) { return textDocument == other.textDocument && range == other.range && context == other.context && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash( textDocument, range, context, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class CodeActionRegistrationOptions implements TextDocumentRegistrationOptions, CodeActionOptions, ToJsonable { static const jsonHandler = LspJsonHandler( CodeActionRegistrationOptions.canParse, CodeActionRegistrationOptions.fromJson); CodeActionRegistrationOptions( {this.documentSelector, this.codeActionKinds, this.resolveProvider, this.workDoneProgress}); static CodeActionRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final codeActionKindsJson = json['codeActionKinds']; final codeActionKinds = (codeActionKindsJson as List?) ?.map((item) => CodeActionKind.fromJson(item as String)) .toList(); final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CodeActionRegistrationOptions( documentSelector: documentSelector, codeActionKinds: codeActionKinds, resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// CodeActionKinds that this server may return. /// /// The list of kinds may be generic, such as `CodeActionKind.Refactor`, or /// the server may list out every specific kind they provide. final List? codeActionKinds; /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The server provides support to resolve additional information for a code /// action. /// @since 3.16.0 final bool? resolveProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (codeActionKinds != null) { __result['codeActionKinds'] = codeActionKinds?.map((item) => item.toJson()).toList(); } if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('codeActionKinds'); try { final codeActionKinds = obj['codeActionKinds']; if (codeActionKinds != null && !((codeActionKinds is List && (codeActionKinds.every( (item) => CodeActionKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeActionRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is CodeActionRegistrationOptions && other.runtimeType == CodeActionRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && listEqual(codeActionKinds, other.codeActionKinds, (CodeActionKind a, CodeActionKind b) => a == b) && resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), lspHashCode(codeActionKinds), resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// Structure to capture a description for an error code. /// @since 3.16.0 class CodeDescription implements ToJsonable { static const jsonHandler = LspJsonHandler(CodeDescription.canParse, CodeDescription.fromJson); CodeDescription({required this.href}); static CodeDescription fromJson(Map json) { final hrefJson = json['href']; final href = hrefJson as String; return CodeDescription(href: href); } /// An URI to open with more information about the diagnostic error. final String href; Map toJson() { var __result = {}; __result['href'] = href; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('href'); try { if (!obj.containsKey('href')) { reporter.reportError('must not be undefined'); return false; } final href = obj['href']; if (href == null) { reporter.reportError('must not be null'); return false; } if (!(href is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeDescription'); return false; } } @override bool operator ==(Object other) { if (other is CodeDescription && other.runtimeType == CodeDescription) { return href == other.href && true; } return false; } @override int get hashCode => href.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// A code lens represents a command that should be shown along with source /// text, like the number of references, a way to run tests, etc. /// /// A code lens is _unresolved_ when no command is associated to it. For /// performance reasons the creation of a code lens and resolving should be done /// in two stages. class CodeLens implements ToJsonable { static const jsonHandler = LspJsonHandler(CodeLens.canParse, CodeLens.fromJson); CodeLens({required this.range, this.command, this.data}); static CodeLens fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final commandJson = json['command']; final command = commandJson != null ? Command.fromJson(commandJson as Map) : null; final dataJson = json['data']; final data = dataJson; return CodeLens(range: range, command: command, data: data); } /// The command this code lens represents. final Command? command; /// A data entry field that is preserved on a code lens item between a code /// lens and a code lens resolve request. final Object? data; /// The range in which this code lens is valid. Should only span a single /// line. final Range range; Map toJson() { var __result = {}; __result['range'] = range.toJson(); if (command != null) { __result['command'] = command?.toJson(); } if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('command'); try { final command = obj['command']; if (command != null && !(Command.canParse(command, reporter))) { reporter.reportError('must be of type Command'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeLens'); return false; } } @override bool operator ==(Object other) { if (other is CodeLens && other.runtimeType == CodeLens) { return range == other.range && command == other.command && data == other.data && true; } return false; } @override int get hashCode => Object.hash(range, command, data); @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( CodeLensClientCapabilities.canParse, CodeLensClientCapabilities.fromJson); CodeLensClientCapabilities({this.dynamicRegistration}); static CodeLensClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return CodeLensClientCapabilities(dynamicRegistration: dynamicRegistration); } /// Whether code lens supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type CodeLensClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is CodeLensClientCapabilities && other.runtimeType == CodeLensClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(CodeLensOptions.canParse, CodeLensOptions.fromJson); CodeLensOptions({this.resolveProvider, this.workDoneProgress}); static CodeLensOptions fromJson(Map json) { if (CodeLensRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CodeLensRegistrationOptions.fromJson(json); } final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CodeLensOptions( resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// Code lens has a resolve provider as well. final bool? resolveProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeLensOptions'); return false; } } @override bool operator ==(Object other) { if (other is CodeLensOptions && other.runtimeType == CodeLensOptions) { return resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(CodeLensParams.canParse, CodeLensParams.fromJson); CodeLensParams( {required this.textDocument, this.workDoneToken, this.partialResultToken}); static CodeLensParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return CodeLensParams( textDocument: textDocument, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The document to request code lens for. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeLensParams'); return false; } } @override bool operator ==(Object other) { if (other is CodeLensParams && other.runtimeType == CodeLensParams) { return textDocument == other.textDocument && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensRegistrationOptions implements TextDocumentRegistrationOptions, CodeLensOptions, ToJsonable { static const jsonHandler = LspJsonHandler( CodeLensRegistrationOptions.canParse, CodeLensRegistrationOptions.fromJson); CodeLensRegistrationOptions( {this.documentSelector, this.resolveProvider, this.workDoneProgress}); static CodeLensRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CodeLensRegistrationOptions( documentSelector: documentSelector, resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// Code lens has a resolve provider as well. final bool? resolveProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CodeLensRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is CodeLensRegistrationOptions && other.runtimeType == CodeLensRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(documentSelector), resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensWorkspaceClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( CodeLensWorkspaceClientCapabilities.canParse, CodeLensWorkspaceClientCapabilities.fromJson); CodeLensWorkspaceClientCapabilities({this.refreshSupport}); static CodeLensWorkspaceClientCapabilities fromJson( Map json) { final refreshSupportJson = json['refreshSupport']; final refreshSupport = refreshSupportJson as bool?; return CodeLensWorkspaceClientCapabilities(refreshSupport: refreshSupport); } /// Whether the client implementation supports a refresh request sent from the /// server to the client. /// /// Note that this event is global and will force the client to refresh all /// code lenses currently shown. It should be used with absolute care and is /// useful for situation where a server for example detect a project wide /// change that requires such a calculation. final bool? refreshSupport; Map toJson() { var __result = {}; if (refreshSupport != null) { __result['refreshSupport'] = refreshSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('refreshSupport'); try { final refreshSupport = obj['refreshSupport']; if (refreshSupport != null && !(refreshSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type CodeLensWorkspaceClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is CodeLensWorkspaceClientCapabilities && other.runtimeType == CodeLensWorkspaceClientCapabilities) { return refreshSupport == other.refreshSupport && true; } return false; } @override int get hashCode => refreshSupport.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// Represents a color in RGBA space. class Color implements ToJsonable { static const jsonHandler = LspJsonHandler(Color.canParse, Color.fromJson); Color( {required this.red, required this.green, required this.blue, required this.alpha}); static Color fromJson(Map json) { final redJson = json['red']; final red = redJson as num; final greenJson = json['green']; final green = greenJson as num; final blueJson = json['blue']; final blue = blueJson as num; final alphaJson = json['alpha']; final alpha = alphaJson as num; return Color(red: red, green: green, blue: blue, alpha: alpha); } /// The alpha component of this color in the range [0-1]. final num alpha; /// The blue component of this color in the range [0-1]. final num blue; /// The green component of this color in the range [0-1]. final num green; /// The red component of this color in the range [0-1]. final num red; Map toJson() { var __result = {}; __result['red'] = red; __result['green'] = green; __result['blue'] = blue; __result['alpha'] = alpha; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('red'); try { if (!obj.containsKey('red')) { reporter.reportError('must not be undefined'); return false; } final red = obj['red']; if (red == null) { reporter.reportError('must not be null'); return false; } if (!(red is num)) { reporter.reportError('must be of type num'); return false; } } finally { reporter.pop(); } reporter.push('green'); try { if (!obj.containsKey('green')) { reporter.reportError('must not be undefined'); return false; } final green = obj['green']; if (green == null) { reporter.reportError('must not be null'); return false; } if (!(green is num)) { reporter.reportError('must be of type num'); return false; } } finally { reporter.pop(); } reporter.push('blue'); try { if (!obj.containsKey('blue')) { reporter.reportError('must not be undefined'); return false; } final blue = obj['blue']; if (blue == null) { reporter.reportError('must not be null'); return false; } if (!(blue is num)) { reporter.reportError('must be of type num'); return false; } } finally { reporter.pop(); } reporter.push('alpha'); try { if (!obj.containsKey('alpha')) { reporter.reportError('must not be undefined'); return false; } final alpha = obj['alpha']; if (alpha == null) { reporter.reportError('must not be null'); return false; } if (!(alpha is num)) { reporter.reportError('must be of type num'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Color'); return false; } } @override bool operator ==(Object other) { if (other is Color && other.runtimeType == Color) { return red == other.red && green == other.green && blue == other.blue && alpha == other.alpha && true; } return false; } @override int get hashCode => Object.hash(red, green, blue, alpha); @override String toString() => jsonEncoder.convert(toJson()); } class ColorInformation implements ToJsonable { static const jsonHandler = LspJsonHandler(ColorInformation.canParse, ColorInformation.fromJson); ColorInformation({required this.range, required this.color}); static ColorInformation fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final colorJson = json['color']; final color = Color.fromJson(colorJson as Map); return ColorInformation(range: range, color: color); } /// The actual color value for this color range. final Color color; /// The range in the document where this color appears. final Range range; Map toJson() { var __result = {}; __result['range'] = range.toJson(); __result['color'] = color.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('color'); try { if (!obj.containsKey('color')) { reporter.reportError('must not be undefined'); return false; } final color = obj['color']; if (color == null) { reporter.reportError('must not be null'); return false; } if (!(Color.canParse(color, reporter))) { reporter.reportError('must be of type Color'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ColorInformation'); return false; } } @override bool operator ==(Object other) { if (other is ColorInformation && other.runtimeType == ColorInformation) { return range == other.range && color == other.color && true; } return false; } @override int get hashCode => Object.hash(range, color); @override String toString() => jsonEncoder.convert(toJson()); } class ColorPresentation implements ToJsonable { static const jsonHandler = LspJsonHandler(ColorPresentation.canParse, ColorPresentation.fromJson); ColorPresentation( {required this.label, this.textEdit, this.additionalTextEdits}); static ColorPresentation fromJson(Map json) { final labelJson = json['label']; final label = labelJson as String; final textEditJson = json['textEdit']; final textEdit = textEditJson != null ? TextEdit.fromJson(textEditJson as Map) : null; final additionalTextEditsJson = json['additionalTextEdits']; final additionalTextEdits = (additionalTextEditsJson as List?) ?.map((item) => TextEdit.fromJson(item as Map)) .toList(); return ColorPresentation( label: label, textEdit: textEdit, additionalTextEdits: additionalTextEdits); } /// An optional array of additional text edits ([TextEdit]) that are applied /// when selecting this color presentation. Edits must not overlap with the /// main [edit](#ColorPresentation.textEdit) nor with themselves. final List? additionalTextEdits; /// The label of this color presentation. It will be shown on the color picker /// header. By default this is also the text that is inserted when selecting /// this color presentation. final String label; /// An edit ([TextEdit]) which is applied to a document when selecting this /// presentation for the color. When `falsy` the /// [label](#ColorPresentation.label) is used. final TextEdit? textEdit; Map toJson() { var __result = {}; __result['label'] = label; if (textEdit != null) { __result['textEdit'] = textEdit?.toJson(); } if (additionalTextEdits != null) { __result['additionalTextEdits'] = additionalTextEdits?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { if (!obj.containsKey('label')) { reporter.reportError('must not be undefined'); return false; } final label = obj['label']; if (label == null) { reporter.reportError('must not be null'); return false; } if (!(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('textEdit'); try { final textEdit = obj['textEdit']; if (textEdit != null && !(TextEdit.canParse(textEdit, reporter))) { reporter.reportError('must be of type TextEdit'); return false; } } finally { reporter.pop(); } reporter.push('additionalTextEdits'); try { final additionalTextEdits = obj['additionalTextEdits']; if (additionalTextEdits != null && !((additionalTextEdits is List && (additionalTextEdits .every((item) => TextEdit.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ColorPresentation'); return false; } } @override bool operator ==(Object other) { if (other is ColorPresentation && other.runtimeType == ColorPresentation) { return label == other.label && textEdit == other.textEdit && listEqual(additionalTextEdits, other.additionalTextEdits, (TextEdit a, TextEdit b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(label, textEdit, lspHashCode(additionalTextEdits)); @override String toString() => jsonEncoder.convert(toJson()); } class ColorPresentationParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( ColorPresentationParams.canParse, ColorPresentationParams.fromJson); ColorPresentationParams( {required this.textDocument, required this.color, required this.range, this.workDoneToken, this.partialResultToken}); static ColorPresentationParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final colorJson = json['color']; final color = Color.fromJson(colorJson as Map); final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return ColorPresentationParams( textDocument: textDocument, color: color, range: range, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// The color information to request presentations for. final Color color; /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The range where the color would be inserted. Serves as a context. final Range range; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['color'] = color.toJson(); __result['range'] = range.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('color'); try { if (!obj.containsKey('color')) { reporter.reportError('must not be undefined'); return false; } final color = obj['color']; if (color == null) { reporter.reportError('must not be null'); return false; } if (!(Color.canParse(color, reporter))) { reporter.reportError('must be of type Color'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ColorPresentationParams'); return false; } } @override bool operator ==(Object other) { if (other is ColorPresentationParams && other.runtimeType == ColorPresentationParams) { return textDocument == other.textDocument && color == other.color && range == other.range && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash( textDocument, color, range, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class Command implements ToJsonable { static const jsonHandler = LspJsonHandler(Command.canParse, Command.fromJson); Command({required this.title, required this.command, this.arguments}); static Command fromJson(Map json) { final titleJson = json['title']; final title = titleJson as String; final commandJson = json['command']; final command = commandJson as String; final argumentsJson = json['arguments']; final arguments = (argumentsJson as List?)?.map((item) => item).toList(); return Command(title: title, command: command, arguments: arguments); } /// Arguments that the command handler should be invoked with. final List? arguments; /// The identifier of the actual command handler. final String command; /// Title of the command, like `save`. final String title; Map toJson() { var __result = {}; __result['title'] = title; __result['command'] = command; if (arguments != null) { __result['arguments'] = arguments; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('title'); try { if (!obj.containsKey('title')) { reporter.reportError('must not be undefined'); return false; } final title = obj['title']; if (title == null) { reporter.reportError('must not be null'); return false; } if (!(title is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('command'); try { if (!obj.containsKey('command')) { reporter.reportError('must not be undefined'); return false; } final command = obj['command']; if (command == null) { reporter.reportError('must not be null'); return false; } if (!(command is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('arguments'); try { final arguments = obj['arguments']; if (arguments != null && !((arguments is List && (arguments.every((item) => true))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Command'); return false; } } @override bool operator ==(Object other) { if (other is Command && other.runtimeType == Command) { return title == other.title && command == other.command && listEqual( arguments, other.arguments, (Object? a, Object? b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(title, command, lspHashCode(arguments)); @override String toString() => jsonEncoder.convert(toJson()); } class CompletionClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( CompletionClientCapabilities.canParse, CompletionClientCapabilities.fromJson); CompletionClientCapabilities( {this.dynamicRegistration, this.completionItem, this.completionItemKind, this.contextSupport}); static CompletionClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final completionItemJson = json['completionItem']; final completionItem = completionItemJson != null ? CompletionClientCapabilitiesCompletionItem.fromJson( completionItemJson as Map) : null; final completionItemKindJson = json['completionItemKind']; final completionItemKind = completionItemKindJson != null ? CompletionClientCapabilitiesCompletionItemKind.fromJson( completionItemKindJson as Map) : null; final contextSupportJson = json['contextSupport']; final contextSupport = contextSupportJson as bool?; return CompletionClientCapabilities( dynamicRegistration: dynamicRegistration, completionItem: completionItem, completionItemKind: completionItemKind, contextSupport: contextSupport); } /// The client supports the following `CompletionItem` specific capabilities. final CompletionClientCapabilitiesCompletionItem? completionItem; final CompletionClientCapabilitiesCompletionItemKind? completionItemKind; /// The client supports to send additional context information for a /// `textDocument/completion` request. final bool? contextSupport; /// Whether completion supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (completionItem != null) { __result['completionItem'] = completionItem?.toJson(); } if (completionItemKind != null) { __result['completionItemKind'] = completionItemKind?.toJson(); } if (contextSupport != null) { __result['contextSupport'] = contextSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('completionItem'); try { final completionItem = obj['completionItem']; if (completionItem != null && !(CompletionClientCapabilitiesCompletionItem.canParse( completionItem, reporter))) { reporter.reportError( 'must be of type CompletionClientCapabilitiesCompletionItem'); return false; } } finally { reporter.pop(); } reporter.push('completionItemKind'); try { final completionItemKind = obj['completionItemKind']; if (completionItemKind != null && !(CompletionClientCapabilitiesCompletionItemKind.canParse( completionItemKind, reporter))) { reporter.reportError( 'must be of type CompletionClientCapabilitiesCompletionItemKind'); return false; } } finally { reporter.pop(); } reporter.push('contextSupport'); try { final contextSupport = obj['contextSupport']; if (contextSupport != null && !(contextSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is CompletionClientCapabilities && other.runtimeType == CompletionClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && completionItem == other.completionItem && completionItemKind == other.completionItemKind && contextSupport == other.contextSupport && true; } return false; } @override int get hashCode => Object.hash( dynamicRegistration, completionItem, completionItemKind, contextSupport); @override String toString() => jsonEncoder.convert(toJson()); } class CompletionClientCapabilitiesCompletionItem implements ToJsonable { static const jsonHandler = LspJsonHandler( CompletionClientCapabilitiesCompletionItem.canParse, CompletionClientCapabilitiesCompletionItem.fromJson); CompletionClientCapabilitiesCompletionItem( {this.snippetSupport, this.commitCharactersSupport, this.documentationFormat, this.deprecatedSupport, this.preselectSupport, this.tagSupport, this.insertReplaceSupport, this.resolveSupport, this.insertTextModeSupport}); static CompletionClientCapabilitiesCompletionItem fromJson( Map json) { final snippetSupportJson = json['snippetSupport']; final snippetSupport = snippetSupportJson as bool?; final commitCharactersSupportJson = json['commitCharactersSupport']; final commitCharactersSupport = commitCharactersSupportJson as bool?; final documentationFormatJson = json['documentationFormat']; final documentationFormat = (documentationFormatJson as List?) ?.map((item) => MarkupKind.fromJson(item as String)) .toList(); final deprecatedSupportJson = json['deprecatedSupport']; final deprecatedSupport = deprecatedSupportJson as bool?; final preselectSupportJson = json['preselectSupport']; final preselectSupport = preselectSupportJson as bool?; final tagSupportJson = json['tagSupport']; final tagSupport = tagSupportJson != null ? CompletionClientCapabilitiesTagSupport.fromJson( tagSupportJson as Map) : null; final insertReplaceSupportJson = json['insertReplaceSupport']; final insertReplaceSupport = insertReplaceSupportJson as bool?; final resolveSupportJson = json['resolveSupport']; final resolveSupport = resolveSupportJson != null ? CompletionClientCapabilitiesResolveSupport.fromJson( resolveSupportJson as Map) : null; final insertTextModeSupportJson = json['insertTextModeSupport']; final insertTextModeSupport = insertTextModeSupportJson != null ? CompletionClientCapabilitiesInsertTextModeSupport.fromJson( insertTextModeSupportJson as Map) : null; return CompletionClientCapabilitiesCompletionItem( snippetSupport: snippetSupport, commitCharactersSupport: commitCharactersSupport, documentationFormat: documentationFormat, deprecatedSupport: deprecatedSupport, preselectSupport: preselectSupport, tagSupport: tagSupport, insertReplaceSupport: insertReplaceSupport, resolveSupport: resolveSupport, insertTextModeSupport: insertTextModeSupport); } /// Client supports commit characters on a completion item. final bool? commitCharactersSupport; /// Client supports the deprecated property on a completion item. final bool? deprecatedSupport; /// Client supports the follow content formats for the documentation property. /// The order describes the preferred format of the client. final List? documentationFormat; /// Client supports insert replace edit to control different behavior if a /// completion item is inserted in the text or should replace text. /// @since 3.16.0 final bool? insertReplaceSupport; /// The client supports the `insertTextMode` property on a completion item to /// override the whitespace handling mode as defined by the client (see /// `insertTextMode`). /// @since 3.16.0 final CompletionClientCapabilitiesInsertTextModeSupport? insertTextModeSupport; /// Client supports the preselect property on a completion item. final bool? preselectSupport; /// Indicates which properties a client can resolve lazily on a completion /// item. Before version 3.16.0 only the predefined properties `documentation` /// and `details` could be resolved lazily. /// @since 3.16.0 final CompletionClientCapabilitiesResolveSupport? resolveSupport; /// Client supports snippets as insert text. /// /// A snippet can define tab stops and placeholders with `$1`, `$2` and /// `${3:foo}`. `$0` defines the final tab stop, it defaults to the end of the /// snippet. Placeholders with equal identifiers are linked, that is typing in /// one will update others too. final bool? snippetSupport; /// Client supports the tag property on a completion item. Clients supporting /// tags have to handle unknown tags gracefully. Clients especially need to /// preserve unknown tags when sending a completion item back to the server in /// a resolve call. /// @since 3.15.0 final CompletionClientCapabilitiesTagSupport? tagSupport; Map toJson() { var __result = {}; if (snippetSupport != null) { __result['snippetSupport'] = snippetSupport; } if (commitCharactersSupport != null) { __result['commitCharactersSupport'] = commitCharactersSupport; } if (documentationFormat != null) { __result['documentationFormat'] = documentationFormat?.map((item) => item.toJson()).toList(); } if (deprecatedSupport != null) { __result['deprecatedSupport'] = deprecatedSupport; } if (preselectSupport != null) { __result['preselectSupport'] = preselectSupport; } if (tagSupport != null) { __result['tagSupport'] = tagSupport?.toJson(); } if (insertReplaceSupport != null) { __result['insertReplaceSupport'] = insertReplaceSupport; } if (resolveSupport != null) { __result['resolveSupport'] = resolveSupport?.toJson(); } if (insertTextModeSupport != null) { __result['insertTextModeSupport'] = insertTextModeSupport?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('snippetSupport'); try { final snippetSupport = obj['snippetSupport']; if (snippetSupport != null && !(snippetSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('commitCharactersSupport'); try { final commitCharactersSupport = obj['commitCharactersSupport']; if (commitCharactersSupport != null && !(commitCharactersSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('documentationFormat'); try { final documentationFormat = obj['documentationFormat']; if (documentationFormat != null && !((documentationFormat is List && (documentationFormat .every((item) => MarkupKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('deprecatedSupport'); try { final deprecatedSupport = obj['deprecatedSupport']; if (deprecatedSupport != null && !(deprecatedSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('preselectSupport'); try { final preselectSupport = obj['preselectSupport']; if (preselectSupport != null && !(preselectSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('tagSupport'); try { final tagSupport = obj['tagSupport']; if (tagSupport != null && !(CompletionClientCapabilitiesTagSupport.canParse( tagSupport, reporter))) { reporter.reportError( 'must be of type CompletionClientCapabilitiesTagSupport'); return false; } } finally { reporter.pop(); } reporter.push('insertReplaceSupport'); try { final insertReplaceSupport = obj['insertReplaceSupport']; if (insertReplaceSupport != null && !(insertReplaceSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('resolveSupport'); try { final resolveSupport = obj['resolveSupport']; if (resolveSupport != null && !(CompletionClientCapabilitiesResolveSupport.canParse( resolveSupport, reporter))) { reporter.reportError( 'must be of type CompletionClientCapabilitiesResolveSupport'); return false; } } finally { reporter.pop(); } reporter.push('insertTextModeSupport'); try { final insertTextModeSupport = obj['insertTextModeSupport']; if (insertTextModeSupport != null && !(CompletionClientCapabilitiesInsertTextModeSupport.canParse( insertTextModeSupport, reporter))) { reporter.reportError( 'must be of type CompletionClientCapabilitiesInsertTextModeSupport'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type CompletionClientCapabilitiesCompletionItem'); return false; } } @override bool operator ==(Object other) { if (other is CompletionClientCapabilitiesCompletionItem && other.runtimeType == CompletionClientCapabilitiesCompletionItem) { return snippetSupport == other.snippetSupport && commitCharactersSupport == other.commitCharactersSupport && listEqual(documentationFormat, other.documentationFormat, (MarkupKind a, MarkupKind b) => a == b) && deprecatedSupport == other.deprecatedSupport && preselectSupport == other.preselectSupport && tagSupport == other.tagSupport && insertReplaceSupport == other.insertReplaceSupport && resolveSupport == other.resolveSupport && insertTextModeSupport == other.insertTextModeSupport && true; } return false; } @override int get hashCode => Object.hash( snippetSupport, commitCharactersSupport, lspHashCode(documentationFormat), deprecatedSupport, preselectSupport, tagSupport, insertReplaceSupport, resolveSupport, insertTextModeSupport); @override String toString() => jsonEncoder.convert(toJson()); } class CompletionClientCapabilitiesCompletionItemKind implements ToJsonable { static const jsonHandler = LspJsonHandler( CompletionClientCapabilitiesCompletionItemKind.canParse, CompletionClientCapabilitiesCompletionItemKind.fromJson); CompletionClientCapabilitiesCompletionItemKind({this.valueSet}); static CompletionClientCapabilitiesCompletionItemKind fromJson( Map json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List?) ?.map((item) => CompletionItemKind.fromJson(item as int)) .toList(); return CompletionClientCapabilitiesCompletionItemKind(valueSet: valueSet); } /// The completion item 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. /// /// If this property is not present the client only supports the completion /// items kinds from `Text` to `Reference` as defined in the initial version /// of the protocol. final List? valueSet; Map toJson() { var __result = {}; if (valueSet != null) { __result['valueSet'] = valueSet?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('valueSet'); try { final valueSet = obj['valueSet']; if (valueSet != null && !((valueSet is List && (valueSet.every( (item) => CompletionItemKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type CompletionClientCapabilitiesCompletionItemKind'); return false; } } @override bool operator ==(Object other) { if (other is CompletionClientCapabilitiesCompletionItemKind && other.runtimeType == CompletionClientCapabilitiesCompletionItemKind) { return listEqual(valueSet, other.valueSet, (CompletionItemKind a, CompletionItemKind b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(valueSet); @override 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 json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List) .map((item) => InsertTextMode.fromJson(item as int)) .toList(); return CompletionClientCapabilitiesInsertTextModeSupport( valueSet: valueSet); } final List valueSet; Map toJson() { var __result = {}; __result['valueSet'] = valueSet.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (valueSet .every((item) => InsertTextMode.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); 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 json) { final propertiesJson = json['properties']; final properties = (propertiesJson as List) .map((item) => item as String) .toList(); return CompletionClientCapabilitiesResolveSupport(properties: properties); } /// The properties that a client can resolve lazily. final List properties; Map toJson() { var __result = {}; __result['properties'] = properties; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (properties.every((item) => item is String))))) { reporter.reportError('must be of type List'); 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 json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List) .map((item) => CompletionItemTag.fromJson(item as int)) .toList(); return CompletionClientCapabilitiesTagSupport(valueSet: valueSet); } /// The tags supported by the client. final List valueSet; Map toJson() { var __result = {}; __result['valueSet'] = valueSet.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (valueSet.every( (item) => CompletionItemTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); 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 { static const jsonHandler = LspJsonHandler(CompletionContext.canParse, CompletionContext.fromJson); CompletionContext({required this.triggerKind, this.triggerCharacter}); static CompletionContext fromJson(Map json) { final triggerKindJson = json['triggerKind']; final triggerKind = CompletionTriggerKind.fromJson(triggerKindJson as int); final triggerCharacterJson = json['triggerCharacter']; final triggerCharacter = triggerCharacterJson as String?; return CompletionContext( triggerKind: triggerKind, triggerCharacter: triggerCharacter); } /// The trigger character (a single character) that has trigger code complete. /// Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter` final String? triggerCharacter; /// How the completion was triggered. final CompletionTriggerKind triggerKind; Map toJson() { var __result = {}; __result['triggerKind'] = triggerKind.toJson(); if (triggerCharacter != null) { __result['triggerCharacter'] = triggerCharacter; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerKind'); try { if (!obj.containsKey('triggerKind')) { reporter.reportError('must not be undefined'); return false; } final triggerKind = obj['triggerKind']; if (triggerKind == null) { reporter.reportError('must not be null'); return false; } if (!(CompletionTriggerKind.canParse(triggerKind, reporter))) { reporter.reportError('must be of type CompletionTriggerKind'); return false; } } finally { reporter.pop(); } reporter.push('triggerCharacter'); try { final triggerCharacter = obj['triggerCharacter']; if (triggerCharacter != null && !(triggerCharacter is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionContext'); return false; } } @override bool operator ==(Object other) { if (other is CompletionContext && other.runtimeType == CompletionContext) { return triggerKind == other.triggerKind && triggerCharacter == other.triggerCharacter && true; } return false; } @override int get hashCode => Object.hash(triggerKind, triggerCharacter); @override String toString() => jsonEncoder.convert(toJson()); } class CompletionItem implements ToJsonable { static const jsonHandler = LspJsonHandler(CompletionItem.canParse, CompletionItem.fromJson); CompletionItem( {required this.label, this.kind, this.tags, this.detail, this.documentation, this.deprecated, this.preselect, this.sortText, this.filterText, this.insertText, this.insertTextFormat, this.insertTextMode, this.textEdit, this.additionalTextEdits, this.commitCharacters, this.command, this.data}); static CompletionItem fromJson(Map json) { final labelJson = json['label']; final label = labelJson as String; final kindJson = json['kind']; final kind = kindJson != null ? CompletionItemKind.fromJson(kindJson as int) : null; final tagsJson = json['tags']; final tags = (tagsJson as List?) ?.map((item) => CompletionItemTag.fromJson(item as int)) .toList(); final detailJson = json['detail']; final detail = detailJson as String?; final documentationJson = json['documentation']; final documentation = documentationJson == null ? null : (documentationJson is String ? Either2.t1(documentationJson) : (MarkupContent.canParse(documentationJson, nullLspJsonReporter) ? Either2.t2(MarkupContent.fromJson( documentationJson as Map)) : (throw '''$documentationJson was not one of (String, MarkupContent)'''))); final deprecatedJson = json['deprecated']; final deprecated = deprecatedJson as bool?; final preselectJson = json['preselect']; final preselect = preselectJson as bool?; final sortTextJson = json['sortText']; final sortText = sortTextJson as String?; final filterTextJson = json['filterText']; final filterText = filterTextJson as String?; final insertTextJson = json['insertText']; final insertText = insertTextJson as String?; final insertTextFormatJson = json['insertTextFormat']; final insertTextFormat = insertTextFormatJson != null ? InsertTextFormat.fromJson(insertTextFormatJson as int) : null; final insertTextModeJson = json['insertTextMode']; final insertTextMode = insertTextModeJson != null ? InsertTextMode.fromJson(insertTextModeJson as int) : null; final textEditJson = json['textEdit']; final textEdit = textEditJson == null ? null : (TextEdit.canParse(textEditJson, nullLspJsonReporter) ? Either2.t1( TextEdit.fromJson(textEditJson as Map)) : (InsertReplaceEdit.canParse(textEditJson, nullLspJsonReporter) ? Either2.t2( InsertReplaceEdit.fromJson( textEditJson as Map)) : (throw '''$textEditJson was not one of (TextEdit, InsertReplaceEdit)'''))); final additionalTextEditsJson = json['additionalTextEdits']; final additionalTextEdits = (additionalTextEditsJson as List?) ?.map((item) => TextEdit.fromJson(item as Map)) .toList(); final commitCharactersJson = json['commitCharacters']; final commitCharacters = (commitCharactersJson as List?) ?.map((item) => item as String) .toList(); final commandJson = json['command']; final command = commandJson != null ? Command.fromJson(commandJson as Map) : null; final dataJson = json['data']; final data = dataJson != null ? CompletionItemResolutionInfo.fromJson( dataJson as Map) : null; return CompletionItem( label: label, kind: kind, tags: tags, detail: detail, documentation: documentation, deprecated: deprecated, preselect: preselect, sortText: sortText, filterText: filterText, insertText: insertText, insertTextFormat: insertTextFormat, insertTextMode: insertTextMode, textEdit: textEdit, additionalTextEdits: additionalTextEdits, commitCharacters: commitCharacters, command: command, data: data); } /// An optional array of additional text edits that are applied when selecting /// this completion. Edits must not overlap (including the same insert /// position) with the main edit nor with themselves. /// /// Additional text edits should be used to change text unrelated to the /// current cursor position (for example adding an import statement at the top /// of the file if the completion item will insert an unqualified type). final List? additionalTextEdits; /// An optional command that is executed *after* inserting this completion. /// *Note* that additional modifications to the current document should be /// described with the additionalTextEdits-property. final Command? command; /// An optional set of characters that when pressed while this completion is /// active will accept it first and then type that character. *Note* that all /// commit characters should have `length=1` and that superfluous characters /// will be ignored. final List? commitCharacters; /// A data entry field that is preserved on a completion item between a /// completion and a completion resolve request. final CompletionItemResolutionInfo? data; /// Indicates if this item is deprecated. /// @deprecated Use `tags` instead if supported. final bool? deprecated; /// A human-readable string with additional information about this item, like /// type or symbol information. final String? detail; /// A human-readable string that represents a doc-comment. final Either2? documentation; /// A string that should be used when filtering a set of completion items. /// When `falsy` the label is used. final String? filterText; /// A string that should be inserted into a document when selecting this /// completion. When `falsy` the label is used. /// /// The `insertText` is subject to interpretation by the client side. Some /// tools might not take the string literally. For example VS Code when code /// complete is requested in this example `con` and a /// completion item with an `insertText` of `console` is provided it will only /// insert `sole`. Therefore it is recommended to use `textEdit` instead since /// it avoids additional client side interpretation. final String? insertText; /// The format of the insert text. The format applies to both the `insertText` /// property and the `newText` property of a provided `textEdit`. If omitted /// defaults to `InsertTextFormat.PlainText`. final InsertTextFormat? insertTextFormat; /// How whitespace and indentation is handled during completion item /// insertion. If not provided the client's default value depends on the /// `textDocument.completion.insertTextMode` client capability. /// @since 3.16.0 final InsertTextMode? insertTextMode; /// The kind of this completion item. Based of the kind an icon is chosen by /// the editor. The standardized set of available values is defined in /// `CompletionItemKind`. final CompletionItemKind? kind; /// The label of this completion item. By default also the text that is /// inserted when selecting this completion. final String label; /// Select this item when showing. /// /// *Note* that only one completion item can be selected and that the tool / /// client decides which item that is. The rule is that the *first* item of /// those that match best is selected. final bool? preselect; /// A string that should be used when comparing this item with other items. /// When `falsy` the label is used. final String? sortText; /// Tags for this completion item. /// @since 3.15.0 final List? tags; /// An edit which is applied to a document when selecting this completion. /// When an edit is provided the value of `insertText` is ignored. /// /// *Note:* The range of the edit must be a single line range and it must /// contain the position at which completion has been requested. /// /// Most editors support two different operations when accepting a completion /// item. One is to insert a completion text and the other is to replace an /// existing text with a completion text. Since this can usually not be /// predetermined by a server it can report both ranges. Clients need to /// signal support for `InsertReplaceEdits` via the /// `textDocument.completion.insertReplaceSupport` client capability property. /// /// *Note 1:* The text edit's range as well as both ranges from an insert /// replace edit must be a [single line] and they must contain the position at /// which completion has been requested. /// *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range /// must be a prefix of the edit's replace range, that means it must be /// contained and starting at the same position. /// @since 3.16.0 additional type `InsertReplaceEdit` final Either2? textEdit; Map toJson() { var __result = {}; __result['label'] = label; if (kind != null) { __result['kind'] = kind?.toJson(); } if (tags != null) { __result['tags'] = tags?.map((item) => item.toJson()).toList(); } if (detail != null) { __result['detail'] = detail; } if (documentation != null) { __result['documentation'] = documentation; } if (deprecated != null) { __result['deprecated'] = deprecated; } if (preselect != null) { __result['preselect'] = preselect; } if (sortText != null) { __result['sortText'] = sortText; } if (filterText != null) { __result['filterText'] = filterText; } if (insertText != null) { __result['insertText'] = insertText; } if (insertTextFormat != null) { __result['insertTextFormat'] = insertTextFormat?.toJson(); } if (insertTextMode != null) { __result['insertTextMode'] = insertTextMode?.toJson(); } if (textEdit != null) { __result['textEdit'] = textEdit; } if (additionalTextEdits != null) { __result['additionalTextEdits'] = additionalTextEdits?.map((item) => item.toJson()).toList(); } if (commitCharacters != null) { __result['commitCharacters'] = commitCharacters; } if (command != null) { __result['command'] = command?.toJson(); } if (data != null) { __result['data'] = data?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { if (!obj.containsKey('label')) { reporter.reportError('must not be undefined'); return false; } final label = obj['label']; if (label == null) { reporter.reportError('must not be null'); return false; } if (!(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { final kind = obj['kind']; if (kind != null && !(CompletionItemKind.canParse(kind, reporter))) { reporter.reportError('must be of type CompletionItemKind'); return false; } } finally { reporter.pop(); } reporter.push('tags'); try { final tags = obj['tags']; if (tags != null && !((tags is List && (tags.every( (item) => CompletionItemTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('detail'); try { final detail = obj['detail']; if (detail != null && !(detail is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('documentation'); try { final documentation = obj['documentation']; if (documentation != null && !((documentation is String || MarkupContent.canParse(documentation, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('deprecated'); try { final deprecated = obj['deprecated']; if (deprecated != null && !(deprecated is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('preselect'); try { final preselect = obj['preselect']; if (preselect != null && !(preselect is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('sortText'); try { final sortText = obj['sortText']; if (sortText != null && !(sortText is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('filterText'); try { final filterText = obj['filterText']; if (filterText != null && !(filterText is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('insertText'); try { final insertText = obj['insertText']; if (insertText != null && !(insertText is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('insertTextFormat'); try { final insertTextFormat = obj['insertTextFormat']; if (insertTextFormat != null && !(InsertTextFormat.canParse(insertTextFormat, reporter))) { reporter.reportError('must be of type InsertTextFormat'); return false; } } finally { reporter.pop(); } reporter.push('insertTextMode'); try { final insertTextMode = obj['insertTextMode']; if (insertTextMode != null && !(InsertTextMode.canParse(insertTextMode, reporter))) { reporter.reportError('must be of type InsertTextMode'); return false; } } finally { reporter.pop(); } reporter.push('textEdit'); try { final textEdit = obj['textEdit']; if (textEdit != null && !((TextEdit.canParse(textEdit, reporter) || InsertReplaceEdit.canParse(textEdit, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('additionalTextEdits'); try { final additionalTextEdits = obj['additionalTextEdits']; if (additionalTextEdits != null && !((additionalTextEdits is List && (additionalTextEdits .every((item) => TextEdit.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('commitCharacters'); try { final commitCharacters = obj['commitCharacters']; if (commitCharacters != null && !((commitCharacters is List && (commitCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('command'); try { final command = obj['command']; if (command != null && !(Command.canParse(command, reporter))) { reporter.reportError('must be of type Command'); return false; } } finally { reporter.pop(); } reporter.push('data'); try { final data = obj['data']; if (data != null && !(CompletionItemResolutionInfo.canParse(data, reporter))) { reporter.reportError('must be of type CompletionItemResolutionInfo'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionItem'); return false; } } @override bool operator ==(Object other) { if (other is CompletionItem && other.runtimeType == CompletionItem) { return label == other.label && kind == other.kind && listEqual(tags, other.tags, (CompletionItemTag a, CompletionItemTag b) => a == b) && detail == other.detail && documentation == other.documentation && deprecated == other.deprecated && preselect == other.preselect && sortText == other.sortText && filterText == other.filterText && insertText == other.insertText && insertTextFormat == other.insertTextFormat && insertTextMode == other.insertTextMode && textEdit == other.textEdit && listEqual(additionalTextEdits, other.additionalTextEdits, (TextEdit a, TextEdit b) => a == b) && listEqual(commitCharacters, other.commitCharacters, (String a, String b) => a == b) && command == other.command && data == other.data && true; } return false; } @override int get hashCode => Object.hash( label, kind, lspHashCode(tags), detail, documentation, deprecated, preselect, sortText, filterText, insertText, insertTextFormat, insertTextMode, textEdit, lspHashCode(additionalTextEdits), lspHashCode(commitCharacters), command, data); @override String toString() => jsonEncoder.convert(toJson()); } /// The kind of a completion entry. class CompletionItemKind { const CompletionItemKind(this._value); const CompletionItemKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } static const Text = CompletionItemKind(1); static const Method = CompletionItemKind(2); static const Function = CompletionItemKind(3); static const Constructor = CompletionItemKind(4); static const Field = CompletionItemKind(5); static const Variable = CompletionItemKind(6); static const Class = CompletionItemKind(7); static const Interface = CompletionItemKind(8); static const Module = CompletionItemKind(9); static const Property = CompletionItemKind(10); static const Unit = CompletionItemKind(11); static const Value = CompletionItemKind(12); static const Enum = CompletionItemKind(13); static const Keyword = CompletionItemKind(14); static const Snippet = CompletionItemKind(15); static const Color = CompletionItemKind(16); static const File = CompletionItemKind(17); static const Reference = CompletionItemKind(18); static const Folder = CompletionItemKind(19); static const EnumMember = CompletionItemKind(20); static const Constant = CompletionItemKind(21); static const Struct = CompletionItemKind(22); static const Event = CompletionItemKind(23); static const Operator = CompletionItemKind(24); static const TypeParameter = CompletionItemKind(25); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is CompletionItemKind && o._value == _value; } /// Completion item tags are extra annotations that tweak the rendering of a /// completion item. /// @since 3.15.0 class CompletionItemTag { const CompletionItemTag(this._value); const CompletionItemTag.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Render a completion as obsolete, usually using a strike-out. static const Deprecated = CompletionItemTag(1); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is CompletionItemTag && o._value == _value; } /// Represents a collection of completion items ([CompletionItem]) to be /// presented in the editor. class CompletionList implements ToJsonable { static const jsonHandler = LspJsonHandler(CompletionList.canParse, CompletionList.fromJson); CompletionList({required this.isIncomplete, required this.items}); static CompletionList fromJson(Map json) { final isIncompleteJson = json['isIncomplete']; final isIncomplete = isIncompleteJson as bool; final itemsJson = json['items']; final items = (itemsJson as List) .map((item) => CompletionItem.fromJson(item as Map)) .toList(); return CompletionList(isIncomplete: isIncomplete, items: items); } /// This list it not complete. Further typing should result in recomputing /// this list. final bool isIncomplete; /// The completion items. final List items; Map toJson() { var __result = {}; __result['isIncomplete'] = isIncomplete; __result['items'] = items.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('isIncomplete'); try { if (!obj.containsKey('isIncomplete')) { reporter.reportError('must not be undefined'); return false; } final isIncomplete = obj['isIncomplete']; if (isIncomplete == null) { reporter.reportError('must not be null'); return false; } if (!(isIncomplete is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('items'); try { if (!obj.containsKey('items')) { reporter.reportError('must not be undefined'); return false; } final items = obj['items']; if (items == null) { reporter.reportError('must not be null'); return false; } if (!((items is List && (items .every((item) => CompletionItem.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionList'); return false; } } @override bool operator ==(Object other) { if (other is CompletionList && other.runtimeType == CompletionList) { return isIncomplete == other.isIncomplete && listEqual(items, other.items, (CompletionItem a, CompletionItem b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(isIncomplete, lspHashCode(items)); @override String toString() => jsonEncoder.convert(toJson()); } /// Completion options. class CompletionOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(CompletionOptions.canParse, CompletionOptions.fromJson); CompletionOptions( {this.triggerCharacters, this.allCommitCharacters, this.resolveProvider, this.workDoneProgress}); static CompletionOptions fromJson(Map json) { if (CompletionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CompletionRegistrationOptions.fromJson(json); } final triggerCharactersJson = json['triggerCharacters']; final triggerCharacters = (triggerCharactersJson as List?) ?.map((item) => item as String) .toList(); final allCommitCharactersJson = json['allCommitCharacters']; final allCommitCharacters = (allCommitCharactersJson as List?) ?.map((item) => item as String) .toList(); final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CompletionOptions( triggerCharacters: triggerCharacters, allCommitCharacters: allCommitCharacters, resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// The list of all possible characters that commit a completion. This field /// can be used if clients don't support individual commit characters per /// completion item. See client capability /// `completion.completionItem.commitCharactersSupport`. /// /// If a server provides both `allCommitCharacters` and commit characters on /// an individual completion item the ones on the completion item win. /// @since 3.2.0 final List? allCommitCharacters; /// The server provides support to resolve additional information for a /// completion item. final bool? resolveProvider; /// Most tools trigger completion request automatically without explicitly /// requesting it using a keyboard shortcut (e.g. Ctrl+Space). Typically they /// do so when the user starts to type an identifier. For example if the user /// types `c` in a JavaScript file code complete will automatically pop up /// present `console` besides others as a completion item. Characters that /// make up identifiers don't need to be listed here. /// /// If code complete should automatically be trigger on characters not being /// valid inside an identifier (for example `.` in JavaScript) list them in /// `triggerCharacters`. final List? triggerCharacters; final bool? workDoneProgress; Map toJson() { var __result = {}; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } if (allCommitCharacters != null) { __result['allCommitCharacters'] = allCommitCharacters; } if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerCharacters'); try { final triggerCharacters = obj['triggerCharacters']; if (triggerCharacters != null && !((triggerCharacters is List && (triggerCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('allCommitCharacters'); try { final allCommitCharacters = obj['allCommitCharacters']; if (allCommitCharacters != null && !((allCommitCharacters is List && (allCommitCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionOptions'); return false; } } @override bool operator ==(Object other) { if (other is CompletionOptions && other.runtimeType == CompletionOptions) { return listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && listEqual(allCommitCharacters, other.allCommitCharacters, (String a, String b) => a == b) && resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(triggerCharacters), lspHashCode(allCommitCharacters), resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class CompletionParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(CompletionParams.canParse, CompletionParams.fromJson); CompletionParams( {this.context, required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static CompletionParams fromJson(Map json) { final contextJson = json['context']; final context = contextJson != null ? CompletionContext.fromJson(contextJson as Map) : null; final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return CompletionParams( context: context, textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// The completion context. This is only available if the client specifies to /// send this using the client capability `completion.contextSupport === true` final CompletionContext? context; /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; if (context != null) { __result['context'] = context?.toJson(); } __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('context'); try { final context = obj['context']; if (context != null && !(CompletionContext.canParse(context, reporter))) { reporter.reportError('must be of type CompletionContext'); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionParams'); return false; } } @override bool operator ==(Object other) { if (other is CompletionParams && other.runtimeType == CompletionParams) { return context == other.context && textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash( context, textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class CompletionRegistrationOptions implements TextDocumentRegistrationOptions, CompletionOptions, ToJsonable { static const jsonHandler = LspJsonHandler( CompletionRegistrationOptions.canParse, CompletionRegistrationOptions.fromJson); CompletionRegistrationOptions( {this.documentSelector, this.triggerCharacters, this.allCommitCharacters, this.resolveProvider, this.workDoneProgress}); static CompletionRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final triggerCharactersJson = json['triggerCharacters']; final triggerCharacters = (triggerCharactersJson as List?) ?.map((item) => item as String) .toList(); final allCommitCharactersJson = json['allCommitCharacters']; final allCommitCharacters = (allCommitCharactersJson as List?) ?.map((item) => item as String) .toList(); final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return CompletionRegistrationOptions( documentSelector: documentSelector, triggerCharacters: triggerCharacters, allCommitCharacters: allCommitCharacters, resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// The list of all possible characters that commit a completion. This field /// can be used if clients don't support individual commit characters per /// completion item. See client capability /// `completion.completionItem.commitCharactersSupport`. /// /// If a server provides both `allCommitCharacters` and commit characters on /// an individual completion item the ones on the completion item win. /// @since 3.2.0 final List? allCommitCharacters; /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The server provides support to resolve additional information for a /// completion item. final bool? resolveProvider; /// Most tools trigger completion request automatically without explicitly /// requesting it using a keyboard shortcut (e.g. Ctrl+Space). Typically they /// do so when the user starts to type an identifier. For example if the user /// types `c` in a JavaScript file code complete will automatically pop up /// present `console` besides others as a completion item. Characters that /// make up identifiers don't need to be listed here. /// /// If code complete should automatically be trigger on characters not being /// valid inside an identifier (for example `.` in JavaScript) list them in /// `triggerCharacters`. final List? triggerCharacters; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } if (allCommitCharacters != null) { __result['allCommitCharacters'] = allCommitCharacters; } if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('triggerCharacters'); try { final triggerCharacters = obj['triggerCharacters']; if (triggerCharacters != null && !((triggerCharacters is List && (triggerCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('allCommitCharacters'); try { final allCommitCharacters = obj['allCommitCharacters']; if (allCommitCharacters != null && !((allCommitCharacters is List && (allCommitCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CompletionRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is CompletionRegistrationOptions && other.runtimeType == CompletionRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && listEqual(allCommitCharacters, other.allCommitCharacters, (String a, String b) => a == b) && resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(documentSelector), lspHashCode(triggerCharacters), lspHashCode(allCommitCharacters), resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// How a completion was triggered class CompletionTriggerKind { const CompletionTriggerKind._(this._value); const CompletionTriggerKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { switch (obj) { case 1: case 2: case 3: return true; } return false; } /// Completion was triggered by typing an identifier (24x7 code complete), /// manual invocation (e.g Ctrl+Space) or via API. static const Invoked = CompletionTriggerKind._(1); /// Completion was triggered by a trigger character specified by the /// `triggerCharacters` properties of the `CompletionRegistrationOptions`. static const TriggerCharacter = CompletionTriggerKind._(2); /// Completion was re-triggered as the current completion list is incomplete. static const TriggerForIncompleteCompletions = CompletionTriggerKind._(3); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is CompletionTriggerKind && o._value == _value; } class ConfigurationItem implements ToJsonable { static const jsonHandler = LspJsonHandler(ConfigurationItem.canParse, ConfigurationItem.fromJson); ConfigurationItem({this.scopeUri, this.section}); static ConfigurationItem fromJson(Map json) { final scopeUriJson = json['scopeUri']; final scopeUri = scopeUriJson as String?; final sectionJson = json['section']; final section = sectionJson as String?; return ConfigurationItem(scopeUri: scopeUri, section: section); } /// The scope to get the configuration section for. final String? scopeUri; /// The configuration section asked for. final String? section; Map toJson() { var __result = {}; if (scopeUri != null) { __result['scopeUri'] = scopeUri; } if (section != null) { __result['section'] = section; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('scopeUri'); try { final scopeUri = obj['scopeUri']; if (scopeUri != null && !(scopeUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('section'); try { final section = obj['section']; if (section != null && !(section is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ConfigurationItem'); return false; } } @override bool operator ==(Object other) { if (other is ConfigurationItem && other.runtimeType == ConfigurationItem) { return scopeUri == other.scopeUri && section == other.section && true; } return false; } @override int get hashCode => Object.hash(scopeUri, section); @override String toString() => jsonEncoder.convert(toJson()); } class ConfigurationParams implements ToJsonable { static const jsonHandler = LspJsonHandler( ConfigurationParams.canParse, ConfigurationParams.fromJson); ConfigurationParams({required this.items}); static ConfigurationParams fromJson(Map json) { final itemsJson = json['items']; final items = (itemsJson as List) .map((item) => ConfigurationItem.fromJson(item as Map)) .toList(); return ConfigurationParams(items: items); } final List items; Map toJson() { var __result = {}; __result['items'] = items.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('items'); try { if (!obj.containsKey('items')) { reporter.reportError('must not be undefined'); return false; } final items = obj['items']; if (items == null) { reporter.reportError('must not be null'); return false; } if (!((items is List && (items.every( (item) => ConfigurationItem.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ConfigurationParams'); return false; } } @override bool operator ==(Object other) { if (other is ConfigurationParams && other.runtimeType == ConfigurationParams) { return listEqual(items, other.items, (ConfigurationItem a, ConfigurationItem b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(items); @override String toString() => jsonEncoder.convert(toJson()); } /// Create file operation class CreateFile implements ToJsonable { static const jsonHandler = LspJsonHandler(CreateFile.canParse, CreateFile.fromJson); CreateFile( {this.kind = 'create', required this.uri, this.options, this.annotationId}) { if (kind != 'create') { throw 'kind may only be the literal \'create\''; } } static CreateFile fromJson(Map json) { final kindJson = json['kind']; final kind = kindJson as String; final uriJson = json['uri']; final uri = uriJson as String; final optionsJson = json['options']; final options = optionsJson != null ? CreateFileOptions.fromJson(optionsJson as Map) : null; final annotationIdJson = json['annotationId']; final annotationId = annotationIdJson as String?; return CreateFile( kind: kind, uri: uri, options: options, annotationId: annotationId); } /// An optional annotation identifer describing the operation. /// @since 3.16.0 final String? annotationId; /// A create final String kind; /// Additional options final CreateFileOptions? options; /// The resource to create. final String uri; Map toJson() { var __result = {}; __result['kind'] = kind; __result['uri'] = uri; if (options != null) { __result['options'] = options?.toJson(); } if (annotationId != null) { __result['annotationId'] = annotationId; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(kind == 'create')) { reporter.reportError('must be the literal \'create\''); return false; } } finally { reporter.pop(); } reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { final options = obj['options']; if (options != null && !(CreateFileOptions.canParse(options, reporter))) { reporter.reportError('must be of type CreateFileOptions'); return false; } } finally { reporter.pop(); } reporter.push('annotationId'); try { final annotationId = obj['annotationId']; if (annotationId != null && !(annotationId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CreateFile'); return false; } } @override bool operator ==(Object other) { if (other is CreateFile && other.runtimeType == CreateFile) { return kind == other.kind && uri == other.uri && options == other.options && annotationId == other.annotationId && true; } return false; } @override int get hashCode => Object.hash(kind, uri, options, annotationId); @override String toString() => jsonEncoder.convert(toJson()); } /// Options to create a file. class CreateFileOptions implements ToJsonable { static const jsonHandler = LspJsonHandler(CreateFileOptions.canParse, CreateFileOptions.fromJson); CreateFileOptions({this.overwrite, this.ignoreIfExists}); static CreateFileOptions fromJson(Map json) { final overwriteJson = json['overwrite']; final overwrite = overwriteJson as bool?; final ignoreIfExistsJson = json['ignoreIfExists']; final ignoreIfExists = ignoreIfExistsJson as bool?; return CreateFileOptions( overwrite: overwrite, ignoreIfExists: ignoreIfExists); } /// Ignore if exists. final bool? ignoreIfExists; /// Overwrite existing file. Overwrite wins over `ignoreIfExists` final bool? overwrite; Map toJson() { var __result = {}; if (overwrite != null) { __result['overwrite'] = overwrite; } if (ignoreIfExists != null) { __result['ignoreIfExists'] = ignoreIfExists; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('overwrite'); try { final overwrite = obj['overwrite']; if (overwrite != null && !(overwrite is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('ignoreIfExists'); try { final ignoreIfExists = obj['ignoreIfExists']; if (ignoreIfExists != null && !(ignoreIfExists is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CreateFileOptions'); return false; } } @override bool operator ==(Object other) { if (other is CreateFileOptions && other.runtimeType == CreateFileOptions) { return overwrite == other.overwrite && ignoreIfExists == other.ignoreIfExists && true; } return false; } @override int get hashCode => Object.hash(overwrite, ignoreIfExists); @override String toString() => jsonEncoder.convert(toJson()); } /// The parameters sent in notifications/requests for user-initiated creation of /// files. /// @since 3.16.0 class CreateFilesParams implements ToJsonable { static const jsonHandler = LspJsonHandler(CreateFilesParams.canParse, CreateFilesParams.fromJson); CreateFilesParams({required this.files}); static CreateFilesParams fromJson(Map json) { final filesJson = json['files']; final files = (filesJson as List) .map((item) => FileCreate.fromJson(item as Map)) .toList(); return CreateFilesParams(files: files); } /// An array of all files/folders created in this operation. final List files; Map toJson() { var __result = {}; __result['files'] = files.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('files'); try { if (!obj.containsKey('files')) { reporter.reportError('must not be undefined'); return false; } final files = obj['files']; if (files == null) { reporter.reportError('must not be null'); return false; } if (!((files is List && (files.every((item) => FileCreate.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type CreateFilesParams'); return false; } } @override bool operator ==(Object other) { if (other is CreateFilesParams && other.runtimeType == CreateFilesParams) { return listEqual( files, other.files, (FileCreate a, FileCreate b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(files); @override String toString() => jsonEncoder.convert(toJson()); } class DeclarationClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DeclarationClientCapabilities.canParse, DeclarationClientCapabilities.fromJson); DeclarationClientCapabilities({this.dynamicRegistration, this.linkSupport}); static DeclarationClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final linkSupportJson = json['linkSupport']; final linkSupport = linkSupportJson as bool?; return DeclarationClientCapabilities( dynamicRegistration: dynamicRegistration, linkSupport: linkSupport); } /// Whether declaration supports dynamic registration. If this is set to /// `true` the client supports the new `DeclarationRegistrationOptions` return /// value for the corresponding server capability as well. final bool? dynamicRegistration; /// The client supports additional metadata in the form of declaration links. final bool? linkSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (linkSupport != null) { __result['linkSupport'] = linkSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('linkSupport'); try { final linkSupport = obj['linkSupport']; if (linkSupport != null && !(linkSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeclarationClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DeclarationClientCapabilities && other.runtimeType == DeclarationClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, linkSupport); @override String toString() => jsonEncoder.convert(toJson()); } class DeclarationOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(DeclarationOptions.canParse, DeclarationOptions.fromJson); DeclarationOptions({this.workDoneProgress}); static DeclarationOptions fromJson(Map json) { if (DeclarationRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DeclarationRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DeclarationOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeclarationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DeclarationOptions && other.runtimeType == DeclarationOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DeclarationParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(DeclarationParams.canParse, DeclarationParams.fromJson); DeclarationParams( {required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static DeclarationParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return DeclarationParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeclarationParams'); return false; } } @override bool operator ==(Object other) { if (other is DeclarationParams && other.runtimeType == DeclarationParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class DeclarationRegistrationOptions implements DeclarationOptions, TextDocumentRegistrationOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DeclarationRegistrationOptions.canParse, DeclarationRegistrationOptions.fromJson); DeclarationRegistrationOptions( {this.workDoneProgress, this.documentSelector, this.id}); static DeclarationRegistrationOptions fromJson(Map json) { final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final idJson = json['id']; final id = idJson as String?; return DeclarationRegistrationOptions( workDoneProgress: workDoneProgress, documentSelector: documentSelector, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } __result['documentSelector'] = documentSelector; if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeclarationRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DeclarationRegistrationOptions && other.runtimeType == DeclarationRegistrationOptions) { return workDoneProgress == other.workDoneProgress && listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && id == other.id && true; } return false; } @override int get hashCode => Object.hash(workDoneProgress, lspHashCode(documentSelector), id); @override String toString() => jsonEncoder.convert(toJson()); } class DefinitionClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DefinitionClientCapabilities.canParse, DefinitionClientCapabilities.fromJson); DefinitionClientCapabilities({this.dynamicRegistration, this.linkSupport}); static DefinitionClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final linkSupportJson = json['linkSupport']; final linkSupport = linkSupportJson as bool?; return DefinitionClientCapabilities( dynamicRegistration: dynamicRegistration, linkSupport: linkSupport); } /// Whether definition supports dynamic registration. final bool? dynamicRegistration; /// The client supports additional metadata in the form of definition links. /// @since 3.14.0 final bool? linkSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (linkSupport != null) { __result['linkSupport'] = linkSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('linkSupport'); try { final linkSupport = obj['linkSupport']; if (linkSupport != null && !(linkSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DefinitionClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DefinitionClientCapabilities && other.runtimeType == DefinitionClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, linkSupport); @override String toString() => jsonEncoder.convert(toJson()); } class DefinitionOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(DefinitionOptions.canParse, DefinitionOptions.fromJson); DefinitionOptions({this.workDoneProgress}); static DefinitionOptions fromJson(Map json) { if (DefinitionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DefinitionRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DefinitionOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DefinitionOptions'); return false; } } @override bool operator ==(Object other) { if (other is DefinitionOptions && other.runtimeType == DefinitionOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DefinitionParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(DefinitionParams.canParse, DefinitionParams.fromJson); DefinitionParams( {required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static DefinitionParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return DefinitionParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DefinitionParams'); return false; } } @override bool operator ==(Object other) { if (other is DefinitionParams && other.runtimeType == DefinitionParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class DefinitionRegistrationOptions implements TextDocumentRegistrationOptions, DefinitionOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DefinitionRegistrationOptions.canParse, DefinitionRegistrationOptions.fromJson); DefinitionRegistrationOptions({this.documentSelector, this.workDoneProgress}); static DefinitionRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DefinitionRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DefinitionRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DefinitionRegistrationOptions && other.runtimeType == DefinitionRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// Delete file operation class DeleteFile implements ToJsonable { static const jsonHandler = LspJsonHandler(DeleteFile.canParse, DeleteFile.fromJson); DeleteFile( {this.kind = 'delete', required this.uri, this.options, this.annotationId}) { if (kind != 'delete') { throw 'kind may only be the literal \'delete\''; } } static DeleteFile fromJson(Map json) { final kindJson = json['kind']; final kind = kindJson as String; final uriJson = json['uri']; final uri = uriJson as String; final optionsJson = json['options']; final options = optionsJson != null ? DeleteFileOptions.fromJson(optionsJson as Map) : null; final annotationIdJson = json['annotationId']; final annotationId = annotationIdJson as String?; return DeleteFile( kind: kind, uri: uri, options: options, annotationId: annotationId); } /// An optional annotation identifer describing the operation. /// @since 3.16.0 final String? annotationId; /// A delete final String kind; /// Delete options. final DeleteFileOptions? options; /// The file to delete. final String uri; Map toJson() { var __result = {}; __result['kind'] = kind; __result['uri'] = uri; if (options != null) { __result['options'] = options?.toJson(); } if (annotationId != null) { __result['annotationId'] = annotationId; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(kind == 'delete')) { reporter.reportError('must be the literal \'delete\''); return false; } } finally { reporter.pop(); } reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { final options = obj['options']; if (options != null && !(DeleteFileOptions.canParse(options, reporter))) { reporter.reportError('must be of type DeleteFileOptions'); return false; } } finally { reporter.pop(); } reporter.push('annotationId'); try { final annotationId = obj['annotationId']; if (annotationId != null && !(annotationId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeleteFile'); return false; } } @override bool operator ==(Object other) { if (other is DeleteFile && other.runtimeType == DeleteFile) { return kind == other.kind && uri == other.uri && options == other.options && annotationId == other.annotationId && true; } return false; } @override int get hashCode => Object.hash(kind, uri, options, annotationId); @override String toString() => jsonEncoder.convert(toJson()); } /// Delete file options class DeleteFileOptions implements ToJsonable { static const jsonHandler = LspJsonHandler(DeleteFileOptions.canParse, DeleteFileOptions.fromJson); DeleteFileOptions({this.recursive, this.ignoreIfNotExists}); static DeleteFileOptions fromJson(Map json) { final recursiveJson = json['recursive']; final recursive = recursiveJson as bool?; final ignoreIfNotExistsJson = json['ignoreIfNotExists']; final ignoreIfNotExists = ignoreIfNotExistsJson as bool?; return DeleteFileOptions( recursive: recursive, ignoreIfNotExists: ignoreIfNotExists); } /// Ignore the operation if the file doesn't exist. final bool? ignoreIfNotExists; /// Delete the content recursively if a folder is denoted. final bool? recursive; Map toJson() { var __result = {}; if (recursive != null) { __result['recursive'] = recursive; } if (ignoreIfNotExists != null) { __result['ignoreIfNotExists'] = ignoreIfNotExists; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('recursive'); try { final recursive = obj['recursive']; if (recursive != null && !(recursive is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('ignoreIfNotExists'); try { final ignoreIfNotExists = obj['ignoreIfNotExists']; if (ignoreIfNotExists != null && !(ignoreIfNotExists is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeleteFileOptions'); return false; } } @override bool operator ==(Object other) { if (other is DeleteFileOptions && other.runtimeType == DeleteFileOptions) { return recursive == other.recursive && ignoreIfNotExists == other.ignoreIfNotExists && true; } return false; } @override int get hashCode => Object.hash(recursive, ignoreIfNotExists); @override String toString() => jsonEncoder.convert(toJson()); } /// The parameters sent in notifications/requests for user-initiated deletes of /// files. /// @since 3.16.0 class DeleteFilesParams implements ToJsonable { static const jsonHandler = LspJsonHandler(DeleteFilesParams.canParse, DeleteFilesParams.fromJson); DeleteFilesParams({required this.files}); static DeleteFilesParams fromJson(Map json) { final filesJson = json['files']; final files = (filesJson as List) .map((item) => FileDelete.fromJson(item as Map)) .toList(); return DeleteFilesParams(files: files); } /// An array of all files/folders deleted in this operation. final List files; Map toJson() { var __result = {}; __result['files'] = files.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('files'); try { if (!obj.containsKey('files')) { reporter.reportError('must not be undefined'); return false; } final files = obj['files']; if (files == null) { reporter.reportError('must not be null'); return false; } if (!((files is List && (files.every((item) => FileDelete.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DeleteFilesParams'); return false; } } @override bool operator ==(Object other) { if (other is DeleteFilesParams && other.runtimeType == DeleteFilesParams) { return listEqual( files, other.files, (FileDelete a, FileDelete b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(files); @override String toString() => jsonEncoder.convert(toJson()); } class Diagnostic implements ToJsonable { static const jsonHandler = LspJsonHandler(Diagnostic.canParse, Diagnostic.fromJson); Diagnostic( {required this.range, this.severity, this.code, this.codeDescription, this.source, required this.message, this.tags, this.relatedInformation, this.data}); static Diagnostic fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final severityJson = json['severity']; final severity = severityJson != null ? DiagnosticSeverity.fromJson(severityJson as int) : null; final codeJson = json['code']; final code = codeJson as String?; final codeDescriptionJson = json['codeDescription']; final codeDescription = codeDescriptionJson != null ? CodeDescription.fromJson(codeDescriptionJson as Map) : null; final sourceJson = json['source']; final source = sourceJson as String?; final messageJson = json['message']; final message = messageJson as String; final tagsJson = json['tags']; final tags = (tagsJson as List?) ?.map((item) => DiagnosticTag.fromJson(item as int)) .toList(); final relatedInformationJson = json['relatedInformation']; final relatedInformation = (relatedInformationJson as List?) ?.map((item) => DiagnosticRelatedInformation.fromJson(item as Map)) .toList(); final dataJson = json['data']; final data = dataJson; return Diagnostic( range: range, severity: severity, code: code, codeDescription: codeDescription, source: source, message: message, tags: tags, relatedInformation: relatedInformation, data: data); } /// The diagnostic's code, which might appear in the user interface. final String? code; /// An optional property to describe the error code. /// @since 3.16.0 final CodeDescription? codeDescription; /// A data entry field that is preserved between a /// `textDocument/publishDiagnostics` notification and /// `textDocument/codeAction` request. /// @since 3.16.0 final Object? data; /// The diagnostic's message. final String message; /// The range at which the message applies. final Range range; /// An array of related diagnostic information, e.g. when symbol-names within /// a scope collide all definitions can be marked via this property. final List? relatedInformation; /// The diagnostic's severity. Can be omitted. If omitted it is up to the /// client to interpret diagnostics as error, warning, info or hint. final DiagnosticSeverity? severity; /// A human-readable string describing the source of this diagnostic, e.g. /// 'typescript' or 'super lint'. final String? source; /// Additional metadata about the diagnostic. /// @since 3.15.0 final List? tags; Map toJson() { var __result = {}; __result['range'] = range.toJson(); if (severity != null) { __result['severity'] = severity?.toJson(); } if (code != null) { __result['code'] = code; } if (codeDescription != null) { __result['codeDescription'] = codeDescription?.toJson(); } if (source != null) { __result['source'] = source; } __result['message'] = message; if (tags != null) { __result['tags'] = tags?.map((item) => item.toJson()).toList(); } if (relatedInformation != null) { __result['relatedInformation'] = relatedInformation?.map((item) => item.toJson()).toList(); } if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('severity'); try { final severity = obj['severity']; if (severity != null && !(DiagnosticSeverity.canParse(severity, reporter))) { reporter.reportError('must be of type DiagnosticSeverity'); return false; } } finally { reporter.pop(); } reporter.push('code'); try { final code = obj['code']; if (code != null && !(code is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('codeDescription'); try { final codeDescription = obj['codeDescription']; if (codeDescription != null && !(CodeDescription.canParse(codeDescription, reporter))) { reporter.reportError('must be of type CodeDescription'); return false; } } finally { reporter.pop(); } reporter.push('source'); try { final source = obj['source']; if (source != null && !(source is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('tags'); try { final tags = obj['tags']; if (tags != null && !((tags is List && (tags.every( (item) => DiagnosticTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('relatedInformation'); try { final relatedInformation = obj['relatedInformation']; if (relatedInformation != null && !((relatedInformation is List && (relatedInformation.every((item) => DiagnosticRelatedInformation.canParse(item, reporter)))))) { reporter.reportError( 'must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Diagnostic'); return false; } } @override bool operator ==(Object other) { if (other is Diagnostic && other.runtimeType == Diagnostic) { return range == other.range && severity == other.severity && code == other.code && codeDescription == other.codeDescription && source == other.source && message == other.message && listEqual( tags, other.tags, (DiagnosticTag a, DiagnosticTag b) => a == b) && listEqual( relatedInformation, other.relatedInformation, (DiagnosticRelatedInformation a, DiagnosticRelatedInformation b) => a == b) && data == other.data && true; } return false; } @override int get hashCode => Object.hash( range, severity, code, codeDescription, source, message, lspHashCode(tags), lspHashCode(relatedInformation), data); @override String toString() => jsonEncoder.convert(toJson()); } /// Represents a related message and source code location for a diagnostic. This /// should be used to point to code locations that cause or are related to a /// diagnostics, e.g when duplicating a symbol in a scope. class DiagnosticRelatedInformation implements ToJsonable { static const jsonHandler = LspJsonHandler( DiagnosticRelatedInformation.canParse, DiagnosticRelatedInformation.fromJson); DiagnosticRelatedInformation({required this.location, required this.message}); static DiagnosticRelatedInformation fromJson(Map json) { final locationJson = json['location']; final location = Location.fromJson(locationJson as Map); final messageJson = json['message']; final message = messageJson as String; return DiagnosticRelatedInformation(location: location, message: message); } /// The location of this related diagnostic information. final Location location; /// The message of this related diagnostic information. final String message; Map toJson() { var __result = {}; __result['location'] = location.toJson(); __result['message'] = message; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('location'); try { if (!obj.containsKey('location')) { reporter.reportError('must not be undefined'); return false; } final location = obj['location']; if (location == null) { reporter.reportError('must not be null'); return false; } if (!(Location.canParse(location, reporter))) { reporter.reportError('must be of type Location'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DiagnosticRelatedInformation'); return false; } } @override bool operator ==(Object other) { if (other is DiagnosticRelatedInformation && other.runtimeType == DiagnosticRelatedInformation) { return location == other.location && message == other.message && true; } return false; } @override int get hashCode => Object.hash(location, message); @override String toString() => jsonEncoder.convert(toJson()); } class DiagnosticSeverity { const DiagnosticSeverity(this._value); const DiagnosticSeverity.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Reports an error. static const Error = DiagnosticSeverity(1); /// Reports a warning. static const Warning = DiagnosticSeverity(2); /// Reports an information. static const Information = DiagnosticSeverity(3); /// Reports a hint. static const Hint = DiagnosticSeverity(4); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is DiagnosticSeverity && o._value == _value; } /// The diagnostic tags. /// @since 3.15.0 class DiagnosticTag { const DiagnosticTag(this._value); const DiagnosticTag.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Unused or unnecessary code. /// /// Clients are allowed to render diagnostics with this tag faded out instead /// of having an error squiggle. static const Unnecessary = DiagnosticTag(1); /// Deprecated or obsolete code. /// /// Clients are allowed to rendered diagnostics with this tag strike through. static const Deprecated = DiagnosticTag(2); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is DiagnosticTag && o._value == _value; } class DidChangeConfigurationClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeConfigurationClientCapabilities.canParse, DidChangeConfigurationClientCapabilities.fromJson); DidChangeConfigurationClientCapabilities({this.dynamicRegistration}); static DidChangeConfigurationClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DidChangeConfigurationClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Did change configuration notification supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError( 'must be of type DidChangeConfigurationClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeConfigurationClientCapabilities && other.runtimeType == DidChangeConfigurationClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeConfigurationParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeConfigurationParams.canParse, DidChangeConfigurationParams.fromJson); DidChangeConfigurationParams({this.settings}); static DidChangeConfigurationParams fromJson(Map json) { final settingsJson = json['settings']; final settings = settingsJson; return DidChangeConfigurationParams(settings: settings); } /// The actual changed settings final Object? settings; Map toJson() { var __result = {}; __result['settings'] = settings; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { return true; } else { reporter.reportError('must be of type DidChangeConfigurationParams'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeConfigurationParams && other.runtimeType == DidChangeConfigurationParams) { return settings == other.settings && true; } return false; } @override int get hashCode => settings.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeTextDocumentParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeTextDocumentParams.canParse, DidChangeTextDocumentParams.fromJson); DidChangeTextDocumentParams( {required this.textDocument, required this.contentChanges}); static DidChangeTextDocumentParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = VersionedTextDocumentIdentifier.fromJson( textDocumentJson as Map); final contentChangesJson = json['contentChanges']; final contentChanges = (contentChangesJson as List) .map((item) => TextDocumentContentChangeEvent1.canParse( item, nullLspJsonReporter) ? Either2.t1( TextDocumentContentChangeEvent1.fromJson( item as Map)) : (TextDocumentContentChangeEvent2.canParse(item, nullLspJsonReporter) ? Either2.t2( TextDocumentContentChangeEvent2.fromJson(item as Map)) : (throw '''$item was not one of (TextDocumentContentChangeEvent1, TextDocumentContentChangeEvent2)'''))) .toList(); return DidChangeTextDocumentParams( textDocument: textDocument, contentChanges: contentChanges); } /// The actual content changes. The content changes describe single state /// changes to the document. So if there are two content changes c1 (at array /// index 0) and c2 (at array index 1) for a document in state S then c1 moves /// the document from S to S' and c2 from S' to S''. So c1 is computed on the /// state S and c2 is computed on the state S'. /// /// To mirror the content of a document using change events use the following /// approach: /// - start with the same initial content /// - apply the 'textDocument/didChange' notifications in the order you /// receive them. /// - apply the `TextDocumentContentChangeEvent`s in a single notification /// in the order you receive them. final List< Either2> contentChanges; /// The document that did change. The version number points to the version /// after all provided content changes have been applied. final VersionedTextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['contentChanges'] = contentChanges; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(VersionedTextDocumentIdentifier.canParse( textDocument, reporter))) { reporter .reportError('must be of type VersionedTextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('contentChanges'); try { if (!obj.containsKey('contentChanges')) { reporter.reportError('must not be undefined'); return false; } final contentChanges = obj['contentChanges']; if (contentChanges == null) { reporter.reportError('must not be null'); return false; } if (!((contentChanges is List && (contentChanges.every((item) => (TextDocumentContentChangeEvent1.canParse(item, reporter) || TextDocumentContentChangeEvent2.canParse( item, reporter))))))) { reporter.reportError( 'must be of type List>'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DidChangeTextDocumentParams'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeTextDocumentParams && other.runtimeType == DidChangeTextDocumentParams) { return textDocument == other.textDocument && listEqual( contentChanges, other.contentChanges, (Either2 a, Either2 b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(textDocument, lspHashCode(contentChanges)); @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeWatchedFilesClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeWatchedFilesClientCapabilities.canParse, DidChangeWatchedFilesClientCapabilities.fromJson); DidChangeWatchedFilesClientCapabilities({this.dynamicRegistration}); static DidChangeWatchedFilesClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DidChangeWatchedFilesClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Did change watched files notification supports dynamic registration. /// Please note that the current protocol doesn't support static configuration /// for file changes from the server side. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError( 'must be of type DidChangeWatchedFilesClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeWatchedFilesClientCapabilities && other.runtimeType == DidChangeWatchedFilesClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeWatchedFilesParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeWatchedFilesParams.canParse, DidChangeWatchedFilesParams.fromJson); DidChangeWatchedFilesParams({required this.changes}); static DidChangeWatchedFilesParams fromJson(Map json) { final changesJson = json['changes']; final changes = (changesJson as List) .map((item) => FileEvent.fromJson(item as Map)) .toList(); return DidChangeWatchedFilesParams(changes: changes); } /// The actual file events. final List changes; Map toJson() { var __result = {}; __result['changes'] = changes.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('changes'); try { if (!obj.containsKey('changes')) { reporter.reportError('must not be undefined'); return false; } final changes = obj['changes']; if (changes == null) { reporter.reportError('must not be null'); return false; } if (!((changes is List && (changes.every((item) => FileEvent.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DidChangeWatchedFilesParams'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeWatchedFilesParams && other.runtimeType == DidChangeWatchedFilesParams) { return listEqual( changes, other.changes, (FileEvent a, FileEvent b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(changes); @override String toString() => jsonEncoder.convert(toJson()); } /// Describe options to be used when registering for file system change events. class DidChangeWatchedFilesRegistrationOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeWatchedFilesRegistrationOptions.canParse, DidChangeWatchedFilesRegistrationOptions.fromJson); DidChangeWatchedFilesRegistrationOptions({required this.watchers}); static DidChangeWatchedFilesRegistrationOptions fromJson( Map json) { final watchersJson = json['watchers']; final watchers = (watchersJson as List) .map((item) => FileSystemWatcher.fromJson(item as Map)) .toList(); return DidChangeWatchedFilesRegistrationOptions(watchers: watchers); } /// The watchers to register. final List watchers; Map toJson() { var __result = {}; __result['watchers'] = watchers.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('watchers'); try { if (!obj.containsKey('watchers')) { reporter.reportError('must not be undefined'); return false; } final watchers = obj['watchers']; if (watchers == null) { reporter.reportError('must not be null'); return false; } if (!((watchers is List && (watchers.every( (item) => FileSystemWatcher.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type DidChangeWatchedFilesRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeWatchedFilesRegistrationOptions && other.runtimeType == DidChangeWatchedFilesRegistrationOptions) { return listEqual(watchers, other.watchers, (FileSystemWatcher a, FileSystemWatcher b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(watchers); @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeWorkspaceFoldersParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidChangeWorkspaceFoldersParams.canParse, DidChangeWorkspaceFoldersParams.fromJson); DidChangeWorkspaceFoldersParams({required this.event}); static DidChangeWorkspaceFoldersParams fromJson(Map json) { final eventJson = json['event']; final event = WorkspaceFoldersChangeEvent.fromJson(eventJson as Map); return DidChangeWorkspaceFoldersParams(event: event); } /// The actual workspace folder change event. final WorkspaceFoldersChangeEvent event; Map toJson() { var __result = {}; __result['event'] = event.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('event'); try { if (!obj.containsKey('event')) { reporter.reportError('must not be undefined'); return false; } final event = obj['event']; if (event == null) { reporter.reportError('must not be null'); return false; } if (!(WorkspaceFoldersChangeEvent.canParse(event, reporter))) { reporter.reportError('must be of type WorkspaceFoldersChangeEvent'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DidChangeWorkspaceFoldersParams'); return false; } } @override bool operator ==(Object other) { if (other is DidChangeWorkspaceFoldersParams && other.runtimeType == DidChangeWorkspaceFoldersParams) { return event == other.event && true; } return false; } @override int get hashCode => event.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DidCloseTextDocumentParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidCloseTextDocumentParams.canParse, DidCloseTextDocumentParams.fromJson); DidCloseTextDocumentParams({required this.textDocument}); static DidCloseTextDocumentParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); return DidCloseTextDocumentParams(textDocument: textDocument); } /// The document that was closed. final TextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DidCloseTextDocumentParams'); return false; } } @override bool operator ==(Object other) { if (other is DidCloseTextDocumentParams && other.runtimeType == DidCloseTextDocumentParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode => textDocument.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DidOpenTextDocumentParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidOpenTextDocumentParams.canParse, DidOpenTextDocumentParams.fromJson); DidOpenTextDocumentParams({required this.textDocument}); static DidOpenTextDocumentParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentItem.fromJson(textDocumentJson as Map); return DidOpenTextDocumentParams(textDocument: textDocument); } /// The document that was opened. final TextDocumentItem textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentItem.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentItem'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DidOpenTextDocumentParams'); return false; } } @override bool operator ==(Object other) { if (other is DidOpenTextDocumentParams && other.runtimeType == DidOpenTextDocumentParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode => textDocument.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DidSaveTextDocumentParams implements ToJsonable { static const jsonHandler = LspJsonHandler( DidSaveTextDocumentParams.canParse, DidSaveTextDocumentParams.fromJson); DidSaveTextDocumentParams({required this.textDocument, this.text}); static DidSaveTextDocumentParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final textJson = json['text']; final text = textJson as String?; return DidSaveTextDocumentParams(textDocument: textDocument, text: text); } /// Optional the content when saved. Depends on the includeText value when the /// save notification was requested. final String? text; /// The document that was saved. final TextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (text != null) { __result['text'] = text; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('text'); try { final text = obj['text']; if (text != null && !(text is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DidSaveTextDocumentParams'); return false; } } @override bool operator ==(Object other) { if (other is DidSaveTextDocumentParams && other.runtimeType == DidSaveTextDocumentParams) { return textDocument == other.textDocument && text == other.text && true; } return false; } @override int get hashCode => Object.hash(textDocument, text); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentColorClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentColorClientCapabilities.canParse, DocumentColorClientCapabilities.fromJson); DocumentColorClientCapabilities({this.dynamicRegistration}); static DocumentColorClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DocumentColorClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether document color supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type DocumentColorClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentColorClientCapabilities && other.runtimeType == DocumentColorClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentColorOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentColorOptions.canParse, DocumentColorOptions.fromJson); DocumentColorOptions({this.workDoneProgress}); static DocumentColorOptions fromJson(Map json) { if (DocumentColorRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentColorRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentColorOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentColorOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentColorOptions && other.runtimeType == DocumentColorOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentColorParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentColorParams.canParse, DocumentColorParams.fromJson); DocumentColorParams( {required this.textDocument, this.workDoneToken, this.partialResultToken}); static DocumentColorParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return DocumentColorParams( textDocument: textDocument, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentColorParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentColorParams && other.runtimeType == DocumentColorParams) { return textDocument == other.textDocument && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentColorRegistrationOptions implements TextDocumentRegistrationOptions, StaticRegistrationOptions, DocumentColorOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentColorRegistrationOptions.canParse, DocumentColorRegistrationOptions.fromJson); DocumentColorRegistrationOptions( {this.documentSelector, this.id, this.workDoneProgress}); static DocumentColorRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final idJson = json['id']; final id = idJson as String?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentColorRegistrationOptions( documentSelector: documentSelector, id: id, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (id != null) { __result['id'] = id; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentColorRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentColorRegistrationOptions && other.runtimeType == DocumentColorRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && id == other.id && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), id, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFilter implements ToJsonable { static const jsonHandler = LspJsonHandler(DocumentFilter.canParse, DocumentFilter.fromJson); DocumentFilter({this.language, this.scheme, this.pattern}); static DocumentFilter fromJson(Map json) { final languageJson = json['language']; final language = languageJson as String?; final schemeJson = json['scheme']; final scheme = schemeJson as String?; final patternJson = json['pattern']; final pattern = patternJson as String?; return DocumentFilter(language: language, scheme: scheme, pattern: pattern); } /// A language id, like `typescript`. final String? language; /// A glob pattern, like `*.{ts,js}`. /// /// Glob patterns can have the following syntax: /// - `*` to match one or more characters in a path segment /// - `?` to match on one character in a path segment /// - `**` to match any number of path segments, including none /// - `{}` to group conditions (e.g. `**​/*.{ts,js}` matches all TypeScript /// and JavaScript files) /// - `[]` to declare a range of characters to match in a path segment /// (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) /// - `[!...]` to negate a range of characters to match in a path segment /// (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but /// not `example.0`) final String? pattern; /// A Uri [scheme](#Uri.scheme), like `file` or `untitled`. final String? scheme; Map toJson() { var __result = {}; if (language != null) { __result['language'] = language; } if (scheme != null) { __result['scheme'] = scheme; } if (pattern != null) { __result['pattern'] = pattern; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('language'); try { final language = obj['language']; if (language != null && !(language is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('scheme'); try { final scheme = obj['scheme']; if (scheme != null && !(scheme is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('pattern'); try { final pattern = obj['pattern']; if (pattern != null && !(pattern is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentFilter'); return false; } } @override bool operator ==(Object other) { if (other is DocumentFilter && other.runtimeType == DocumentFilter) { return language == other.language && scheme == other.scheme && pattern == other.pattern && true; } return false; } @override int get hashCode => Object.hash(language, scheme, pattern); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFormattingClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentFormattingClientCapabilities.canParse, DocumentFormattingClientCapabilities.fromJson); DocumentFormattingClientCapabilities({this.dynamicRegistration}); static DocumentFormattingClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DocumentFormattingClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether formatting supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter .reportError('must be of type DocumentFormattingClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentFormattingClientCapabilities && other.runtimeType == DocumentFormattingClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFormattingOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentFormattingOptions.canParse, DocumentFormattingOptions.fromJson); DocumentFormattingOptions({this.workDoneProgress}); static DocumentFormattingOptions fromJson(Map json) { if (DocumentFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentFormattingRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentFormattingOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentFormattingOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentFormattingOptions && other.runtimeType == DocumentFormattingOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFormattingParams implements WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentFormattingParams.canParse, DocumentFormattingParams.fromJson); DocumentFormattingParams( {required this.textDocument, required this.options, this.workDoneToken}); static DocumentFormattingParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final optionsJson = json['options']; final options = FormattingOptions.fromJson(optionsJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return DocumentFormattingParams( textDocument: textDocument, options: options, workDoneToken: workDoneToken); } /// The format options. final FormattingOptions options; /// The document to format. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['options'] = options.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { if (!obj.containsKey('options')) { reporter.reportError('must not be undefined'); return false; } final options = obj['options']; if (options == null) { reporter.reportError('must not be null'); return false; } if (!(FormattingOptions.canParse(options, reporter))) { reporter.reportError('must be of type FormattingOptions'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentFormattingParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentFormattingParams && other.runtimeType == DocumentFormattingParams) { return textDocument == other.textDocument && options == other.options && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, options, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFormattingRegistrationOptions implements TextDocumentRegistrationOptions, DocumentFormattingOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentFormattingRegistrationOptions.canParse, DocumentFormattingRegistrationOptions.fromJson); DocumentFormattingRegistrationOptions( {this.documentSelector, this.workDoneProgress}); static DocumentFormattingRegistrationOptions fromJson( Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentFormattingRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type DocumentFormattingRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentFormattingRegistrationOptions && other.runtimeType == DocumentFormattingRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// A document highlight is a range inside a text document which deserves /// special attention. Usually a document highlight is visualized by changing /// the background color of its range. class DocumentHighlight implements ToJsonable { static const jsonHandler = LspJsonHandler(DocumentHighlight.canParse, DocumentHighlight.fromJson); DocumentHighlight({required this.range, this.kind}); static DocumentHighlight fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final kindJson = json['kind']; final kind = kindJson != null ? DocumentHighlightKind.fromJson(kindJson as int) : null; return DocumentHighlight(range: range, kind: kind); } /// The highlight kind, default is DocumentHighlightKind.Text. final DocumentHighlightKind? kind; /// The range this highlight applies to. final Range range; Map toJson() { var __result = {}; __result['range'] = range.toJson(); if (kind != null) { __result['kind'] = kind?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { final kind = obj['kind']; if (kind != null && !(DocumentHighlightKind.canParse(kind, reporter))) { reporter.reportError('must be of type DocumentHighlightKind'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentHighlight'); return false; } } @override bool operator ==(Object other) { if (other is DocumentHighlight && other.runtimeType == DocumentHighlight) { return range == other.range && kind == other.kind && true; } return false; } @override int get hashCode => Object.hash(range, kind); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentHighlightClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentHighlightClientCapabilities.canParse, DocumentHighlightClientCapabilities.fromJson); DocumentHighlightClientCapabilities({this.dynamicRegistration}); static DocumentHighlightClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DocumentHighlightClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether document highlight supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter .reportError('must be of type DocumentHighlightClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentHighlightClientCapabilities && other.runtimeType == DocumentHighlightClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// A document highlight kind. class DocumentHighlightKind { const DocumentHighlightKind(this._value); const DocumentHighlightKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// A textual occurrence. static const Text = DocumentHighlightKind(1); /// Read-access of a symbol, like reading a variable. static const Read = DocumentHighlightKind(2); /// Write-access of a symbol, like writing to a variable. static const Write = DocumentHighlightKind(3); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is DocumentHighlightKind && o._value == _value; } class DocumentHighlightOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentHighlightOptions.canParse, DocumentHighlightOptions.fromJson); DocumentHighlightOptions({this.workDoneProgress}); static DocumentHighlightOptions fromJson(Map json) { if (DocumentHighlightRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentHighlightRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentHighlightOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentHighlightOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentHighlightOptions && other.runtimeType == DocumentHighlightOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentHighlightParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentHighlightParams.canParse, DocumentHighlightParams.fromJson); DocumentHighlightParams( {required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static DocumentHighlightParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return DocumentHighlightParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentHighlightParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentHighlightParams && other.runtimeType == DocumentHighlightParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentHighlightRegistrationOptions implements TextDocumentRegistrationOptions, DocumentHighlightOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentHighlightRegistrationOptions.canParse, DocumentHighlightRegistrationOptions.fromJson); DocumentHighlightRegistrationOptions( {this.documentSelector, this.workDoneProgress}); static DocumentHighlightRegistrationOptions fromJson( Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentHighlightRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type DocumentHighlightRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentHighlightRegistrationOptions && other.runtimeType == DocumentHighlightRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// A document link is a range in a text document that links to an internal or /// external resource, like another text document or a web site. class DocumentLink implements ToJsonable { static const jsonHandler = LspJsonHandler(DocumentLink.canParse, DocumentLink.fromJson); DocumentLink({required this.range, this.target, this.tooltip, this.data}); static DocumentLink fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final targetJson = json['target']; final target = targetJson as String?; final tooltipJson = json['tooltip']; final tooltip = tooltipJson as String?; final dataJson = json['data']; final data = dataJson; return DocumentLink( range: range, target: target, tooltip: tooltip, data: data); } /// A data entry field that is preserved on a document link between a /// DocumentLinkRequest and a DocumentLinkResolveRequest. final Object? data; /// The range this link applies to. final Range range; /// The uri this link points to. If missing a resolve request is sent later. final String? target; /// The tooltip text when you hover over this link. /// /// If a tooltip is provided, is will be displayed in a string that includes /// instructions on how to trigger the link, such as `{0} (ctrl + click)`. The /// specific instructions vary depending on OS, user settings, and /// localization. /// @since 3.15.0 final String? tooltip; Map toJson() { var __result = {}; __result['range'] = range.toJson(); if (target != null) { __result['target'] = target; } if (tooltip != null) { __result['tooltip'] = tooltip; } if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('target'); try { final target = obj['target']; if (target != null && !(target is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('tooltip'); try { final tooltip = obj['tooltip']; if (tooltip != null && !(tooltip is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentLink'); return false; } } @override bool operator ==(Object other) { if (other is DocumentLink && other.runtimeType == DocumentLink) { return range == other.range && target == other.target && tooltip == other.tooltip && data == other.data && true; } return false; } @override int get hashCode => Object.hash(range, target, tooltip, data); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentLinkClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentLinkClientCapabilities.canParse, DocumentLinkClientCapabilities.fromJson); DocumentLinkClientCapabilities( {this.dynamicRegistration, this.tooltipSupport}); static DocumentLinkClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final tooltipSupportJson = json['tooltipSupport']; final tooltipSupport = tooltipSupportJson as bool?; return DocumentLinkClientCapabilities( dynamicRegistration: dynamicRegistration, tooltipSupport: tooltipSupport); } /// Whether document link supports dynamic registration. final bool? dynamicRegistration; /// Whether the client supports the `tooltip` property on `DocumentLink`. /// @since 3.15.0 final bool? tooltipSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (tooltipSupport != null) { __result['tooltipSupport'] = tooltipSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('tooltipSupport'); try { final tooltipSupport = obj['tooltipSupport']; if (tooltipSupport != null && !(tooltipSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentLinkClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentLinkClientCapabilities && other.runtimeType == DocumentLinkClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && tooltipSupport == other.tooltipSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, tooltipSupport); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentLinkOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentLinkOptions.canParse, DocumentLinkOptions.fromJson); DocumentLinkOptions({this.resolveProvider, this.workDoneProgress}); static DocumentLinkOptions fromJson(Map json) { if (DocumentLinkRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentLinkRegistrationOptions.fromJson(json); } final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentLinkOptions( resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// Document links have a resolve provider as well. final bool? resolveProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentLinkOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentLinkOptions && other.runtimeType == DocumentLinkOptions) { return resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentLinkParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(DocumentLinkParams.canParse, DocumentLinkParams.fromJson); DocumentLinkParams( {required this.textDocument, this.workDoneToken, this.partialResultToken}); static DocumentLinkParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return DocumentLinkParams( textDocument: textDocument, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The document to provide document links for. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentLinkParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentLinkParams && other.runtimeType == DocumentLinkParams) { return textDocument == other.textDocument && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentLinkRegistrationOptions implements TextDocumentRegistrationOptions, DocumentLinkOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentLinkRegistrationOptions.canParse, DocumentLinkRegistrationOptions.fromJson); DocumentLinkRegistrationOptions( {this.documentSelector, this.resolveProvider, this.workDoneProgress}); static DocumentLinkRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final resolveProviderJson = json['resolveProvider']; final resolveProvider = resolveProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentLinkRegistrationOptions( documentSelector: documentSelector, resolveProvider: resolveProvider, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// Document links have a resolve provider as well. final bool? resolveProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { final resolveProvider = obj['resolveProvider']; if (resolveProvider != null && !(resolveProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentLinkRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentLinkRegistrationOptions && other.runtimeType == DocumentLinkRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && resolveProvider == other.resolveProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(documentSelector), resolveProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentOnTypeFormattingClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentOnTypeFormattingClientCapabilities.canParse, DocumentOnTypeFormattingClientCapabilities.fromJson); DocumentOnTypeFormattingClientCapabilities({this.dynamicRegistration}); static DocumentOnTypeFormattingClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DocumentOnTypeFormattingClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether on type formatting supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError( 'must be of type DocumentOnTypeFormattingClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentOnTypeFormattingClientCapabilities && other.runtimeType == DocumentOnTypeFormattingClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentOnTypeFormattingOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentOnTypeFormattingOptions.canParse, DocumentOnTypeFormattingOptions.fromJson); DocumentOnTypeFormattingOptions( {required this.firstTriggerCharacter, this.moreTriggerCharacter}); static DocumentOnTypeFormattingOptions fromJson(Map json) { if (DocumentOnTypeFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentOnTypeFormattingRegistrationOptions.fromJson(json); } final firstTriggerCharacterJson = json['firstTriggerCharacter']; final firstTriggerCharacter = firstTriggerCharacterJson as String; final moreTriggerCharacterJson = json['moreTriggerCharacter']; final moreTriggerCharacter = (moreTriggerCharacterJson as List?) ?.map((item) => item as String) .toList(); return DocumentOnTypeFormattingOptions( firstTriggerCharacter: firstTriggerCharacter, moreTriggerCharacter: moreTriggerCharacter); } /// A character on which formatting should be triggered, like `}`. final String firstTriggerCharacter; /// More trigger characters. final List? moreTriggerCharacter; Map toJson() { var __result = {}; __result['firstTriggerCharacter'] = firstTriggerCharacter; if (moreTriggerCharacter != null) { __result['moreTriggerCharacter'] = moreTriggerCharacter; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('firstTriggerCharacter'); try { if (!obj.containsKey('firstTriggerCharacter')) { reporter.reportError('must not be undefined'); return false; } final firstTriggerCharacter = obj['firstTriggerCharacter']; if (firstTriggerCharacter == null) { reporter.reportError('must not be null'); return false; } if (!(firstTriggerCharacter is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('moreTriggerCharacter'); try { final moreTriggerCharacter = obj['moreTriggerCharacter']; if (moreTriggerCharacter != null && !((moreTriggerCharacter is List && (moreTriggerCharacter.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentOnTypeFormattingOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentOnTypeFormattingOptions && other.runtimeType == DocumentOnTypeFormattingOptions) { return firstTriggerCharacter == other.firstTriggerCharacter && listEqual(moreTriggerCharacter, other.moreTriggerCharacter, (String a, String b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(firstTriggerCharacter, lspHashCode(moreTriggerCharacter)); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentOnTypeFormattingParams implements TextDocumentPositionParams, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentOnTypeFormattingParams.canParse, DocumentOnTypeFormattingParams.fromJson); DocumentOnTypeFormattingParams( {required this.ch, required this.options, required this.textDocument, required this.position}); static DocumentOnTypeFormattingParams fromJson(Map json) { final chJson = json['ch']; final ch = chJson as String; final optionsJson = json['options']; final options = FormattingOptions.fromJson(optionsJson as Map); final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); return DocumentOnTypeFormattingParams( ch: ch, options: options, textDocument: textDocument, position: position); } /// The character that has been typed. final String ch; /// The format options. final FormattingOptions options; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['ch'] = ch; __result['options'] = options.toJson(); __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('ch'); try { if (!obj.containsKey('ch')) { reporter.reportError('must not be undefined'); return false; } final ch = obj['ch']; if (ch == null) { reporter.reportError('must not be null'); return false; } if (!(ch is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { if (!obj.containsKey('options')) { reporter.reportError('must not be undefined'); return false; } final options = obj['options']; if (options == null) { reporter.reportError('must not be null'); return false; } if (!(FormattingOptions.canParse(options, reporter))) { reporter.reportError('must be of type FormattingOptions'); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentOnTypeFormattingParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentOnTypeFormattingParams && other.runtimeType == DocumentOnTypeFormattingParams) { return ch == other.ch && options == other.options && textDocument == other.textDocument && position == other.position && true; } return false; } @override int get hashCode => Object.hash(ch, options, textDocument, position); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentOnTypeFormattingRegistrationOptions implements TextDocumentRegistrationOptions, DocumentOnTypeFormattingOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentOnTypeFormattingRegistrationOptions.canParse, DocumentOnTypeFormattingRegistrationOptions.fromJson); DocumentOnTypeFormattingRegistrationOptions( {this.documentSelector, required this.firstTriggerCharacter, this.moreTriggerCharacter}); static DocumentOnTypeFormattingRegistrationOptions fromJson( Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final firstTriggerCharacterJson = json['firstTriggerCharacter']; final firstTriggerCharacter = firstTriggerCharacterJson as String; final moreTriggerCharacterJson = json['moreTriggerCharacter']; final moreTriggerCharacter = (moreTriggerCharacterJson as List?) ?.map((item) => item as String) .toList(); return DocumentOnTypeFormattingRegistrationOptions( documentSelector: documentSelector, firstTriggerCharacter: firstTriggerCharacter, moreTriggerCharacter: moreTriggerCharacter); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// A character on which formatting should be triggered, like `}`. final String firstTriggerCharacter; /// More trigger characters. final List? moreTriggerCharacter; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; __result['firstTriggerCharacter'] = firstTriggerCharacter; if (moreTriggerCharacter != null) { __result['moreTriggerCharacter'] = moreTriggerCharacter; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('firstTriggerCharacter'); try { if (!obj.containsKey('firstTriggerCharacter')) { reporter.reportError('must not be undefined'); return false; } final firstTriggerCharacter = obj['firstTriggerCharacter']; if (firstTriggerCharacter == null) { reporter.reportError('must not be null'); return false; } if (!(firstTriggerCharacter is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('moreTriggerCharacter'); try { final moreTriggerCharacter = obj['moreTriggerCharacter']; if (moreTriggerCharacter != null && !((moreTriggerCharacter is List && (moreTriggerCharacter.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type DocumentOnTypeFormattingRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentOnTypeFormattingRegistrationOptions && other.runtimeType == DocumentOnTypeFormattingRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && firstTriggerCharacter == other.firstTriggerCharacter && listEqual(moreTriggerCharacter, other.moreTriggerCharacter, (String a, String b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), firstTriggerCharacter, lspHashCode(moreTriggerCharacter)); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentRangeFormattingClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentRangeFormattingClientCapabilities.canParse, DocumentRangeFormattingClientCapabilities.fromJson); DocumentRangeFormattingClientCapabilities({this.dynamicRegistration}); static DocumentRangeFormattingClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return DocumentRangeFormattingClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether formatting supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError( 'must be of type DocumentRangeFormattingClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentRangeFormattingClientCapabilities && other.runtimeType == DocumentRangeFormattingClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentRangeFormattingOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentRangeFormattingOptions.canParse, DocumentRangeFormattingOptions.fromJson); DocumentRangeFormattingOptions({this.workDoneProgress}); static DocumentRangeFormattingOptions fromJson(Map json) { if (DocumentRangeFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentRangeFormattingRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentRangeFormattingOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentRangeFormattingOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentRangeFormattingOptions && other.runtimeType == DocumentRangeFormattingOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class DocumentRangeFormattingParams implements WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentRangeFormattingParams.canParse, DocumentRangeFormattingParams.fromJson); DocumentRangeFormattingParams( {required this.textDocument, required this.range, required this.options, this.workDoneToken}); static DocumentRangeFormattingParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final optionsJson = json['options']; final options = FormattingOptions.fromJson(optionsJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return DocumentRangeFormattingParams( textDocument: textDocument, range: range, options: options, workDoneToken: workDoneToken); } /// The format options final FormattingOptions options; /// The range to format final Range range; /// The document to format. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['range'] = range.toJson(); __result['options'] = options.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { if (!obj.containsKey('options')) { reporter.reportError('must not be undefined'); return false; } final options = obj['options']; if (options == null) { reporter.reportError('must not be null'); return false; } if (!(FormattingOptions.canParse(options, reporter))) { reporter.reportError('must be of type FormattingOptions'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentRangeFormattingParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentRangeFormattingParams && other.runtimeType == DocumentRangeFormattingParams) { return textDocument == other.textDocument && range == other.range && options == other.options && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, range, options, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentRangeFormattingRegistrationOptions implements TextDocumentRegistrationOptions, DocumentRangeFormattingOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentRangeFormattingRegistrationOptions.canParse, DocumentRangeFormattingRegistrationOptions.fromJson); DocumentRangeFormattingRegistrationOptions( {this.documentSelector, this.workDoneProgress}); static DocumentRangeFormattingRegistrationOptions fromJson( Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentRangeFormattingRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type DocumentRangeFormattingRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentRangeFormattingRegistrationOptions && other.runtimeType == DocumentRangeFormattingRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// Represents programming constructs like variables, classes, interfaces etc. /// that appear in a document. Document symbols can be hierarchical and they /// have two ranges: one that encloses its definition and one that points to its /// most interesting range, e.g. the range of an identifier. class DocumentSymbol implements ToJsonable { static const jsonHandler = LspJsonHandler(DocumentSymbol.canParse, DocumentSymbol.fromJson); DocumentSymbol( {required this.name, this.detail, required this.kind, this.tags, this.deprecated, required this.range, required this.selectionRange, this.children}); static DocumentSymbol fromJson(Map json) { final nameJson = json['name']; final name = nameJson as String; final detailJson = json['detail']; final detail = detailJson as String?; final kindJson = json['kind']; final kind = SymbolKind.fromJson(kindJson as int); final tagsJson = json['tags']; final tags = (tagsJson as List?) ?.map((item) => SymbolTag.fromJson(item as int)) .toList(); final deprecatedJson = json['deprecated']; final deprecated = deprecatedJson as bool?; final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final selectionRangeJson = json['selectionRange']; final selectionRange = Range.fromJson(selectionRangeJson as Map); final childrenJson = json['children']; final children = (childrenJson as List?) ?.map((item) => DocumentSymbol.fromJson(item as Map)) .toList(); return DocumentSymbol( name: name, detail: detail, kind: kind, tags: tags, deprecated: deprecated, range: range, selectionRange: selectionRange, children: children); } /// Children of this symbol, e.g. properties of a class. final List? children; /// Indicates if this symbol is deprecated. /// @deprecated Use tags instead final bool? deprecated; /// More detail for this symbol, e.g the signature of a function. final String? detail; /// The kind of this symbol. final SymbolKind kind; /// The name of this symbol. Will be displayed in the user interface and /// therefore must not be an empty string or a string only consisting of white /// spaces. final String name; /// The range enclosing this symbol not including leading/trailing whitespace /// but everything else like comments. This information is typically used to /// determine if the clients cursor is inside the symbol to reveal in the /// symbol in the UI. final Range range; /// The range that should be selected and revealed when this symbol is being /// picked, e.g. the name of a function. Must be contained by the `range`. final Range selectionRange; /// Tags for this document symbol. /// @since 3.16.0 final List? tags; Map toJson() { var __result = {}; __result['name'] = name; if (detail != null) { __result['detail'] = detail; } __result['kind'] = kind.toJson(); if (tags != null) { __result['tags'] = tags?.map((item) => item.toJson()).toList(); } if (deprecated != null) { __result['deprecated'] = deprecated; } __result['range'] = range.toJson(); __result['selectionRange'] = selectionRange.toJson(); if (children != null) { __result['children'] = children?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('name'); try { if (!obj.containsKey('name')) { reporter.reportError('must not be undefined'); return false; } final name = obj['name']; if (name == null) { reporter.reportError('must not be null'); return false; } if (!(name is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('detail'); try { final detail = obj['detail']; if (detail != null && !(detail is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(SymbolKind.canParse(kind, reporter))) { reporter.reportError('must be of type SymbolKind'); return false; } } finally { reporter.pop(); } reporter.push('tags'); try { final tags = obj['tags']; if (tags != null && !((tags is List && (tags.every((item) => SymbolTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('deprecated'); try { final deprecated = obj['deprecated']; if (deprecated != null && !(deprecated is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('selectionRange'); try { if (!obj.containsKey('selectionRange')) { reporter.reportError('must not be undefined'); return false; } final selectionRange = obj['selectionRange']; if (selectionRange == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(selectionRange, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('children'); try { final children = obj['children']; if (children != null && !((children is List && (children.every( (item) => DocumentSymbol.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentSymbol'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbol && other.runtimeType == DocumentSymbol) { return name == other.name && detail == other.detail && kind == other.kind && listEqual(tags, other.tags, (SymbolTag a, SymbolTag b) => a == b) && deprecated == other.deprecated && range == other.range && selectionRange == other.selectionRange && listEqual(children, other.children, (DocumentSymbol a, DocumentSymbol b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(name, detail, kind, lspHashCode(tags), deprecated, range, selectionRange, lspHashCode(children)); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentSymbolClientCapabilities.canParse, DocumentSymbolClientCapabilities.fromJson); DocumentSymbolClientCapabilities( {this.dynamicRegistration, this.symbolKind, this.hierarchicalDocumentSymbolSupport, this.tagSupport, this.labelSupport}); static DocumentSymbolClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final symbolKindJson = json['symbolKind']; final symbolKind = symbolKindJson != null ? DocumentSymbolClientCapabilitiesSymbolKind.fromJson( symbolKindJson as Map) : null; final hierarchicalDocumentSymbolSupportJson = json['hierarchicalDocumentSymbolSupport']; final hierarchicalDocumentSymbolSupport = hierarchicalDocumentSymbolSupportJson as bool?; final tagSupportJson = json['tagSupport']; final tagSupport = tagSupportJson != null ? DocumentSymbolClientCapabilitiesTagSupport.fromJson( tagSupportJson as Map) : null; final labelSupportJson = json['labelSupport']; final labelSupport = labelSupportJson as bool?; return DocumentSymbolClientCapabilities( dynamicRegistration: dynamicRegistration, symbolKind: symbolKind, hierarchicalDocumentSymbolSupport: hierarchicalDocumentSymbolSupport, tagSupport: tagSupport, labelSupport: labelSupport); } /// Whether document symbol supports dynamic registration. final bool? dynamicRegistration; /// The client supports hierarchical document symbols. final bool? hierarchicalDocumentSymbolSupport; /// The client supports an additional label presented in the UI when /// registering a document symbol provider. /// @since 3.16.0 final bool? labelSupport; /// Specific capabilities for the `SymbolKind` in the /// `textDocument/documentSymbol` request. final DocumentSymbolClientCapabilitiesSymbolKind? symbolKind; /// The client supports tags on `SymbolInformation`. Tags are supported on /// `DocumentSymbol` if `hierarchicalDocumentSymbolSupport` is set to true. /// Clients supporting tags have to handle unknown tags gracefully. /// @since 3.16.0 final DocumentSymbolClientCapabilitiesTagSupport? tagSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (symbolKind != null) { __result['symbolKind'] = symbolKind?.toJson(); } if (hierarchicalDocumentSymbolSupport != null) { __result['hierarchicalDocumentSymbolSupport'] = hierarchicalDocumentSymbolSupport; } if (tagSupport != null) { __result['tagSupport'] = tagSupport?.toJson(); } if (labelSupport != null) { __result['labelSupport'] = labelSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('symbolKind'); try { final symbolKind = obj['symbolKind']; if (symbolKind != null && !(DocumentSymbolClientCapabilitiesSymbolKind.canParse( symbolKind, reporter))) { reporter.reportError( 'must be of type DocumentSymbolClientCapabilitiesSymbolKind'); return false; } } finally { reporter.pop(); } reporter.push('hierarchicalDocumentSymbolSupport'); try { final hierarchicalDocumentSymbolSupport = obj['hierarchicalDocumentSymbolSupport']; if (hierarchicalDocumentSymbolSupport != null && !(hierarchicalDocumentSymbolSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('tagSupport'); try { final tagSupport = obj['tagSupport']; if (tagSupport != null && !(DocumentSymbolClientCapabilitiesTagSupport.canParse( tagSupport, reporter))) { reporter.reportError( 'must be of type DocumentSymbolClientCapabilitiesTagSupport'); return false; } } finally { reporter.pop(); } reporter.push('labelSupport'); try { final labelSupport = obj['labelSupport']; if (labelSupport != null && !(labelSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentSymbolClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbolClientCapabilities && other.runtimeType == DocumentSymbolClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && symbolKind == other.symbolKind && hierarchicalDocumentSymbolSupport == other.hierarchicalDocumentSymbolSupport && tagSupport == other.tagSupport && labelSupport == other.labelSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, symbolKind, hierarchicalDocumentSymbolSupport, tagSupport, labelSupport); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolClientCapabilitiesSymbolKind implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentSymbolClientCapabilitiesSymbolKind.canParse, DocumentSymbolClientCapabilitiesSymbolKind.fromJson); DocumentSymbolClientCapabilitiesSymbolKind({this.valueSet}); static DocumentSymbolClientCapabilitiesSymbolKind fromJson( Map json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List?) ?.map((item) => SymbolKind.fromJson(item as int)) .toList(); return DocumentSymbolClientCapabilitiesSymbolKind(valueSet: valueSet); } /// The symbol 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. /// /// If this property is not present the client only supports the symbol kinds /// from `File` to `Array` as defined in the initial version of the protocol. final List? valueSet; Map toJson() { var __result = {}; if (valueSet != null) { __result['valueSet'] = valueSet?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('valueSet'); try { final valueSet = obj['valueSet']; if (valueSet != null && !((valueSet is List && (valueSet .every((item) => SymbolKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type DocumentSymbolClientCapabilitiesSymbolKind'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbolClientCapabilitiesSymbolKind && other.runtimeType == DocumentSymbolClientCapabilitiesSymbolKind) { return listEqual(valueSet, other.valueSet, (SymbolKind a, SymbolKind b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(valueSet); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolClientCapabilitiesTagSupport implements ToJsonable { static const jsonHandler = LspJsonHandler( DocumentSymbolClientCapabilitiesTagSupport.canParse, DocumentSymbolClientCapabilitiesTagSupport.fromJson); DocumentSymbolClientCapabilitiesTagSupport({required this.valueSet}); static DocumentSymbolClientCapabilitiesTagSupport fromJson( Map json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List) .map((item) => SymbolTag.fromJson(item as int)) .toList(); return DocumentSymbolClientCapabilitiesTagSupport(valueSet: valueSet); } /// The tags supported by the client. final List valueSet; Map toJson() { var __result = {}; __result['valueSet'] = valueSet.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (valueSet.every((item) => SymbolTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type DocumentSymbolClientCapabilitiesTagSupport'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbolClientCapabilitiesTagSupport && other.runtimeType == DocumentSymbolClientCapabilitiesTagSupport) { return listEqual( valueSet, other.valueSet, (SymbolTag a, SymbolTag b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(valueSet); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentSymbolOptions.canParse, DocumentSymbolOptions.fromJson); DocumentSymbolOptions({this.label, this.workDoneProgress}); static DocumentSymbolOptions fromJson(Map json) { if (DocumentSymbolRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentSymbolRegistrationOptions.fromJson(json); } final labelJson = json['label']; final label = labelJson as String?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentSymbolOptions( label: label, workDoneProgress: workDoneProgress); } /// A human-readable string that is shown when multiple outlines trees are /// shown for the same document. /// @since 3.16.0 final String? label; final bool? workDoneProgress; Map toJson() { var __result = {}; if (label != null) { __result['label'] = label; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { final label = obj['label']; if (label != null && !(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentSymbolOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbolOptions && other.runtimeType == DocumentSymbolOptions) { return label == other.label && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(label, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentSymbolParams.canParse, DocumentSymbolParams.fromJson); DocumentSymbolParams( {required this.textDocument, this.workDoneToken, this.partialResultToken}); static DocumentSymbolParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return DocumentSymbolParams( textDocument: textDocument, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentSymbolParams'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbolParams && other.runtimeType == DocumentSymbolParams) { return textDocument == other.textDocument && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolRegistrationOptions implements TextDocumentRegistrationOptions, DocumentSymbolOptions, ToJsonable { static const jsonHandler = LspJsonHandler( DocumentSymbolRegistrationOptions.canParse, DocumentSymbolRegistrationOptions.fromJson); DocumentSymbolRegistrationOptions( {this.documentSelector, this.label, this.workDoneProgress}); static DocumentSymbolRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final labelJson = json['label']; final label = labelJson as String?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return DocumentSymbolRegistrationOptions( documentSelector: documentSelector, label: label, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// A human-readable string that is shown when multiple outlines trees are /// shown for the same document. /// @since 3.16.0 final String? label; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (label != null) { __result['label'] = label; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('label'); try { final label = obj['label']; if (label != null && !(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type DocumentSymbolRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is DocumentSymbolRegistrationOptions && other.runtimeType == DocumentSymbolRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && label == other.label && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), label, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class ErrorCodes { const ErrorCodes(this._value); const ErrorCodes.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Defined by JSON RPC static const ParseError = ErrorCodes(-32700); static const InvalidRequest = ErrorCodes(-32600); static const MethodNotFound = ErrorCodes(-32601); static const InvalidParams = ErrorCodes(-32602); static const InternalError = ErrorCodes(-32603); /// 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. /// @since 3.16.0 static const jsonrpcReservedErrorRangeStart = ErrorCodes(-32099); static const ServerNotInitialized = ErrorCodes(-32002); static const UnknownErrorCode = ErrorCodes(-32001); /// This is the start range of JSON RPC reserved error codes. It doesn't /// denote a real error code. static const jsonrpcReservedErrorRangeEnd = ErrorCodes(-32000); /// This is the start range of LSP reserved error codes. It doesn't denote a /// real error code. /// @since 3.16.0 static const lspReservedErrorRangeStart = ErrorCodes(-32899); static const ContentModified = ErrorCodes(-32801); static const RequestCancelled = ErrorCodes(-32800); /// This is the end range of LSP reserved error codes. It doesn't denote a /// real error code. /// @since 3.16.0 static const lspReservedErrorRangeEnd = ErrorCodes(-32800); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is ErrorCodes && o._value == _value; } class ExecuteCommandClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( ExecuteCommandClientCapabilities.canParse, ExecuteCommandClientCapabilities.fromJson); ExecuteCommandClientCapabilities({this.dynamicRegistration}); static ExecuteCommandClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return ExecuteCommandClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Execute command supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type ExecuteCommandClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ExecuteCommandClientCapabilities && other.runtimeType == ExecuteCommandClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ExecuteCommandOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( ExecuteCommandOptions.canParse, ExecuteCommandOptions.fromJson); ExecuteCommandOptions({required this.commands, this.workDoneProgress}); static ExecuteCommandOptions fromJson(Map json) { if (ExecuteCommandRegistrationOptions.canParse(json, nullLspJsonReporter)) { return ExecuteCommandRegistrationOptions.fromJson(json); } final commandsJson = json['commands']; final commands = (commandsJson as List).map((item) => item as String).toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return ExecuteCommandOptions( commands: commands, workDoneProgress: workDoneProgress); } /// The commands to be executed on the server final List commands; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['commands'] = commands; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('commands'); try { if (!obj.containsKey('commands')) { reporter.reportError('must not be undefined'); return false; } final commands = obj['commands']; if (commands == null) { reporter.reportError('must not be null'); return false; } if (!((commands is List && (commands.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ExecuteCommandOptions'); return false; } } @override bool operator ==(Object other) { if (other is ExecuteCommandOptions && other.runtimeType == ExecuteCommandOptions) { return listEqual( commands, other.commands, (String a, String b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(commands), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class ExecuteCommandParams implements WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler( ExecuteCommandParams.canParse, ExecuteCommandParams.fromJson); ExecuteCommandParams( {required this.command, this.arguments, this.workDoneToken}); static ExecuteCommandParams fromJson(Map json) { final commandJson = json['command']; final command = commandJson as String; final argumentsJson = json['arguments']; final arguments = (argumentsJson as List?)?.map((item) => item).toList(); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return ExecuteCommandParams( command: command, arguments: arguments, workDoneToken: workDoneToken); } /// Arguments that the command should be invoked with. final List? arguments; /// The identifier of the actual command handler. final String command; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['command'] = command; if (arguments != null) { __result['arguments'] = arguments; } if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('command'); try { if (!obj.containsKey('command')) { reporter.reportError('must not be undefined'); return false; } final command = obj['command']; if (command == null) { reporter.reportError('must not be null'); return false; } if (!(command is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('arguments'); try { final arguments = obj['arguments']; if (arguments != null && !((arguments is List && (arguments.every((item) => true))))) { reporter.reportError('must be of type List'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ExecuteCommandParams'); return false; } } @override bool operator ==(Object other) { if (other is ExecuteCommandParams && other.runtimeType == ExecuteCommandParams) { return command == other.command && listEqual( arguments, other.arguments, (Object? a, Object? b) => a == b) && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(command, lspHashCode(arguments), workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } /// Execute command registration options. class ExecuteCommandRegistrationOptions implements ExecuteCommandOptions, ToJsonable { static const jsonHandler = LspJsonHandler( ExecuteCommandRegistrationOptions.canParse, ExecuteCommandRegistrationOptions.fromJson); ExecuteCommandRegistrationOptions( {required this.commands, this.workDoneProgress}); static ExecuteCommandRegistrationOptions fromJson(Map json) { final commandsJson = json['commands']; final commands = (commandsJson as List).map((item) => item as String).toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return ExecuteCommandRegistrationOptions( commands: commands, workDoneProgress: workDoneProgress); } /// The commands to be executed on the server final List commands; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['commands'] = commands; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('commands'); try { if (!obj.containsKey('commands')) { reporter.reportError('must not be undefined'); return false; } final commands = obj['commands']; if (commands == null) { reporter.reportError('must not be null'); return false; } if (!((commands is List && (commands.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ExecuteCommandRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is ExecuteCommandRegistrationOptions && other.runtimeType == ExecuteCommandRegistrationOptions) { return listEqual( commands, other.commands, (String a, String b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(commands), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class FailureHandlingKind { const FailureHandlingKind._(this._value); const FailureHandlingKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { switch (obj) { case 'abort': case 'transactional': case 'textOnlyTransactional': case 'undo': return true; } return false; } /// Applying the workspace change is simply aborted if one of the changes /// provided fails. All operations executed before the failing operation stay /// executed. static const Abort = FailureHandlingKind._('abort'); /// All operations are executed transactional. That means they either all /// succeed or no changes at all are applied to the workspace. static const Transactional = FailureHandlingKind._('transactional'); /// If the workspace edit contains only textual file changes they are executed /// transactional. If resource changes (create, rename or delete file) are /// part of the change the failure handling strategy is abort. static const TextOnlyTransactional = FailureHandlingKind._('textOnlyTransactional'); /// The client tries to undo the operations already executed. But there is no /// guarantee that this is succeeding. static const Undo = FailureHandlingKind._('undo'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is FailureHandlingKind && o._value == _value; } /// The file event type. class FileChangeType { const FileChangeType(this._value); const FileChangeType.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// The file got created. static const Created = FileChangeType(1); /// The file got changed. static const Changed = FileChangeType(2); /// The file got deleted. static const Deleted = FileChangeType(3); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is FileChangeType && o._value == _value; } /// Represents information on a file/folder create. /// @since 3.16.0 class FileCreate implements ToJsonable { static const jsonHandler = LspJsonHandler(FileCreate.canParse, FileCreate.fromJson); FileCreate({required this.uri}); static FileCreate fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; return FileCreate(uri: uri); } /// A file:// URI for the location of the file/folder being created. final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileCreate'); return false; } } @override bool operator ==(Object other) { if (other is FileCreate && other.runtimeType == FileCreate) { return uri == other.uri && true; } return false; } @override int get hashCode => uri.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// Represents information on a file/folder delete. /// @since 3.16.0 class FileDelete implements ToJsonable { static const jsonHandler = LspJsonHandler(FileDelete.canParse, FileDelete.fromJson); FileDelete({required this.uri}); static FileDelete fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; return FileDelete(uri: uri); } /// A file:// URI for the location of the file/folder being deleted. final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileDelete'); return false; } } @override bool operator ==(Object other) { if (other is FileDelete && other.runtimeType == FileDelete) { return uri == other.uri && true; } return false; } @override int get hashCode => uri.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// An event describing a file change. class FileEvent implements ToJsonable { static const jsonHandler = LspJsonHandler(FileEvent.canParse, FileEvent.fromJson); FileEvent({required this.uri, required this.type}); static FileEvent fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; final typeJson = json['type']; final type = typeJson as int; return FileEvent(uri: uri, type: type); } /// The change type. final int type; /// The file's URI. final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; __result['type'] = type; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('type'); try { if (!obj.containsKey('type')) { reporter.reportError('must not be undefined'); return false; } final type = obj['type']; if (type == null) { reporter.reportError('must not be null'); return false; } if (!(type is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileEvent'); return false; } } @override bool operator ==(Object other) { if (other is FileEvent && other.runtimeType == FileEvent) { return uri == other.uri && type == other.type && true; } return false; } @override int get hashCode => Object.hash(uri, type); @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 class FileOperationFilter implements ToJsonable { static const jsonHandler = LspJsonHandler( FileOperationFilter.canParse, FileOperationFilter.fromJson); FileOperationFilter({this.scheme, required this.pattern}); static FileOperationFilter fromJson(Map json) { final schemeJson = json['scheme']; final scheme = schemeJson as String?; final patternJson = json['pattern']; final pattern = FileOperationPattern.fromJson(patternJson as Map); return FileOperationFilter(scheme: scheme, pattern: pattern); } /// The actual file operation pattern. final FileOperationPattern pattern; /// A Uri like `file` or `untitled`. final String? scheme; Map toJson() { var __result = {}; if (scheme != null) { __result['scheme'] = scheme; } __result['pattern'] = pattern.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('scheme'); try { final scheme = obj['scheme']; if (scheme != null && !(scheme is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('pattern'); try { if (!obj.containsKey('pattern')) { reporter.reportError('must not be undefined'); return false; } final pattern = obj['pattern']; if (pattern == null) { reporter.reportError('must not be null'); return false; } if (!(FileOperationPattern.canParse(pattern, reporter))) { reporter.reportError('must be of type FileOperationPattern'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileOperationFilter'); return false; } } @override bool operator ==(Object other) { if (other is FileOperationFilter && other.runtimeType == FileOperationFilter) { return scheme == other.scheme && pattern == other.pattern && true; } return false; } @override int get hashCode => Object.hash(scheme, pattern); @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 class FileOperationPattern implements ToJsonable { static const jsonHandler = LspJsonHandler( FileOperationPattern.canParse, FileOperationPattern.fromJson); FileOperationPattern({required this.glob, this.matches, this.options}); static FileOperationPattern fromJson(Map json) { final globJson = json['glob']; final glob = globJson as String; final matchesJson = json['matches']; final matches = matchesJson != null ? FileOperationPatternKind.fromJson(matchesJson as String) : null; final optionsJson = json['options']; final options = optionsJson != null ? FileOperationPatternOptions.fromJson( optionsJson as Map) : null; return FileOperationPattern(glob: glob, matches: matches, options: options); } /// The glob pattern to match. Glob patterns can have the following syntax: /// - `*` to match one or more characters in a path segment /// - `?` to match on one character in a path segment /// - `**` to match any number of path segments, including none /// - `{}` to group conditions (e.g. `**​/*.{ts,js}` matches all TypeScript /// and JavaScript files) /// - `[]` to declare a range of characters to match in a path segment /// (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) /// - `[!...]` to negate a range of characters to match in a path segment /// (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but /// not `example.0`) final String glob; /// Whether to match files or folders with this pattern. /// /// Matches both if undefined. final FileOperationPatternKind? matches; /// Additional options used during matching. final FileOperationPatternOptions? options; Map toJson() { var __result = {}; __result['glob'] = glob; if (matches != null) { __result['matches'] = matches?.toJson(); } if (options != null) { __result['options'] = options?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('glob'); try { if (!obj.containsKey('glob')) { reporter.reportError('must not be undefined'); return false; } final glob = obj['glob']; if (glob == null) { reporter.reportError('must not be null'); return false; } if (!(glob is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('matches'); try { final matches = obj['matches']; if (matches != null && !(FileOperationPatternKind.canParse(matches, reporter))) { reporter.reportError('must be of type FileOperationPatternKind'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { final options = obj['options']; if (options != null && !(FileOperationPatternOptions.canParse(options, reporter))) { reporter.reportError('must be of type FileOperationPatternOptions'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileOperationPattern'); return false; } } @override bool operator ==(Object other) { if (other is FileOperationPattern && other.runtimeType == FileOperationPattern) { return glob == other.glob && matches == other.matches && options == other.options && true; } return false; } @override int get hashCode => Object.hash(glob, matches, options); @override String toString() => jsonEncoder.convert(toJson()); } /// A pattern kind describing if a glob pattern matches a file a folder or both. /// @since 3.16.0 class FileOperationPatternKind { const FileOperationPatternKind(this._value); const FileOperationPatternKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } /// The pattern matches a file only. static const file = FileOperationPatternKind('file'); /// The pattern matches a folder only. static const folder = FileOperationPatternKind('folder'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is FileOperationPatternKind && o._value == _value; } /// Matching options for the file operation pattern. /// @since 3.16.0 class FileOperationPatternOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( FileOperationPatternOptions.canParse, FileOperationPatternOptions.fromJson); FileOperationPatternOptions({this.ignoreCase}); static FileOperationPatternOptions fromJson(Map json) { final ignoreCaseJson = json['ignoreCase']; final ignoreCase = ignoreCaseJson as bool?; return FileOperationPatternOptions(ignoreCase: ignoreCase); } /// The pattern should be matched ignoring casing. final bool? ignoreCase; Map toJson() { var __result = {}; if (ignoreCase != null) { __result['ignoreCase'] = ignoreCase; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('ignoreCase'); try { final ignoreCase = obj['ignoreCase']; if (ignoreCase != null && !(ignoreCase is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileOperationPatternOptions'); return false; } } @override bool operator ==(Object other) { if (other is FileOperationPatternOptions && other.runtimeType == FileOperationPatternOptions) { return ignoreCase == other.ignoreCase && true; } return false; } @override int get hashCode => ignoreCase.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// The options to register for file operations. /// @since 3.16.0 class FileOperationRegistrationOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( FileOperationRegistrationOptions.canParse, FileOperationRegistrationOptions.fromJson); FileOperationRegistrationOptions({required this.filters}); static FileOperationRegistrationOptions fromJson(Map json) { final filtersJson = json['filters']; final filters = (filtersJson as List) .map((item) => FileOperationFilter.fromJson(item as Map)) .toList(); return FileOperationRegistrationOptions(filters: filters); } /// The actual filters. final List filters; Map toJson() { var __result = {}; __result['filters'] = filters.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('filters'); try { if (!obj.containsKey('filters')) { reporter.reportError('must not be undefined'); return false; } final filters = obj['filters']; if (filters == null) { reporter.reportError('must not be null'); return false; } if (!((filters is List && (filters.every( (item) => FileOperationFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileOperationRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is FileOperationRegistrationOptions && other.runtimeType == FileOperationRegistrationOptions) { return listEqual(filters, other.filters, (FileOperationFilter a, FileOperationFilter b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(filters); @override String toString() => jsonEncoder.convert(toJson()); } /// Represents information on a file/folder rename. /// @since 3.16.0 class FileRename implements ToJsonable { static const jsonHandler = LspJsonHandler(FileRename.canParse, FileRename.fromJson); FileRename({required this.oldUri, required this.newUri}); static FileRename fromJson(Map json) { final oldUriJson = json['oldUri']; final oldUri = oldUriJson as String; final newUriJson = json['newUri']; final newUri = newUriJson as String; return FileRename(oldUri: oldUri, newUri: newUri); } /// A file:// URI for the new location of the file/folder being renamed. final String newUri; /// A file:// URI for the original location of the file/folder being renamed. final String oldUri; Map toJson() { var __result = {}; __result['oldUri'] = oldUri; __result['newUri'] = newUri; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('oldUri'); try { if (!obj.containsKey('oldUri')) { reporter.reportError('must not be undefined'); return false; } final oldUri = obj['oldUri']; if (oldUri == null) { reporter.reportError('must not be null'); return false; } if (!(oldUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('newUri'); try { if (!obj.containsKey('newUri')) { reporter.reportError('must not be undefined'); return false; } final newUri = obj['newUri']; if (newUri == null) { reporter.reportError('must not be null'); return false; } if (!(newUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileRename'); return false; } } @override bool operator ==(Object other) { if (other is FileRename && other.runtimeType == FileRename) { return oldUri == other.oldUri && newUri == other.newUri && true; } return false; } @override int get hashCode => Object.hash(oldUri, newUri); @override String toString() => jsonEncoder.convert(toJson()); } class FileSystemWatcher implements ToJsonable { static const jsonHandler = LspJsonHandler(FileSystemWatcher.canParse, FileSystemWatcher.fromJson); FileSystemWatcher({required this.globPattern, this.kind}); static FileSystemWatcher fromJson(Map json) { final globPatternJson = json['globPattern']; final globPattern = globPatternJson as String; final kindJson = json['kind']; final kind = kindJson != null ? WatchKind.fromJson(kindJson as int) : null; return FileSystemWatcher(globPattern: globPattern, kind: kind); } /// The glob pattern to watch. /// /// Glob patterns can have the following syntax: /// - `*` to match one or more characters in a path segment /// - `?` to match on one character in a path segment /// - `**` to match any number of path segments, including none /// - `{}` to group conditions (e.g. `**​/*.{ts,js}` matches all TypeScript /// and JavaScript files) /// - `[]` to declare a range of characters to match in a path segment /// (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) /// - `[!...]` to negate a range of characters to match in a path segment /// (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not /// `example.0`) final String globPattern; /// The kind of events of interest. If omitted it defaults to WatchKind.Create /// | WatchKind.Change | WatchKind.Delete which is 7. final WatchKind? kind; Map toJson() { var __result = {}; __result['globPattern'] = globPattern; if (kind != null) { __result['kind'] = kind?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('globPattern'); try { if (!obj.containsKey('globPattern')) { reporter.reportError('must not be undefined'); return false; } final globPattern = obj['globPattern']; if (globPattern == null) { reporter.reportError('must not be null'); return false; } if (!(globPattern is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { final kind = obj['kind']; if (kind != null && !(WatchKind.canParse(kind, reporter))) { reporter.reportError('must be of type WatchKind'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FileSystemWatcher'); return false; } } @override bool operator ==(Object other) { if (other is FileSystemWatcher && other.runtimeType == FileSystemWatcher) { return globPattern == other.globPattern && kind == other.kind && true; } return false; } @override int get hashCode => Object.hash(globPattern, kind); @override String toString() => jsonEncoder.convert(toJson()); } /// Represents a folding range. To be valid, start and end line must be bigger /// than zero and smaller than the number of lines in the document. Clients are /// free to ignore invalid ranges. class FoldingRange implements ToJsonable { static const jsonHandler = LspJsonHandler(FoldingRange.canParse, FoldingRange.fromJson); FoldingRange( {required this.startLine, this.startCharacter, required this.endLine, this.endCharacter, this.kind}); static FoldingRange fromJson(Map json) { final startLineJson = json['startLine']; final startLine = startLineJson as int; final startCharacterJson = json['startCharacter']; final startCharacter = startCharacterJson as int?; final endLineJson = json['endLine']; final endLine = endLineJson as int; final endCharacterJson = json['endCharacter']; final endCharacter = endCharacterJson as int?; final kindJson = json['kind']; final kind = kindJson != null ? FoldingRangeKind.fromJson(kindJson as String) : null; return FoldingRange( startLine: startLine, startCharacter: startCharacter, endLine: endLine, endCharacter: endCharacter, kind: kind); } /// The zero-based character offset before the folded range ends. If not /// defined, defaults to the length of the end line. final int? endCharacter; /// The zero-based end line of the range to fold. The folded area ends with /// the line's last character. To be valid, the end must be zero or larger and /// smaller than the number of lines in the document. final int endLine; /// Describes the kind of the folding range such as `comment` or `region`. The /// kind is used to categorize folding ranges and used by commands like 'Fold /// all comments'. See [FoldingRangeKind] for an enumeration of standardized /// kinds. final FoldingRangeKind? kind; /// The zero-based character offset from where the folded range starts. If not /// defined, defaults to the length of the start line. final int? startCharacter; /// The zero-based start line of the range to fold. The folded area starts /// after the line's last character. To be valid, the end must be zero or /// larger and smaller than the number of lines in the document. final int startLine; Map toJson() { var __result = {}; __result['startLine'] = startLine; if (startCharacter != null) { __result['startCharacter'] = startCharacter; } __result['endLine'] = endLine; if (endCharacter != null) { __result['endCharacter'] = endCharacter; } if (kind != null) { __result['kind'] = kind?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('startLine'); try { if (!obj.containsKey('startLine')) { reporter.reportError('must not be undefined'); return false; } final startLine = obj['startLine']; if (startLine == null) { reporter.reportError('must not be null'); return false; } if (!(startLine is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('startCharacter'); try { final startCharacter = obj['startCharacter']; if (startCharacter != null && !(startCharacter is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('endLine'); try { if (!obj.containsKey('endLine')) { reporter.reportError('must not be undefined'); return false; } final endLine = obj['endLine']; if (endLine == null) { reporter.reportError('must not be null'); return false; } if (!(endLine is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('endCharacter'); try { final endCharacter = obj['endCharacter']; if (endCharacter != null && !(endCharacter is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { final kind = obj['kind']; if (kind != null && !(FoldingRangeKind.canParse(kind, reporter))) { reporter.reportError('must be of type FoldingRangeKind'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FoldingRange'); return false; } } @override bool operator ==(Object other) { if (other is FoldingRange && other.runtimeType == FoldingRange) { return startLine == other.startLine && startCharacter == other.startCharacter && endLine == other.endLine && endCharacter == other.endCharacter && kind == other.kind && true; } return false; } @override int get hashCode => Object.hash(startLine, startCharacter, endLine, endCharacter, kind); @override String toString() => jsonEncoder.convert(toJson()); } class FoldingRangeClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( FoldingRangeClientCapabilities.canParse, FoldingRangeClientCapabilities.fromJson); FoldingRangeClientCapabilities( {this.dynamicRegistration, this.rangeLimit, this.lineFoldingOnly}); static FoldingRangeClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final rangeLimitJson = json['rangeLimit']; final rangeLimit = rangeLimitJson as int?; final lineFoldingOnlyJson = json['lineFoldingOnly']; final lineFoldingOnly = lineFoldingOnlyJson as bool?; return FoldingRangeClientCapabilities( dynamicRegistration: dynamicRegistration, rangeLimit: rangeLimit, lineFoldingOnly: lineFoldingOnly); } /// Whether implementation supports dynamic registration for folding range /// providers. If this is set to `true` the client supports the new /// `FoldingRangeRegistrationOptions` return value for the corresponding /// server capability as well. final bool? dynamicRegistration; /// If set, the client signals that it only supports folding complete lines. /// If set, client will ignore specified `startCharacter` and `endCharacter` /// properties in a FoldingRange. final bool? lineFoldingOnly; /// The maximum number of folding ranges that the client prefers to receive /// per document. The value serves as a hint, servers are free to follow the /// limit. final int? rangeLimit; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (rangeLimit != null) { __result['rangeLimit'] = rangeLimit; } if (lineFoldingOnly != null) { __result['lineFoldingOnly'] = lineFoldingOnly; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('rangeLimit'); try { final rangeLimit = obj['rangeLimit']; if (rangeLimit != null && !(rangeLimit is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('lineFoldingOnly'); try { final lineFoldingOnly = obj['lineFoldingOnly']; if (lineFoldingOnly != null && !(lineFoldingOnly is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FoldingRangeClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is FoldingRangeClientCapabilities && other.runtimeType == FoldingRangeClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && rangeLimit == other.rangeLimit && lineFoldingOnly == other.lineFoldingOnly && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, rangeLimit, lineFoldingOnly); @override String toString() => jsonEncoder.convert(toJson()); } /// Enum of known range kinds class FoldingRangeKind { const FoldingRangeKind(this._value); const FoldingRangeKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } /// Folding range for a comment static const Comment = FoldingRangeKind('comment'); /// Folding range for a imports or includes static const Imports = FoldingRangeKind('imports'); /// Folding range for a region (e.g. `#region`) static const Region = FoldingRangeKind('region'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is FoldingRangeKind && o._value == _value; } class FoldingRangeOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( FoldingRangeOptions.canParse, FoldingRangeOptions.fromJson); FoldingRangeOptions({this.workDoneProgress}); static FoldingRangeOptions fromJson(Map json) { if (FoldingRangeRegistrationOptions.canParse(json, nullLspJsonReporter)) { return FoldingRangeRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return FoldingRangeOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FoldingRangeOptions'); return false; } } @override bool operator ==(Object other) { if (other is FoldingRangeOptions && other.runtimeType == FoldingRangeOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class FoldingRangeParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(FoldingRangeParams.canParse, FoldingRangeParams.fromJson); FoldingRangeParams( {required this.textDocument, this.workDoneToken, this.partialResultToken}); static FoldingRangeParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return FoldingRangeParams( textDocument: textDocument, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FoldingRangeParams'); return false; } } @override bool operator ==(Object other) { if (other is FoldingRangeParams && other.runtimeType == FoldingRangeParams) { return textDocument == other.textDocument && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class FoldingRangeRegistrationOptions implements TextDocumentRegistrationOptions, FoldingRangeOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( FoldingRangeRegistrationOptions.canParse, FoldingRangeRegistrationOptions.fromJson); FoldingRangeRegistrationOptions( {this.documentSelector, this.workDoneProgress, this.id}); static FoldingRangeRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final idJson = json['id']; final id = idJson as String?; return FoldingRangeRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FoldingRangeRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is FoldingRangeRegistrationOptions && other.runtimeType == FoldingRangeRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && id == other.id && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress, id); @override String toString() => jsonEncoder.convert(toJson()); } /// Value-object describing what options formatting should use. class FormattingOptions implements ToJsonable { static const jsonHandler = LspJsonHandler(FormattingOptions.canParse, FormattingOptions.fromJson); FormattingOptions( {required this.tabSize, required this.insertSpaces, this.trimTrailingWhitespace, this.insertFinalNewline, this.trimFinalNewlines}); static FormattingOptions fromJson(Map json) { final tabSizeJson = json['tabSize']; final tabSize = tabSizeJson as int; final insertSpacesJson = json['insertSpaces']; final insertSpaces = insertSpacesJson as bool; final trimTrailingWhitespaceJson = json['trimTrailingWhitespace']; final trimTrailingWhitespace = trimTrailingWhitespaceJson as bool?; final insertFinalNewlineJson = json['insertFinalNewline']; final insertFinalNewline = insertFinalNewlineJson as bool?; final trimFinalNewlinesJson = json['trimFinalNewlines']; final trimFinalNewlines = trimFinalNewlinesJson as bool?; return FormattingOptions( tabSize: tabSize, insertSpaces: insertSpaces, trimTrailingWhitespace: trimTrailingWhitespace, insertFinalNewline: insertFinalNewline, trimFinalNewlines: trimFinalNewlines); } /// Insert a newline character at the end of the file if one does not exist. /// @since 3.15.0 final bool? insertFinalNewline; /// Prefer spaces over tabs. final bool insertSpaces; /// Size of a tab in spaces. final int tabSize; /// Trim all newlines after the final newline at the end of the file. /// @since 3.15.0 final bool? trimFinalNewlines; /// Trim trailing whitespace on a line. /// @since 3.15.0 final bool? trimTrailingWhitespace; Map toJson() { var __result = {}; __result['tabSize'] = tabSize; __result['insertSpaces'] = insertSpaces; if (trimTrailingWhitespace != null) { __result['trimTrailingWhitespace'] = trimTrailingWhitespace; } if (insertFinalNewline != null) { __result['insertFinalNewline'] = insertFinalNewline; } if (trimFinalNewlines != null) { __result['trimFinalNewlines'] = trimFinalNewlines; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('tabSize'); try { if (!obj.containsKey('tabSize')) { reporter.reportError('must not be undefined'); return false; } final tabSize = obj['tabSize']; if (tabSize == null) { reporter.reportError('must not be null'); return false; } if (!(tabSize is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('insertSpaces'); try { if (!obj.containsKey('insertSpaces')) { reporter.reportError('must not be undefined'); return false; } final insertSpaces = obj['insertSpaces']; if (insertSpaces == null) { reporter.reportError('must not be null'); return false; } if (!(insertSpaces is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('trimTrailingWhitespace'); try { final trimTrailingWhitespace = obj['trimTrailingWhitespace']; if (trimTrailingWhitespace != null && !(trimTrailingWhitespace is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('insertFinalNewline'); try { final insertFinalNewline = obj['insertFinalNewline']; if (insertFinalNewline != null && !(insertFinalNewline is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('trimFinalNewlines'); try { final trimFinalNewlines = obj['trimFinalNewlines']; if (trimFinalNewlines != null && !(trimFinalNewlines is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type FormattingOptions'); return false; } } @override bool operator ==(Object other) { if (other is FormattingOptions && other.runtimeType == FormattingOptions) { return tabSize == other.tabSize && insertSpaces == other.insertSpaces && trimTrailingWhitespace == other.trimTrailingWhitespace && insertFinalNewline == other.insertFinalNewline && trimFinalNewlines == other.trimFinalNewlines && true; } return false; } @override int get hashCode => Object.hash(tabSize, insertSpaces, trimTrailingWhitespace, insertFinalNewline, trimFinalNewlines); @override String toString() => jsonEncoder.convert(toJson()); } /// The result of a hover request. class Hover implements ToJsonable { static const jsonHandler = LspJsonHandler(Hover.canParse, Hover.fromJson); Hover({required this.contents, this.range}); static Hover fromJson(Map json) { final contentsJson = json['contents']; final contents = contentsJson is String ? Either2.t1(contentsJson) : (MarkupContent.canParse(contentsJson, nullLspJsonReporter) ? Either2.t2( MarkupContent.fromJson(contentsJson as Map)) : (throw '''$contentsJson was not one of (String, MarkupContent)''')); final rangeJson = json['range']; final range = rangeJson != null ? Range.fromJson(rangeJson as Map) : null; return Hover(contents: contents, range: range); } /// The hover's content final Either2 contents; /// An optional range is a range inside a text document that is used to /// visualize a hover, e.g. by changing the background color. final Range? range; Map toJson() { var __result = {}; __result['contents'] = contents; if (range != null) { __result['range'] = range?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('contents'); try { if (!obj.containsKey('contents')) { reporter.reportError('must not be undefined'); return false; } final contents = obj['contents']; if (contents == null) { reporter.reportError('must not be null'); return false; } if (!((contents is String || MarkupContent.canParse(contents, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { final range = obj['range']; if (range != null && !(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Hover'); return false; } } @override bool operator ==(Object other) { if (other is Hover && other.runtimeType == Hover) { return contents == other.contents && range == other.range && true; } return false; } @override int get hashCode => Object.hash(contents, range); @override String toString() => jsonEncoder.convert(toJson()); } class HoverClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( HoverClientCapabilities.canParse, HoverClientCapabilities.fromJson); HoverClientCapabilities({this.dynamicRegistration, this.contentFormat}); static HoverClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final contentFormatJson = json['contentFormat']; final contentFormat = (contentFormatJson as List?) ?.map((item) => MarkupKind.fromJson(item as String)) .toList(); return HoverClientCapabilities( dynamicRegistration: dynamicRegistration, contentFormat: contentFormat); } /// Client supports the follow content formats if the content property refers /// to a `literal of type MarkupContent`. The order describes the preferred /// format of the client. final List? contentFormat; /// Whether hover supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (contentFormat != null) { __result['contentFormat'] = contentFormat?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('contentFormat'); try { final contentFormat = obj['contentFormat']; if (contentFormat != null && !((contentFormat is List && (contentFormat .every((item) => MarkupKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type HoverClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is HoverClientCapabilities && other.runtimeType == HoverClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && listEqual(contentFormat, other.contentFormat, (MarkupKind a, MarkupKind b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, lspHashCode(contentFormat)); @override String toString() => jsonEncoder.convert(toJson()); } class HoverOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(HoverOptions.canParse, HoverOptions.fromJson); HoverOptions({this.workDoneProgress}); static HoverOptions fromJson(Map json) { if (HoverRegistrationOptions.canParse(json, nullLspJsonReporter)) { return HoverRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return HoverOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type HoverOptions'); return false; } } @override bool operator ==(Object other) { if (other is HoverOptions && other.runtimeType == HoverOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class HoverParams implements TextDocumentPositionParams, WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler(HoverParams.canParse, HoverParams.fromJson); HoverParams( {required this.textDocument, required this.position, this.workDoneToken}); static HoverParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return HoverParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken); } /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type HoverParams'); return false; } } @override bool operator ==(Object other) { if (other is HoverParams && other.runtimeType == HoverParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class HoverRegistrationOptions implements TextDocumentRegistrationOptions, HoverOptions, ToJsonable { static const jsonHandler = LspJsonHandler( HoverRegistrationOptions.canParse, HoverRegistrationOptions.fromJson); HoverRegistrationOptions({this.documentSelector, this.workDoneProgress}); static HoverRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return HoverRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type HoverRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is HoverRegistrationOptions && other.runtimeType == HoverRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class ImplementationClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( ImplementationClientCapabilities.canParse, ImplementationClientCapabilities.fromJson); ImplementationClientCapabilities( {this.dynamicRegistration, this.linkSupport}); static ImplementationClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final linkSupportJson = json['linkSupport']; final linkSupport = linkSupportJson as bool?; return ImplementationClientCapabilities( dynamicRegistration: dynamicRegistration, linkSupport: linkSupport); } /// Whether implementation supports dynamic registration. If this is set to /// `true` the client supports the new `ImplementationRegistrationOptions` /// return value for the corresponding server capability as well. final bool? dynamicRegistration; /// The client supports additional metadata in the form of definition links. /// @since 3.14.0 final bool? linkSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (linkSupport != null) { __result['linkSupport'] = linkSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('linkSupport'); try { final linkSupport = obj['linkSupport']; if (linkSupport != null && !(linkSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ImplementationClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ImplementationClientCapabilities && other.runtimeType == ImplementationClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, linkSupport); @override String toString() => jsonEncoder.convert(toJson()); } class ImplementationOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( ImplementationOptions.canParse, ImplementationOptions.fromJson); ImplementationOptions({this.workDoneProgress}); static ImplementationOptions fromJson(Map json) { if (ImplementationRegistrationOptions.canParse(json, nullLspJsonReporter)) { return ImplementationRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return ImplementationOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ImplementationOptions'); return false; } } @override bool operator ==(Object other) { if (other is ImplementationOptions && other.runtimeType == ImplementationOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ImplementationParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( ImplementationParams.canParse, ImplementationParams.fromJson); ImplementationParams( {required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static ImplementationParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return ImplementationParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ImplementationParams'); return false; } } @override bool operator ==(Object other) { if (other is ImplementationParams && other.runtimeType == ImplementationParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class ImplementationRegistrationOptions implements TextDocumentRegistrationOptions, ImplementationOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( ImplementationRegistrationOptions.canParse, ImplementationRegistrationOptions.fromJson); ImplementationRegistrationOptions( {this.documentSelector, this.workDoneProgress, this.id}); static ImplementationRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final idJson = json['id']; final id = idJson as String?; return ImplementationRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ImplementationRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is ImplementationRegistrationOptions && other.runtimeType == ImplementationRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && id == other.id && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress, id); @override String toString() => jsonEncoder.convert(toJson()); } class InitializeParams implements WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler(InitializeParams.canParse, InitializeParams.fromJson); InitializeParams( {this.processId, this.clientInfo, this.locale, this.rootPath, this.rootUri, this.initializationOptions, required this.capabilities, this.trace, this.workspaceFolders, this.workDoneToken}); static InitializeParams fromJson(Map json) { final processIdJson = json['processId']; final processId = processIdJson as int?; final clientInfoJson = json['clientInfo']; final clientInfo = clientInfoJson != null ? InitializeParamsClientInfo.fromJson( clientInfoJson as Map) : null; final localeJson = json['locale']; final locale = localeJson as String?; final rootPathJson = json['rootPath']; final rootPath = rootPathJson as String?; final rootUriJson = json['rootUri']; final rootUri = rootUriJson as String?; final initializationOptionsJson = json['initializationOptions']; final initializationOptions = initializationOptionsJson; final capabilitiesJson = json['capabilities']; final capabilities = ClientCapabilities.fromJson(capabilitiesJson as Map); final traceJson = json['trace']; final trace = const {null, 'off', 'message', 'verbose'}.contains(traceJson) ? traceJson as String? : throw '''$traceJson was not one of (null, 'off', 'message', 'verbose')'''; final workspaceFoldersJson = json['workspaceFolders']; final workspaceFolders = (workspaceFoldersJson as List?) ?.map((item) => WorkspaceFolder.fromJson(item as Map)) .toList(); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return InitializeParams( processId: processId, clientInfo: clientInfo, locale: locale, rootPath: rootPath, rootUri: rootUri, initializationOptions: initializationOptions, capabilities: capabilities, trace: trace, workspaceFolders: workspaceFolders, workDoneToken: workDoneToken); } /// The capabilities provided by the client (editor or tool) final ClientCapabilities capabilities; /// Information about the client /// @since 3.15.0 final InitializeParamsClientInfo? clientInfo; /// User provided initialization options. final Object? initializationOptions; /// The locale the client is currently showing the user interface in. This /// must not necessarily be the locale of the operating system. /// /// Uses IETF language tags as the value's syntax (See /// https://en.wikipedia.org/wiki/IETF_language_tag) /// @since 3.16.0 final String? locale; /// The process Id of the parent process that started the server. Is null if /// the process has not been started by another process. If the parent process /// is not alive then the server should exit (see exit notification) its /// process. final int? processId; /// The rootPath of the workspace. Is null if no folder is open. /// @deprecated in favour of `rootUri`. final String? rootPath; /// The rootUri of the workspace. Is null if no folder is open. If both /// `rootPath` and `rootUri` are set `rootUri` wins. /// @deprecated in favour of `workspaceFolders` final String? rootUri; /// The initial trace setting. If omitted trace is disabled ('off'). final String? trace; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; /// The workspace folders configured in the client when the server starts. /// This property is only available if the client supports workspace folders. /// It can be `null` if the client supports workspace folders but none are /// configured. /// @since 3.6.0 final List? workspaceFolders; Map toJson() { var __result = {}; __result['processId'] = processId; if (clientInfo != null) { __result['clientInfo'] = clientInfo?.toJson(); } if (locale != null) { __result['locale'] = locale; } if (rootPath != null) { __result['rootPath'] = rootPath; } __result['rootUri'] = rootUri; if (initializationOptions != null) { __result['initializationOptions'] = initializationOptions; } __result['capabilities'] = capabilities.toJson(); if (trace != null) { __result['trace'] = trace; } if (workspaceFolders != null) { __result['workspaceFolders'] = workspaceFolders?.map((item) => item.toJson()).toList(); } if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('processId'); try { if (!obj.containsKey('processId')) { reporter.reportError('must not be undefined'); return false; } final processId = obj['processId']; if (processId != null && !(processId is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('clientInfo'); try { final clientInfo = obj['clientInfo']; if (clientInfo != null && !(InitializeParamsClientInfo.canParse(clientInfo, reporter))) { reporter.reportError('must be of type InitializeParamsClientInfo'); return false; } } finally { reporter.pop(); } reporter.push('locale'); try { final locale = obj['locale']; if (locale != null && !(locale is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('rootPath'); try { final rootPath = obj['rootPath']; if (rootPath != null && !(rootPath is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('rootUri'); try { if (!obj.containsKey('rootUri')) { reporter.reportError('must not be undefined'); return false; } final rootUri = obj['rootUri']; if (rootUri != null && !(rootUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('capabilities'); try { if (!obj.containsKey('capabilities')) { reporter.reportError('must not be undefined'); return false; } final capabilities = obj['capabilities']; if (capabilities == null) { reporter.reportError('must not be null'); return false; } if (!(ClientCapabilities.canParse(capabilities, reporter))) { reporter.reportError('must be of type ClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('trace'); try { final trace = obj['trace']; if (trace != null && !((trace == 'off' || trace == 'message' || trace == 'verbose'))) { reporter.reportError( 'must be one of the literals \'off\', \'message\', \'verbose\''); return false; } } finally { reporter.pop(); } reporter.push('workspaceFolders'); try { final workspaceFolders = obj['workspaceFolders']; if (workspaceFolders != null && !((workspaceFolders is List && (workspaceFolders.every( (item) => WorkspaceFolder.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type InitializeParams'); return false; } } @override bool operator ==(Object other) { if (other is InitializeParams && other.runtimeType == InitializeParams) { return processId == other.processId && clientInfo == other.clientInfo && locale == other.locale && rootPath == other.rootPath && rootUri == other.rootUri && initializationOptions == other.initializationOptions && capabilities == other.capabilities && trace == other.trace && listEqual(workspaceFolders, other.workspaceFolders, (WorkspaceFolder a, WorkspaceFolder b) => a == b) && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash( processId, clientInfo, locale, rootPath, rootUri, initializationOptions, capabilities, trace, lspHashCode(workspaceFolders), workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class InitializeParamsClientInfo implements ToJsonable { static const jsonHandler = LspJsonHandler( InitializeParamsClientInfo.canParse, InitializeParamsClientInfo.fromJson); InitializeParamsClientInfo({required this.name, this.version}); static InitializeParamsClientInfo fromJson(Map json) { final nameJson = json['name']; final name = nameJson as String; final versionJson = json['version']; final version = versionJson as String?; return InitializeParamsClientInfo(name: name, version: version); } /// The name of the client as defined by the client. final String name; /// The client's version as defined by the client. final String? version; Map toJson() { var __result = {}; __result['name'] = name; if (version != null) { __result['version'] = version; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('name'); try { if (!obj.containsKey('name')) { reporter.reportError('must not be undefined'); return false; } final name = obj['name']; if (name == null) { reporter.reportError('must not be null'); return false; } if (!(name is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('version'); try { final version = obj['version']; if (version != null && !(version is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type InitializeParamsClientInfo'); return false; } } @override bool operator ==(Object other) { if (other is InitializeParamsClientInfo && other.runtimeType == InitializeParamsClientInfo) { return name == other.name && version == other.version && true; } return false; } @override int get hashCode => Object.hash(name, version); @override String toString() => jsonEncoder.convert(toJson()); } class InitializeResult implements ToJsonable { static const jsonHandler = LspJsonHandler(InitializeResult.canParse, InitializeResult.fromJson); InitializeResult({required this.capabilities, this.serverInfo}); static InitializeResult fromJson(Map json) { final capabilitiesJson = json['capabilities']; final capabilities = ServerCapabilities.fromJson(capabilitiesJson as Map); final serverInfoJson = json['serverInfo']; final serverInfo = serverInfoJson != null ? InitializeResultServerInfo.fromJson( serverInfoJson as Map) : null; return InitializeResult(capabilities: capabilities, serverInfo: serverInfo); } /// The capabilities the language server provides. final ServerCapabilities capabilities; /// Information about the server. /// @since 3.15.0 final InitializeResultServerInfo? serverInfo; Map toJson() { var __result = {}; __result['capabilities'] = capabilities.toJson(); if (serverInfo != null) { __result['serverInfo'] = serverInfo?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('capabilities'); try { if (!obj.containsKey('capabilities')) { reporter.reportError('must not be undefined'); return false; } final capabilities = obj['capabilities']; if (capabilities == null) { reporter.reportError('must not be null'); return false; } if (!(ServerCapabilities.canParse(capabilities, reporter))) { reporter.reportError('must be of type ServerCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('serverInfo'); try { final serverInfo = obj['serverInfo']; if (serverInfo != null && !(InitializeResultServerInfo.canParse(serverInfo, reporter))) { reporter.reportError('must be of type InitializeResultServerInfo'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type InitializeResult'); return false; } } @override bool operator ==(Object other) { if (other is InitializeResult && other.runtimeType == InitializeResult) { return capabilities == other.capabilities && serverInfo == other.serverInfo && true; } return false; } @override int get hashCode => Object.hash(capabilities, serverInfo); @override String toString() => jsonEncoder.convert(toJson()); } class InitializeResultServerInfo implements ToJsonable { static const jsonHandler = LspJsonHandler( InitializeResultServerInfo.canParse, InitializeResultServerInfo.fromJson); InitializeResultServerInfo({required this.name, this.version}); static InitializeResultServerInfo fromJson(Map json) { final nameJson = json['name']; final name = nameJson as String; final versionJson = json['version']; final version = versionJson as String?; return InitializeResultServerInfo(name: name, version: version); } /// The name of the server as defined by the server. final String name; /// The server's version as defined by the server. final String? version; Map toJson() { var __result = {}; __result['name'] = name; if (version != null) { __result['version'] = version; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('name'); try { if (!obj.containsKey('name')) { reporter.reportError('must not be undefined'); return false; } final name = obj['name']; if (name == null) { reporter.reportError('must not be null'); return false; } if (!(name is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('version'); try { final version = obj['version']; if (version != null && !(version is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type InitializeResultServerInfo'); return false; } } @override bool operator ==(Object other) { if (other is InitializeResultServerInfo && other.runtimeType == InitializeResultServerInfo) { return name == other.name && version == other.version && true; } return false; } @override int get hashCode => Object.hash(name, version); @override String toString() => jsonEncoder.convert(toJson()); } class InitializedParams implements ToJsonable { static const jsonHandler = LspJsonHandler(InitializedParams.canParse, InitializedParams.fromJson); static InitializedParams fromJson(Map json) { return InitializedParams(); } Map toJson() { var __result = {}; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { return true; } else { reporter.reportError('must be of type InitializedParams'); return false; } } @override bool operator ==(Object other) { if (other is InitializedParams && other.runtimeType == InitializedParams) { return true; } return false; } @override int get hashCode => 42; @override String toString() => jsonEncoder.convert(toJson()); } /// A special text edit to provide an insert and a replace operation. /// @since 3.16.0 class InsertReplaceEdit implements ToJsonable { static const jsonHandler = LspJsonHandler(InsertReplaceEdit.canParse, InsertReplaceEdit.fromJson); InsertReplaceEdit( {required this.newText, required this.insert, required this.replace}); static InsertReplaceEdit fromJson(Map json) { final newTextJson = json['newText']; final newText = newTextJson as String; final insertJson = json['insert']; final insert = Range.fromJson(insertJson as Map); final replaceJson = json['replace']; final replace = Range.fromJson(replaceJson as Map); return InsertReplaceEdit( newText: newText, insert: insert, replace: replace); } /// The range if the insert is requested final Range insert; /// The string to be inserted. final String newText; /// The range if the replace is requested. final Range replace; Map toJson() { var __result = {}; __result['newText'] = newText; __result['insert'] = insert.toJson(); __result['replace'] = replace.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('newText'); try { if (!obj.containsKey('newText')) { reporter.reportError('must not be undefined'); return false; } final newText = obj['newText']; if (newText == null) { reporter.reportError('must not be null'); return false; } if (!(newText is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('insert'); try { if (!obj.containsKey('insert')) { reporter.reportError('must not be undefined'); return false; } final insert = obj['insert']; if (insert == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(insert, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('replace'); try { if (!obj.containsKey('replace')) { reporter.reportError('must not be undefined'); return false; } final replace = obj['replace']; if (replace == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(replace, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type InsertReplaceEdit'); return false; } } @override bool operator ==(Object other) { if (other is InsertReplaceEdit && other.runtimeType == InsertReplaceEdit) { return newText == other.newText && insert == other.insert && replace == other.replace && true; } return false; } @override int get hashCode => Object.hash(newText, insert, replace); @override String toString() => jsonEncoder.convert(toJson()); } /// Defines whether the insert text in a completion item should be interpreted /// as plain text or a snippet. class InsertTextFormat { const InsertTextFormat._(this._value); const InsertTextFormat.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { switch (obj) { case 1: case 2: return true; } return false; } /// The primary text to be inserted is treated as a plain string. static const PlainText = InsertTextFormat._(1); /// The primary text to be inserted is treated as a snippet. /// /// A snippet can define tab stops and placeholders with `$1`, `$2` and /// `${3:foo}`. `$0` defines the final tab stop, it defaults to the end of the /// snippet. Placeholders with equal identifiers are linked, that is typing in /// one will update others too. static const Snippet = InsertTextFormat._(2); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is InsertTextFormat && o._value == _value; } /// How whitespace and indentation is handled during completion item insertion. /// @since 3.16.0 class InsertTextMode { const InsertTextMode(this._value); const InsertTextMode.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// The insertion or replace strings is taken as it is. If the value is multi /// line the lines below the cursor will be inserted using the indentation /// defined in the string value. The client will not apply any kind of /// adjustments to the string. static const asIs = InsertTextMode(1); /// The editor adjusts leading whitespace of new lines so that they match the /// indentation up to the cursor of the line for which the item is accepted. /// /// Consider a line like this: <2tabs><3tabs>foo. Accepting a multi /// line completion item is indented using 2 tabs and all following lines /// inserted will be indented using 2 tabs as well. static const adjustIndentation = InsertTextMode(2); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is InsertTextMode && o._value == _value; } class LinkedEditingRangeClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( LinkedEditingRangeClientCapabilities.canParse, LinkedEditingRangeClientCapabilities.fromJson); LinkedEditingRangeClientCapabilities({this.dynamicRegistration}); static LinkedEditingRangeClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return LinkedEditingRangeClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether implementation supports dynamic registration. If this is set to /// `true` the client supports the new `(TextDocumentRegistrationOptions & /// StaticRegistrationOptions)` return value for the corresponding server /// capability as well. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter .reportError('must be of type LinkedEditingRangeClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is LinkedEditingRangeClientCapabilities && other.runtimeType == LinkedEditingRangeClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class LinkedEditingRangeOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( LinkedEditingRangeOptions.canParse, LinkedEditingRangeOptions.fromJson); LinkedEditingRangeOptions({this.workDoneProgress}); static LinkedEditingRangeOptions fromJson(Map json) { if (LinkedEditingRangeRegistrationOptions.canParse( json, nullLspJsonReporter)) { return LinkedEditingRangeRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return LinkedEditingRangeOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type LinkedEditingRangeOptions'); return false; } } @override bool operator ==(Object other) { if (other is LinkedEditingRangeOptions && other.runtimeType == LinkedEditingRangeOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class LinkedEditingRangeParams implements TextDocumentPositionParams, WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler( LinkedEditingRangeParams.canParse, LinkedEditingRangeParams.fromJson); LinkedEditingRangeParams( {required this.textDocument, required this.position, this.workDoneToken}); static LinkedEditingRangeParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return LinkedEditingRangeParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken); } /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type LinkedEditingRangeParams'); return false; } } @override bool operator ==(Object other) { if (other is LinkedEditingRangeParams && other.runtimeType == LinkedEditingRangeParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class LinkedEditingRangeRegistrationOptions implements TextDocumentRegistrationOptions, LinkedEditingRangeOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( LinkedEditingRangeRegistrationOptions.canParse, LinkedEditingRangeRegistrationOptions.fromJson); LinkedEditingRangeRegistrationOptions( {this.documentSelector, this.workDoneProgress, this.id}); static LinkedEditingRangeRegistrationOptions fromJson( Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final idJson = json['id']; final id = idJson as String?; return LinkedEditingRangeRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type LinkedEditingRangeRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is LinkedEditingRangeRegistrationOptions && other.runtimeType == LinkedEditingRangeRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && id == other.id && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress, id); @override String toString() => jsonEncoder.convert(toJson()); } class LinkedEditingRanges implements ToJsonable { static const jsonHandler = LspJsonHandler( LinkedEditingRanges.canParse, LinkedEditingRanges.fromJson); LinkedEditingRanges({required this.ranges, this.wordPattern}); static LinkedEditingRanges fromJson(Map json) { final rangesJson = json['ranges']; final ranges = (rangesJson as List) .map((item) => Range.fromJson(item as Map)) .toList(); final wordPatternJson = json['wordPattern']; final wordPattern = wordPatternJson as String?; return LinkedEditingRanges(ranges: ranges, wordPattern: wordPattern); } /// A list of ranges that can be renamed together. The ranges must have /// identical length and contain identical text content. The ranges cannot /// overlap. final List ranges; /// An optional word pattern (regular expression) that describes valid /// contents for the given ranges. If no pattern is provided, the client /// configuration's word pattern will be used. final String? wordPattern; Map toJson() { var __result = {}; __result['ranges'] = ranges.map((item) => item.toJson()).toList(); if (wordPattern != null) { __result['wordPattern'] = wordPattern; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('ranges'); try { if (!obj.containsKey('ranges')) { reporter.reportError('must not be undefined'); return false; } final ranges = obj['ranges']; if (ranges == null) { reporter.reportError('must not be null'); return false; } if (!((ranges is List && (ranges.every((item) => Range.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('wordPattern'); try { final wordPattern = obj['wordPattern']; if (wordPattern != null && !(wordPattern is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type LinkedEditingRanges'); return false; } } @override bool operator ==(Object other) { if (other is LinkedEditingRanges && other.runtimeType == LinkedEditingRanges) { return listEqual(ranges, other.ranges, (Range a, Range b) => a == b) && wordPattern == other.wordPattern && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(ranges), wordPattern); @override String toString() => jsonEncoder.convert(toJson()); } class Location implements ToJsonable { static const jsonHandler = LspJsonHandler(Location.canParse, Location.fromJson); Location({required this.uri, required this.range}); static Location fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); return Location(uri: uri, range: range); } final Range range; final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; __result['range'] = range.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Location'); return false; } } @override bool operator ==(Object other) { if (other is Location && other.runtimeType == Location) { return uri == other.uri && range == other.range && true; } return false; } @override int get hashCode => Object.hash(uri, range); @override String toString() => jsonEncoder.convert(toJson()); } class LocationLink implements ToJsonable { static const jsonHandler = LspJsonHandler(LocationLink.canParse, LocationLink.fromJson); LocationLink( {this.originSelectionRange, required this.targetUri, required this.targetRange, required this.targetSelectionRange}); static LocationLink fromJson(Map json) { final originSelectionRangeJson = json['originSelectionRange']; final originSelectionRange = originSelectionRangeJson != null ? Range.fromJson(originSelectionRangeJson as Map) : null; final targetUriJson = json['targetUri']; final targetUri = targetUriJson as String; final targetRangeJson = json['targetRange']; final targetRange = Range.fromJson(targetRangeJson as Map); final targetSelectionRangeJson = json['targetSelectionRange']; final targetSelectionRange = Range.fromJson(targetSelectionRangeJson as Map); return LocationLink( originSelectionRange: originSelectionRange, targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange); } /// Span of the origin of this link. /// /// Used as the underlined span for mouse interaction. Defaults to the word /// range at the mouse position. final Range? originSelectionRange; /// The full target range of this link. If the target for example is a symbol /// then target range is the range enclosing this symbol not including /// leading/trailing whitespace but everything else like comments. This /// information is typically used to highlight the range in the editor. final Range targetRange; /// The range that should be selected and revealed when this link is being /// followed, e.g the name of a function. Must be contained by the /// `targetRange`. See also `DocumentSymbol#range` final Range targetSelectionRange; /// The target resource identifier of this link. final String targetUri; Map toJson() { var __result = {}; if (originSelectionRange != null) { __result['originSelectionRange'] = originSelectionRange?.toJson(); } __result['targetUri'] = targetUri; __result['targetRange'] = targetRange.toJson(); __result['targetSelectionRange'] = targetSelectionRange.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('originSelectionRange'); try { final originSelectionRange = obj['originSelectionRange']; if (originSelectionRange != null && !(Range.canParse(originSelectionRange, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('targetUri'); try { if (!obj.containsKey('targetUri')) { reporter.reportError('must not be undefined'); return false; } final targetUri = obj['targetUri']; if (targetUri == null) { reporter.reportError('must not be null'); return false; } if (!(targetUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('targetRange'); try { if (!obj.containsKey('targetRange')) { reporter.reportError('must not be undefined'); return false; } final targetRange = obj['targetRange']; if (targetRange == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(targetRange, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('targetSelectionRange'); try { if (!obj.containsKey('targetSelectionRange')) { reporter.reportError('must not be undefined'); return false; } final targetSelectionRange = obj['targetSelectionRange']; if (targetSelectionRange == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(targetSelectionRange, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type LocationLink'); return false; } } @override bool operator ==(Object other) { if (other is LocationLink && other.runtimeType == LocationLink) { return originSelectionRange == other.originSelectionRange && targetUri == other.targetUri && targetRange == other.targetRange && targetSelectionRange == other.targetSelectionRange && true; } return false; } @override int get hashCode => Object.hash( originSelectionRange, targetUri, targetRange, targetSelectionRange); @override String toString() => jsonEncoder.convert(toJson()); } class LogMessageParams implements ToJsonable { static const jsonHandler = LspJsonHandler(LogMessageParams.canParse, LogMessageParams.fromJson); LogMessageParams({required this.type, required this.message}); static LogMessageParams fromJson(Map json) { final typeJson = json['type']; final type = MessageType.fromJson(typeJson as int); final messageJson = json['message']; final message = messageJson as String; return LogMessageParams(type: type, message: message); } /// The actual message final String message; /// The message type. final MessageType type; Map toJson() { var __result = {}; __result['type'] = type.toJson(); __result['message'] = message; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('type'); try { if (!obj.containsKey('type')) { reporter.reportError('must not be undefined'); return false; } final type = obj['type']; if (type == null) { reporter.reportError('must not be null'); return false; } if (!(MessageType.canParse(type, reporter))) { reporter.reportError('must be of type MessageType'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type LogMessageParams'); return false; } } @override bool operator ==(Object other) { if (other is LogMessageParams && other.runtimeType == LogMessageParams) { return type == other.type && message == other.message && true; } return false; } @override int get hashCode => Object.hash(type, message); @override String toString() => jsonEncoder.convert(toJson()); } class LogTraceParams implements ToJsonable { static const jsonHandler = LspJsonHandler(LogTraceParams.canParse, LogTraceParams.fromJson); LogTraceParams({required this.message, this.verbose}); static LogTraceParams fromJson(Map json) { final messageJson = json['message']; final message = messageJson as String; final verboseJson = json['verbose']; final verbose = verboseJson as String?; return LogTraceParams(message: message, verbose: verbose); } /// The message to be logged. final String message; /// Additional information that can be computed if the `trace` configuration /// is set to `'verbose'` final String? verbose; Map toJson() { var __result = {}; __result['message'] = message; if (verbose != null) { __result['verbose'] = verbose; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('verbose'); try { final verbose = obj['verbose']; if (verbose != null && !(verbose is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type LogTraceParams'); return false; } } @override bool operator ==(Object other) { if (other is LogTraceParams && other.runtimeType == LogTraceParams) { return message == other.message && verbose == other.verbose && true; } return false; } @override int get hashCode => Object.hash(message, verbose); @override String toString() => jsonEncoder.convert(toJson()); } /// Client capabilities specific to the used markdown parser. /// @since 3.16.0 class MarkdownClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( MarkdownClientCapabilities.canParse, MarkdownClientCapabilities.fromJson); MarkdownClientCapabilities({required this.parser, this.version}); static MarkdownClientCapabilities fromJson(Map json) { final parserJson = json['parser']; final parser = parserJson as String; final versionJson = json['version']; final version = versionJson as String?; return MarkdownClientCapabilities(parser: parser, version: version); } /// The name of the parser. final String parser; /// The version of the parser. final String? version; Map toJson() { var __result = {}; __result['parser'] = parser; if (version != null) { __result['version'] = version; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('parser'); try { if (!obj.containsKey('parser')) { reporter.reportError('must not be undefined'); return false; } final parser = obj['parser']; if (parser == null) { reporter.reportError('must not be null'); return false; } if (!(parser is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('version'); try { final version = obj['version']; if (version != null && !(version is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type MarkdownClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is MarkdownClientCapabilities && other.runtimeType == MarkdownClientCapabilities) { return parser == other.parser && version == other.version && true; } return false; } @override int get hashCode => Object.hash(parser, version); @override String toString() => jsonEncoder.convert(toJson()); } /// A `MarkupContent` literal represents a string value which content is /// interpreted base on its kind flag. Currently the protocol supports /// `plaintext` and `markdown` as markup kinds. /// /// If the kind is `markdown` then the value can contain fenced code blocks like /// in GitHub issues. /// /// Here is an example how such a string can be constructed using JavaScript / /// TypeScript: ```typescript let markdown: MarkdownContent = { /// /// kind: MarkupKind.Markdown, /// value: [ /// '# Header', /// 'Some text', /// '```typescript', /// 'someCode();', /// '```' /// ].join('\n') }; ``` /// /// *Please Note* that clients might sanitize the return markdown. A client /// could decide to remove HTML from the markdown to avoid script execution. class MarkupContent implements ToJsonable { static const jsonHandler = LspJsonHandler(MarkupContent.canParse, MarkupContent.fromJson); MarkupContent({required this.kind, required this.value}); static MarkupContent fromJson(Map json) { final kindJson = json['kind']; final kind = MarkupKind.fromJson(kindJson as String); final valueJson = json['value']; final value = valueJson as String; return MarkupContent(kind: kind, value: value); } /// The type of the Markup final MarkupKind kind; /// The content itself final String value; Map toJson() { var __result = {}; __result['kind'] = kind.toJson(); __result['value'] = value; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(MarkupKind.canParse(kind, reporter))) { reporter.reportError('must be of type MarkupKind'); return false; } } finally { reporter.pop(); } 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 MarkupContent'); return false; } } @override bool operator ==(Object other) { if (other is MarkupContent && other.runtimeType == MarkupContent) { return kind == other.kind && value == other.value && true; } return false; } @override int get hashCode => Object.hash(kind, value); @override String toString() => jsonEncoder.convert(toJson()); } /// Describes the content type that a client supports in various result literals /// like `Hover`, `ParameterInfo` or `CompletionItem`. /// /// Please note that `MarkupKinds` must not start with a `$`. This kinds are /// reserved for internal usage. class MarkupKind { const MarkupKind._(this._value); const MarkupKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { switch (obj) { case 'plaintext': case 'markdown': return true; } return false; } /// Plain text is supported as a content format static const PlainText = MarkupKind._('plaintext'); /// Markdown is supported as a content format static const Markdown = MarkupKind._('markdown'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is MarkupKind && o._value == _value; } class Message implements ToJsonable { static const jsonHandler = LspJsonHandler(Message.canParse, Message.fromJson); Message({required this.jsonrpc, this.clientRequestTime}); static Message fromJson(Map json) { if (RequestMessage.canParse(json, nullLspJsonReporter)) { return RequestMessage.fromJson(json); } if (ResponseMessage.canParse(json, nullLspJsonReporter)) { return ResponseMessage.fromJson(json); } if (NotificationMessage.canParse(json, nullLspJsonReporter)) { return NotificationMessage.fromJson(json); } final jsonrpcJson = json['jsonrpc']; final jsonrpc = jsonrpcJson as String; final clientRequestTimeJson = json['clientRequestTime']; final clientRequestTime = clientRequestTimeJson as int?; return Message(jsonrpc: jsonrpc, clientRequestTime: clientRequestTime); } final int? clientRequestTime; final String jsonrpc; Map toJson() { var __result = {}; __result['jsonrpc'] = jsonrpc; if (clientRequestTime != null) { __result['clientRequestTime'] = clientRequestTime; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('jsonrpc'); try { if (!obj.containsKey('jsonrpc')) { reporter.reportError('must not be undefined'); return false; } final jsonrpc = obj['jsonrpc']; if (jsonrpc == null) { reporter.reportError('must not be null'); return false; } if (!(jsonrpc is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('clientRequestTime'); try { final clientRequestTime = obj['clientRequestTime']; if (clientRequestTime != null && !(clientRequestTime is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Message'); return false; } } @override bool operator ==(Object other) { if (other is Message && other.runtimeType == Message) { return jsonrpc == other.jsonrpc && clientRequestTime == other.clientRequestTime && true; } return false; } @override int get hashCode => Object.hash(jsonrpc, clientRequestTime); @override String toString() => jsonEncoder.convert(toJson()); } class MessageActionItem implements ToJsonable { static const jsonHandler = LspJsonHandler(MessageActionItem.canParse, MessageActionItem.fromJson); MessageActionItem({required this.title}); static MessageActionItem fromJson(Map json) { final titleJson = json['title']; final title = titleJson as String; return MessageActionItem(title: title); } /// A short title like 'Retry', 'Open Log' etc. final String title; Map toJson() { var __result = {}; __result['title'] = title; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('title'); try { if (!obj.containsKey('title')) { reporter.reportError('must not be undefined'); return false; } final title = obj['title']; if (title == null) { reporter.reportError('must not be null'); return false; } if (!(title is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type MessageActionItem'); return false; } } @override bool operator ==(Object other) { if (other is MessageActionItem && other.runtimeType == MessageActionItem) { return title == other.title && true; } return false; } @override int get hashCode => title.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class MessageType { const MessageType(this._value); const MessageType.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// An error message. static const Error = MessageType(1); /// A warning message. static const Warning = MessageType(2); /// An information message. static const Info = MessageType(3); /// A log message. static const Log = MessageType(4); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is MessageType && o._value == _value; } /// Valid LSP methods known at the time of code generation from the spec. class Method { const Method(this._value); const Method.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } /// Constant for the '$/cancelRequest' method. static const cancelRequest = Method(r'$/cancelRequest'); /// Constant for the '$/progress' method. static const progress = Method(r'$/progress'); /// Constant for the 'initialize' method. static const initialize = Method('initialize'); /// Constant for the 'initialized' method. static const initialized = Method('initialized'); /// Constant for the 'shutdown' method. static const shutdown = Method('shutdown'); /// Constant for the 'exit' method. static const exit = Method('exit'); /// Constant for the '$/logTrace' method. static const logTrace = Method(r'$/logTrace'); /// Constant for the '$/setTrace' method. static const setTrace = Method(r'$/setTrace'); /// Constant for the 'window/showMessage' method. static const window_showMessage = Method('window/showMessage'); /// Constant for the 'window/showMessageRequest' method. static const window_showMessageRequest = Method('window/showMessageRequest'); /// Constant for the 'window/showDocument' method. static const window_showDocument = Method('window/showDocument'); /// Constant for the 'window/logMessage' method. static const window_logMessage = Method('window/logMessage'); /// Constant for the 'window/workDoneProgress/create' method. static const window_workDoneProgress_create = Method('window/workDoneProgress/create'); /// Constant for the 'window/workDoneProgress/cancel' method. static const window_workDoneProgress_cancel = Method('window/workDoneProgress/cancel'); /// Constant for the 'telemetry/event' method. static const telemetry_event = Method('telemetry/event'); /// Constant for the 'client/registerCapability' method. static const client_registerCapability = Method('client/registerCapability'); /// Constant for the 'client/unregisterCapability' method. static const client_unregisterCapability = Method('client/unregisterCapability'); /// Constant for the 'workspace/workspaceFolders' method. static const workspace_workspaceFolders = Method('workspace/workspaceFolders'); /// Constant for the 'workspace/didChangeWorkspaceFolders' method. static const workspace_didChangeWorkspaceFolders = Method('workspace/didChangeWorkspaceFolders'); /// Constant for the 'workspace/didChangeConfiguration' method. static const workspace_didChangeConfiguration = Method('workspace/didChangeConfiguration'); /// Constant for the 'workspace/configuration' method. static const workspace_configuration = Method('workspace/configuration'); /// Constant for the 'workspace/didChangeWatchedFiles' method. static const workspace_didChangeWatchedFiles = Method('workspace/didChangeWatchedFiles'); /// Constant for the 'workspace/symbol' method. static const workspace_symbol = Method('workspace/symbol'); /// Constant for the 'workspace/executeCommand' method. static const workspace_executeCommand = Method('workspace/executeCommand'); /// Constant for the 'workspace/applyEdit' method. static const workspace_applyEdit = Method('workspace/applyEdit'); /// Constant for the 'workspace/willCreateFiles' method. static const workspace_willCreateFiles = Method('workspace/willCreateFiles'); /// Constant for the 'workspace/didCreateFiles' method. static const workspace_didCreateFiles = Method('workspace/didCreateFiles'); /// Constant for the 'workspace/willRenameFiles' method. static const workspace_willRenameFiles = Method('workspace/willRenameFiles'); /// Constant for the 'workspace/didRenameFiles' method. static const workspace_didRenameFiles = Method('workspace/didRenameFiles'); /// Constant for the 'workspace/willDeleteFiles' method. static const workspace_willDeleteFiles = Method('workspace/willDeleteFiles'); /// Constant for the 'workspace/didDeleteFiles' method. static const workspace_didDeleteFiles = Method('workspace/didDeleteFiles'); /// Constant for the 'textDocument/didOpen' method. static const textDocument_didOpen = Method('textDocument/didOpen'); /// Constant for the 'textDocument/didChange' method. static const textDocument_didChange = Method('textDocument/didChange'); /// Constant for the 'textDocument/willSave' method. static const textDocument_willSave = Method('textDocument/willSave'); /// Constant for the 'textDocument/willSaveWaitUntil' method. static const textDocument_willSaveWaitUntil = Method('textDocument/willSaveWaitUntil'); /// Constant for the 'textDocument/didSave' method. static const textDocument_didSave = Method('textDocument/didSave'); /// Constant for the 'textDocument/didClose' method. static const textDocument_didClose = Method('textDocument/didClose'); /// Constant for the 'textDocument/publishDiagnostics' method. static const textDocument_publishDiagnostics = Method('textDocument/publishDiagnostics'); /// Constant for the 'textDocument/completion' method. static const textDocument_completion = Method('textDocument/completion'); /// Constant for the 'completionItem/resolve' method. static const completionItem_resolve = Method('completionItem/resolve'); /// Constant for the 'textDocument/hover' method. static const textDocument_hover = Method('textDocument/hover'); /// Constant for the 'textDocument/signatureHelp' method. static const textDocument_signatureHelp = Method('textDocument/signatureHelp'); /// Constant for the 'textDocument/declaration' method. static const textDocument_declaration = Method('textDocument/declaration'); /// Constant for the 'textDocument/definition' method. static const textDocument_definition = Method('textDocument/definition'); /// Constant for the 'textDocument/typeDefinition' method. static const textDocument_typeDefinition = Method('textDocument/typeDefinition'); /// Constant for the 'textDocument/implementation' method. static const textDocument_implementation = Method('textDocument/implementation'); /// Constant for the 'textDocument/references' method. static const textDocument_references = Method('textDocument/references'); /// Constant for the 'textDocument/documentHighlight' method. static const textDocument_documentHighlight = Method('textDocument/documentHighlight'); /// Constant for the 'textDocument/documentSymbol' method. static const textDocument_documentSymbol = Method('textDocument/documentSymbol'); /// Constant for the 'textDocument/codeAction' method. static const textDocument_codeAction = Method('textDocument/codeAction'); /// Constant for the 'codeAction/resolve' method. static const codeAction_resolve = Method('codeAction/resolve'); /// Constant for the 'textDocument/codeLens' method. static const textDocument_codeLens = Method('textDocument/codeLens'); /// Constant for the 'codeLens/resolve' method. static const codeLens_resolve = Method('codeLens/resolve'); /// Constant for the 'workspace/codeLens/refresh' method. static const workspace_codeLens_refresh = Method('workspace/codeLens/refresh'); /// Constant for the 'textDocument/documentLink' method. static const textDocument_documentLink = Method('textDocument/documentLink'); /// Constant for the 'documentLink/resolve' method. static const documentLink_resolve = Method('documentLink/resolve'); /// Constant for the 'textDocument/documentColor' method. static const textDocument_documentColor = Method('textDocument/documentColor'); /// Constant for the 'textDocument/colorPresentation' method. static const textDocument_colorPresentation = Method('textDocument/colorPresentation'); /// Constant for the 'textDocument/formatting' method. static const textDocument_formatting = Method('textDocument/formatting'); /// Constant for the 'textDocument/rangeFormatting' method. static const textDocument_rangeFormatting = Method('textDocument/rangeFormatting'); /// Constant for the 'textDocument/onTypeFormatting' method. static const textDocument_onTypeFormatting = Method('textDocument/onTypeFormatting'); /// Constant for the 'textDocument/rename' method. static const textDocument_rename = Method('textDocument/rename'); /// Constant for the 'textDocument/prepareRename' method. static const textDocument_prepareRename = Method('textDocument/prepareRename'); /// Constant for the 'textDocument/foldingRange' method. static const textDocument_foldingRange = Method('textDocument/foldingRange'); /// Constant for the 'textDocument/selectionRange' method. static const textDocument_selectionRange = Method('textDocument/selectionRange'); /// Constant for the 'textDocument/prepareCallHierarchy' method. static const textDocument_prepareCallHierarchy = Method('textDocument/prepareCallHierarchy'); /// Constant for the 'callHierarchy/incomingCalls' method. static const callHierarchy_incomingCalls = Method('callHierarchy/incomingCalls'); /// Constant for the 'callHierarchy/outgoingCalls' method. static const callHierarchy_outgoingCalls = Method('callHierarchy/outgoingCalls'); /// Constant for the 'textDocument/semanticTokens/full' method. static const textDocument_semanticTokens_full = Method('textDocument/semanticTokens/full'); /// Constant for the 'textDocument/semanticTokens/full/delta' method. static const textDocument_semanticTokens_full_delta = Method('textDocument/semanticTokens/full/delta'); /// Constant for the 'textDocument/semanticTokens/range' method. static const textDocument_semanticTokens_range = Method('textDocument/semanticTokens/range'); /// Constant for the 'workspace/semanticTokens/refresh' method. static const workspace_semanticTokens_refresh = Method('workspace/semanticTokens/refresh'); /// Constant for the 'textDocument/linkedEditingRange' method. static const textDocument_linkedEditingRange = Method('textDocument/linkedEditingRange'); /// Constant for the 'textDocument/moniker' method. static const textDocument_moniker = Method('textDocument/moniker'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is Method && o._value == _value; } /// Moniker definition to match LSIF 0.5 moniker definition. class Moniker implements ToJsonable { static const jsonHandler = LspJsonHandler(Moniker.canParse, Moniker.fromJson); Moniker( {required this.scheme, required this.identifier, required this.unique, this.kind}); static Moniker fromJson(Map json) { final schemeJson = json['scheme']; final scheme = schemeJson as String; final identifierJson = json['identifier']; final identifier = identifierJson as String; final uniqueJson = json['unique']; final unique = UniquenessLevel.fromJson(uniqueJson as String); final kindJson = json['kind']; final kind = kindJson != null ? MonikerKind.fromJson(kindJson as String) : null; return Moniker( scheme: scheme, identifier: identifier, unique: unique, kind: kind); } /// The identifier of the moniker. The value is opaque in LSIF however schema /// owners are allowed to define the structure if they want. final String identifier; /// The moniker kind if known. final MonikerKind? kind; /// The scheme of the moniker. For example tsc or .Net final String scheme; /// The scope in which the moniker is unique final UniquenessLevel unique; Map toJson() { var __result = {}; __result['scheme'] = scheme; __result['identifier'] = identifier; __result['unique'] = unique.toJson(); if (kind != null) { __result['kind'] = kind?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('scheme'); try { if (!obj.containsKey('scheme')) { reporter.reportError('must not be undefined'); return false; } final scheme = obj['scheme']; if (scheme == null) { reporter.reportError('must not be null'); return false; } if (!(scheme is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('identifier'); try { if (!obj.containsKey('identifier')) { reporter.reportError('must not be undefined'); return false; } final identifier = obj['identifier']; if (identifier == null) { reporter.reportError('must not be null'); return false; } if (!(identifier is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('unique'); try { if (!obj.containsKey('unique')) { reporter.reportError('must not be undefined'); return false; } final unique = obj['unique']; if (unique == null) { reporter.reportError('must not be null'); return false; } if (!(UniquenessLevel.canParse(unique, reporter))) { reporter.reportError('must be of type UniquenessLevel'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { final kind = obj['kind']; if (kind != null && !(MonikerKind.canParse(kind, reporter))) { reporter.reportError('must be of type MonikerKind'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Moniker'); return false; } } @override bool operator ==(Object other) { if (other is Moniker && other.runtimeType == Moniker) { return scheme == other.scheme && identifier == other.identifier && unique == other.unique && kind == other.kind && true; } return false; } @override int get hashCode => Object.hash(scheme, identifier, unique, kind); @override String toString() => jsonEncoder.convert(toJson()); } class MonikerClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( MonikerClientCapabilities.canParse, MonikerClientCapabilities.fromJson); MonikerClientCapabilities({this.dynamicRegistration}); static MonikerClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return MonikerClientCapabilities(dynamicRegistration: dynamicRegistration); } /// Whether implementation supports dynamic registration. If this is set to /// `true` the client supports the new `(TextDocumentRegistrationOptions & /// StaticRegistrationOptions)` return value for the corresponding server /// capability as well. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type MonikerClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is MonikerClientCapabilities && other.runtimeType == MonikerClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// The moniker kind. class MonikerKind { const MonikerKind(this._value); const MonikerKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } /// The moniker represent a symbol that is imported into a project static const import = MonikerKind('import'); /// The moniker represents a symbol that is exported from a project static const export = MonikerKind('export'); /// The moniker represents a symbol that is local to a project (e.g. a local /// variable of a function, a class not visible outside the project, ...) static const local = MonikerKind('local'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is MonikerKind && o._value == _value; } class MonikerOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(MonikerOptions.canParse, MonikerOptions.fromJson); MonikerOptions({this.workDoneProgress}); static MonikerOptions fromJson(Map json) { if (MonikerRegistrationOptions.canParse(json, nullLspJsonReporter)) { return MonikerRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return MonikerOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type MonikerOptions'); return false; } } @override bool operator ==(Object other) { if (other is MonikerOptions && other.runtimeType == MonikerOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class MonikerParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(MonikerParams.canParse, MonikerParams.fromJson); MonikerParams( {required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static MonikerParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return MonikerParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type MonikerParams'); return false; } } @override bool operator ==(Object other) { if (other is MonikerParams && other.runtimeType == MonikerParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class MonikerRegistrationOptions implements TextDocumentRegistrationOptions, MonikerOptions, ToJsonable { static const jsonHandler = LspJsonHandler( MonikerRegistrationOptions.canParse, MonikerRegistrationOptions.fromJson); MonikerRegistrationOptions({this.documentSelector, this.workDoneProgress}); static MonikerRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return MonikerRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type MonikerRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is MonikerRegistrationOptions && other.runtimeType == MonikerRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class NotificationMessage implements Message, IncomingMessage, ToJsonable { static const jsonHandler = LspJsonHandler( NotificationMessage.canParse, NotificationMessage.fromJson); NotificationMessage( {required this.method, this.params, required this.jsonrpc, this.clientRequestTime}); static NotificationMessage fromJson(Map json) { final methodJson = json['method']; final method = Method.fromJson(methodJson as String); final paramsJson = json['params']; final params = paramsJson; final jsonrpcJson = json['jsonrpc']; final jsonrpc = jsonrpcJson as String; final clientRequestTimeJson = json['clientRequestTime']; final clientRequestTime = clientRequestTimeJson as int?; return NotificationMessage( method: method, params: params, jsonrpc: jsonrpc, clientRequestTime: clientRequestTime); } final int? clientRequestTime; final String jsonrpc; /// The method to be invoked. final Method method; /// The notification's params. final Object? params; Map toJson() { var __result = {}; __result['method'] = method.toJson(); if (params != null) { __result['params'] = params; } __result['jsonrpc'] = jsonrpc; if (clientRequestTime != null) { __result['clientRequestTime'] = clientRequestTime; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('method'); try { if (!obj.containsKey('method')) { reporter.reportError('must not be undefined'); return false; } final method = obj['method']; if (method == null) { reporter.reportError('must not be null'); return false; } if (!(Method.canParse(method, reporter))) { reporter.reportError('must be of type Method'); return false; } } finally { reporter.pop(); } reporter.push('jsonrpc'); try { if (!obj.containsKey('jsonrpc')) { reporter.reportError('must not be undefined'); return false; } final jsonrpc = obj['jsonrpc']; if (jsonrpc == null) { reporter.reportError('must not be null'); return false; } if (!(jsonrpc is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('clientRequestTime'); try { final clientRequestTime = obj['clientRequestTime']; if (clientRequestTime != null && !(clientRequestTime is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type NotificationMessage'); return false; } } @override bool operator ==(Object other) { if (other is NotificationMessage && other.runtimeType == NotificationMessage) { return method == other.method && params == other.params && jsonrpc == other.jsonrpc && clientRequestTime == other.clientRequestTime && true; } return false; } @override int get hashCode => Object.hash(method, params, jsonrpc, clientRequestTime); @override String toString() => jsonEncoder.convert(toJson()); } class OptionalVersionedTextDocumentIdentifier implements TextDocumentIdentifier, ToJsonable { static const jsonHandler = LspJsonHandler( OptionalVersionedTextDocumentIdentifier.canParse, OptionalVersionedTextDocumentIdentifier.fromJson); OptionalVersionedTextDocumentIdentifier({this.version, required this.uri}); static OptionalVersionedTextDocumentIdentifier fromJson( Map json) { final versionJson = json['version']; final version = versionJson as int?; final uriJson = json['uri']; final uri = uriJson as String; return OptionalVersionedTextDocumentIdentifier(version: version, uri: uri); } /// The text document's URI. final String uri; /// The version number of this document. If an optional versioned text /// document identifier is sent from the server to the client and the file is /// not open in the editor (the server has not received an open notification /// before) the server can send `null` to indicate that the version is known /// and the content on disk is the master (as specified with document content /// ownership). /// /// The version number of a document will increase after each change, /// including undo/redo. The number doesn't need to be consecutive. final int? version; Map toJson() { var __result = {}; __result['version'] = version; __result['uri'] = uri; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('version'); try { if (!obj.containsKey('version')) { reporter.reportError('must not be undefined'); return false; } final version = obj['version']; if (version != null && !(version is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type OptionalVersionedTextDocumentIdentifier'); return false; } } @override bool operator ==(Object other) { if (other is OptionalVersionedTextDocumentIdentifier && other.runtimeType == OptionalVersionedTextDocumentIdentifier) { return version == other.version && uri == other.uri && true; } return false; } @override int get hashCode => Object.hash(version, uri); @override String toString() => jsonEncoder.convert(toJson()); } /// Represents a parameter of a callable-signature. A parameter can have a label /// and a doc-comment. class ParameterInformation implements ToJsonable { static const jsonHandler = LspJsonHandler( ParameterInformation.canParse, ParameterInformation.fromJson); ParameterInformation({required this.label, this.documentation}); static ParameterInformation fromJson(Map json) { final labelJson = json['label']; final label = labelJson as String; final documentationJson = json['documentation']; final documentation = documentationJson == null ? null : (documentationJson is String ? Either2.t1(documentationJson) : (MarkupContent.canParse(documentationJson, nullLspJsonReporter) ? Either2.t2(MarkupContent.fromJson( documentationJson as Map)) : (throw '''$documentationJson was not one of (String, MarkupContent)'''))); return ParameterInformation(label: label, documentation: documentation); } /// The human-readable doc-comment of this parameter. Will be shown in the UI /// but can be omitted. final Either2? documentation; /// The label of this parameter information. /// /// Either a string or an inclusive start and exclusive end offsets within its /// containing signature label. (see SignatureInformation.label). The offsets /// are based on a UTF-16 string representation as `Position` and `Range` /// does. /// /// *Note*: a label of type string should be a substring of its containing /// signature label. Its intended use case is to highlight the parameter label /// part in the `SignatureInformation.label`. final String label; Map toJson() { var __result = {}; __result['label'] = label; if (documentation != null) { __result['documentation'] = documentation; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { if (!obj.containsKey('label')) { reporter.reportError('must not be undefined'); return false; } final label = obj['label']; if (label == null) { reporter.reportError('must not be null'); return false; } if (!(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('documentation'); try { final documentation = obj['documentation']; if (documentation != null && !((documentation is String || MarkupContent.canParse(documentation, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ParameterInformation'); return false; } } @override bool operator ==(Object other) { if (other is ParameterInformation && other.runtimeType == ParameterInformation) { return label == other.label && documentation == other.documentation && true; } return false; } @override int get hashCode => Object.hash(label, documentation); @override String toString() => jsonEncoder.convert(toJson()); } class PartialResultParams implements ToJsonable { static const jsonHandler = LspJsonHandler( PartialResultParams.canParse, PartialResultParams.fromJson); PartialResultParams({this.partialResultToken}); static PartialResultParams fromJson(Map json) { if (WorkspaceSymbolParams.canParse(json, nullLspJsonReporter)) { return WorkspaceSymbolParams.fromJson(json); } if (CompletionParams.canParse(json, nullLspJsonReporter)) { return CompletionParams.fromJson(json); } if (DeclarationParams.canParse(json, nullLspJsonReporter)) { return DeclarationParams.fromJson(json); } if (DefinitionParams.canParse(json, nullLspJsonReporter)) { return DefinitionParams.fromJson(json); } if (TypeDefinitionParams.canParse(json, nullLspJsonReporter)) { return TypeDefinitionParams.fromJson(json); } if (ImplementationParams.canParse(json, nullLspJsonReporter)) { return ImplementationParams.fromJson(json); } if (ReferenceParams.canParse(json, nullLspJsonReporter)) { return ReferenceParams.fromJson(json); } if (DocumentHighlightParams.canParse(json, nullLspJsonReporter)) { return DocumentHighlightParams.fromJson(json); } if (DocumentSymbolParams.canParse(json, nullLspJsonReporter)) { return DocumentSymbolParams.fromJson(json); } if (CodeActionParams.canParse(json, nullLspJsonReporter)) { return CodeActionParams.fromJson(json); } if (CodeLensParams.canParse(json, nullLspJsonReporter)) { return CodeLensParams.fromJson(json); } if (DocumentLinkParams.canParse(json, nullLspJsonReporter)) { return DocumentLinkParams.fromJson(json); } if (DocumentColorParams.canParse(json, nullLspJsonReporter)) { return DocumentColorParams.fromJson(json); } if (ColorPresentationParams.canParse(json, nullLspJsonReporter)) { return ColorPresentationParams.fromJson(json); } if (FoldingRangeParams.canParse(json, nullLspJsonReporter)) { return FoldingRangeParams.fromJson(json); } if (SelectionRangeParams.canParse(json, nullLspJsonReporter)) { return SelectionRangeParams.fromJson(json); } if (CallHierarchyIncomingCallsParams.canParse(json, nullLspJsonReporter)) { return CallHierarchyIncomingCallsParams.fromJson(json); } if (CallHierarchyOutgoingCallsParams.canParse(json, nullLspJsonReporter)) { return CallHierarchyOutgoingCallsParams.fromJson(json); } if (SemanticTokensParams.canParse(json, nullLspJsonReporter)) { return SemanticTokensParams.fromJson(json); } if (SemanticTokensDeltaParams.canParse(json, nullLspJsonReporter)) { return SemanticTokensDeltaParams.fromJson(json); } if (SemanticTokensRangeParams.canParse(json, nullLspJsonReporter)) { return SemanticTokensRangeParams.fromJson(json); } if (MonikerParams.canParse(json, nullLspJsonReporter)) { return MonikerParams.fromJson(json); } final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return PartialResultParams(partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; Map toJson() { var __result = {}; if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type PartialResultParams'); return false; } } @override bool operator ==(Object other) { if (other is PartialResultParams && other.runtimeType == PartialResultParams) { return partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => partialResultToken.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class Position implements ToJsonable { static const jsonHandler = LspJsonHandler(Position.canParse, Position.fromJson); Position({required this.line, required this.character}); static Position fromJson(Map json) { final lineJson = json['line']; final line = lineJson as int; final characterJson = json['character']; final character = characterJson as int; return Position(line: line, character: character); } /// Character offset on a line in a document (zero-based). Assuming that the /// line is represented as a string, the `character` value represents the gap /// between the `character` and `character + 1`. /// /// If the character value is greater than the line length it defaults back to /// the line length. final int character; /// Line position in a document (zero-based). final int line; Map toJson() { var __result = {}; __result['line'] = line; __result['character'] = character; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } 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(); } return true; } else { reporter.reportError('must be of type Position'); return false; } } @override bool operator ==(Object other) { if (other is Position && other.runtimeType == Position) { return line == other.line && character == other.character && true; } return false; } @override int get hashCode => Object.hash(line, character); @override String toString() => jsonEncoder.convert(toJson()); } class PrepareRenameParams implements TextDocumentPositionParams, ToJsonable { static const jsonHandler = LspJsonHandler( PrepareRenameParams.canParse, PrepareRenameParams.fromJson); PrepareRenameParams({required this.textDocument, required this.position}); static PrepareRenameParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); return PrepareRenameParams(textDocument: textDocument, position: position); } /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type PrepareRenameParams'); return false; } } @override bool operator ==(Object other) { if (other is PrepareRenameParams && other.runtimeType == PrepareRenameParams) { return textDocument == other.textDocument && position == other.position && true; } return false; } @override int get hashCode => Object.hash(textDocument, position); @override String toString() => jsonEncoder.convert(toJson()); } class PrepareSupportDefaultBehavior { const PrepareSupportDefaultBehavior(this._value); const PrepareSupportDefaultBehavior.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// The client's default behavior is to select the identifier according the to /// language's syntax rule. static const Identifier = PrepareSupportDefaultBehavior(1); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is PrepareSupportDefaultBehavior && o._value == _value; } class ProgressParams implements ToJsonable { static const jsonHandler = LspJsonHandler(ProgressParams.canParse, ProgressParams.fromJson); ProgressParams({required this.token, this.value}); static ProgressParams fromJson(Map json) { final tokenJson = json['token']; final token = tokenJson is int ? Either2.t1(tokenJson) : (tokenJson is String ? Either2.t2(tokenJson) : (throw '''$tokenJson was not one of (int, String)''')); final valueJson = json['value']; final value = valueJson; return ProgressParams(token: token, value: value); } /// The progress token provided by the client or server. final Either2 token; /// The progress data. final Object? value; Map toJson() { var __result = {}; __result['token'] = token; __result['value'] = value; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('token'); try { if (!obj.containsKey('token')) { reporter.reportError('must not be undefined'); return false; } final token = obj['token']; if (token == null) { reporter.reportError('must not be null'); return false; } if (!((token is int || token is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ProgressParams'); return false; } } @override bool operator ==(Object other) { if (other is ProgressParams && other.runtimeType == ProgressParams) { return token == other.token && value == other.value && true; } return false; } @override int get hashCode => Object.hash(token, value); @override String toString() => jsonEncoder.convert(toJson()); } class PublishDiagnosticsClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( PublishDiagnosticsClientCapabilities.canParse, PublishDiagnosticsClientCapabilities.fromJson); PublishDiagnosticsClientCapabilities( {this.relatedInformation, this.tagSupport, this.versionSupport, this.codeDescriptionSupport, this.dataSupport}); static PublishDiagnosticsClientCapabilities fromJson( Map json) { final relatedInformationJson = json['relatedInformation']; final relatedInformation = relatedInformationJson as bool?; final tagSupportJson = json['tagSupport']; final tagSupport = tagSupportJson != null ? PublishDiagnosticsClientCapabilitiesTagSupport.fromJson( tagSupportJson as Map) : null; final versionSupportJson = json['versionSupport']; final versionSupport = versionSupportJson as bool?; final codeDescriptionSupportJson = json['codeDescriptionSupport']; final codeDescriptionSupport = codeDescriptionSupportJson as bool?; final dataSupportJson = json['dataSupport']; final dataSupport = dataSupportJson as bool?; return PublishDiagnosticsClientCapabilities( relatedInformation: relatedInformation, tagSupport: tagSupport, versionSupport: versionSupport, codeDescriptionSupport: codeDescriptionSupport, dataSupport: dataSupport); } /// Client supports a codeDescription property /// @since 3.16.0 final bool? codeDescriptionSupport; /// Whether code action supports the `data` property which is preserved /// between a `textDocument/publishDiagnostics` and `textDocument/codeAction` /// request. /// @since 3.16.0 final bool? dataSupport; /// Whether the clients accepts diagnostics with related information. final bool? relatedInformation; /// Client supports the tag property to provide meta data about a diagnostic. /// Clients supporting tags have to handle unknown tags gracefully. /// @since 3.15.0 final PublishDiagnosticsClientCapabilitiesTagSupport? tagSupport; /// Whether the client interprets the version property of the /// `textDocument/publishDiagnostics` notification's parameter. /// @since 3.15.0 final bool? versionSupport; Map toJson() { var __result = {}; if (relatedInformation != null) { __result['relatedInformation'] = relatedInformation; } if (tagSupport != null) { __result['tagSupport'] = tagSupport?.toJson(); } if (versionSupport != null) { __result['versionSupport'] = versionSupport; } if (codeDescriptionSupport != null) { __result['codeDescriptionSupport'] = codeDescriptionSupport; } if (dataSupport != null) { __result['dataSupport'] = dataSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('relatedInformation'); try { final relatedInformation = obj['relatedInformation']; if (relatedInformation != null && !(relatedInformation is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('tagSupport'); try { final tagSupport = obj['tagSupport']; if (tagSupport != null && !(PublishDiagnosticsClientCapabilitiesTagSupport.canParse( tagSupport, reporter))) { reporter.reportError( 'must be of type PublishDiagnosticsClientCapabilitiesTagSupport'); return false; } } finally { reporter.pop(); } reporter.push('versionSupport'); try { final versionSupport = obj['versionSupport']; if (versionSupport != null && !(versionSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('codeDescriptionSupport'); try { final codeDescriptionSupport = obj['codeDescriptionSupport']; if (codeDescriptionSupport != null && !(codeDescriptionSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('dataSupport'); try { final dataSupport = obj['dataSupport']; if (dataSupport != null && !(dataSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type PublishDiagnosticsClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is PublishDiagnosticsClientCapabilities && other.runtimeType == PublishDiagnosticsClientCapabilities) { return relatedInformation == other.relatedInformation && tagSupport == other.tagSupport && versionSupport == other.versionSupport && codeDescriptionSupport == other.codeDescriptionSupport && dataSupport == other.dataSupport && true; } return false; } @override int get hashCode => Object.hash(relatedInformation, tagSupport, versionSupport, codeDescriptionSupport, dataSupport); @override String toString() => jsonEncoder.convert(toJson()); } class PublishDiagnosticsClientCapabilitiesTagSupport implements ToJsonable { static const jsonHandler = LspJsonHandler( PublishDiagnosticsClientCapabilitiesTagSupport.canParse, PublishDiagnosticsClientCapabilitiesTagSupport.fromJson); PublishDiagnosticsClientCapabilitiesTagSupport({required this.valueSet}); static PublishDiagnosticsClientCapabilitiesTagSupport fromJson( Map json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List) .map((item) => DiagnosticTag.fromJson(item as int)) .toList(); return PublishDiagnosticsClientCapabilitiesTagSupport(valueSet: valueSet); } /// The tags supported by the client. final List valueSet; Map toJson() { var __result = {}; __result['valueSet'] = valueSet.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (valueSet .every((item) => DiagnosticTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type PublishDiagnosticsClientCapabilitiesTagSupport'); return false; } } @override bool operator ==(Object other) { if (other is PublishDiagnosticsClientCapabilitiesTagSupport && other.runtimeType == PublishDiagnosticsClientCapabilitiesTagSupport) { return listEqual(valueSet, other.valueSet, (DiagnosticTag a, DiagnosticTag b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(valueSet); @override String toString() => jsonEncoder.convert(toJson()); } class PublishDiagnosticsParams implements ToJsonable { static const jsonHandler = LspJsonHandler( PublishDiagnosticsParams.canParse, PublishDiagnosticsParams.fromJson); PublishDiagnosticsParams( {required this.uri, this.version, required this.diagnostics}); static PublishDiagnosticsParams fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; final versionJson = json['version']; final version = versionJson as int?; final diagnosticsJson = json['diagnostics']; final diagnostics = (diagnosticsJson as List) .map((item) => Diagnostic.fromJson(item as Map)) .toList(); return PublishDiagnosticsParams( uri: uri, version: version, diagnostics: diagnostics); } /// An array of diagnostic information items. final List diagnostics; /// The URI for which diagnostic information is reported. final String uri; /// Optional the version number of the document the diagnostics are published /// for. /// @since 3.15.0 final int? version; Map toJson() { var __result = {}; __result['uri'] = uri; if (version != null) { __result['version'] = version; } __result['diagnostics'] = diagnostics.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('version'); try { final version = obj['version']; if (version != null && !(version is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('diagnostics'); try { if (!obj.containsKey('diagnostics')) { reporter.reportError('must not be undefined'); return false; } final diagnostics = obj['diagnostics']; if (diagnostics == null) { reporter.reportError('must not be null'); return false; } if (!((diagnostics is List && (diagnostics .every((item) => Diagnostic.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type PublishDiagnosticsParams'); return false; } } @override bool operator ==(Object other) { if (other is PublishDiagnosticsParams && other.runtimeType == PublishDiagnosticsParams) { return uri == other.uri && version == other.version && listEqual(diagnostics, other.diagnostics, (Diagnostic a, Diagnostic b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(uri, version, lspHashCode(diagnostics)); @override String toString() => jsonEncoder.convert(toJson()); } class Range implements ToJsonable { static const jsonHandler = LspJsonHandler(Range.canParse, Range.fromJson); Range({required this.start, required this.end}); static Range fromJson(Map json) { final startJson = json['start']; final start = Position.fromJson(startJson as Map); final endJson = json['end']; final end = Position.fromJson(endJson as Map); return Range(start: start, end: end); } /// The range's end position. final Position end; /// The range's start position. final Position start; Map toJson() { var __result = {}; __result['start'] = start.toJson(); __result['end'] = end.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('start'); try { if (!obj.containsKey('start')) { reporter.reportError('must not be undefined'); return false; } final start = obj['start']; if (start == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(start, reporter))) { reporter.reportError('must be of type Position'); return false; } } finally { reporter.pop(); } reporter.push('end'); try { if (!obj.containsKey('end')) { reporter.reportError('must not be undefined'); return false; } final end = obj['end']; if (end == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(end, reporter))) { reporter.reportError('must be of type Position'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Range'); return false; } } @override bool operator ==(Object other) { if (other is Range && other.runtimeType == Range) { return start == other.start && end == other.end && true; } return false; } @override int get hashCode => Object.hash(start, end); @override String toString() => jsonEncoder.convert(toJson()); } class RangeAndPlaceholder implements ToJsonable { static const jsonHandler = LspJsonHandler( RangeAndPlaceholder.canParse, RangeAndPlaceholder.fromJson); RangeAndPlaceholder({required this.range, required this.placeholder}); static RangeAndPlaceholder fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final placeholderJson = json['placeholder']; final placeholder = placeholderJson as String; return RangeAndPlaceholder(range: range, placeholder: placeholder); } final String placeholder; final Range range; Map toJson() { var __result = {}; __result['range'] = range.toJson(); __result['placeholder'] = placeholder; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('placeholder'); try { if (!obj.containsKey('placeholder')) { reporter.reportError('must not be undefined'); return false; } final placeholder = obj['placeholder']; if (placeholder == null) { reporter.reportError('must not be null'); return false; } if (!(placeholder is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RangeAndPlaceholder'); return false; } } @override bool operator ==(Object other) { if (other is RangeAndPlaceholder && other.runtimeType == RangeAndPlaceholder) { return range == other.range && placeholder == other.placeholder && true; } return false; } @override int get hashCode => Object.hash(range, placeholder); @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( ReferenceClientCapabilities.canParse, ReferenceClientCapabilities.fromJson); ReferenceClientCapabilities({this.dynamicRegistration}); static ReferenceClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return ReferenceClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether references supports dynamic registration. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type ReferenceClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ReferenceClientCapabilities && other.runtimeType == ReferenceClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceContext implements ToJsonable { static const jsonHandler = LspJsonHandler(ReferenceContext.canParse, ReferenceContext.fromJson); ReferenceContext({required this.includeDeclaration}); static ReferenceContext fromJson(Map json) { final includeDeclarationJson = json['includeDeclaration']; final includeDeclaration = includeDeclarationJson as bool; return ReferenceContext(includeDeclaration: includeDeclaration); } /// Include the declaration of the current symbol. final bool includeDeclaration; Map toJson() { var __result = {}; __result['includeDeclaration'] = includeDeclaration; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('includeDeclaration'); try { if (!obj.containsKey('includeDeclaration')) { reporter.reportError('must not be undefined'); return false; } final includeDeclaration = obj['includeDeclaration']; if (includeDeclaration == null) { reporter.reportError('must not be null'); return false; } if (!(includeDeclaration is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ReferenceContext'); return false; } } @override bool operator ==(Object other) { if (other is ReferenceContext && other.runtimeType == ReferenceContext) { return includeDeclaration == other.includeDeclaration && true; } return false; } @override int get hashCode => includeDeclaration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(ReferenceOptions.canParse, ReferenceOptions.fromJson); ReferenceOptions({this.workDoneProgress}); static ReferenceOptions fromJson(Map json) { if (ReferenceRegistrationOptions.canParse(json, nullLspJsonReporter)) { return ReferenceRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return ReferenceOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ReferenceOptions'); return false; } } @override bool operator ==(Object other) { if (other is ReferenceOptions && other.runtimeType == ReferenceOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler(ReferenceParams.canParse, ReferenceParams.fromJson); ReferenceParams( {required this.context, required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static ReferenceParams fromJson(Map json) { final contextJson = json['context']; final context = ReferenceContext.fromJson(contextJson as Map); final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return ReferenceParams( context: context, textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } final ReferenceContext context; /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['context'] = context.toJson(); __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('context'); try { if (!obj.containsKey('context')) { reporter.reportError('must not be undefined'); return false; } final context = obj['context']; if (context == null) { reporter.reportError('must not be null'); return false; } if (!(ReferenceContext.canParse(context, reporter))) { reporter.reportError('must be of type ReferenceContext'); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ReferenceParams'); return false; } } @override bool operator ==(Object other) { if (other is ReferenceParams && other.runtimeType == ReferenceParams) { return context == other.context && textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash( context, textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceRegistrationOptions implements TextDocumentRegistrationOptions, ReferenceOptions, ToJsonable { static const jsonHandler = LspJsonHandler( ReferenceRegistrationOptions.canParse, ReferenceRegistrationOptions.fromJson); ReferenceRegistrationOptions({this.documentSelector, this.workDoneProgress}); static ReferenceRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return ReferenceRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ReferenceRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is ReferenceRegistrationOptions && other.runtimeType == ReferenceRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// General parameters to register for a capability. class Registration implements ToJsonable { static const jsonHandler = LspJsonHandler(Registration.canParse, Registration.fromJson); Registration({required this.id, required this.method, this.registerOptions}); static Registration fromJson(Map json) { final idJson = json['id']; final id = idJson as String; final methodJson = json['method']; final method = methodJson as String; final registerOptionsJson = json['registerOptions']; final registerOptions = registerOptionsJson; return Registration( id: id, method: method, registerOptions: registerOptions); } /// The id used to register the request. The id can be used to deregister the /// request again. final String id; /// The method / capability to register for. final String method; /// Options necessary for the registration. final Object? registerOptions; Map toJson() { var __result = {}; __result['id'] = id; __result['method'] = method; if (registerOptions != null) { __result['registerOptions'] = registerOptions; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { if (!obj.containsKey('id')) { reporter.reportError('must not be undefined'); return false; } final id = obj['id']; if (id == null) { reporter.reportError('must not be null'); return false; } if (!(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('method'); try { if (!obj.containsKey('method')) { reporter.reportError('must not be undefined'); return false; } final method = obj['method']; if (method == null) { reporter.reportError('must not be null'); return false; } if (!(method is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Registration'); return false; } } @override bool operator ==(Object other) { if (other is Registration && other.runtimeType == Registration) { return id == other.id && method == other.method && registerOptions == other.registerOptions && true; } return false; } @override int get hashCode => Object.hash(id, method, registerOptions); @override String toString() => jsonEncoder.convert(toJson()); } class RegistrationParams implements ToJsonable { static const jsonHandler = LspJsonHandler(RegistrationParams.canParse, RegistrationParams.fromJson); RegistrationParams({required this.registrations}); static RegistrationParams fromJson(Map json) { final registrationsJson = json['registrations']; final registrations = (registrationsJson as List) .map((item) => Registration.fromJson(item as Map)) .toList(); return RegistrationParams(registrations: registrations); } final List registrations; Map toJson() { var __result = {}; __result['registrations'] = registrations.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('registrations'); try { if (!obj.containsKey('registrations')) { reporter.reportError('must not be undefined'); return false; } final registrations = obj['registrations']; if (registrations == null) { reporter.reportError('must not be null'); return false; } if (!((registrations is List && (registrations .every((item) => Registration.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RegistrationParams'); return false; } } @override bool operator ==(Object other) { if (other is RegistrationParams && other.runtimeType == RegistrationParams) { return listEqual(registrations, other.registrations, (Registration a, Registration b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(registrations); @override String toString() => jsonEncoder.convert(toJson()); } /// Client capabilities specific to regular expressions. class RegularExpressionsClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( RegularExpressionsClientCapabilities.canParse, RegularExpressionsClientCapabilities.fromJson); RegularExpressionsClientCapabilities({required this.engine, this.version}); static RegularExpressionsClientCapabilities fromJson( Map json) { final engineJson = json['engine']; final engine = engineJson as String; final versionJson = json['version']; final version = versionJson as String?; return RegularExpressionsClientCapabilities( engine: engine, version: version); } /// The engine's name. final String engine; /// The engine's version. final String? version; Map toJson() { var __result = {}; __result['engine'] = engine; if (version != null) { __result['version'] = version; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('engine'); try { if (!obj.containsKey('engine')) { reporter.reportError('must not be undefined'); return false; } final engine = obj['engine']; if (engine == null) { reporter.reportError('must not be null'); return false; } if (!(engine is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('version'); try { final version = obj['version']; if (version != null && !(version is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type RegularExpressionsClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is RegularExpressionsClientCapabilities && other.runtimeType == RegularExpressionsClientCapabilities) { return engine == other.engine && version == other.version && true; } return false; } @override int get hashCode => Object.hash(engine, version); @override String toString() => jsonEncoder.convert(toJson()); } class RenameClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( RenameClientCapabilities.canParse, RenameClientCapabilities.fromJson); RenameClientCapabilities( {this.dynamicRegistration, this.prepareSupport, this.prepareSupportDefaultBehavior, this.honorsChangeAnnotations}); static RenameClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final prepareSupportJson = json['prepareSupport']; final prepareSupport = prepareSupportJson as bool?; final prepareSupportDefaultBehaviorJson = json['prepareSupportDefaultBehavior']; final prepareSupportDefaultBehavior = prepareSupportDefaultBehaviorJson != null ? PrepareSupportDefaultBehavior.fromJson( prepareSupportDefaultBehaviorJson as int) : null; final honorsChangeAnnotationsJson = json['honorsChangeAnnotations']; final honorsChangeAnnotations = honorsChangeAnnotationsJson as bool?; return RenameClientCapabilities( dynamicRegistration: dynamicRegistration, prepareSupport: prepareSupport, prepareSupportDefaultBehavior: prepareSupportDefaultBehavior, honorsChangeAnnotations: honorsChangeAnnotations); } /// Whether rename supports dynamic registration. final bool? dynamicRegistration; /// Whether th client honors the change annotations in text edits and resource /// operations returned via the rename request's workspace edit by for example /// presenting the workspace edit in the user interface and asking for /// confirmation. /// @since 3.16.0 final bool? honorsChangeAnnotations; /// Client supports testing for validity of rename operations before /// execution. /// @since version 3.12.0 final bool? prepareSupport; /// Client supports the default behavior result (`{ defaultBehavior: boolean /// }`). /// /// The value indicates the default behavior used by the client. /// @since version 3.16.0 final PrepareSupportDefaultBehavior? prepareSupportDefaultBehavior; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (prepareSupport != null) { __result['prepareSupport'] = prepareSupport; } if (prepareSupportDefaultBehavior != null) { __result['prepareSupportDefaultBehavior'] = prepareSupportDefaultBehavior?.toJson(); } if (honorsChangeAnnotations != null) { __result['honorsChangeAnnotations'] = honorsChangeAnnotations; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('prepareSupport'); try { final prepareSupport = obj['prepareSupport']; if (prepareSupport != null && !(prepareSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('prepareSupportDefaultBehavior'); try { final prepareSupportDefaultBehavior = obj['prepareSupportDefaultBehavior']; if (prepareSupportDefaultBehavior != null && !(PrepareSupportDefaultBehavior.canParse( prepareSupportDefaultBehavior, reporter))) { reporter.reportError('must be of type PrepareSupportDefaultBehavior'); return false; } } finally { reporter.pop(); } reporter.push('honorsChangeAnnotations'); try { final honorsChangeAnnotations = obj['honorsChangeAnnotations']; if (honorsChangeAnnotations != null && !(honorsChangeAnnotations is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is RenameClientCapabilities && other.runtimeType == RenameClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && prepareSupport == other.prepareSupport && prepareSupportDefaultBehavior == other.prepareSupportDefaultBehavior && honorsChangeAnnotations == other.honorsChangeAnnotations && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, prepareSupport, prepareSupportDefaultBehavior, honorsChangeAnnotations); @override String toString() => jsonEncoder.convert(toJson()); } /// Rename file operation class RenameFile implements ToJsonable { static const jsonHandler = LspJsonHandler(RenameFile.canParse, RenameFile.fromJson); RenameFile( {this.kind = 'rename', required this.oldUri, required this.newUri, this.options, this.annotationId}) { if (kind != 'rename') { throw 'kind may only be the literal \'rename\''; } } static RenameFile fromJson(Map json) { final kindJson = json['kind']; final kind = kindJson as String; final oldUriJson = json['oldUri']; final oldUri = oldUriJson as String; final newUriJson = json['newUri']; final newUri = newUriJson as String; final optionsJson = json['options']; final options = optionsJson != null ? RenameFileOptions.fromJson(optionsJson as Map) : null; final annotationIdJson = json['annotationId']; final annotationId = annotationIdJson as String?; return RenameFile( kind: kind, oldUri: oldUri, newUri: newUri, options: options, annotationId: annotationId); } /// An optional annotation identifer describing the operation. /// @since 3.16.0 final String? annotationId; /// A rename final String kind; /// The new location. final String newUri; /// The old (existing) location. final String oldUri; /// Rename options. final RenameFileOptions? options; Map toJson() { var __result = {}; __result['kind'] = kind; __result['oldUri'] = oldUri; __result['newUri'] = newUri; if (options != null) { __result['options'] = options?.toJson(); } if (annotationId != null) { __result['annotationId'] = annotationId; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(kind == 'rename')) { reporter.reportError('must be the literal \'rename\''); return false; } } finally { reporter.pop(); } reporter.push('oldUri'); try { if (!obj.containsKey('oldUri')) { reporter.reportError('must not be undefined'); return false; } final oldUri = obj['oldUri']; if (oldUri == null) { reporter.reportError('must not be null'); return false; } if (!(oldUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('newUri'); try { if (!obj.containsKey('newUri')) { reporter.reportError('must not be undefined'); return false; } final newUri = obj['newUri']; if (newUri == null) { reporter.reportError('must not be null'); return false; } if (!(newUri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('options'); try { final options = obj['options']; if (options != null && !(RenameFileOptions.canParse(options, reporter))) { reporter.reportError('must be of type RenameFileOptions'); return false; } } finally { reporter.pop(); } reporter.push('annotationId'); try { final annotationId = obj['annotationId']; if (annotationId != null && !(annotationId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameFile'); return false; } } @override bool operator ==(Object other) { if (other is RenameFile && other.runtimeType == RenameFile) { return kind == other.kind && oldUri == other.oldUri && newUri == other.newUri && options == other.options && annotationId == other.annotationId && true; } return false; } @override int get hashCode => Object.hash(kind, oldUri, newUri, options, annotationId); @override String toString() => jsonEncoder.convert(toJson()); } /// Rename file options class RenameFileOptions implements ToJsonable { static const jsonHandler = LspJsonHandler(RenameFileOptions.canParse, RenameFileOptions.fromJson); RenameFileOptions({this.overwrite, this.ignoreIfExists}); static RenameFileOptions fromJson(Map json) { final overwriteJson = json['overwrite']; final overwrite = overwriteJson as bool?; final ignoreIfExistsJson = json['ignoreIfExists']; final ignoreIfExists = ignoreIfExistsJson as bool?; return RenameFileOptions( overwrite: overwrite, ignoreIfExists: ignoreIfExists); } /// Ignores if target exists. final bool? ignoreIfExists; /// Overwrite target if existing. Overwrite wins over `ignoreIfExists` final bool? overwrite; Map toJson() { var __result = {}; if (overwrite != null) { __result['overwrite'] = overwrite; } if (ignoreIfExists != null) { __result['ignoreIfExists'] = ignoreIfExists; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('overwrite'); try { final overwrite = obj['overwrite']; if (overwrite != null && !(overwrite is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('ignoreIfExists'); try { final ignoreIfExists = obj['ignoreIfExists']; if (ignoreIfExists != null && !(ignoreIfExists is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameFileOptions'); return false; } } @override bool operator ==(Object other) { if (other is RenameFileOptions && other.runtimeType == RenameFileOptions) { return overwrite == other.overwrite && ignoreIfExists == other.ignoreIfExists && true; } return false; } @override int get hashCode => Object.hash(overwrite, ignoreIfExists); @override String toString() => jsonEncoder.convert(toJson()); } /// The parameters sent in notifications/requests for user-initiated renames of /// files. /// @since 3.16.0 class RenameFilesParams implements ToJsonable { static const jsonHandler = LspJsonHandler(RenameFilesParams.canParse, RenameFilesParams.fromJson); RenameFilesParams({required this.files}); static RenameFilesParams fromJson(Map json) { final filesJson = json['files']; final files = (filesJson as List) .map((item) => FileRename.fromJson(item as Map)) .toList(); return RenameFilesParams(files: files); } /// An array of all files/folders renamed in this operation. When a folder is /// renamed, only the folder will be included, and not its children. final List files; Map toJson() { var __result = {}; __result['files'] = files.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('files'); try { if (!obj.containsKey('files')) { reporter.reportError('must not be undefined'); return false; } final files = obj['files']; if (files == null) { reporter.reportError('must not be null'); return false; } if (!((files is List && (files.every((item) => FileRename.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameFilesParams'); return false; } } @override bool operator ==(Object other) { if (other is RenameFilesParams && other.runtimeType == RenameFilesParams) { return listEqual( files, other.files, (FileRename a, FileRename b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(files); @override String toString() => jsonEncoder.convert(toJson()); } class RenameOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler(RenameOptions.canParse, RenameOptions.fromJson); RenameOptions({this.prepareProvider, this.workDoneProgress}); static RenameOptions fromJson(Map json) { if (RenameRegistrationOptions.canParse(json, nullLspJsonReporter)) { return RenameRegistrationOptions.fromJson(json); } final prepareProviderJson = json['prepareProvider']; final prepareProvider = prepareProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return RenameOptions( prepareProvider: prepareProvider, workDoneProgress: workDoneProgress); } /// Renames should be checked and tested before being executed. final bool? prepareProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; if (prepareProvider != null) { __result['prepareProvider'] = prepareProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('prepareProvider'); try { final prepareProvider = obj['prepareProvider']; if (prepareProvider != null && !(prepareProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameOptions'); return false; } } @override bool operator ==(Object other) { if (other is RenameOptions && other.runtimeType == RenameOptions) { return prepareProvider == other.prepareProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(prepareProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class RenameParams implements TextDocumentPositionParams, WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler(RenameParams.canParse, RenameParams.fromJson); RenameParams( {required this.newName, required this.textDocument, required this.position, this.workDoneToken}); static RenameParams fromJson(Map json) { final newNameJson = json['newName']; final newName = newNameJson as String; final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return RenameParams( newName: newName, textDocument: textDocument, position: position, workDoneToken: workDoneToken); } /// The new name of the symbol. If the given name is not valid the request /// must return a [ResponseError] with an appropriate message set. final String newName; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['newName'] = newName; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('newName'); try { if (!obj.containsKey('newName')) { reporter.reportError('must not be undefined'); return false; } final newName = obj['newName']; if (newName == null) { reporter.reportError('must not be null'); return false; } if (!(newName is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameParams'); return false; } } @override bool operator ==(Object other) { if (other is RenameParams && other.runtimeType == RenameParams) { return newName == other.newName && textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(newName, textDocument, position, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class RenameRegistrationOptions implements TextDocumentRegistrationOptions, RenameOptions, ToJsonable { static const jsonHandler = LspJsonHandler( RenameRegistrationOptions.canParse, RenameRegistrationOptions.fromJson); RenameRegistrationOptions( {this.documentSelector, this.prepareProvider, this.workDoneProgress}); static RenameRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final prepareProviderJson = json['prepareProvider']; final prepareProvider = prepareProviderJson as bool?; final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return RenameRegistrationOptions( documentSelector: documentSelector, prepareProvider: prepareProvider, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// Renames should be checked and tested before being executed. final bool? prepareProvider; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (prepareProvider != null) { __result['prepareProvider'] = prepareProvider; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('prepareProvider'); try { final prepareProvider = obj['prepareProvider']; if (prepareProvider != null && !(prepareProvider is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RenameRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is RenameRegistrationOptions && other.runtimeType == RenameRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && prepareProvider == other.prepareProvider && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(documentSelector), prepareProvider, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class RequestMessage implements Message, IncomingMessage, ToJsonable { static const jsonHandler = LspJsonHandler(RequestMessage.canParse, RequestMessage.fromJson); RequestMessage( {required this.id, required this.method, this.params, required this.jsonrpc, this.clientRequestTime}); static RequestMessage fromJson(Map json) { final idJson = json['id']; final id = idJson is int ? Either2.t1(idJson) : (idJson is String ? Either2.t2(idJson) : (throw '''$idJson was not one of (int, String)''')); final methodJson = json['method']; final method = Method.fromJson(methodJson as String); final paramsJson = json['params']; final params = paramsJson; final jsonrpcJson = json['jsonrpc']; final jsonrpc = jsonrpcJson as String; final clientRequestTimeJson = json['clientRequestTime']; final clientRequestTime = clientRequestTimeJson as int?; return RequestMessage( id: id, method: method, params: params, jsonrpc: jsonrpc, clientRequestTime: clientRequestTime); } final int? clientRequestTime; /// The request id. final Either2 id; final String jsonrpc; /// The method to be invoked. final Method method; /// The method's params. final Object? params; Map toJson() { var __result = {}; __result['id'] = id; __result['method'] = method.toJson(); if (params != null) { __result['params'] = params; } __result['jsonrpc'] = jsonrpc; if (clientRequestTime != null) { __result['clientRequestTime'] = clientRequestTime; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { if (!obj.containsKey('id')) { reporter.reportError('must not be undefined'); return false; } final id = obj['id']; if (id == null) { reporter.reportError('must not be null'); return false; } if (!((id is int || id is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('method'); try { if (!obj.containsKey('method')) { reporter.reportError('must not be undefined'); return false; } final method = obj['method']; if (method == null) { reporter.reportError('must not be null'); return false; } if (!(Method.canParse(method, reporter))) { reporter.reportError('must be of type Method'); return false; } } finally { reporter.pop(); } reporter.push('jsonrpc'); try { if (!obj.containsKey('jsonrpc')) { reporter.reportError('must not be undefined'); return false; } final jsonrpc = obj['jsonrpc']; if (jsonrpc == null) { reporter.reportError('must not be null'); return false; } if (!(jsonrpc is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('clientRequestTime'); try { final clientRequestTime = obj['clientRequestTime']; if (clientRequestTime != null && !(clientRequestTime is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type RequestMessage'); return false; } } @override bool operator ==(Object other) { if (other is RequestMessage && other.runtimeType == RequestMessage) { return id == other.id && method == other.method && params == other.params && jsonrpc == other.jsonrpc && clientRequestTime == other.clientRequestTime && true; } return false; } @override int get hashCode => Object.hash(id, method, params, jsonrpc, clientRequestTime); @override String toString() => jsonEncoder.convert(toJson()); } class ResourceOperationKind { const ResourceOperationKind._(this._value); const ResourceOperationKind.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { switch (obj) { case 'create': case 'rename': case 'delete': return true; } return false; } /// Supports creating new files and folders. static const Create = ResourceOperationKind._('create'); /// Supports renaming existing files and folders. static const Rename = ResourceOperationKind._('rename'); /// Supports deleting existing files and folders. static const Delete = ResourceOperationKind._('delete'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is ResourceOperationKind && o._value == _value; } class ResponseError implements ToJsonable { static const jsonHandler = LspJsonHandler(ResponseError.canParse, ResponseError.fromJson); ResponseError({required this.code, required this.message, this.data}); static ResponseError fromJson(Map json) { final codeJson = json['code']; final code = ErrorCodes.fromJson(codeJson as int); final messageJson = json['message']; final message = messageJson as String; final dataJson = json['data']; final data = dataJson as String?; return ResponseError(code: code, message: message, data: data); } /// A number indicating the error type that occurred. final ErrorCodes code; /// A string that contains additional information about the error. Can be /// omitted. final String? data; /// A string providing a short description of the error. final String message; Map toJson() { var __result = {}; __result['code'] = code.toJson(); __result['message'] = message; if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('code'); try { if (!obj.containsKey('code')) { reporter.reportError('must not be undefined'); return false; } final code = obj['code']; if (code == null) { reporter.reportError('must not be null'); return false; } if (!(ErrorCodes.canParse(code, reporter))) { reporter.reportError('must be of type ErrorCodes'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('data'); try { final data = obj['data']; if (data != null && !(data is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ResponseError'); return false; } } @override bool operator ==(Object other) { if (other is ResponseError && other.runtimeType == ResponseError) { return code == other.code && message == other.message && data == other.data && true; } return false; } @override int get hashCode => Object.hash(code, message, data); @override String toString() => jsonEncoder.convert(toJson()); } class ResponseMessage implements Message, ToJsonable { static const jsonHandler = LspJsonHandler(ResponseMessage.canParse, ResponseMessage.fromJson); ResponseMessage( {this.id, this.result, this.error, required this.jsonrpc, this.clientRequestTime}); static ResponseMessage fromJson(Map json) { final idJson = json['id']; final id = idJson == null ? null : (idJson is int ? Either2.t1(idJson) : (idJson is String ? Either2.t2(idJson) : (throw '''$idJson was not one of (int, String)'''))); final resultJson = json['result']; final result = resultJson; final errorJson = json['error']; final error = errorJson != null ? ResponseError.fromJson(errorJson as Map) : null; final jsonrpcJson = json['jsonrpc']; final jsonrpc = jsonrpcJson as String; final clientRequestTimeJson = json['clientRequestTime']; final clientRequestTime = clientRequestTimeJson as int?; return ResponseMessage( id: id, result: result, error: error, jsonrpc: jsonrpc, clientRequestTime: clientRequestTime); } final int? clientRequestTime; /// The error object in case a request fails. final ResponseError? error; /// The request id. final Either2? id; final String jsonrpc; /// The result of a request. This member is REQUIRED on success. This member /// MUST NOT exist if there was an error invoking the method. final Object? result; Map toJson() { var __result = {}; __result['id'] = id; __result['jsonrpc'] = jsonrpc; if (clientRequestTime != null) { __result['clientRequestTime'] = clientRequestTime; } if (error != null && result != null) { throw 'result and error cannot both be set'; } else if (error != null) { __result['error'] = error; } else { __result['result'] = result; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { if (!obj.containsKey('id')) { reporter.reportError('must not be undefined'); return false; } final id = obj['id']; if (id != null && !((id is int || id is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('error'); try { final error = obj['error']; if (error != null && !(ResponseError.canParse(error, reporter))) { reporter.reportError('must be of type ResponseError'); return false; } } finally { reporter.pop(); } reporter.push('jsonrpc'); try { if (!obj.containsKey('jsonrpc')) { reporter.reportError('must not be undefined'); return false; } final jsonrpc = obj['jsonrpc']; if (jsonrpc == null) { reporter.reportError('must not be null'); return false; } if (!(jsonrpc is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('clientRequestTime'); try { final clientRequestTime = obj['clientRequestTime']; if (clientRequestTime != null && !(clientRequestTime is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ResponseMessage'); return false; } } @override bool operator ==(Object other) { if (other is ResponseMessage && other.runtimeType == ResponseMessage) { return id == other.id && result == other.result && error == other.error && jsonrpc == other.jsonrpc && clientRequestTime == other.clientRequestTime && true; } return false; } @override int get hashCode => Object.hash(id, result, error, jsonrpc, clientRequestTime); @override String toString() => jsonEncoder.convert(toJson()); } class SaveOptions implements ToJsonable { static const jsonHandler = LspJsonHandler(SaveOptions.canParse, SaveOptions.fromJson); SaveOptions({this.includeText}); static SaveOptions fromJson(Map json) { final includeTextJson = json['includeText']; final includeText = includeTextJson as bool?; return SaveOptions(includeText: includeText); } /// The client is supposed to include the content on save. final bool? includeText; Map toJson() { var __result = {}; if (includeText != null) { __result['includeText'] = includeText; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('includeText'); try { final includeText = obj['includeText']; if (includeText != null && !(includeText is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SaveOptions'); return false; } } @override bool operator ==(Object other) { if (other is SaveOptions && other.runtimeType == SaveOptions) { return includeText == other.includeText && true; } return false; } @override int get hashCode => includeText.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class SelectionRange implements ToJsonable { static const jsonHandler = LspJsonHandler(SelectionRange.canParse, SelectionRange.fromJson); SelectionRange({required this.range, this.parent}); static SelectionRange fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final parentJson = json['parent']; final parent = parentJson != null ? SelectionRange.fromJson(parentJson as Map) : null; return SelectionRange(range: range, parent: parent); } /// The parent selection range containing this range. Therefore `parent.range` /// must contain `this.range`. final SelectionRange? parent; /// The range ([Range]) of this selection range. final Range range; Map toJson() { var __result = {}; __result['range'] = range.toJson(); if (parent != null) { __result['parent'] = parent?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('parent'); try { final parent = obj['parent']; if (parent != null && !(SelectionRange.canParse(parent, reporter))) { reporter.reportError('must be of type SelectionRange'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SelectionRange'); return false; } } @override bool operator ==(Object other) { if (other is SelectionRange && other.runtimeType == SelectionRange) { return range == other.range && parent == other.parent && true; } return false; } @override int get hashCode => Object.hash(range, parent); @override String toString() => jsonEncoder.convert(toJson()); } class SelectionRangeClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( SelectionRangeClientCapabilities.canParse, SelectionRangeClientCapabilities.fromJson); SelectionRangeClientCapabilities({this.dynamicRegistration}); static SelectionRangeClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; return SelectionRangeClientCapabilities( dynamicRegistration: dynamicRegistration); } /// Whether implementation supports dynamic registration for selection range /// providers. If this is set to `true` the client supports the new /// `SelectionRangeRegistrationOptions` return value for the corresponding /// server capability as well. final bool? dynamicRegistration; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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(); } return true; } else { reporter.reportError('must be of type SelectionRangeClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is SelectionRangeClientCapabilities && other.runtimeType == SelectionRangeClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode => dynamicRegistration.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class SelectionRangeOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( SelectionRangeOptions.canParse, SelectionRangeOptions.fromJson); SelectionRangeOptions({this.workDoneProgress}); static SelectionRangeOptions fromJson(Map json) { if (SelectionRangeRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SelectionRangeRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return SelectionRangeOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SelectionRangeOptions'); return false; } } @override bool operator ==(Object other) { if (other is SelectionRangeOptions && other.runtimeType == SelectionRangeOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class SelectionRangeParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( SelectionRangeParams.canParse, SelectionRangeParams.fromJson); SelectionRangeParams( {required this.textDocument, required this.positions, this.workDoneToken, this.partialResultToken}); static SelectionRangeParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionsJson = json['positions']; final positions = (positionsJson as List) .map((item) => Position.fromJson(item as Map)) .toList(); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return SelectionRangeParams( textDocument: textDocument, positions: positions, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The positions inside the text document. final List positions; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['positions'] = positions.map((item) => item.toJson()).toList(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('positions'); try { if (!obj.containsKey('positions')) { reporter.reportError('must not be undefined'); return false; } final positions = obj['positions']; if (positions == null) { reporter.reportError('must not be null'); return false; } if (!((positions is List && (positions.every((item) => Position.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SelectionRangeParams'); return false; } } @override bool operator ==(Object other) { if (other is SelectionRangeParams && other.runtimeType == SelectionRangeParams) { return textDocument == other.textDocument && listEqual( positions, other.positions, (Position a, Position b) => a == b) && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash( textDocument, lspHashCode(positions), workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class SelectionRangeRegistrationOptions implements SelectionRangeOptions, TextDocumentRegistrationOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( SelectionRangeRegistrationOptions.canParse, SelectionRangeRegistrationOptions.fromJson); SelectionRangeRegistrationOptions( {this.workDoneProgress, this.documentSelector, this.id}); static SelectionRangeRegistrationOptions fromJson(Map json) { final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final idJson = json['id']; final id = idJson as String?; return SelectionRangeRegistrationOptions( workDoneProgress: workDoneProgress, documentSelector: documentSelector, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } __result['documentSelector'] = documentSelector; if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SelectionRangeRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is SelectionRangeRegistrationOptions && other.runtimeType == SelectionRangeRegistrationOptions) { return workDoneProgress == other.workDoneProgress && listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && id == other.id && true; } return false; } @override int get hashCode => Object.hash(workDoneProgress, lspHashCode(documentSelector), id); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokenModifiers { const SemanticTokenModifiers(this._value); const SemanticTokenModifiers.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } static const declaration = SemanticTokenModifiers('declaration'); static const definition = SemanticTokenModifiers('definition'); static const readonly = SemanticTokenModifiers('readonly'); static const static = SemanticTokenModifiers('static'); static const deprecated = SemanticTokenModifiers('deprecated'); static const abstract = SemanticTokenModifiers('abstract'); static const async = SemanticTokenModifiers('async'); static const modification = SemanticTokenModifiers('modification'); static const documentation = SemanticTokenModifiers('documentation'); static const defaultLibrary = SemanticTokenModifiers('defaultLibrary'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is SemanticTokenModifiers && o._value == _value; } class SemanticTokenTypes { const SemanticTokenTypes(this._value); const SemanticTokenTypes.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } static const namespace = SemanticTokenTypes('namespace'); /// Represents a generic type. Acts as a fallback for types which can't be /// mapped to a specific type like class or enum. static const type = SemanticTokenTypes('type'); static const class_ = SemanticTokenTypes('class'); static const enum_ = SemanticTokenTypes('enum'); static const interface = SemanticTokenTypes('interface'); static const struct = SemanticTokenTypes('struct'); static const typeParameter = SemanticTokenTypes('typeParameter'); static const parameter = SemanticTokenTypes('parameter'); static const variable = SemanticTokenTypes('variable'); static const property = SemanticTokenTypes('property'); static const enumMember = SemanticTokenTypes('enumMember'); static const event = SemanticTokenTypes('event'); static const function = SemanticTokenTypes('function'); static const method = SemanticTokenTypes('method'); static const macro = SemanticTokenTypes('macro'); static const keyword = SemanticTokenTypes('keyword'); static const modifier = SemanticTokenTypes('modifier'); static const comment = SemanticTokenTypes('comment'); static const string = SemanticTokenTypes('string'); static const number = SemanticTokenTypes('number'); static const regexp = SemanticTokenTypes('regexp'); static const operator = SemanticTokenTypes('operator'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is SemanticTokenTypes && o._value == _value; } class SemanticTokens implements ToJsonable { static const jsonHandler = LspJsonHandler(SemanticTokens.canParse, SemanticTokens.fromJson); SemanticTokens({this.resultId, required this.data}); static SemanticTokens fromJson(Map json) { final resultIdJson = json['resultId']; final resultId = resultIdJson as String?; final dataJson = json['data']; final data = (dataJson as List).map((item) => item as int).toList(); return SemanticTokens(resultId: resultId, data: data); } /// The actual tokens. final List data; /// An optional result id. If provided and clients support delta updating the /// client will include the result id in the next semantic token request. A /// server can then instead of computing all semantic tokens again simply send /// a delta. final String? resultId; Map toJson() { var __result = {}; if (resultId != null) { __result['resultId'] = resultId; } __result['data'] = data; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resultId'); try { final resultId = obj['resultId']; if (resultId != null && !(resultId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('data'); try { if (!obj.containsKey('data')) { reporter.reportError('must not be undefined'); return false; } final data = obj['data']; if (data == null) { reporter.reportError('must not be null'); return false; } if (!((data is List && (data.every((item) => item is int))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokens'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokens && other.runtimeType == SemanticTokens) { return resultId == other.resultId && listEqual(data, other.data, (int a, int b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(resultId, lspHashCode(data)); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensClientCapabilities.canParse, SemanticTokensClientCapabilities.fromJson); SemanticTokensClientCapabilities( {this.dynamicRegistration, required this.requests, required this.tokenTypes, required this.tokenModifiers, required this.formats, this.overlappingTokenSupport, this.multilineTokenSupport}); static SemanticTokensClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final requestsJson = json['requests']; final requests = SemanticTokensClientCapabilitiesRequests.fromJson( requestsJson as Map); final tokenTypesJson = json['tokenTypes']; final tokenTypes = (tokenTypesJson as List) .map((item) => item as String) .toList(); final tokenModifiersJson = json['tokenModifiers']; final tokenModifiers = (tokenModifiersJson as List) .map((item) => item as String) .toList(); final formatsJson = json['formats']; final formats = (formatsJson as List) .map((item) => TokenFormat.fromJson(item as String)) .toList(); final overlappingTokenSupportJson = json['overlappingTokenSupport']; final overlappingTokenSupport = overlappingTokenSupportJson as bool?; final multilineTokenSupportJson = json['multilineTokenSupport']; final multilineTokenSupport = multilineTokenSupportJson as bool?; return SemanticTokensClientCapabilities( dynamicRegistration: dynamicRegistration, requests: requests, tokenTypes: tokenTypes, tokenModifiers: tokenModifiers, formats: formats, overlappingTokenSupport: overlappingTokenSupport, multilineTokenSupport: multilineTokenSupport); } /// Whether implementation supports dynamic registration. If this is set to /// `true` the client supports the new `(TextDocumentRegistrationOptions & /// StaticRegistrationOptions)` return value for the corresponding server /// capability as well. final bool? dynamicRegistration; /// The formats the clients supports. final List formats; /// Whether the client supports tokens that can span multiple lines. final bool? multilineTokenSupport; /// Whether the client supports tokens that can overlap each other. final bool? overlappingTokenSupport; /// Which requests the client supports and might send to the server depending /// on the server's capability. Please note that clients might not show /// semantic tokens or degrade some of the user experience if a range or full /// request is advertised by the client but not provided by the server. If for /// example the client capability `requests.full` and `request.range` are both /// set to true but the server only provides a range provider the client might /// not render a minimap correctly or might even decide to not show any /// semantic tokens at all. final SemanticTokensClientCapabilitiesRequests requests; /// The token modifiers that the client supports. final List tokenModifiers; /// The token types that the client supports. final List tokenTypes; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } __result['requests'] = requests.toJson(); __result['tokenTypes'] = tokenTypes; __result['tokenModifiers'] = tokenModifiers; __result['formats'] = formats.map((item) => item.toJson()).toList(); if (overlappingTokenSupport != null) { __result['overlappingTokenSupport'] = overlappingTokenSupport; } if (multilineTokenSupport != null) { __result['multilineTokenSupport'] = multilineTokenSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('requests'); try { if (!obj.containsKey('requests')) { reporter.reportError('must not be undefined'); return false; } final requests = obj['requests']; if (requests == null) { reporter.reportError('must not be null'); return false; } if (!(SemanticTokensClientCapabilitiesRequests.canParse( requests, reporter))) { reporter.reportError( 'must be of type SemanticTokensClientCapabilitiesRequests'); return false; } } finally { reporter.pop(); } reporter.push('tokenTypes'); try { if (!obj.containsKey('tokenTypes')) { reporter.reportError('must not be undefined'); return false; } final tokenTypes = obj['tokenTypes']; if (tokenTypes == null) { reporter.reportError('must not be null'); return false; } if (!((tokenTypes is List && (tokenTypes.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('tokenModifiers'); try { if (!obj.containsKey('tokenModifiers')) { reporter.reportError('must not be undefined'); return false; } final tokenModifiers = obj['tokenModifiers']; if (tokenModifiers == null) { reporter.reportError('must not be null'); return false; } if (!((tokenModifiers is List && (tokenModifiers.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('formats'); try { if (!obj.containsKey('formats')) { reporter.reportError('must not be undefined'); return false; } final formats = obj['formats']; if (formats == null) { reporter.reportError('must not be null'); return false; } if (!((formats is List && (formats.every((item) => TokenFormat.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('overlappingTokenSupport'); try { final overlappingTokenSupport = obj['overlappingTokenSupport']; if (overlappingTokenSupport != null && !(overlappingTokenSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('multilineTokenSupport'); try { final multilineTokenSupport = obj['multilineTokenSupport']; if (multilineTokenSupport != null && !(multilineTokenSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensClientCapabilities && other.runtimeType == SemanticTokensClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && requests == other.requests && listEqual( tokenTypes, other.tokenTypes, (String a, String b) => a == b) && listEqual(tokenModifiers, other.tokenModifiers, (String a, String b) => a == b) && listEqual(formats, other.formats, (TokenFormat a, TokenFormat b) => a == b) && overlappingTokenSupport == other.overlappingTokenSupport && multilineTokenSupport == other.multilineTokenSupport && true; } return false; } @override int get hashCode => Object.hash( dynamicRegistration, requests, lspHashCode(tokenTypes), lspHashCode(tokenModifiers), lspHashCode(formats), overlappingTokenSupport, multilineTokenSupport); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensClientCapabilitiesFull implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensClientCapabilitiesFull.canParse, SemanticTokensClientCapabilitiesFull.fromJson); SemanticTokensClientCapabilitiesFull({this.delta}); static SemanticTokensClientCapabilitiesFull fromJson( Map json) { final deltaJson = json['delta']; final delta = deltaJson as bool?; return SemanticTokensClientCapabilitiesFull(delta: delta); } /// The client will send the `textDocument/semanticTokens/full/delta` request /// if the server provides a corresponding handler. final bool? delta; Map toJson() { var __result = {}; if (delta != null) { __result['delta'] = delta; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('delta'); try { final delta = obj['delta']; if (delta != null && !(delta is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type SemanticTokensClientCapabilitiesFull'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensClientCapabilitiesFull && other.runtimeType == SemanticTokensClientCapabilitiesFull) { return delta == other.delta && true; } return false; } @override int get hashCode => delta.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensClientCapabilitiesRange implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensClientCapabilitiesRange.canParse, SemanticTokensClientCapabilitiesRange.fromJson); static SemanticTokensClientCapabilitiesRange fromJson( Map json) { return SemanticTokensClientCapabilitiesRange(); } Map toJson() { var __result = {}; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { return true; } else { reporter .reportError('must be of type SemanticTokensClientCapabilitiesRange'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensClientCapabilitiesRange && other.runtimeType == SemanticTokensClientCapabilitiesRange) { return true; } return false; } @override int get hashCode => 42; @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensClientCapabilitiesRequests implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensClientCapabilitiesRequests.canParse, SemanticTokensClientCapabilitiesRequests.fromJson); SemanticTokensClientCapabilitiesRequests({this.range, this.full}); static SemanticTokensClientCapabilitiesRequests fromJson( Map json) { final rangeJson = json['range']; final range = rangeJson == null ? null : (rangeJson is bool ? Either2.t1(rangeJson) : (SemanticTokensClientCapabilitiesRange.canParse( rangeJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensClientCapabilitiesRange.fromJson( rangeJson as Map)) : (throw '''$rangeJson was not one of (bool, SemanticTokensClientCapabilitiesRange)'''))); final fullJson = json['full']; final full = fullJson == null ? null : (fullJson is bool ? Either2.t1(fullJson) : (SemanticTokensClientCapabilitiesFull.canParse( fullJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensClientCapabilitiesFull.fromJson( fullJson as Map)) : (throw '''$fullJson was not one of (bool, SemanticTokensClientCapabilitiesFull)'''))); return SemanticTokensClientCapabilitiesRequests(range: range, full: full); } /// The client will send the `textDocument/semanticTokens/full` request if the /// server provides a corresponding handler. final Either2? full; /// The client will send the `textDocument/semanticTokens/range` request if /// the server provides a corresponding handler. final Either2? range; Map toJson() { var __result = {}; if (range != null) { __result['range'] = range; } if (full != null) { __result['full'] = full; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { final range = obj['range']; if (range != null && !((range is bool || SemanticTokensClientCapabilitiesRange.canParse( range, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('full'); try { final full = obj['full']; if (full != null && !((full is bool || SemanticTokensClientCapabilitiesFull.canParse( full, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type SemanticTokensClientCapabilitiesRequests'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensClientCapabilitiesRequests && other.runtimeType == SemanticTokensClientCapabilitiesRequests) { return range == other.range && full == other.full && true; } return false; } @override int get hashCode => Object.hash(range, full); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensDelta implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensDelta.canParse, SemanticTokensDelta.fromJson); SemanticTokensDelta({this.resultId, required this.edits}); static SemanticTokensDelta fromJson(Map json) { final resultIdJson = json['resultId']; final resultId = resultIdJson as String?; final editsJson = json['edits']; final edits = (editsJson as List) .map( (item) => SemanticTokensEdit.fromJson(item as Map)) .toList(); return SemanticTokensDelta(resultId: resultId, edits: edits); } /// The semantic token edits to transform a previous result into a new result. final List edits; final String? resultId; Map toJson() { var __result = {}; if (resultId != null) { __result['resultId'] = resultId; } __result['edits'] = edits.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resultId'); try { final resultId = obj['resultId']; if (resultId != null && !(resultId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('edits'); try { if (!obj.containsKey('edits')) { reporter.reportError('must not be undefined'); return false; } final edits = obj['edits']; if (edits == null) { reporter.reportError('must not be null'); return false; } if (!((edits is List && (edits.every( (item) => SemanticTokensEdit.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensDelta'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensDelta && other.runtimeType == SemanticTokensDelta) { return resultId == other.resultId && listEqual(edits, other.edits, (SemanticTokensEdit a, SemanticTokensEdit b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(resultId, lspHashCode(edits)); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensDeltaParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensDeltaParams.canParse, SemanticTokensDeltaParams.fromJson); SemanticTokensDeltaParams( {required this.textDocument, required this.previousResultId, this.workDoneToken, this.partialResultToken}); static SemanticTokensDeltaParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final previousResultIdJson = json['previousResultId']; final previousResultId = previousResultIdJson as String; final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return SemanticTokensDeltaParams( textDocument: textDocument, previousResultId: previousResultId, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The result id of a previous response. The result Id can either point to a /// full response or a delta response depending on what was received last. final String previousResultId; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['previousResultId'] = previousResultId; if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('previousResultId'); try { if (!obj.containsKey('previousResultId')) { reporter.reportError('must not be undefined'); return false; } final previousResultId = obj['previousResultId']; if (previousResultId == null) { reporter.reportError('must not be null'); return false; } if (!(previousResultId is String)) { reporter.reportError('must be of type String'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensDeltaParams'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensDeltaParams && other.runtimeType == SemanticTokensDeltaParams) { return textDocument == other.textDocument && previousResultId == other.previousResultId && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash( textDocument, previousResultId, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensDeltaPartialResult implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensDeltaPartialResult.canParse, SemanticTokensDeltaPartialResult.fromJson); SemanticTokensDeltaPartialResult({required this.edits}); static SemanticTokensDeltaPartialResult fromJson(Map json) { final editsJson = json['edits']; final edits = (editsJson as List) .map( (item) => SemanticTokensEdit.fromJson(item as Map)) .toList(); return SemanticTokensDeltaPartialResult(edits: edits); } final List edits; Map toJson() { var __result = {}; __result['edits'] = edits.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('edits'); try { if (!obj.containsKey('edits')) { reporter.reportError('must not be undefined'); return false; } final edits = obj['edits']; if (edits == null) { reporter.reportError('must not be null'); return false; } if (!((edits is List && (edits.every( (item) => SemanticTokensEdit.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensDeltaPartialResult'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensDeltaPartialResult && other.runtimeType == SemanticTokensDeltaPartialResult) { return listEqual(edits, other.edits, (SemanticTokensEdit a, SemanticTokensEdit b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(edits); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensEdit implements ToJsonable { static const jsonHandler = LspJsonHandler(SemanticTokensEdit.canParse, SemanticTokensEdit.fromJson); SemanticTokensEdit( {required this.start, required this.deleteCount, this.data}); static SemanticTokensEdit fromJson(Map json) { final startJson = json['start']; final start = startJson as int; final deleteCountJson = json['deleteCount']; final deleteCount = deleteCountJson as int; final dataJson = json['data']; final data = (dataJson as List?)?.map((item) => item as int).toList(); return SemanticTokensEdit( start: start, deleteCount: deleteCount, data: data); } /// The elements to insert. final List? data; /// The count of elements to remove. final int deleteCount; /// The start offset of the edit. final int start; Map toJson() { var __result = {}; __result['start'] = start; __result['deleteCount'] = deleteCount; if (data != null) { __result['data'] = data; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('start'); try { if (!obj.containsKey('start')) { reporter.reportError('must not be undefined'); return false; } final start = obj['start']; if (start == null) { reporter.reportError('must not be null'); return false; } if (!(start is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('deleteCount'); try { if (!obj.containsKey('deleteCount')) { reporter.reportError('must not be undefined'); return false; } final deleteCount = obj['deleteCount']; if (deleteCount == null) { reporter.reportError('must not be null'); return false; } if (!(deleteCount is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('data'); try { final data = obj['data']; if (data != null && !((data is List && (data.every((item) => item is int))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensEdit'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensEdit && other.runtimeType == SemanticTokensEdit) { return start == other.start && deleteCount == other.deleteCount && listEqual(data, other.data, (int a, int b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(start, deleteCount, lspHashCode(data)); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensLegend implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensLegend.canParse, SemanticTokensLegend.fromJson); SemanticTokensLegend( {required this.tokenTypes, required this.tokenModifiers}); static SemanticTokensLegend fromJson(Map json) { final tokenTypesJson = json['tokenTypes']; final tokenTypes = (tokenTypesJson as List) .map((item) => item as String) .toList(); final tokenModifiersJson = json['tokenModifiers']; final tokenModifiers = (tokenModifiersJson as List) .map((item) => item as String) .toList(); return SemanticTokensLegend( tokenTypes: tokenTypes, tokenModifiers: tokenModifiers); } /// The token modifiers a server uses. final List tokenModifiers; /// The token types a server uses. final List tokenTypes; Map toJson() { var __result = {}; __result['tokenTypes'] = tokenTypes; __result['tokenModifiers'] = tokenModifiers; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('tokenTypes'); try { if (!obj.containsKey('tokenTypes')) { reporter.reportError('must not be undefined'); return false; } final tokenTypes = obj['tokenTypes']; if (tokenTypes == null) { reporter.reportError('must not be null'); return false; } if (!((tokenTypes is List && (tokenTypes.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('tokenModifiers'); try { if (!obj.containsKey('tokenModifiers')) { reporter.reportError('must not be undefined'); return false; } final tokenModifiers = obj['tokenModifiers']; if (tokenModifiers == null) { reporter.reportError('must not be null'); return false; } if (!((tokenModifiers is List && (tokenModifiers.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensLegend'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensLegend && other.runtimeType == SemanticTokensLegend) { return listEqual( tokenTypes, other.tokenTypes, (String a, String b) => a == b) && listEqual(tokenModifiers, other.tokenModifiers, (String a, String b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(tokenTypes), lspHashCode(tokenModifiers)); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensOptions.canParse, SemanticTokensOptions.fromJson); SemanticTokensOptions( {required this.legend, this.range, this.full, this.workDoneProgress}); static SemanticTokensOptions fromJson(Map json) { if (SemanticTokensRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SemanticTokensRegistrationOptions.fromJson(json); } final legendJson = json['legend']; final legend = SemanticTokensLegend.fromJson(legendJson as Map); final rangeJson = json['range']; final range = rangeJson == null ? null : (rangeJson is bool ? Either2.t1(rangeJson) : (SemanticTokensOptionsRange.canParse( rangeJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensOptionsRange.fromJson( rangeJson as Map)) : (throw '''$rangeJson was not one of (bool, SemanticTokensOptionsRange)'''))); final fullJson = json['full']; final full = fullJson == null ? null : (fullJson is bool ? Either2.t1(fullJson) : (SemanticTokensOptionsFull.canParse(fullJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensOptionsFull.fromJson( fullJson as Map)) : (throw '''$fullJson was not one of (bool, SemanticTokensOptionsFull)'''))); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return SemanticTokensOptions( legend: legend, range: range, full: full, workDoneProgress: workDoneProgress); } /// Server supports providing semantic tokens for a full document. final Either2? full; /// The legend used by the server final SemanticTokensLegend legend; /// Server supports providing semantic tokens for a specific range of a /// document. final Either2? range; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['legend'] = legend.toJson(); if (range != null) { __result['range'] = range; } if (full != null) { __result['full'] = full; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('legend'); try { if (!obj.containsKey('legend')) { reporter.reportError('must not be undefined'); return false; } final legend = obj['legend']; if (legend == null) { reporter.reportError('must not be null'); return false; } if (!(SemanticTokensLegend.canParse(legend, reporter))) { reporter.reportError('must be of type SemanticTokensLegend'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { final range = obj['range']; if (range != null && !((range is bool || SemanticTokensOptionsRange.canParse(range, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('full'); try { final full = obj['full']; if (full != null && !((full is bool || SemanticTokensOptionsFull.canParse(full, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensOptions'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensOptions && other.runtimeType == SemanticTokensOptions) { return legend == other.legend && range == other.range && full == other.full && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(legend, range, full, workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensOptionsFull implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensOptionsFull.canParse, SemanticTokensOptionsFull.fromJson); SemanticTokensOptionsFull({this.delta}); static SemanticTokensOptionsFull fromJson(Map json) { final deltaJson = json['delta']; final delta = deltaJson as bool?; return SemanticTokensOptionsFull(delta: delta); } /// The server supports deltas for full documents. final bool? delta; Map toJson() { var __result = {}; if (delta != null) { __result['delta'] = delta; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('delta'); try { final delta = obj['delta']; if (delta != null && !(delta is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensOptionsFull'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensOptionsFull && other.runtimeType == SemanticTokensOptionsFull) { return delta == other.delta && true; } return false; } @override int get hashCode => delta.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensOptionsRange implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensOptionsRange.canParse, SemanticTokensOptionsRange.fromJson); static SemanticTokensOptionsRange fromJson(Map json) { return SemanticTokensOptionsRange(); } Map toJson() { var __result = {}; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { return true; } else { reporter.reportError('must be of type SemanticTokensOptionsRange'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensOptionsRange && other.runtimeType == SemanticTokensOptionsRange) { return true; } return false; } @override int get hashCode => 42; @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensParams.canParse, SemanticTokensParams.fromJson); SemanticTokensParams( {required this.textDocument, this.workDoneToken, this.partialResultToken}); static SemanticTokensParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return SemanticTokensParams( textDocument: textDocument, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensParams'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensParams && other.runtimeType == SemanticTokensParams) { return textDocument == other.textDocument && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensPartialResult implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensPartialResult.canParse, SemanticTokensPartialResult.fromJson); SemanticTokensPartialResult({required this.data}); static SemanticTokensPartialResult fromJson(Map json) { final dataJson = json['data']; final data = (dataJson as List).map((item) => item as int).toList(); return SemanticTokensPartialResult(data: data); } final List data; Map toJson() { var __result = {}; __result['data'] = data; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('data'); try { if (!obj.containsKey('data')) { reporter.reportError('must not be undefined'); return false; } final data = obj['data']; if (data == null) { reporter.reportError('must not be null'); return false; } if (!((data is List && (data.every((item) => item is int))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensPartialResult'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensPartialResult && other.runtimeType == SemanticTokensPartialResult) { return listEqual(data, other.data, (int a, int b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(data); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensRangeParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensRangeParams.canParse, SemanticTokensRangeParams.fromJson); SemanticTokensRangeParams( {required this.textDocument, required this.range, this.workDoneToken, this.partialResultToken}); static SemanticTokensRangeParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return SemanticTokensRangeParams( textDocument: textDocument, range: range, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The range the semantic tokens are requested for. final Range range; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['range'] = range.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensRangeParams'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensRangeParams && other.runtimeType == SemanticTokensRangeParams) { return textDocument == other.textDocument && range == other.range && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, range, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensRegistrationOptions implements TextDocumentRegistrationOptions, SemanticTokensOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensRegistrationOptions.canParse, SemanticTokensRegistrationOptions.fromJson); SemanticTokensRegistrationOptions( {this.documentSelector, required this.legend, this.range, this.full, this.workDoneProgress, this.id}); static SemanticTokensRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final legendJson = json['legend']; final legend = SemanticTokensLegend.fromJson(legendJson as Map); final rangeJson = json['range']; final range = rangeJson == null ? null : (rangeJson is bool ? Either2.t1(rangeJson) : (SemanticTokensOptionsRange.canParse( rangeJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensOptionsRange.fromJson( rangeJson as Map)) : (throw '''$rangeJson was not one of (bool, SemanticTokensOptionsRange)'''))); final fullJson = json['full']; final full = fullJson == null ? null : (fullJson is bool ? Either2.t1(fullJson) : (SemanticTokensOptionsFull.canParse(fullJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensOptionsFull.fromJson( fullJson as Map)) : (throw '''$fullJson was not one of (bool, SemanticTokensOptionsFull)'''))); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final idJson = json['id']; final id = idJson as String?; return SemanticTokensRegistrationOptions( documentSelector: documentSelector, legend: legend, range: range, full: full, workDoneProgress: workDoneProgress, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// Server supports providing semantic tokens for a full document. final Either2? full; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; /// The legend used by the server final SemanticTokensLegend legend; /// Server supports providing semantic tokens for a specific range of a /// document. final Either2? range; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; __result['legend'] = legend.toJson(); if (range != null) { __result['range'] = range; } if (full != null) { __result['full'] = full; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('legend'); try { if (!obj.containsKey('legend')) { reporter.reportError('must not be undefined'); return false; } final legend = obj['legend']; if (legend == null) { reporter.reportError('must not be null'); return false; } if (!(SemanticTokensLegend.canParse(legend, reporter))) { reporter.reportError('must be of type SemanticTokensLegend'); return false; } } finally { reporter.pop(); } reporter.push('range'); try { final range = obj['range']; if (range != null && !((range is bool || SemanticTokensOptionsRange.canParse(range, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('full'); try { final full = obj['full']; if (full != null && !((full is bool || SemanticTokensOptionsFull.canParse(full, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SemanticTokensRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensRegistrationOptions && other.runtimeType == SemanticTokensRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && legend == other.legend && range == other.range && full == other.full && workDoneProgress == other.workDoneProgress && id == other.id && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(documentSelector), legend, range, full, workDoneProgress, id); @override String toString() => jsonEncoder.convert(toJson()); } class SemanticTokensWorkspaceClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( SemanticTokensWorkspaceClientCapabilities.canParse, SemanticTokensWorkspaceClientCapabilities.fromJson); SemanticTokensWorkspaceClientCapabilities({this.refreshSupport}); static SemanticTokensWorkspaceClientCapabilities fromJson( Map json) { final refreshSupportJson = json['refreshSupport']; final refreshSupport = refreshSupportJson as bool?; return SemanticTokensWorkspaceClientCapabilities( refreshSupport: refreshSupport); } /// Whether the client implementation supports a refresh request sent from the /// server to the client. /// /// Note that this event is global and will force the client to refresh all /// semantic tokens currently shown. It should be used with absolute care and /// is useful for situation where a server for example detect a project wide /// change that requires such a calculation. final bool? refreshSupport; Map toJson() { var __result = {}; if (refreshSupport != null) { __result['refreshSupport'] = refreshSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('refreshSupport'); try { final refreshSupport = obj['refreshSupport']; if (refreshSupport != null && !(refreshSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type SemanticTokensWorkspaceClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is SemanticTokensWorkspaceClientCapabilities && other.runtimeType == SemanticTokensWorkspaceClientCapabilities) { return refreshSupport == other.refreshSupport && true; } return false; } @override int get hashCode => refreshSupport.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ServerCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler(ServerCapabilities.canParse, ServerCapabilities.fromJson); ServerCapabilities( {this.textDocumentSync, this.completionProvider, this.hoverProvider, this.signatureHelpProvider, this.declarationProvider, this.definitionProvider, this.typeDefinitionProvider, this.implementationProvider, this.referencesProvider, this.documentHighlightProvider, this.documentSymbolProvider, this.codeActionProvider, this.codeLensProvider, this.documentLinkProvider, this.colorProvider, this.documentFormattingProvider, this.documentRangeFormattingProvider, this.documentOnTypeFormattingProvider, this.renameProvider, this.foldingRangeProvider, this.executeCommandProvider, this.selectionRangeProvider, this.linkedEditingRangeProvider, this.callHierarchyProvider, this.semanticTokensProvider, this.monikerProvider, this.workspaceSymbolProvider, this.workspace, this.experimental}); static ServerCapabilities fromJson(Map json) { final textDocumentSyncJson = json['textDocumentSync']; final textDocumentSync = textDocumentSyncJson == null ? null : (TextDocumentSyncOptions.canParse( textDocumentSyncJson, nullLspJsonReporter) ? Either2.t1( TextDocumentSyncOptions.fromJson( textDocumentSyncJson as Map)) : (TextDocumentSyncKind.canParse( textDocumentSyncJson, nullLspJsonReporter) ? Either2.t2( TextDocumentSyncKind.fromJson(textDocumentSyncJson as int)) : (throw '''$textDocumentSyncJson was not one of (TextDocumentSyncOptions, TextDocumentSyncKind)'''))); final completionProviderJson = json['completionProvider']; final completionProvider = completionProviderJson != null ? CompletionOptions.fromJson( completionProviderJson as Map) : null; final hoverProviderJson = json['hoverProvider']; final hoverProvider = hoverProviderJson == null ? null : (hoverProviderJson is bool ? Either2.t1(hoverProviderJson) : (HoverOptions.canParse(hoverProviderJson, nullLspJsonReporter) ? Either2.t2(HoverOptions.fromJson( hoverProviderJson as Map)) : (throw '''$hoverProviderJson was not one of (bool, HoverOptions)'''))); final signatureHelpProviderJson = json['signatureHelpProvider']; final signatureHelpProvider = signatureHelpProviderJson != null ? SignatureHelpOptions.fromJson( signatureHelpProviderJson as Map) : null; final declarationProviderJson = json['declarationProvider']; final declarationProvider = declarationProviderJson == null ? null : (declarationProviderJson is bool ? Either3.t1( declarationProviderJson) : (DeclarationOptions.canParse( declarationProviderJson, nullLspJsonReporter) ? Either3.t2( DeclarationOptions.fromJson( declarationProviderJson as Map)) : (DeclarationRegistrationOptions.canParse( declarationProviderJson, nullLspJsonReporter) ? Either3.t3( DeclarationRegistrationOptions.fromJson( declarationProviderJson as Map)) : (throw '''$declarationProviderJson was not one of (bool, DeclarationOptions, DeclarationRegistrationOptions)''')))); final definitionProviderJson = json['definitionProvider']; final definitionProvider = definitionProviderJson == null ? null : (definitionProviderJson is bool ? Either2.t1(definitionProviderJson) : (DefinitionOptions.canParse( definitionProviderJson, nullLspJsonReporter) ? Either2.t2( DefinitionOptions.fromJson( definitionProviderJson as Map)) : (throw '''$definitionProviderJson was not one of (bool, DefinitionOptions)'''))); final typeDefinitionProviderJson = json['typeDefinitionProvider']; final typeDefinitionProvider = typeDefinitionProviderJson == null ? null : (typeDefinitionProviderJson is bool ? Either3.t1( typeDefinitionProviderJson) : (TypeDefinitionOptions.canParse( typeDefinitionProviderJson, nullLspJsonReporter) ? Either3.t2( TypeDefinitionOptions.fromJson( typeDefinitionProviderJson as Map)) : (TypeDefinitionRegistrationOptions.canParse( typeDefinitionProviderJson, nullLspJsonReporter) ? Either3.t3( TypeDefinitionRegistrationOptions.fromJson( typeDefinitionProviderJson as Map)) : (throw '''$typeDefinitionProviderJson was not one of (bool, TypeDefinitionOptions, TypeDefinitionRegistrationOptions)''')))); final implementationProviderJson = json['implementationProvider']; final implementationProvider = implementationProviderJson == null ? null : (implementationProviderJson is bool ? Either3.t1( implementationProviderJson) : (ImplementationOptions.canParse( implementationProviderJson, nullLspJsonReporter) ? Either3.t2( ImplementationOptions.fromJson( implementationProviderJson as Map)) : (ImplementationRegistrationOptions.canParse( implementationProviderJson, nullLspJsonReporter) ? Either3.t3( ImplementationRegistrationOptions.fromJson( implementationProviderJson as Map)) : (throw '''$implementationProviderJson was not one of (bool, ImplementationOptions, ImplementationRegistrationOptions)''')))); final referencesProviderJson = json['referencesProvider']; final referencesProvider = referencesProviderJson == null ? null : (referencesProviderJson is bool ? Either2.t1(referencesProviderJson) : (ReferenceOptions.canParse( referencesProviderJson, nullLspJsonReporter) ? Either2.t2(ReferenceOptions.fromJson( referencesProviderJson as Map)) : (throw '''$referencesProviderJson was not one of (bool, ReferenceOptions)'''))); final documentHighlightProviderJson = json['documentHighlightProvider']; final documentHighlightProvider = documentHighlightProviderJson == null ? null : (documentHighlightProviderJson is bool ? Either2.t1( documentHighlightProviderJson) : (DocumentHighlightOptions.canParse( documentHighlightProviderJson, nullLspJsonReporter) ? Either2.t2( DocumentHighlightOptions.fromJson( documentHighlightProviderJson as Map)) : (throw '''$documentHighlightProviderJson was not one of (bool, DocumentHighlightOptions)'''))); final documentSymbolProviderJson = json['documentSymbolProvider']; final documentSymbolProvider = documentSymbolProviderJson == null ? null : (documentSymbolProviderJson is bool ? Either2.t1( documentSymbolProviderJson) : (DocumentSymbolOptions.canParse( documentSymbolProviderJson, nullLspJsonReporter) ? Either2.t2( DocumentSymbolOptions.fromJson( documentSymbolProviderJson as Map)) : (throw '''$documentSymbolProviderJson was not one of (bool, DocumentSymbolOptions)'''))); final codeActionProviderJson = json['codeActionProvider']; final codeActionProvider = codeActionProviderJson == null ? null : (codeActionProviderJson is bool ? Either2.t1(codeActionProviderJson) : (CodeActionOptions.canParse( codeActionProviderJson, nullLspJsonReporter) ? Either2.t2( CodeActionOptions.fromJson( codeActionProviderJson as Map)) : (throw '''$codeActionProviderJson was not one of (bool, CodeActionOptions)'''))); final codeLensProviderJson = json['codeLensProvider']; final codeLensProvider = codeLensProviderJson != null ? CodeLensOptions.fromJson(codeLensProviderJson as Map) : null; final documentLinkProviderJson = json['documentLinkProvider']; final documentLinkProvider = documentLinkProviderJson != null ? DocumentLinkOptions.fromJson( documentLinkProviderJson as Map) : null; final colorProviderJson = json['colorProvider']; final colorProvider = colorProviderJson == null ? null : (colorProviderJson is bool ? Either3.t1(colorProviderJson) : (DocumentColorOptions.canParse(colorProviderJson, nullLspJsonReporter) ? Either3.t2( DocumentColorOptions.fromJson( colorProviderJson as Map)) : (DocumentColorRegistrationOptions.canParse( colorProviderJson, nullLspJsonReporter) ? Either3.t3( DocumentColorRegistrationOptions.fromJson( colorProviderJson as Map)) : (throw '''$colorProviderJson was not one of (bool, DocumentColorOptions, DocumentColorRegistrationOptions)''')))); final documentFormattingProviderJson = json['documentFormattingProvider']; final documentFormattingProvider = documentFormattingProviderJson == null ? null : (documentFormattingProviderJson is bool ? Either2.t1( documentFormattingProviderJson) : (DocumentFormattingOptions.canParse( documentFormattingProviderJson, nullLspJsonReporter) ? Either2.t2( DocumentFormattingOptions.fromJson( documentFormattingProviderJson as Map)) : (throw '''$documentFormattingProviderJson was not one of (bool, DocumentFormattingOptions)'''))); final documentRangeFormattingProviderJson = json['documentRangeFormattingProvider']; final documentRangeFormattingProvider = documentRangeFormattingProviderJson == null ? null : (documentRangeFormattingProviderJson is bool ? Either2.t1( documentRangeFormattingProviderJson) : (DocumentRangeFormattingOptions.canParse( documentRangeFormattingProviderJson, nullLspJsonReporter) ? Either2.t2( DocumentRangeFormattingOptions.fromJson( documentRangeFormattingProviderJson as Map)) : (throw '''$documentRangeFormattingProviderJson was not one of (bool, DocumentRangeFormattingOptions)'''))); final documentOnTypeFormattingProviderJson = json['documentOnTypeFormattingProvider']; final documentOnTypeFormattingProvider = documentOnTypeFormattingProviderJson != null ? DocumentOnTypeFormattingOptions.fromJson( documentOnTypeFormattingProviderJson as Map) : null; final renameProviderJson = json['renameProvider']; final renameProvider = renameProviderJson == null ? null : (renameProviderJson is bool ? Either2.t1(renameProviderJson) : (RenameOptions.canParse(renameProviderJson, nullLspJsonReporter) ? Either2.t2(RenameOptions.fromJson( renameProviderJson as Map)) : (throw '''$renameProviderJson was not one of (bool, RenameOptions)'''))); final foldingRangeProviderJson = json['foldingRangeProvider']; final foldingRangeProvider = foldingRangeProviderJson == null ? null : (foldingRangeProviderJson is bool ? Either3.t1( foldingRangeProviderJson) : (FoldingRangeOptions.canParse( foldingRangeProviderJson, nullLspJsonReporter) ? Either3.t2( FoldingRangeOptions.fromJson( foldingRangeProviderJson as Map)) : (FoldingRangeRegistrationOptions.canParse( foldingRangeProviderJson, nullLspJsonReporter) ? Either3.t3( FoldingRangeRegistrationOptions.fromJson( foldingRangeProviderJson as Map)) : (throw '''$foldingRangeProviderJson was not one of (bool, FoldingRangeOptions, FoldingRangeRegistrationOptions)''')))); final executeCommandProviderJson = json['executeCommandProvider']; final executeCommandProvider = executeCommandProviderJson != null ? ExecuteCommandOptions.fromJson( executeCommandProviderJson as Map) : null; final selectionRangeProviderJson = json['selectionRangeProvider']; final selectionRangeProvider = selectionRangeProviderJson == null ? null : (selectionRangeProviderJson is bool ? Either3.t1( selectionRangeProviderJson) : (SelectionRangeOptions.canParse( selectionRangeProviderJson, nullLspJsonReporter) ? Either3.t2( SelectionRangeOptions.fromJson( selectionRangeProviderJson as Map)) : (SelectionRangeRegistrationOptions.canParse( selectionRangeProviderJson, nullLspJsonReporter) ? Either3.t3( SelectionRangeRegistrationOptions.fromJson( selectionRangeProviderJson as Map)) : (throw '''$selectionRangeProviderJson was not one of (bool, SelectionRangeOptions, SelectionRangeRegistrationOptions)''')))); final linkedEditingRangeProviderJson = json['linkedEditingRangeProvider']; final linkedEditingRangeProvider = linkedEditingRangeProviderJson == null ? null : (linkedEditingRangeProviderJson is bool ? Either3.t1( linkedEditingRangeProviderJson) : (LinkedEditingRangeOptions.canParse( linkedEditingRangeProviderJson, nullLspJsonReporter) ? Either3.t2( LinkedEditingRangeOptions.fromJson( linkedEditingRangeProviderJson as Map)) : (LinkedEditingRangeRegistrationOptions.canParse( linkedEditingRangeProviderJson, nullLspJsonReporter) ? Either3.t3( LinkedEditingRangeRegistrationOptions.fromJson( linkedEditingRangeProviderJson as Map)) : (throw '''$linkedEditingRangeProviderJson was not one of (bool, LinkedEditingRangeOptions, LinkedEditingRangeRegistrationOptions)''')))); final callHierarchyProviderJson = json['callHierarchyProvider']; final callHierarchyProvider = callHierarchyProviderJson == null ? null : (callHierarchyProviderJson is bool ? Either3.t1( callHierarchyProviderJson) : (CallHierarchyOptions.canParse( callHierarchyProviderJson, nullLspJsonReporter) ? Either3.t2( CallHierarchyOptions.fromJson( callHierarchyProviderJson as Map)) : (CallHierarchyRegistrationOptions.canParse( callHierarchyProviderJson, nullLspJsonReporter) ? Either3.t3( CallHierarchyRegistrationOptions.fromJson( callHierarchyProviderJson as Map)) : (throw '''$callHierarchyProviderJson was not one of (bool, CallHierarchyOptions, CallHierarchyRegistrationOptions)''')))); final semanticTokensProviderJson = json['semanticTokensProvider']; final semanticTokensProvider = semanticTokensProviderJson == null ? null : (SemanticTokensOptions.canParse( semanticTokensProviderJson, nullLspJsonReporter) ? Either2.t1( SemanticTokensOptions.fromJson( semanticTokensProviderJson as Map)) : (SemanticTokensRegistrationOptions.canParse( semanticTokensProviderJson, nullLspJsonReporter) ? Either2.t2( SemanticTokensRegistrationOptions.fromJson( semanticTokensProviderJson as Map)) : (throw '''$semanticTokensProviderJson was not one of (SemanticTokensOptions, SemanticTokensRegistrationOptions)'''))); final monikerProviderJson = json['monikerProvider']; final monikerProvider = monikerProviderJson == null ? null : (monikerProviderJson is bool ? Either3.t1( monikerProviderJson) : (MonikerOptions.canParse(monikerProviderJson, nullLspJsonReporter) ? Either3.t2( MonikerOptions.fromJson( monikerProviderJson as Map)) : (MonikerRegistrationOptions.canParse( monikerProviderJson, nullLspJsonReporter) ? Either3.t3( MonikerRegistrationOptions.fromJson( monikerProviderJson as Map)) : (throw '''$monikerProviderJson was not one of (bool, MonikerOptions, MonikerRegistrationOptions)''')))); final workspaceSymbolProviderJson = json['workspaceSymbolProvider']; final workspaceSymbolProvider = workspaceSymbolProviderJson == null ? null : (workspaceSymbolProviderJson is bool ? Either2.t1( workspaceSymbolProviderJson) : (WorkspaceSymbolOptions.canParse( workspaceSymbolProviderJson, nullLspJsonReporter) ? Either2.t2( WorkspaceSymbolOptions.fromJson( workspaceSymbolProviderJson as Map)) : (throw '''$workspaceSymbolProviderJson was not one of (bool, WorkspaceSymbolOptions)'''))); final workspaceJson = json['workspace']; final workspace = workspaceJson != null ? ServerCapabilitiesWorkspace.fromJson( workspaceJson as Map) : null; final experimentalJson = json['experimental']; final experimental = experimentalJson; return ServerCapabilities( textDocumentSync: textDocumentSync, completionProvider: completionProvider, hoverProvider: hoverProvider, signatureHelpProvider: signatureHelpProvider, declarationProvider: declarationProvider, definitionProvider: definitionProvider, typeDefinitionProvider: typeDefinitionProvider, implementationProvider: implementationProvider, referencesProvider: referencesProvider, documentHighlightProvider: documentHighlightProvider, documentSymbolProvider: documentSymbolProvider, codeActionProvider: codeActionProvider, codeLensProvider: codeLensProvider, documentLinkProvider: documentLinkProvider, colorProvider: colorProvider, documentFormattingProvider: documentFormattingProvider, documentRangeFormattingProvider: documentRangeFormattingProvider, documentOnTypeFormattingProvider: documentOnTypeFormattingProvider, renameProvider: renameProvider, foldingRangeProvider: foldingRangeProvider, executeCommandProvider: executeCommandProvider, selectionRangeProvider: selectionRangeProvider, linkedEditingRangeProvider: linkedEditingRangeProvider, callHierarchyProvider: callHierarchyProvider, semanticTokensProvider: semanticTokensProvider, monikerProvider: monikerProvider, workspaceSymbolProvider: workspaceSymbolProvider, workspace: workspace, experimental: experimental); } /// The server provides call hierarchy support. /// @since 3.16.0 final Either3? callHierarchyProvider; /// The server provides code actions. The `CodeActionOptions` return type is /// only valid if the client signals code action literal support via the /// property `textDocument.codeAction.codeActionLiteralSupport`. final Either2? codeActionProvider; /// The server provides code lens. final CodeLensOptions? codeLensProvider; /// The server provides color provider support. /// @since 3.6.0 final Either3? colorProvider; /// The server provides completion support. final CompletionOptions? completionProvider; /// The server provides go to declaration support. /// @since 3.14.0 final Either3? declarationProvider; /// The server provides goto definition support. final Either2? definitionProvider; /// The server provides document formatting. final Either2? documentFormattingProvider; /// The server provides document highlight support. final Either2? documentHighlightProvider; /// The server provides document link support. final DocumentLinkOptions? documentLinkProvider; /// The server provides document formatting on typing. final DocumentOnTypeFormattingOptions? documentOnTypeFormattingProvider; /// The server provides document range formatting. final Either2? documentRangeFormattingProvider; /// The server provides document symbol support. final Either2? documentSymbolProvider; /// The server provides execute command support. final ExecuteCommandOptions? executeCommandProvider; /// Experimental server capabilities. final Object? experimental; /// The server provides folding provider support. /// @since 3.10.0 final Either3? foldingRangeProvider; /// The server provides hover support. final Either2? hoverProvider; /// The server provides goto implementation support. /// @since 3.6.0 final Either3? implementationProvider; /// The server provides linked editing range support. /// @since 3.16.0 final Either3? linkedEditingRangeProvider; /// Whether server provides moniker support. /// @since 3.16.0 final Either3? monikerProvider; /// The server provides find references support. final Either2? referencesProvider; /// The server provides rename support. RenameOptions may only be specified if /// the client states that it supports `prepareSupport` in its initial /// `initialize` request. final Either2? renameProvider; /// The server provides selection range support. /// @since 3.15.0 final Either3? selectionRangeProvider; /// The server provides semantic tokens support. /// @since 3.16.0 final Either2? semanticTokensProvider; /// The server provides signature help support. final SignatureHelpOptions? signatureHelpProvider; /// Defines how text documents are synced. Is either a detailed structure /// defining each notification or for backwards compatibility the /// TextDocumentSyncKind number. If omitted it defaults to /// `TextDocumentSyncKind.None`. final Either2? textDocumentSync; /// The server provides goto type definition support. /// @since 3.6.0 final Either3? typeDefinitionProvider; /// Workspace specific server capabilities final ServerCapabilitiesWorkspace? workspace; /// The server provides workspace symbol support. final Either2? workspaceSymbolProvider; Map toJson() { var __result = {}; if (textDocumentSync != null) { __result['textDocumentSync'] = textDocumentSync; } if (completionProvider != null) { __result['completionProvider'] = completionProvider?.toJson(); } if (hoverProvider != null) { __result['hoverProvider'] = hoverProvider; } if (signatureHelpProvider != null) { __result['signatureHelpProvider'] = signatureHelpProvider?.toJson(); } if (declarationProvider != null) { __result['declarationProvider'] = declarationProvider; } if (definitionProvider != null) { __result['definitionProvider'] = definitionProvider; } if (typeDefinitionProvider != null) { __result['typeDefinitionProvider'] = typeDefinitionProvider; } if (implementationProvider != null) { __result['implementationProvider'] = implementationProvider; } if (referencesProvider != null) { __result['referencesProvider'] = referencesProvider; } if (documentHighlightProvider != null) { __result['documentHighlightProvider'] = documentHighlightProvider; } if (documentSymbolProvider != null) { __result['documentSymbolProvider'] = documentSymbolProvider; } if (codeActionProvider != null) { __result['codeActionProvider'] = codeActionProvider; } if (codeLensProvider != null) { __result['codeLensProvider'] = codeLensProvider?.toJson(); } if (documentLinkProvider != null) { __result['documentLinkProvider'] = documentLinkProvider?.toJson(); } if (colorProvider != null) { __result['colorProvider'] = colorProvider; } if (documentFormattingProvider != null) { __result['documentFormattingProvider'] = documentFormattingProvider; } if (documentRangeFormattingProvider != null) { __result['documentRangeFormattingProvider'] = documentRangeFormattingProvider; } if (documentOnTypeFormattingProvider != null) { __result['documentOnTypeFormattingProvider'] = documentOnTypeFormattingProvider?.toJson(); } if (renameProvider != null) { __result['renameProvider'] = renameProvider; } if (foldingRangeProvider != null) { __result['foldingRangeProvider'] = foldingRangeProvider; } if (executeCommandProvider != null) { __result['executeCommandProvider'] = executeCommandProvider?.toJson(); } if (selectionRangeProvider != null) { __result['selectionRangeProvider'] = selectionRangeProvider; } if (linkedEditingRangeProvider != null) { __result['linkedEditingRangeProvider'] = linkedEditingRangeProvider; } if (callHierarchyProvider != null) { __result['callHierarchyProvider'] = callHierarchyProvider; } if (semanticTokensProvider != null) { __result['semanticTokensProvider'] = semanticTokensProvider; } if (monikerProvider != null) { __result['monikerProvider'] = monikerProvider; } if (workspaceSymbolProvider != null) { __result['workspaceSymbolProvider'] = workspaceSymbolProvider; } if (workspace != null) { __result['workspace'] = workspace?.toJson(); } if (experimental != null) { __result['experimental'] = experimental; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocumentSync'); try { final textDocumentSync = obj['textDocumentSync']; if (textDocumentSync != null && !((TextDocumentSyncOptions.canParse(textDocumentSync, reporter) || TextDocumentSyncKind.canParse(textDocumentSync, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('completionProvider'); try { final completionProvider = obj['completionProvider']; if (completionProvider != null && !(CompletionOptions.canParse(completionProvider, reporter))) { reporter.reportError('must be of type CompletionOptions'); return false; } } finally { reporter.pop(); } reporter.push('hoverProvider'); try { final hoverProvider = obj['hoverProvider']; if (hoverProvider != null && !((hoverProvider is bool || HoverOptions.canParse(hoverProvider, reporter)))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('signatureHelpProvider'); try { final signatureHelpProvider = obj['signatureHelpProvider']; if (signatureHelpProvider != null && !(SignatureHelpOptions.canParse(signatureHelpProvider, reporter))) { reporter.reportError('must be of type SignatureHelpOptions'); return false; } } finally { reporter.pop(); } reporter.push('declarationProvider'); try { final declarationProvider = obj['declarationProvider']; if (declarationProvider != null && !((declarationProvider is bool || DeclarationOptions.canParse(declarationProvider, reporter) || DeclarationRegistrationOptions.canParse( declarationProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('definitionProvider'); try { final definitionProvider = obj['definitionProvider']; if (definitionProvider != null && !((definitionProvider is bool || DefinitionOptions.canParse(definitionProvider, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('typeDefinitionProvider'); try { final typeDefinitionProvider = obj['typeDefinitionProvider']; if (typeDefinitionProvider != null && !((typeDefinitionProvider is bool || TypeDefinitionOptions.canParse( typeDefinitionProvider, reporter) || TypeDefinitionRegistrationOptions.canParse( typeDefinitionProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('implementationProvider'); try { final implementationProvider = obj['implementationProvider']; if (implementationProvider != null && !((implementationProvider is bool || ImplementationOptions.canParse( implementationProvider, reporter) || ImplementationRegistrationOptions.canParse( implementationProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('referencesProvider'); try { final referencesProvider = obj['referencesProvider']; if (referencesProvider != null && !((referencesProvider is bool || ReferenceOptions.canParse(referencesProvider, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('documentHighlightProvider'); try { final documentHighlightProvider = obj['documentHighlightProvider']; if (documentHighlightProvider != null && !((documentHighlightProvider is bool || DocumentHighlightOptions.canParse( documentHighlightProvider, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('documentSymbolProvider'); try { final documentSymbolProvider = obj['documentSymbolProvider']; if (documentSymbolProvider != null && !((documentSymbolProvider is bool || DocumentSymbolOptions.canParse( documentSymbolProvider, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('codeActionProvider'); try { final codeActionProvider = obj['codeActionProvider']; if (codeActionProvider != null && !((codeActionProvider is bool || CodeActionOptions.canParse(codeActionProvider, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('codeLensProvider'); try { final codeLensProvider = obj['codeLensProvider']; if (codeLensProvider != null && !(CodeLensOptions.canParse(codeLensProvider, reporter))) { reporter.reportError('must be of type CodeLensOptions'); return false; } } finally { reporter.pop(); } reporter.push('documentLinkProvider'); try { final documentLinkProvider = obj['documentLinkProvider']; if (documentLinkProvider != null && !(DocumentLinkOptions.canParse(documentLinkProvider, reporter))) { reporter.reportError('must be of type DocumentLinkOptions'); return false; } } finally { reporter.pop(); } reporter.push('colorProvider'); try { final colorProvider = obj['colorProvider']; if (colorProvider != null && !((colorProvider is bool || DocumentColorOptions.canParse(colorProvider, reporter) || DocumentColorRegistrationOptions.canParse( colorProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('documentFormattingProvider'); try { final documentFormattingProvider = obj['documentFormattingProvider']; if (documentFormattingProvider != null && !((documentFormattingProvider is bool || DocumentFormattingOptions.canParse( documentFormattingProvider, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('documentRangeFormattingProvider'); try { final documentRangeFormattingProvider = obj['documentRangeFormattingProvider']; if (documentRangeFormattingProvider != null && !((documentRangeFormattingProvider is bool || DocumentRangeFormattingOptions.canParse( documentRangeFormattingProvider, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('documentOnTypeFormattingProvider'); try { final documentOnTypeFormattingProvider = obj['documentOnTypeFormattingProvider']; if (documentOnTypeFormattingProvider != null && !(DocumentOnTypeFormattingOptions.canParse( documentOnTypeFormattingProvider, reporter))) { reporter .reportError('must be of type DocumentOnTypeFormattingOptions'); return false; } } finally { reporter.pop(); } reporter.push('renameProvider'); try { final renameProvider = obj['renameProvider']; if (renameProvider != null && !((renameProvider is bool || RenameOptions.canParse(renameProvider, reporter)))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('foldingRangeProvider'); try { final foldingRangeProvider = obj['foldingRangeProvider']; if (foldingRangeProvider != null && !((foldingRangeProvider is bool || FoldingRangeOptions.canParse(foldingRangeProvider, reporter) || FoldingRangeRegistrationOptions.canParse( foldingRangeProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('executeCommandProvider'); try { final executeCommandProvider = obj['executeCommandProvider']; if (executeCommandProvider != null && !(ExecuteCommandOptions.canParse( executeCommandProvider, reporter))) { reporter.reportError('must be of type ExecuteCommandOptions'); return false; } } finally { reporter.pop(); } reporter.push('selectionRangeProvider'); try { final selectionRangeProvider = obj['selectionRangeProvider']; if (selectionRangeProvider != null && !((selectionRangeProvider is bool || SelectionRangeOptions.canParse( selectionRangeProvider, reporter) || SelectionRangeRegistrationOptions.canParse( selectionRangeProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('linkedEditingRangeProvider'); try { final linkedEditingRangeProvider = obj['linkedEditingRangeProvider']; if (linkedEditingRangeProvider != null && !((linkedEditingRangeProvider is bool || LinkedEditingRangeOptions.canParse( linkedEditingRangeProvider, reporter) || LinkedEditingRangeRegistrationOptions.canParse( linkedEditingRangeProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('callHierarchyProvider'); try { final callHierarchyProvider = obj['callHierarchyProvider']; if (callHierarchyProvider != null && !((callHierarchyProvider is bool || CallHierarchyOptions.canParse( callHierarchyProvider, reporter) || CallHierarchyRegistrationOptions.canParse( callHierarchyProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('semanticTokensProvider'); try { final semanticTokensProvider = obj['semanticTokensProvider']; if (semanticTokensProvider != null && !((SemanticTokensOptions.canParse( semanticTokensProvider, reporter) || SemanticTokensRegistrationOptions.canParse( semanticTokensProvider, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('monikerProvider'); try { final monikerProvider = obj['monikerProvider']; if (monikerProvider != null && !((monikerProvider is bool || MonikerOptions.canParse(monikerProvider, reporter) || MonikerRegistrationOptions.canParse( monikerProvider, reporter)))) { reporter.reportError( 'must be of type Either3'); return false; } } finally { reporter.pop(); } reporter.push('workspaceSymbolProvider'); try { final workspaceSymbolProvider = obj['workspaceSymbolProvider']; if (workspaceSymbolProvider != null && !((workspaceSymbolProvider is bool || WorkspaceSymbolOptions.canParse( workspaceSymbolProvider, reporter)))) { reporter.reportError( 'must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('workspace'); try { final workspace = obj['workspace']; if (workspace != null && !(ServerCapabilitiesWorkspace.canParse(workspace, reporter))) { reporter.reportError('must be of type ServerCapabilitiesWorkspace'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ServerCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ServerCapabilities && other.runtimeType == ServerCapabilities) { return textDocumentSync == other.textDocumentSync && completionProvider == other.completionProvider && hoverProvider == other.hoverProvider && signatureHelpProvider == other.signatureHelpProvider && declarationProvider == other.declarationProvider && definitionProvider == other.definitionProvider && typeDefinitionProvider == other.typeDefinitionProvider && implementationProvider == other.implementationProvider && referencesProvider == other.referencesProvider && documentHighlightProvider == other.documentHighlightProvider && documentSymbolProvider == other.documentSymbolProvider && codeActionProvider == other.codeActionProvider && codeLensProvider == other.codeLensProvider && documentLinkProvider == other.documentLinkProvider && colorProvider == other.colorProvider && documentFormattingProvider == other.documentFormattingProvider && documentRangeFormattingProvider == other.documentRangeFormattingProvider && documentOnTypeFormattingProvider == other.documentOnTypeFormattingProvider && renameProvider == other.renameProvider && foldingRangeProvider == other.foldingRangeProvider && executeCommandProvider == other.executeCommandProvider && selectionRangeProvider == other.selectionRangeProvider && linkedEditingRangeProvider == other.linkedEditingRangeProvider && callHierarchyProvider == other.callHierarchyProvider && semanticTokensProvider == other.semanticTokensProvider && monikerProvider == other.monikerProvider && workspaceSymbolProvider == other.workspaceSymbolProvider && workspace == other.workspace && experimental == other.experimental && true; } return false; } @override int get hashCode => Object.hashAll([ textDocumentSync, completionProvider, hoverProvider, signatureHelpProvider, declarationProvider, definitionProvider, typeDefinitionProvider, implementationProvider, referencesProvider, documentHighlightProvider, documentSymbolProvider, codeActionProvider, codeLensProvider, documentLinkProvider, colorProvider, documentFormattingProvider, documentRangeFormattingProvider, documentOnTypeFormattingProvider, renameProvider, foldingRangeProvider, executeCommandProvider, selectionRangeProvider, linkedEditingRangeProvider, callHierarchyProvider, semanticTokensProvider, monikerProvider, workspaceSymbolProvider, workspace, experimental ]); @override String toString() => jsonEncoder.convert(toJson()); } class ServerCapabilitiesFileOperations implements ToJsonable { static const jsonHandler = LspJsonHandler( ServerCapabilitiesFileOperations.canParse, ServerCapabilitiesFileOperations.fromJson); ServerCapabilitiesFileOperations( {this.didCreate, this.willCreate, this.didRename, this.willRename, this.didDelete, this.willDelete}); static ServerCapabilitiesFileOperations fromJson(Map json) { final didCreateJson = json['didCreate']; final didCreate = didCreateJson != null ? FileOperationRegistrationOptions.fromJson( didCreateJson as Map) : null; final willCreateJson = json['willCreate']; final willCreate = willCreateJson != null ? FileOperationRegistrationOptions.fromJson( willCreateJson as Map) : null; final didRenameJson = json['didRename']; final didRename = didRenameJson != null ? FileOperationRegistrationOptions.fromJson( didRenameJson as Map) : null; final willRenameJson = json['willRename']; final willRename = willRenameJson != null ? FileOperationRegistrationOptions.fromJson( willRenameJson as Map) : null; final didDeleteJson = json['didDelete']; final didDelete = didDeleteJson != null ? FileOperationRegistrationOptions.fromJson( didDeleteJson as Map) : null; final willDeleteJson = json['willDelete']; final willDelete = willDeleteJson != null ? FileOperationRegistrationOptions.fromJson( willDeleteJson as Map) : null; return ServerCapabilitiesFileOperations( didCreate: didCreate, willCreate: willCreate, didRename: didRename, willRename: willRename, didDelete: didDelete, willDelete: willDelete); } /// 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 toJson() { var __result = {}; if (didCreate != null) { __result['didCreate'] = didCreate?.toJson(); } if (willCreate != null) { __result['willCreate'] = willCreate?.toJson(); } if (didRename != null) { __result['didRename'] = didRename?.toJson(); } if (willRename != null) { __result['willRename'] = willRename?.toJson(); } if (didDelete != null) { __result['didDelete'] = didDelete?.toJson(); } if (willDelete != null) { __result['willDelete'] = willDelete?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('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('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('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(); } 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('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(); } 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 && willCreate == other.willCreate && didRename == other.didRename && willRename == other.willRename && didDelete == other.didDelete && willDelete == other.willDelete && true; } return false; } @override int get hashCode => Object.hash( didCreate, willCreate, didRename, willRename, didDelete, willDelete); @override String toString() => jsonEncoder.convert(toJson()); } class ServerCapabilitiesWorkspace implements ToJsonable { static const jsonHandler = LspJsonHandler( ServerCapabilitiesWorkspace.canParse, ServerCapabilitiesWorkspace.fromJson); ServerCapabilitiesWorkspace({this.workspaceFolders, this.fileOperations}); static ServerCapabilitiesWorkspace fromJson(Map json) { final workspaceFoldersJson = json['workspaceFolders']; final workspaceFolders = workspaceFoldersJson != null ? WorkspaceFoldersServerCapabilities.fromJson( workspaceFoldersJson as Map) : null; final fileOperationsJson = json['fileOperations']; final fileOperations = fileOperationsJson != null ? ServerCapabilitiesFileOperations.fromJson( fileOperationsJson as Map) : null; return ServerCapabilitiesWorkspace( workspaceFolders: workspaceFolders, fileOperations: fileOperations); } /// The server is interested in file notifications/requests. /// @since 3.16.0 final ServerCapabilitiesFileOperations? fileOperations; /// The server supports workspace folder. /// @since 3.6.0 final WorkspaceFoldersServerCapabilities? workspaceFolders; Map toJson() { var __result = {}; if (workspaceFolders != null) { __result['workspaceFolders'] = workspaceFolders?.toJson(); } if (fileOperations != null) { __result['fileOperations'] = fileOperations?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workspaceFolders'); try { final workspaceFolders = obj['workspaceFolders']; if (workspaceFolders != null && !(WorkspaceFoldersServerCapabilities.canParse( workspaceFolders, reporter))) { reporter.reportError( 'must be of type WorkspaceFoldersServerCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('fileOperations'); try { final fileOperations = obj['fileOperations']; if (fileOperations != null && !(ServerCapabilitiesFileOperations.canParse( fileOperations, reporter))) { reporter .reportError('must be of type ServerCapabilitiesFileOperations'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ServerCapabilitiesWorkspace'); return false; } } @override bool operator ==(Object other) { if (other is ServerCapabilitiesWorkspace && other.runtimeType == ServerCapabilitiesWorkspace) { return workspaceFolders == other.workspaceFolders && fileOperations == other.fileOperations && true; } return false; } @override int get hashCode => Object.hash(workspaceFolders, fileOperations); @override String toString() => jsonEncoder.convert(toJson()); } class SetTraceParams implements ToJsonable { static const jsonHandler = LspJsonHandler(SetTraceParams.canParse, SetTraceParams.fromJson); SetTraceParams({required this.value}); static SetTraceParams fromJson(Map json) { final valueJson = json['value']; final value = const {'off', 'message', 'verbose'}.contains(valueJson) ? valueJson as String : throw '''$valueJson was not one of ('off', 'message', 'verbose')'''; return SetTraceParams(value: value); } /// The new value that should be assigned to the trace setting. final String value; Map toJson() { var __result = {}; __result['value'] = value; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 == 'off' || value == 'message' || value == 'verbose'))) { reporter.reportError( 'must be one of the literals \'off\', \'message\', \'verbose\''); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SetTraceParams'); return false; } } @override bool operator ==(Object other) { if (other is SetTraceParams && other.runtimeType == SetTraceParams) { return value == other.value && true; } return false; } @override int get hashCode => value.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// Client capabilities for the show document request. /// @since 3.16.0 class ShowDocumentClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( ShowDocumentClientCapabilities.canParse, ShowDocumentClientCapabilities.fromJson); ShowDocumentClientCapabilities({required this.support}); static ShowDocumentClientCapabilities fromJson(Map json) { final supportJson = json['support']; final support = supportJson as bool; return ShowDocumentClientCapabilities(support: support); } /// The client has support for the show document request. final bool support; Map toJson() { var __result = {}; __result['support'] = support; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('support'); try { if (!obj.containsKey('support')) { reporter.reportError('must not be undefined'); return false; } final support = obj['support']; if (support == null) { reporter.reportError('must not be null'); return false; } if (!(support is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ShowDocumentClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ShowDocumentClientCapabilities && other.runtimeType == ShowDocumentClientCapabilities) { return support == other.support && true; } return false; } @override int get hashCode => support.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// Params to show a document. /// @since 3.16.0 class ShowDocumentParams implements ToJsonable { static const jsonHandler = LspJsonHandler(ShowDocumentParams.canParse, ShowDocumentParams.fromJson); ShowDocumentParams( {required this.uri, this.external, this.takeFocus, this.selection}); static ShowDocumentParams fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; final externalJson = json['external']; final external = externalJson as bool?; final takeFocusJson = json['takeFocus']; final takeFocus = takeFocusJson as bool?; final selectionJson = json['selection']; final selection = selectionJson != null ? Range.fromJson(selectionJson as Map) : null; return ShowDocumentParams( uri: uri, external: external, takeFocus: takeFocus, selection: selection); } /// Indicates to show the resource in an external program. To show for example /// `https://code.visualstudio.com/` in the default WEB browser set `external` /// to `true`. final bool? external; /// An optional selection range if the document is a text document. Clients /// might ignore the property if an external program is started or the file is /// not a text file. final Range? selection; /// An optional property to indicate whether the editor showing the document /// should take focus or not. Clients might ignore this property if an /// external program is started. final bool? takeFocus; /// The document uri to show. final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; if (external != null) { __result['external'] = external; } if (takeFocus != null) { __result['takeFocus'] = takeFocus; } if (selection != null) { __result['selection'] = selection?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('external'); try { final external = obj['external']; if (external != null && !(external is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('takeFocus'); try { final takeFocus = obj['takeFocus']; if (takeFocus != null && !(takeFocus is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('selection'); try { final selection = obj['selection']; if (selection != null && !(Range.canParse(selection, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ShowDocumentParams'); return false; } } @override bool operator ==(Object other) { if (other is ShowDocumentParams && other.runtimeType == ShowDocumentParams) { return uri == other.uri && external == other.external && takeFocus == other.takeFocus && selection == other.selection && true; } return false; } @override int get hashCode => Object.hash(uri, external, takeFocus, selection); @override String toString() => jsonEncoder.convert(toJson()); } /// The result of an show document request. /// @since 3.16.0 class ShowDocumentResult implements ToJsonable { static const jsonHandler = LspJsonHandler(ShowDocumentResult.canParse, ShowDocumentResult.fromJson); ShowDocumentResult({required this.success}); static ShowDocumentResult fromJson(Map json) { final successJson = json['success']; final success = successJson as bool; return ShowDocumentResult(success: success); } /// A boolean indicating if the show was successful. final bool success; Map toJson() { var __result = {}; __result['success'] = success; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('success'); try { if (!obj.containsKey('success')) { reporter.reportError('must not be undefined'); return false; } final success = obj['success']; if (success == null) { reporter.reportError('must not be null'); return false; } if (!(success is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ShowDocumentResult'); return false; } } @override bool operator ==(Object other) { if (other is ShowDocumentResult && other.runtimeType == ShowDocumentResult) { return success == other.success && true; } return false; } @override int get hashCode => success.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ShowMessageParams implements ToJsonable { static const jsonHandler = LspJsonHandler(ShowMessageParams.canParse, ShowMessageParams.fromJson); ShowMessageParams({required this.type, required this.message}); static ShowMessageParams fromJson(Map json) { final typeJson = json['type']; final type = MessageType.fromJson(typeJson as int); final messageJson = json['message']; final message = messageJson as String; return ShowMessageParams(type: type, message: message); } /// The actual message. final String message; /// The message type. final MessageType type; Map toJson() { var __result = {}; __result['type'] = type.toJson(); __result['message'] = message; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('type'); try { if (!obj.containsKey('type')) { reporter.reportError('must not be undefined'); return false; } final type = obj['type']; if (type == null) { reporter.reportError('must not be null'); return false; } if (!(MessageType.canParse(type, reporter))) { reporter.reportError('must be of type MessageType'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ShowMessageParams'); return false; } } @override bool operator ==(Object other) { if (other is ShowMessageParams && other.runtimeType == ShowMessageParams) { return type == other.type && message == other.message && true; } return false; } @override int get hashCode => Object.hash(type, message); @override String toString() => jsonEncoder.convert(toJson()); } /// Show message request client capabilities class ShowMessageRequestClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( ShowMessageRequestClientCapabilities.canParse, ShowMessageRequestClientCapabilities.fromJson); ShowMessageRequestClientCapabilities({this.messageActionItem}); static ShowMessageRequestClientCapabilities fromJson( Map json) { final messageActionItemJson = json['messageActionItem']; final messageActionItem = messageActionItemJson != null ? ShowMessageRequestClientCapabilitiesMessageActionItem.fromJson( messageActionItemJson as Map) : null; return ShowMessageRequestClientCapabilities( messageActionItem: messageActionItem); } /// Capabilities specific to the `MessageActionItem` type. final ShowMessageRequestClientCapabilitiesMessageActionItem? messageActionItem; Map toJson() { var __result = {}; if (messageActionItem != null) { __result['messageActionItem'] = messageActionItem?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('messageActionItem'); try { final messageActionItem = obj['messageActionItem']; if (messageActionItem != null && !(ShowMessageRequestClientCapabilitiesMessageActionItem.canParse( messageActionItem, reporter))) { reporter.reportError( 'must be of type ShowMessageRequestClientCapabilitiesMessageActionItem'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type ShowMessageRequestClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is ShowMessageRequestClientCapabilities && other.runtimeType == ShowMessageRequestClientCapabilities) { return messageActionItem == other.messageActionItem && true; } return false; } @override int get hashCode => messageActionItem.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ShowMessageRequestClientCapabilitiesMessageActionItem implements ToJsonable { static const jsonHandler = LspJsonHandler( ShowMessageRequestClientCapabilitiesMessageActionItem.canParse, ShowMessageRequestClientCapabilitiesMessageActionItem.fromJson); ShowMessageRequestClientCapabilitiesMessageActionItem( {this.additionalPropertiesSupport}); static ShowMessageRequestClientCapabilitiesMessageActionItem fromJson( Map json) { final additionalPropertiesSupportJson = json['additionalPropertiesSupport']; final additionalPropertiesSupport = additionalPropertiesSupportJson as bool?; return ShowMessageRequestClientCapabilitiesMessageActionItem( additionalPropertiesSupport: additionalPropertiesSupport); } /// Whether the client supports additional attributes which are preserved and /// sent back to the server in the request's response. final bool? additionalPropertiesSupport; Map toJson() { var __result = {}; if (additionalPropertiesSupport != null) { __result['additionalPropertiesSupport'] = additionalPropertiesSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('additionalPropertiesSupport'); try { final additionalPropertiesSupport = obj['additionalPropertiesSupport']; if (additionalPropertiesSupport != null && !(additionalPropertiesSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type ShowMessageRequestClientCapabilitiesMessageActionItem'); return false; } } @override bool operator ==(Object other) { if (other is ShowMessageRequestClientCapabilitiesMessageActionItem && other.runtimeType == ShowMessageRequestClientCapabilitiesMessageActionItem) { return additionalPropertiesSupport == other.additionalPropertiesSupport && true; } return false; } @override int get hashCode => additionalPropertiesSupport.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class ShowMessageRequestParams implements ToJsonable { static const jsonHandler = LspJsonHandler( ShowMessageRequestParams.canParse, ShowMessageRequestParams.fromJson); ShowMessageRequestParams( {required this.type, required this.message, this.actions}); static ShowMessageRequestParams fromJson(Map json) { final typeJson = json['type']; final type = MessageType.fromJson(typeJson as int); final messageJson = json['message']; final message = messageJson as String; final actionsJson = json['actions']; final actions = (actionsJson as List?) ?.map( (item) => MessageActionItem.fromJson(item as Map)) .toList(); return ShowMessageRequestParams( type: type, message: message, actions: actions); } /// The message action items to present. final List? actions; /// The actual message final String message; /// The message type. final MessageType type; Map toJson() { var __result = {}; __result['type'] = type.toJson(); __result['message'] = message; if (actions != null) { __result['actions'] = actions?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('type'); try { if (!obj.containsKey('type')) { reporter.reportError('must not be undefined'); return false; } final type = obj['type']; if (type == null) { reporter.reportError('must not be null'); return false; } if (!(MessageType.canParse(type, reporter))) { reporter.reportError('must be of type MessageType'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { if (!obj.containsKey('message')) { reporter.reportError('must not be undefined'); return false; } final message = obj['message']; if (message == null) { reporter.reportError('must not be null'); return false; } if (!(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('actions'); try { final actions = obj['actions']; if (actions != null && !((actions is List && (actions.every( (item) => MessageActionItem.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type ShowMessageRequestParams'); return false; } } @override bool operator ==(Object other) { if (other is ShowMessageRequestParams && other.runtimeType == ShowMessageRequestParams) { return type == other.type && message == other.message && listEqual(actions, other.actions, (MessageActionItem a, MessageActionItem b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(type, message, lspHashCode(actions)); @override String toString() => jsonEncoder.convert(toJson()); } /// Signature help represents the signature of something callable. There can be /// multiple signature but only one active and only one active parameter. class SignatureHelp implements ToJsonable { static const jsonHandler = LspJsonHandler(SignatureHelp.canParse, SignatureHelp.fromJson); SignatureHelp( {required this.signatures, this.activeSignature, this.activeParameter}); static SignatureHelp fromJson(Map json) { final signaturesJson = json['signatures']; final signatures = (signaturesJson as List) .map((item) => SignatureInformation.fromJson(item as Map)) .toList(); final activeSignatureJson = json['activeSignature']; final activeSignature = activeSignatureJson as int?; final activeParameterJson = json['activeParameter']; final activeParameter = activeParameterJson as int?; return SignatureHelp( signatures: signatures, activeSignature: activeSignature, activeParameter: activeParameter); } /// The active parameter of the active signature. If omitted or the value lies /// outside the range of `signatures[activeSignature].parameters` defaults to /// 0 if the active signature has parameters. If the active signature has no /// parameters it is ignored. In future version of the protocol this property /// might become mandatory to better express the active parameter if the /// active signature does have any. final int? activeParameter; /// The active signature. If omitted or the value lies outside the range of /// `signatures` the value defaults to zero or is ignore if the /// `SignatureHelp` as no signatures. /// /// Whenever possible implementors should make an active decision about the /// active signature and shouldn't rely on a default value. /// /// In future version of the protocol this property might become mandatory to /// better express this. final int? activeSignature; /// One or more signatures. If no signatures are available the signature help /// request should return `null`. final List signatures; Map toJson() { var __result = {}; __result['signatures'] = signatures.map((item) => item.toJson()).toList(); if (activeSignature != null) { __result['activeSignature'] = activeSignature; } if (activeParameter != null) { __result['activeParameter'] = activeParameter; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('signatures'); try { if (!obj.containsKey('signatures')) { reporter.reportError('must not be undefined'); return false; } final signatures = obj['signatures']; if (signatures == null) { reporter.reportError('must not be null'); return false; } if (!((signatures is List && (signatures.every( (item) => SignatureInformation.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('activeSignature'); try { final activeSignature = obj['activeSignature']; if (activeSignature != null && !(activeSignature is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('activeParameter'); try { final activeParameter = obj['activeParameter']; if (activeParameter != null && !(activeParameter is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureHelp'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelp && other.runtimeType == SignatureHelp) { return listEqual(signatures, other.signatures, (SignatureInformation a, SignatureInformation b) => a == b) && activeSignature == other.activeSignature && activeParameter == other.activeParameter && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(signatures), activeSignature, activeParameter); @override String toString() => jsonEncoder.convert(toJson()); } class SignatureHelpClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( SignatureHelpClientCapabilities.canParse, SignatureHelpClientCapabilities.fromJson); SignatureHelpClientCapabilities( {this.dynamicRegistration, this.signatureInformation, this.contextSupport}); static SignatureHelpClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final signatureInformationJson = json['signatureInformation']; final signatureInformation = signatureInformationJson != null ? SignatureHelpClientCapabilitiesSignatureInformation.fromJson( signatureInformationJson as Map) : null; final contextSupportJson = json['contextSupport']; final contextSupport = contextSupportJson as bool?; return SignatureHelpClientCapabilities( dynamicRegistration: dynamicRegistration, signatureInformation: signatureInformation, contextSupport: contextSupport); } /// The client supports to send additional context information for a /// `textDocument/signatureHelp` request. A client that opts into /// contextSupport will also support the `retriggerCharacters` on /// `SignatureHelpOptions`. /// @since 3.15.0 final bool? contextSupport; /// Whether signature help supports dynamic registration. final bool? dynamicRegistration; /// The client supports the following `SignatureInformation` specific /// properties. final SignatureHelpClientCapabilitiesSignatureInformation? signatureInformation; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (signatureInformation != null) { __result['signatureInformation'] = signatureInformation?.toJson(); } if (contextSupport != null) { __result['contextSupport'] = contextSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('signatureInformation'); try { final signatureInformation = obj['signatureInformation']; if (signatureInformation != null && !(SignatureHelpClientCapabilitiesSignatureInformation.canParse( signatureInformation, reporter))) { reporter.reportError( 'must be of type SignatureHelpClientCapabilitiesSignatureInformation'); return false; } } finally { reporter.pop(); } reporter.push('contextSupport'); try { final contextSupport = obj['contextSupport']; if (contextSupport != null && !(contextSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureHelpClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelpClientCapabilities && other.runtimeType == SignatureHelpClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && signatureInformation == other.signatureInformation && contextSupport == other.contextSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, signatureInformation, contextSupport); @override String toString() => jsonEncoder.convert(toJson()); } class SignatureHelpClientCapabilitiesParameterInformation implements ToJsonable { static const jsonHandler = LspJsonHandler( SignatureHelpClientCapabilitiesParameterInformation.canParse, SignatureHelpClientCapabilitiesParameterInformation.fromJson); SignatureHelpClientCapabilitiesParameterInformation( {this.labelOffsetSupport}); static SignatureHelpClientCapabilitiesParameterInformation fromJson( Map 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 toJson() { var __result = {}; if (labelOffsetSupport != null) { __result['labelOffsetSupport'] = labelOffsetSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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( SignatureHelpClientCapabilitiesSignatureInformation.canParse, SignatureHelpClientCapabilitiesSignatureInformation.fromJson); SignatureHelpClientCapabilitiesSignatureInformation( {this.documentationFormat, this.parameterInformation, this.activeParameterSupport}); static SignatureHelpClientCapabilitiesSignatureInformation fromJson( Map json) { final documentationFormatJson = json['documentationFormat']; final documentationFormat = (documentationFormatJson as List?) ?.map((item) => MarkupKind.fromJson(item as String)) .toList(); final parameterInformationJson = json['parameterInformation']; final parameterInformation = parameterInformationJson != null ? SignatureHelpClientCapabilitiesParameterInformation.fromJson( parameterInformationJson as Map) : null; final activeParameterSupportJson = json['activeParameterSupport']; final activeParameterSupport = activeParameterSupportJson as bool?; return SignatureHelpClientCapabilitiesSignatureInformation( documentationFormat: documentationFormat, parameterInformation: parameterInformation, activeParameterSupport: activeParameterSupport); } /// The client supports the `activeParameter` property on /// `SignatureInformation` literal. /// @since 3.16.0 final bool? activeParameterSupport; /// Client supports the follow content formats for the documentation property. /// The order describes the preferred format of the client. final List? documentationFormat; /// Client capabilities specific to parameter information. final SignatureHelpClientCapabilitiesParameterInformation? parameterInformation; Map toJson() { var __result = {}; if (documentationFormat != null) { __result['documentationFormat'] = documentationFormat?.map((item) => item.toJson()).toList(); } if (parameterInformation != null) { __result['parameterInformation'] = parameterInformation?.toJson(); } if (activeParameterSupport != null) { __result['activeParameterSupport'] = activeParameterSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentationFormat'); try { final documentationFormat = obj['documentationFormat']; if (documentationFormat != null && !((documentationFormat is List && (documentationFormat .every((item) => MarkupKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('parameterInformation'); try { final parameterInformation = obj['parameterInformation']; if (parameterInformation != null && !(SignatureHelpClientCapabilitiesParameterInformation.canParse( parameterInformation, reporter))) { reporter.reportError( 'must be of type SignatureHelpClientCapabilitiesParameterInformation'); return false; } } finally { reporter.pop(); } reporter.push('activeParameterSupport'); try { final activeParameterSupport = obj['activeParameterSupport']; if (activeParameterSupport != null && !(activeParameterSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type SignatureHelpClientCapabilitiesSignatureInformation'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelpClientCapabilitiesSignatureInformation && other.runtimeType == SignatureHelpClientCapabilitiesSignatureInformation) { return listEqual(documentationFormat, other.documentationFormat, (MarkupKind a, MarkupKind b) => a == b) && parameterInformation == other.parameterInformation && activeParameterSupport == other.activeParameterSupport && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentationFormat), parameterInformation, activeParameterSupport); @override String toString() => jsonEncoder.convert(toJson()); } /// Additional information about the context in which a signature help request /// was triggered. /// @since 3.15.0 class SignatureHelpContext implements ToJsonable { static const jsonHandler = LspJsonHandler( SignatureHelpContext.canParse, SignatureHelpContext.fromJson); SignatureHelpContext( {required this.triggerKind, this.triggerCharacter, required this.isRetrigger, this.activeSignatureHelp}); static SignatureHelpContext fromJson(Map json) { final triggerKindJson = json['triggerKind']; final triggerKind = SignatureHelpTriggerKind.fromJson(triggerKindJson as int); final triggerCharacterJson = json['triggerCharacter']; final triggerCharacter = triggerCharacterJson as String?; final isRetriggerJson = json['isRetrigger']; final isRetrigger = isRetriggerJson as bool; final activeSignatureHelpJson = json['activeSignatureHelp']; final activeSignatureHelp = activeSignatureHelpJson != null ? SignatureHelp.fromJson( activeSignatureHelpJson as Map) : null; return SignatureHelpContext( triggerKind: triggerKind, triggerCharacter: triggerCharacter, isRetrigger: isRetrigger, activeSignatureHelp: activeSignatureHelp); } /// The currently active `SignatureHelp`. /// /// The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field /// updated based on the user navigating through available signatures. final SignatureHelp? activeSignatureHelp; /// `true` if signature help was already showing when it was triggered. /// /// Retriggers occur when the signature help is already active and can be /// caused by actions such as typing a trigger character, a cursor move, or /// document content changes. final bool isRetrigger; /// Character that caused signature help to be triggered. /// /// This is undefined when triggerKind !== /// SignatureHelpTriggerKind.TriggerCharacter final String? triggerCharacter; /// Action that caused signature help to be triggered. final SignatureHelpTriggerKind triggerKind; Map toJson() { var __result = {}; __result['triggerKind'] = triggerKind.toJson(); if (triggerCharacter != null) { __result['triggerCharacter'] = triggerCharacter; } __result['isRetrigger'] = isRetrigger; if (activeSignatureHelp != null) { __result['activeSignatureHelp'] = activeSignatureHelp?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerKind'); try { if (!obj.containsKey('triggerKind')) { reporter.reportError('must not be undefined'); return false; } final triggerKind = obj['triggerKind']; if (triggerKind == null) { reporter.reportError('must not be null'); return false; } if (!(SignatureHelpTriggerKind.canParse(triggerKind, reporter))) { reporter.reportError('must be of type SignatureHelpTriggerKind'); return false; } } finally { reporter.pop(); } reporter.push('triggerCharacter'); try { final triggerCharacter = obj['triggerCharacter']; if (triggerCharacter != null && !(triggerCharacter is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('isRetrigger'); try { if (!obj.containsKey('isRetrigger')) { reporter.reportError('must not be undefined'); return false; } final isRetrigger = obj['isRetrigger']; if (isRetrigger == null) { reporter.reportError('must not be null'); return false; } if (!(isRetrigger is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('activeSignatureHelp'); try { final activeSignatureHelp = obj['activeSignatureHelp']; if (activeSignatureHelp != null && !(SignatureHelp.canParse(activeSignatureHelp, reporter))) { reporter.reportError('must be of type SignatureHelp'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureHelpContext'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelpContext && other.runtimeType == SignatureHelpContext) { return triggerKind == other.triggerKind && triggerCharacter == other.triggerCharacter && isRetrigger == other.isRetrigger && activeSignatureHelp == other.activeSignatureHelp && true; } return false; } @override int get hashCode => Object.hash( triggerKind, triggerCharacter, isRetrigger, activeSignatureHelp); @override String toString() => jsonEncoder.convert(toJson()); } class SignatureHelpOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( SignatureHelpOptions.canParse, SignatureHelpOptions.fromJson); SignatureHelpOptions( {this.triggerCharacters, this.retriggerCharacters, this.workDoneProgress}); static SignatureHelpOptions fromJson(Map json) { if (SignatureHelpRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SignatureHelpRegistrationOptions.fromJson(json); } final triggerCharactersJson = json['triggerCharacters']; final triggerCharacters = (triggerCharactersJson as List?) ?.map((item) => item as String) .toList(); final retriggerCharactersJson = json['retriggerCharacters']; final retriggerCharacters = (retriggerCharactersJson as List?) ?.map((item) => item as String) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return SignatureHelpOptions( triggerCharacters: triggerCharacters, retriggerCharacters: retriggerCharacters, workDoneProgress: workDoneProgress); } /// List of characters that re-trigger signature help. /// /// These trigger characters are only active when signature help is already /// showing. All trigger characters are also counted as re-trigger characters. /// @since 3.15.0 final List? retriggerCharacters; /// The characters that trigger signature help automatically. final List? triggerCharacters; final bool? workDoneProgress; Map toJson() { var __result = {}; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } if (retriggerCharacters != null) { __result['retriggerCharacters'] = retriggerCharacters; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerCharacters'); try { final triggerCharacters = obj['triggerCharacters']; if (triggerCharacters != null && !((triggerCharacters is List && (triggerCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('retriggerCharacters'); try { final retriggerCharacters = obj['retriggerCharacters']; if (retriggerCharacters != null && !((retriggerCharacters is List && (retriggerCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureHelpOptions'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelpOptions && other.runtimeType == SignatureHelpOptions) { return listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && listEqual(retriggerCharacters, other.retriggerCharacters, (String a, String b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(triggerCharacters), lspHashCode(retriggerCharacters), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } class SignatureHelpParams implements TextDocumentPositionParams, WorkDoneProgressParams, ToJsonable { static const jsonHandler = LspJsonHandler( SignatureHelpParams.canParse, SignatureHelpParams.fromJson); SignatureHelpParams( {this.context, required this.textDocument, required this.position, this.workDoneToken}); static SignatureHelpParams fromJson(Map json) { final contextJson = json['context']; final context = contextJson != null ? SignatureHelpContext.fromJson(contextJson as Map) : null; final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return SignatureHelpParams( context: context, textDocument: textDocument, position: position, workDoneToken: workDoneToken); } /// The signature help context. This is only available if the client specifies /// to send this using the client capability /// `textDocument.signatureHelp.contextSupport === true` /// @since 3.15.0 final SignatureHelpContext? context; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; if (context != null) { __result['context'] = context?.toJson(); } __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('context'); try { final context = obj['context']; if (context != null && !(SignatureHelpContext.canParse(context, reporter))) { reporter.reportError('must be of type SignatureHelpContext'); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureHelpParams'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelpParams && other.runtimeType == SignatureHelpParams) { return context == other.context && textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => Object.hash(context, textDocument, position, workDoneToken); @override String toString() => jsonEncoder.convert(toJson()); } class SignatureHelpRegistrationOptions implements TextDocumentRegistrationOptions, SignatureHelpOptions, ToJsonable { static const jsonHandler = LspJsonHandler( SignatureHelpRegistrationOptions.canParse, SignatureHelpRegistrationOptions.fromJson); SignatureHelpRegistrationOptions( {this.documentSelector, this.triggerCharacters, this.retriggerCharacters, this.workDoneProgress}); static SignatureHelpRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final triggerCharactersJson = json['triggerCharacters']; final triggerCharacters = (triggerCharactersJson as List?) ?.map((item) => item as String) .toList(); final retriggerCharactersJson = json['retriggerCharacters']; final retriggerCharacters = (retriggerCharactersJson as List?) ?.map((item) => item as String) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return SignatureHelpRegistrationOptions( documentSelector: documentSelector, triggerCharacters: triggerCharacters, retriggerCharacters: retriggerCharacters, workDoneProgress: workDoneProgress); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// List of characters that re-trigger signature help. /// /// These trigger characters are only active when signature help is already /// showing. All trigger characters are also counted as re-trigger characters. /// @since 3.15.0 final List? retriggerCharacters; /// The characters that trigger signature help automatically. final List? triggerCharacters; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } if (retriggerCharacters != null) { __result['retriggerCharacters'] = retriggerCharacters; } if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('triggerCharacters'); try { final triggerCharacters = obj['triggerCharacters']; if (triggerCharacters != null && !((triggerCharacters is List && (triggerCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('retriggerCharacters'); try { final retriggerCharacters = obj['retriggerCharacters']; if (retriggerCharacters != null && !((retriggerCharacters is List && (retriggerCharacters.every((item) => item is String))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureHelpRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is SignatureHelpRegistrationOptions && other.runtimeType == SignatureHelpRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && listEqual(retriggerCharacters, other.retriggerCharacters, (String a, String b) => a == b) && workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(documentSelector), lspHashCode(triggerCharacters), lspHashCode(retriggerCharacters), workDoneProgress); @override String toString() => jsonEncoder.convert(toJson()); } /// How a signature help was triggered. /// @since 3.15.0 class SignatureHelpTriggerKind { const SignatureHelpTriggerKind(this._value); const SignatureHelpTriggerKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Signature help was invoked manually by the user or by a command. static const Invoked = SignatureHelpTriggerKind(1); /// Signature help was triggered by a trigger character. static const TriggerCharacter = SignatureHelpTriggerKind(2); /// Signature help was triggered by the cursor moving or by the document /// content changing. static const ContentChange = SignatureHelpTriggerKind(3); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is SignatureHelpTriggerKind && o._value == _value; } /// Represents the signature of something callable. A signature can have a /// label, like a function-name, a doc-comment, and a set of parameters. class SignatureInformation implements ToJsonable { static const jsonHandler = LspJsonHandler( SignatureInformation.canParse, SignatureInformation.fromJson); SignatureInformation( {required this.label, this.documentation, this.parameters, this.activeParameter}); static SignatureInformation fromJson(Map json) { final labelJson = json['label']; final label = labelJson as String; final documentationJson = json['documentation']; final documentation = documentationJson == null ? null : (documentationJson is String ? Either2.t1(documentationJson) : (MarkupContent.canParse(documentationJson, nullLspJsonReporter) ? Either2.t2(MarkupContent.fromJson( documentationJson as Map)) : (throw '''$documentationJson was not one of (String, MarkupContent)'''))); final parametersJson = json['parameters']; final parameters = (parametersJson as List?) ?.map((item) => ParameterInformation.fromJson(item as Map)) .toList(); final activeParameterJson = json['activeParameter']; final activeParameter = activeParameterJson as int?; return SignatureInformation( label: label, documentation: documentation, parameters: parameters, activeParameter: activeParameter); } /// The index of the active parameter. /// /// If provided, this is used in place of `SignatureHelp.activeParameter`. /// @since 3.16.0 final int? activeParameter; /// The human-readable doc-comment of this signature. Will be shown in the UI /// but can be omitted. final Either2? documentation; /// The label of this signature. Will be shown in the UI. final String label; /// The parameters of this signature. final List? parameters; Map toJson() { var __result = {}; __result['label'] = label; if (documentation != null) { __result['documentation'] = documentation; } if (parameters != null) { __result['parameters'] = parameters?.map((item) => item.toJson()).toList(); } if (activeParameter != null) { __result['activeParameter'] = activeParameter; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { if (!obj.containsKey('label')) { reporter.reportError('must not be undefined'); return false; } final label = obj['label']; if (label == null) { reporter.reportError('must not be null'); return false; } if (!(label is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('documentation'); try { final documentation = obj['documentation']; if (documentation != null && !((documentation is String || MarkupContent.canParse(documentation, reporter)))) { reporter .reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } reporter.push('parameters'); try { final parameters = obj['parameters']; if (parameters != null && !((parameters is List && (parameters.every((item) => ParameterInformation.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('activeParameter'); try { final activeParameter = obj['activeParameter']; if (activeParameter != null && !(activeParameter is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SignatureInformation'); return false; } } @override bool operator ==(Object other) { if (other is SignatureInformation && other.runtimeType == SignatureInformation) { return label == other.label && documentation == other.documentation && listEqual(parameters, other.parameters, (ParameterInformation a, ParameterInformation b) => a == b) && activeParameter == other.activeParameter && true; } return false; } @override int get hashCode => Object.hash( label, documentation, lspHashCode(parameters), activeParameter); @override String toString() => jsonEncoder.convert(toJson()); } /// Static registration options to be returned in the initialize request. class StaticRegistrationOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( StaticRegistrationOptions.canParse, StaticRegistrationOptions.fromJson); StaticRegistrationOptions({this.id}); static StaticRegistrationOptions fromJson(Map json) { if (DeclarationRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DeclarationRegistrationOptions.fromJson(json); } if (TypeDefinitionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return TypeDefinitionRegistrationOptions.fromJson(json); } if (ImplementationRegistrationOptions.canParse(json, nullLspJsonReporter)) { return ImplementationRegistrationOptions.fromJson(json); } if (DocumentColorRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentColorRegistrationOptions.fromJson(json); } if (FoldingRangeRegistrationOptions.canParse(json, nullLspJsonReporter)) { return FoldingRangeRegistrationOptions.fromJson(json); } if (SelectionRangeRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SelectionRangeRegistrationOptions.fromJson(json); } if (CallHierarchyRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CallHierarchyRegistrationOptions.fromJson(json); } if (SemanticTokensRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SemanticTokensRegistrationOptions.fromJson(json); } if (LinkedEditingRangeRegistrationOptions.canParse( json, nullLspJsonReporter)) { return LinkedEditingRangeRegistrationOptions.fromJson(json); } final idJson = json['id']; final id = idJson as String?; return StaticRegistrationOptions(id: id); } /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; Map toJson() { var __result = {}; if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type StaticRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is StaticRegistrationOptions && other.runtimeType == StaticRegistrationOptions) { return id == other.id && true; } return false; } @override int get hashCode => id.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// Represents information about programming constructs like variables, classes, /// interfaces etc. class SymbolInformation implements ToJsonable { static const jsonHandler = LspJsonHandler(SymbolInformation.canParse, SymbolInformation.fromJson); SymbolInformation( {required this.name, required this.kind, this.tags, this.deprecated, required this.location, this.containerName}); static SymbolInformation fromJson(Map json) { final nameJson = json['name']; final name = nameJson as String; final kindJson = json['kind']; final kind = SymbolKind.fromJson(kindJson as int); final tagsJson = json['tags']; final tags = (tagsJson as List?) ?.map((item) => SymbolTag.fromJson(item as int)) .toList(); final deprecatedJson = json['deprecated']; final deprecated = deprecatedJson as bool?; final locationJson = json['location']; final location = Location.fromJson(locationJson as Map); final containerNameJson = json['containerName']; final containerName = containerNameJson as String?; return SymbolInformation( name: name, kind: kind, tags: tags, deprecated: deprecated, location: location, containerName: containerName); } /// The name of the symbol containing this symbol. This information is for /// user interface purposes (e.g. to render a qualifier in the user interface /// if necessary). It can't be used to re-infer a hierarchy for the document /// symbols. final String? containerName; /// Indicates if this symbol is deprecated. /// @deprecated Use tags instead final bool? deprecated; /// The kind of this symbol. final SymbolKind kind; /// The location of this symbol. The location's range is used by a tool to /// reveal the location in the editor. If the symbol is selected in the tool /// the range's start information is used to position the cursor. So the range /// usually spans more then the actual symbol's name and does normally include /// things like visibility modifiers. /// /// The range doesn't have to denote a node range in the sense of a abstract /// syntax tree. It can therefore not be used to re-construct a hierarchy of /// the symbols. final Location location; /// The name of this symbol. final String name; /// Tags for this completion item. /// @since 3.16.0 final List? tags; Map toJson() { var __result = {}; __result['name'] = name; __result['kind'] = kind.toJson(); if (tags != null) { __result['tags'] = tags?.map((item) => item.toJson()).toList(); } if (deprecated != null) { __result['deprecated'] = deprecated; } __result['location'] = location.toJson(); if (containerName != null) { __result['containerName'] = containerName; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('name'); try { if (!obj.containsKey('name')) { reporter.reportError('must not be undefined'); return false; } final name = obj['name']; if (name == null) { reporter.reportError('must not be null'); return false; } if (!(name is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(SymbolKind.canParse(kind, reporter))) { reporter.reportError('must be of type SymbolKind'); return false; } } finally { reporter.pop(); } reporter.push('tags'); try { final tags = obj['tags']; if (tags != null && !((tags is List && (tags.every((item) => SymbolTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('deprecated'); try { final deprecated = obj['deprecated']; if (deprecated != null && !(deprecated is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('location'); try { if (!obj.containsKey('location')) { reporter.reportError('must not be undefined'); return false; } final location = obj['location']; if (location == null) { reporter.reportError('must not be null'); return false; } if (!(Location.canParse(location, reporter))) { reporter.reportError('must be of type Location'); return false; } } finally { reporter.pop(); } reporter.push('containerName'); try { final containerName = obj['containerName']; if (containerName != null && !(containerName is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type SymbolInformation'); return false; } } @override bool operator ==(Object other) { if (other is SymbolInformation && other.runtimeType == SymbolInformation) { return name == other.name && kind == other.kind && listEqual(tags, other.tags, (SymbolTag a, SymbolTag b) => a == b) && deprecated == other.deprecated && location == other.location && containerName == other.containerName && true; } return false; } @override int get hashCode => Object.hash( name, kind, lspHashCode(tags), deprecated, location, containerName); @override String toString() => jsonEncoder.convert(toJson()); } /// A symbol kind. class SymbolKind { const SymbolKind(this._value); const SymbolKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } static const File = SymbolKind(1); static const Module = SymbolKind(2); static const Namespace = SymbolKind(3); static const Package = SymbolKind(4); static const Class = SymbolKind(5); static const Method = SymbolKind(6); static const Property = SymbolKind(7); static const Field = SymbolKind(8); static const Constructor = SymbolKind(9); static const Enum = SymbolKind(10); static const Interface = SymbolKind(11); static const Function = SymbolKind(12); static const Variable = SymbolKind(13); static const Constant = SymbolKind(14); static const Str = SymbolKind(15); static const Number = SymbolKind(16); static const Boolean = SymbolKind(17); static const Array = SymbolKind(18); static const Obj = SymbolKind(19); static const Key = SymbolKind(20); static const Null = SymbolKind(21); static const EnumMember = SymbolKind(22); static const Struct = SymbolKind(23); static const Event = SymbolKind(24); static const Operator = SymbolKind(25); static const TypeParameter = SymbolKind(26); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is SymbolKind && o._value == _value; } /// Symbol tags are extra annotations that tweak the rendering of a symbol. /// @since 3.16 class SymbolTag { const SymbolTag(this._value); const SymbolTag.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Render a symbol as obsolete, usually using a strike-out. static const Deprecated = SymbolTag(1); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is SymbolTag && o._value == _value; } /// Describe options to be used when registering for text document change /// events. class TextDocumentChangeRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentChangeRegistrationOptions.canParse, TextDocumentChangeRegistrationOptions.fromJson); TextDocumentChangeRegistrationOptions( {required this.syncKind, this.documentSelector}); static TextDocumentChangeRegistrationOptions fromJson( Map json) { final syncKindJson = json['syncKind']; final syncKind = TextDocumentSyncKind.fromJson(syncKindJson as int); final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); return TextDocumentChangeRegistrationOptions( syncKind: syncKind, documentSelector: documentSelector); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// How documents are synced to the server. See TextDocumentSyncKind.Full and /// TextDocumentSyncKind.Incremental. final TextDocumentSyncKind syncKind; Map toJson() { var __result = {}; __result['syncKind'] = syncKind.toJson(); __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('syncKind'); try { if (!obj.containsKey('syncKind')) { reporter.reportError('must not be undefined'); return false; } final syncKind = obj['syncKind']; if (syncKind == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentSyncKind.canParse(syncKind, reporter))) { reporter.reportError('must be of type TextDocumentSyncKind'); return false; } } finally { reporter.pop(); } reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type TextDocumentChangeRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentChangeRegistrationOptions && other.runtimeType == TextDocumentChangeRegistrationOptions) { return syncKind == other.syncKind && listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(syncKind, lspHashCode(documentSelector)); @override String toString() => jsonEncoder.convert(toJson()); } /// Text document specific client capabilities. class TextDocumentClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentClientCapabilities.canParse, TextDocumentClientCapabilities.fromJson); TextDocumentClientCapabilities( {this.synchronization, this.completion, this.hover, this.signatureHelp, this.declaration, this.definition, this.typeDefinition, this.implementation, this.references, this.documentHighlight, this.documentSymbol, this.codeAction, this.codeLens, this.documentLink, this.colorProvider, this.formatting, this.rangeFormatting, this.onTypeFormatting, this.rename, this.publishDiagnostics, this.foldingRange, this.selectionRange, this.linkedEditingRange, this.callHierarchy, this.semanticTokens, this.moniker}); static TextDocumentClientCapabilities fromJson(Map json) { final synchronizationJson = json['synchronization']; final synchronization = synchronizationJson != null ? TextDocumentSyncClientCapabilities.fromJson( synchronizationJson as Map) : null; final completionJson = json['completion']; final completion = completionJson != null ? CompletionClientCapabilities.fromJson( completionJson as Map) : null; final hoverJson = json['hover']; final hover = hoverJson != null ? HoverClientCapabilities.fromJson(hoverJson as Map) : null; final signatureHelpJson = json['signatureHelp']; final signatureHelp = signatureHelpJson != null ? SignatureHelpClientCapabilities.fromJson( signatureHelpJson as Map) : null; final declarationJson = json['declaration']; final declaration = declarationJson != null ? DeclarationClientCapabilities.fromJson( declarationJson as Map) : null; final definitionJson = json['definition']; final definition = definitionJson != null ? DefinitionClientCapabilities.fromJson( definitionJson as Map) : null; final typeDefinitionJson = json['typeDefinition']; final typeDefinition = typeDefinitionJson != null ? TypeDefinitionClientCapabilities.fromJson( typeDefinitionJson as Map) : null; final implementationJson = json['implementation']; final implementation = implementationJson != null ? ImplementationClientCapabilities.fromJson( implementationJson as Map) : null; final referencesJson = json['references']; final references = referencesJson != null ? ReferenceClientCapabilities.fromJson( referencesJson as Map) : null; final documentHighlightJson = json['documentHighlight']; final documentHighlight = documentHighlightJson != null ? DocumentHighlightClientCapabilities.fromJson( documentHighlightJson as Map) : null; final documentSymbolJson = json['documentSymbol']; final documentSymbol = documentSymbolJson != null ? DocumentSymbolClientCapabilities.fromJson( documentSymbolJson as Map) : null; final codeActionJson = json['codeAction']; final codeAction = codeActionJson != null ? CodeActionClientCapabilities.fromJson( codeActionJson as Map) : null; final codeLensJson = json['codeLens']; final codeLens = codeLensJson != null ? CodeLensClientCapabilities.fromJson( codeLensJson as Map) : null; final documentLinkJson = json['documentLink']; final documentLink = documentLinkJson != null ? DocumentLinkClientCapabilities.fromJson( documentLinkJson as Map) : null; final colorProviderJson = json['colorProvider']; final colorProvider = colorProviderJson != null ? DocumentColorClientCapabilities.fromJson( colorProviderJson as Map) : null; final formattingJson = json['formatting']; final formatting = formattingJson != null ? DocumentFormattingClientCapabilities.fromJson( formattingJson as Map) : null; final rangeFormattingJson = json['rangeFormatting']; final rangeFormatting = rangeFormattingJson != null ? DocumentRangeFormattingClientCapabilities.fromJson( rangeFormattingJson as Map) : null; final onTypeFormattingJson = json['onTypeFormatting']; final onTypeFormatting = onTypeFormattingJson != null ? DocumentOnTypeFormattingClientCapabilities.fromJson( onTypeFormattingJson as Map) : null; final renameJson = json['rename']; final rename = renameJson != null ? RenameClientCapabilities.fromJson(renameJson as Map) : null; final publishDiagnosticsJson = json['publishDiagnostics']; final publishDiagnostics = publishDiagnosticsJson != null ? PublishDiagnosticsClientCapabilities.fromJson( publishDiagnosticsJson as Map) : null; final foldingRangeJson = json['foldingRange']; final foldingRange = foldingRangeJson != null ? FoldingRangeClientCapabilities.fromJson( foldingRangeJson as Map) : null; final selectionRangeJson = json['selectionRange']; final selectionRange = selectionRangeJson != null ? SelectionRangeClientCapabilities.fromJson( selectionRangeJson as Map) : null; final linkedEditingRangeJson = json['linkedEditingRange']; final linkedEditingRange = linkedEditingRangeJson != null ? LinkedEditingRangeClientCapabilities.fromJson( linkedEditingRangeJson as Map) : null; final callHierarchyJson = json['callHierarchy']; final callHierarchy = callHierarchyJson != null ? CallHierarchyClientCapabilities.fromJson( callHierarchyJson as Map) : null; final semanticTokensJson = json['semanticTokens']; final semanticTokens = semanticTokensJson != null ? SemanticTokensClientCapabilities.fromJson( semanticTokensJson as Map) : null; final monikerJson = json['moniker']; final moniker = monikerJson != null ? MonikerClientCapabilities.fromJson( monikerJson as Map) : null; return TextDocumentClientCapabilities( synchronization: synchronization, completion: completion, hover: hover, signatureHelp: signatureHelp, declaration: declaration, definition: definition, typeDefinition: typeDefinition, implementation: implementation, references: references, documentHighlight: documentHighlight, documentSymbol: documentSymbol, codeAction: codeAction, codeLens: codeLens, documentLink: documentLink, colorProvider: colorProvider, formatting: formatting, rangeFormatting: rangeFormatting, onTypeFormatting: onTypeFormatting, rename: rename, publishDiagnostics: publishDiagnostics, foldingRange: foldingRange, selectionRange: selectionRange, linkedEditingRange: linkedEditingRange, callHierarchy: callHierarchy, semanticTokens: semanticTokens, moniker: moniker); } /// Capabilities specific to the various call hierarchy requests. /// @since 3.16.0 final CallHierarchyClientCapabilities? callHierarchy; /// Capabilities specific to the `textDocument/codeAction` request. final CodeActionClientCapabilities? codeAction; /// Capabilities specific to the `textDocument/codeLens` request. final CodeLensClientCapabilities? codeLens; /// Capabilities specific to the `textDocument/documentColor` and the /// `textDocument/colorPresentation` request. /// @since 3.6.0 final DocumentColorClientCapabilities? colorProvider; /// Capabilities specific to the `textDocument/completion` request. final CompletionClientCapabilities? completion; /// Capabilities specific to the `textDocument/declaration` request. /// @since 3.14.0 final DeclarationClientCapabilities? declaration; /// Capabilities specific to the `textDocument/definition` request. final DefinitionClientCapabilities? definition; /// Capabilities specific to the `textDocument/documentHighlight` request. final DocumentHighlightClientCapabilities? documentHighlight; /// Capabilities specific to the `textDocument/documentLink` request. final DocumentLinkClientCapabilities? documentLink; /// Capabilities specific to the `textDocument/documentSymbol` request. final DocumentSymbolClientCapabilities? documentSymbol; /// Capabilities specific to the `textDocument/foldingRange` request. /// @since 3.10.0 final FoldingRangeClientCapabilities? foldingRange; /// Capabilities specific to the `textDocument/formatting` request. final DocumentFormattingClientCapabilities? formatting; /// Capabilities specific to the `textDocument/hover` request. final HoverClientCapabilities? hover; /// Capabilities specific to the `textDocument/implementation` request. /// @since 3.6.0 final ImplementationClientCapabilities? implementation; /// Capabilities specific to the `textDocument/linkedEditingRange` request. /// @since 3.16.0 final LinkedEditingRangeClientCapabilities? linkedEditingRange; /// Capabilities specific to the `textDocument/moniker` request. /// @since 3.16.0 final MonikerClientCapabilities? moniker; /// request. Capabilities specific to the `textDocument/onTypeFormatting` /// request. final DocumentOnTypeFormattingClientCapabilities? onTypeFormatting; /// Capabilities specific to the `textDocument/publishDiagnostics` /// notification. final PublishDiagnosticsClientCapabilities? publishDiagnostics; /// Capabilities specific to the `textDocument/rangeFormatting` request. final DocumentRangeFormattingClientCapabilities? rangeFormatting; /// Capabilities specific to the `textDocument/references` request. final ReferenceClientCapabilities? references; /// Capabilities specific to the `textDocument/rename` request. final RenameClientCapabilities? rename; /// Capabilities specific to the `textDocument/selectionRange` request. /// @since 3.15.0 final SelectionRangeClientCapabilities? selectionRange; /// Capabilities specific to the various semantic token requests. /// @since 3.16.0 final SemanticTokensClientCapabilities? semanticTokens; /// Capabilities specific to the `textDocument/signatureHelp` request. final SignatureHelpClientCapabilities? signatureHelp; final TextDocumentSyncClientCapabilities? synchronization; /// Capabilities specific to the `textDocument/typeDefinition` request. /// @since 3.6.0 final TypeDefinitionClientCapabilities? typeDefinition; Map toJson() { var __result = {}; if (synchronization != null) { __result['synchronization'] = synchronization?.toJson(); } if (completion != null) { __result['completion'] = completion?.toJson(); } if (hover != null) { __result['hover'] = hover?.toJson(); } if (signatureHelp != null) { __result['signatureHelp'] = signatureHelp?.toJson(); } if (declaration != null) { __result['declaration'] = declaration?.toJson(); } if (definition != null) { __result['definition'] = definition?.toJson(); } if (typeDefinition != null) { __result['typeDefinition'] = typeDefinition?.toJson(); } if (implementation != null) { __result['implementation'] = implementation?.toJson(); } if (references != null) { __result['references'] = references?.toJson(); } if (documentHighlight != null) { __result['documentHighlight'] = documentHighlight?.toJson(); } if (documentSymbol != null) { __result['documentSymbol'] = documentSymbol?.toJson(); } if (codeAction != null) { __result['codeAction'] = codeAction?.toJson(); } if (codeLens != null) { __result['codeLens'] = codeLens?.toJson(); } if (documentLink != null) { __result['documentLink'] = documentLink?.toJson(); } if (colorProvider != null) { __result['colorProvider'] = colorProvider?.toJson(); } if (formatting != null) { __result['formatting'] = formatting?.toJson(); } if (rangeFormatting != null) { __result['rangeFormatting'] = rangeFormatting?.toJson(); } if (onTypeFormatting != null) { __result['onTypeFormatting'] = onTypeFormatting?.toJson(); } if (rename != null) { __result['rename'] = rename?.toJson(); } if (publishDiagnostics != null) { __result['publishDiagnostics'] = publishDiagnostics?.toJson(); } if (foldingRange != null) { __result['foldingRange'] = foldingRange?.toJson(); } if (selectionRange != null) { __result['selectionRange'] = selectionRange?.toJson(); } if (linkedEditingRange != null) { __result['linkedEditingRange'] = linkedEditingRange?.toJson(); } if (callHierarchy != null) { __result['callHierarchy'] = callHierarchy?.toJson(); } if (semanticTokens != null) { __result['semanticTokens'] = semanticTokens?.toJson(); } if (moniker != null) { __result['moniker'] = moniker?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('synchronization'); try { final synchronization = obj['synchronization']; if (synchronization != null && !(TextDocumentSyncClientCapabilities.canParse( synchronization, reporter))) { reporter.reportError( 'must be of type TextDocumentSyncClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('completion'); try { final completion = obj['completion']; if (completion != null && !(CompletionClientCapabilities.canParse(completion, reporter))) { reporter.reportError('must be of type CompletionClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('hover'); try { final hover = obj['hover']; if (hover != null && !(HoverClientCapabilities.canParse(hover, reporter))) { reporter.reportError('must be of type HoverClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('signatureHelp'); try { final signatureHelp = obj['signatureHelp']; if (signatureHelp != null && !(SignatureHelpClientCapabilities.canParse( signatureHelp, reporter))) { reporter .reportError('must be of type SignatureHelpClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('declaration'); try { final declaration = obj['declaration']; if (declaration != null && !(DeclarationClientCapabilities.canParse(declaration, reporter))) { reporter.reportError('must be of type DeclarationClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('definition'); try { final definition = obj['definition']; if (definition != null && !(DefinitionClientCapabilities.canParse(definition, reporter))) { reporter.reportError('must be of type DefinitionClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('typeDefinition'); try { final typeDefinition = obj['typeDefinition']; if (typeDefinition != null && !(TypeDefinitionClientCapabilities.canParse( typeDefinition, reporter))) { reporter .reportError('must be of type TypeDefinitionClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('implementation'); try { final implementation = obj['implementation']; if (implementation != null && !(ImplementationClientCapabilities.canParse( implementation, reporter))) { reporter .reportError('must be of type ImplementationClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('references'); try { final references = obj['references']; if (references != null && !(ReferenceClientCapabilities.canParse(references, reporter))) { reporter.reportError('must be of type ReferenceClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('documentHighlight'); try { final documentHighlight = obj['documentHighlight']; if (documentHighlight != null && !(DocumentHighlightClientCapabilities.canParse( documentHighlight, reporter))) { reporter.reportError( 'must be of type DocumentHighlightClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('documentSymbol'); try { final documentSymbol = obj['documentSymbol']; if (documentSymbol != null && !(DocumentSymbolClientCapabilities.canParse( documentSymbol, reporter))) { reporter .reportError('must be of type DocumentSymbolClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('codeAction'); try { final codeAction = obj['codeAction']; if (codeAction != null && !(CodeActionClientCapabilities.canParse(codeAction, reporter))) { reporter.reportError('must be of type CodeActionClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('codeLens'); try { final codeLens = obj['codeLens']; if (codeLens != null && !(CodeLensClientCapabilities.canParse(codeLens, reporter))) { reporter.reportError('must be of type CodeLensClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('documentLink'); try { final documentLink = obj['documentLink']; if (documentLink != null && !(DocumentLinkClientCapabilities.canParse( documentLink, reporter))) { reporter .reportError('must be of type DocumentLinkClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('colorProvider'); try { final colorProvider = obj['colorProvider']; if (colorProvider != null && !(DocumentColorClientCapabilities.canParse( colorProvider, reporter))) { reporter .reportError('must be of type DocumentColorClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('formatting'); try { final formatting = obj['formatting']; if (formatting != null && !(DocumentFormattingClientCapabilities.canParse( formatting, reporter))) { reporter.reportError( 'must be of type DocumentFormattingClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('rangeFormatting'); try { final rangeFormatting = obj['rangeFormatting']; if (rangeFormatting != null && !(DocumentRangeFormattingClientCapabilities.canParse( rangeFormatting, reporter))) { reporter.reportError( 'must be of type DocumentRangeFormattingClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('onTypeFormatting'); try { final onTypeFormatting = obj['onTypeFormatting']; if (onTypeFormatting != null && !(DocumentOnTypeFormattingClientCapabilities.canParse( onTypeFormatting, reporter))) { reporter.reportError( 'must be of type DocumentOnTypeFormattingClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('rename'); try { final rename = obj['rename']; if (rename != null && !(RenameClientCapabilities.canParse(rename, reporter))) { reporter.reportError('must be of type RenameClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('publishDiagnostics'); try { final publishDiagnostics = obj['publishDiagnostics']; if (publishDiagnostics != null && !(PublishDiagnosticsClientCapabilities.canParse( publishDiagnostics, reporter))) { reporter.reportError( 'must be of type PublishDiagnosticsClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('foldingRange'); try { final foldingRange = obj['foldingRange']; if (foldingRange != null && !(FoldingRangeClientCapabilities.canParse( foldingRange, reporter))) { reporter .reportError('must be of type FoldingRangeClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('selectionRange'); try { final selectionRange = obj['selectionRange']; if (selectionRange != null && !(SelectionRangeClientCapabilities.canParse( selectionRange, reporter))) { reporter .reportError('must be of type SelectionRangeClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('linkedEditingRange'); try { final linkedEditingRange = obj['linkedEditingRange']; if (linkedEditingRange != null && !(LinkedEditingRangeClientCapabilities.canParse( linkedEditingRange, reporter))) { reporter.reportError( 'must be of type LinkedEditingRangeClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('callHierarchy'); try { final callHierarchy = obj['callHierarchy']; if (callHierarchy != null && !(CallHierarchyClientCapabilities.canParse( callHierarchy, reporter))) { reporter .reportError('must be of type CallHierarchyClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('semanticTokens'); try { final semanticTokens = obj['semanticTokens']; if (semanticTokens != null && !(SemanticTokensClientCapabilities.canParse( semanticTokens, reporter))) { reporter .reportError('must be of type SemanticTokensClientCapabilities'); return false; } } finally { reporter.pop(); } reporter.push('moniker'); try { final moniker = obj['moniker']; if (moniker != null && !(MonikerClientCapabilities.canParse(moniker, reporter))) { reporter.reportError('must be of type MonikerClientCapabilities'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentClientCapabilities && other.runtimeType == TextDocumentClientCapabilities) { return synchronization == other.synchronization && completion == other.completion && hover == other.hover && signatureHelp == other.signatureHelp && declaration == other.declaration && definition == other.definition && typeDefinition == other.typeDefinition && implementation == other.implementation && references == other.references && documentHighlight == other.documentHighlight && documentSymbol == other.documentSymbol && codeAction == other.codeAction && codeLens == other.codeLens && documentLink == other.documentLink && colorProvider == other.colorProvider && formatting == other.formatting && rangeFormatting == other.rangeFormatting && onTypeFormatting == other.onTypeFormatting && rename == other.rename && publishDiagnostics == other.publishDiagnostics && foldingRange == other.foldingRange && selectionRange == other.selectionRange && linkedEditingRange == other.linkedEditingRange && callHierarchy == other.callHierarchy && semanticTokens == other.semanticTokens && moniker == other.moniker && true; } return false; } @override int get hashCode => Object.hashAll([ synchronization, completion, hover, signatureHelp, declaration, definition, typeDefinition, implementation, references, documentHighlight, documentSymbol, codeAction, codeLens, documentLink, colorProvider, formatting, rangeFormatting, onTypeFormatting, rename, publishDiagnostics, foldingRange, selectionRange, linkedEditingRange, callHierarchy, semanticTokens, moniker ]); @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentContentChangeEvent1 implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentContentChangeEvent1.canParse, TextDocumentContentChangeEvent1.fromJson); TextDocumentContentChangeEvent1( {required this.range, this.rangeLength, required this.text}); static TextDocumentContentChangeEvent1 fromJson(Map json) { final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final rangeLengthJson = json['rangeLength']; final rangeLength = rangeLengthJson as int?; final textJson = json['text']; final text = textJson as String; return TextDocumentContentChangeEvent1( range: range, rangeLength: rangeLength, text: text); } /// The range of the document that changed. final Range range; /// The optional length of the range that got replaced. /// @deprecated use range instead. final int? rangeLength; /// The new text for the provided range. final String text; Map toJson() { var __result = {}; __result['range'] = range.toJson(); if (rangeLength != null) { __result['rangeLength'] = rangeLength; } __result['text'] = text; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('rangeLength'); try { final rangeLength = obj['rangeLength']; if (rangeLength != null && !(rangeLength is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('text'); try { if (!obj.containsKey('text')) { reporter.reportError('must not be undefined'); return false; } final text = obj['text']; if (text == null) { reporter.reportError('must not be null'); return false; } if (!(text is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentContentChangeEvent1'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentContentChangeEvent1 && other.runtimeType == TextDocumentContentChangeEvent1) { return range == other.range && rangeLength == other.rangeLength && text == other.text && true; } return false; } @override int get hashCode => Object.hash(range, rangeLength, text); @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentContentChangeEvent2 implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentContentChangeEvent2.canParse, TextDocumentContentChangeEvent2.fromJson); TextDocumentContentChangeEvent2({required this.text}); static TextDocumentContentChangeEvent2 fromJson(Map json) { final textJson = json['text']; final text = textJson as String; return TextDocumentContentChangeEvent2(text: text); } /// The new text of the whole document. final String text; Map toJson() { var __result = {}; __result['text'] = text; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('text'); try { if (!obj.containsKey('text')) { reporter.reportError('must not be undefined'); return false; } final text = obj['text']; if (text == null) { reporter.reportError('must not be null'); return false; } if (!(text is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentContentChangeEvent2'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentContentChangeEvent2 && other.runtimeType == TextDocumentContentChangeEvent2) { return text == other.text && true; } return false; } @override int get hashCode => text.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentEdit implements ToJsonable { static const jsonHandler = LspJsonHandler(TextDocumentEdit.canParse, TextDocumentEdit.fromJson); TextDocumentEdit({required this.textDocument, required this.edits}); static TextDocumentEdit fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = OptionalVersionedTextDocumentIdentifier.fromJson( textDocumentJson as Map); final editsJson = json['edits']; final edits = (editsJson as List) .map((item) => SnippetTextEdit.canParse(item, nullLspJsonReporter) ? Either3.t1( SnippetTextEdit.fromJson(item as Map)) : (AnnotatedTextEdit.canParse(item, nullLspJsonReporter) ? Either3.t2( AnnotatedTextEdit.fromJson(item as Map)) : (TextEdit.canParse(item, nullLspJsonReporter) ? Either3.t3( TextEdit.fromJson(item as Map)) : (throw '''$item was not one of (SnippetTextEdit, AnnotatedTextEdit, TextEdit)''')))) .toList(); return TextDocumentEdit(textDocument: textDocument, edits: edits); } /// The edits to be applied. /// @since 3.16.0 - support for AnnotatedTextEdit. This is guarded by the /// client capability `workspace.workspaceEdit.changeAnnotationSupport` final List> edits; /// The text document to change. final OptionalVersionedTextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['edits'] = edits; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(OptionalVersionedTextDocumentIdentifier.canParse( textDocument, reporter))) { reporter.reportError( 'must be of type OptionalVersionedTextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('edits'); try { if (!obj.containsKey('edits')) { reporter.reportError('must not be undefined'); return false; } final edits = obj['edits']; if (edits == null) { reporter.reportError('must not be null'); return false; } if (!((edits is List && (edits.every((item) => (SnippetTextEdit.canParse(item, reporter) || AnnotatedTextEdit.canParse(item, reporter) || TextEdit.canParse(item, reporter))))))) { reporter.reportError( 'must be of type List>'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentEdit'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentEdit && other.runtimeType == TextDocumentEdit) { return textDocument == other.textDocument && listEqual( edits, other.edits, (Either3 a, Either3 b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(textDocument, lspHashCode(edits)); @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentIdentifier implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentIdentifier.canParse, TextDocumentIdentifier.fromJson); TextDocumentIdentifier({required this.uri}); static TextDocumentIdentifier fromJson(Map json) { if (VersionedTextDocumentIdentifier.canParse(json, nullLspJsonReporter)) { return VersionedTextDocumentIdentifier.fromJson(json); } if (OptionalVersionedTextDocumentIdentifier.canParse( json, nullLspJsonReporter)) { return OptionalVersionedTextDocumentIdentifier.fromJson(json); } final uriJson = json['uri']; final uri = uriJson as String; return TextDocumentIdentifier(uri: uri); } /// The text document's URI. final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentIdentifier && other.runtimeType == TextDocumentIdentifier) { return uri == other.uri && true; } return false; } @override int get hashCode => uri.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentItem implements ToJsonable { static const jsonHandler = LspJsonHandler(TextDocumentItem.canParse, TextDocumentItem.fromJson); TextDocumentItem( {required this.uri, required this.languageId, required this.version, required this.text}); static TextDocumentItem fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; final languageIdJson = json['languageId']; final languageId = languageIdJson as String; final versionJson = json['version']; final version = versionJson as int; final textJson = json['text']; final text = textJson as String; return TextDocumentItem( uri: uri, languageId: languageId, version: version, text: text); } /// The text document's language identifier. final String languageId; /// The content of the opened text document. final String text; /// The text document's URI. final String uri; /// The version number of this document (it will increase after each change, /// including undo/redo). final int version; Map toJson() { var __result = {}; __result['uri'] = uri; __result['languageId'] = languageId; __result['version'] = version; __result['text'] = text; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('languageId'); try { if (!obj.containsKey('languageId')) { reporter.reportError('must not be undefined'); return false; } final languageId = obj['languageId']; if (languageId == null) { reporter.reportError('must not be null'); return false; } if (!(languageId is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('version'); try { if (!obj.containsKey('version')) { reporter.reportError('must not be undefined'); return false; } final version = obj['version']; if (version == null) { reporter.reportError('must not be null'); return false; } if (!(version is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('text'); try { if (!obj.containsKey('text')) { reporter.reportError('must not be undefined'); return false; } final text = obj['text']; if (text == null) { reporter.reportError('must not be null'); return false; } if (!(text is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentItem'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentItem && other.runtimeType == TextDocumentItem) { return uri == other.uri && languageId == other.languageId && version == other.version && text == other.text && true; } return false; } @override int get hashCode => Object.hash(uri, languageId, version, text); @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentPositionParams implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentPositionParams.canParse, TextDocumentPositionParams.fromJson); TextDocumentPositionParams( {required this.textDocument, required this.position}); static TextDocumentPositionParams fromJson(Map json) { if (CompletionParams.canParse(json, nullLspJsonReporter)) { return CompletionParams.fromJson(json); } if (HoverParams.canParse(json, nullLspJsonReporter)) { return HoverParams.fromJson(json); } if (SignatureHelpParams.canParse(json, nullLspJsonReporter)) { return SignatureHelpParams.fromJson(json); } if (DeclarationParams.canParse(json, nullLspJsonReporter)) { return DeclarationParams.fromJson(json); } if (DefinitionParams.canParse(json, nullLspJsonReporter)) { return DefinitionParams.fromJson(json); } if (TypeDefinitionParams.canParse(json, nullLspJsonReporter)) { return TypeDefinitionParams.fromJson(json); } if (ImplementationParams.canParse(json, nullLspJsonReporter)) { return ImplementationParams.fromJson(json); } if (ReferenceParams.canParse(json, nullLspJsonReporter)) { return ReferenceParams.fromJson(json); } if (DocumentHighlightParams.canParse(json, nullLspJsonReporter)) { return DocumentHighlightParams.fromJson(json); } if (DocumentOnTypeFormattingParams.canParse(json, nullLspJsonReporter)) { return DocumentOnTypeFormattingParams.fromJson(json); } if (RenameParams.canParse(json, nullLspJsonReporter)) { return RenameParams.fromJson(json); } if (PrepareRenameParams.canParse(json, nullLspJsonReporter)) { return PrepareRenameParams.fromJson(json); } if (CallHierarchyPrepareParams.canParse(json, nullLspJsonReporter)) { return CallHierarchyPrepareParams.fromJson(json); } if (LinkedEditingRangeParams.canParse(json, nullLspJsonReporter)) { return LinkedEditingRangeParams.fromJson(json); } if (MonikerParams.canParse(json, nullLspJsonReporter)) { return MonikerParams.fromJson(json); } final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); return TextDocumentPositionParams( textDocument: textDocument, position: position); } /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentPositionParams'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentPositionParams && other.runtimeType == TextDocumentPositionParams) { return textDocument == other.textDocument && position == other.position && true; } return false; } @override int get hashCode => Object.hash(textDocument, position); @override String toString() => jsonEncoder.convert(toJson()); } /// General text document registration options. class TextDocumentRegistrationOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentRegistrationOptions.canParse, TextDocumentRegistrationOptions.fromJson); TextDocumentRegistrationOptions({this.documentSelector}); static TextDocumentRegistrationOptions fromJson(Map json) { if (TextDocumentChangeRegistrationOptions.canParse( json, nullLspJsonReporter)) { return TextDocumentChangeRegistrationOptions.fromJson(json); } if (TextDocumentSaveRegistrationOptions.canParse( json, nullLspJsonReporter)) { return TextDocumentSaveRegistrationOptions.fromJson(json); } if (CompletionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CompletionRegistrationOptions.fromJson(json); } if (HoverRegistrationOptions.canParse(json, nullLspJsonReporter)) { return HoverRegistrationOptions.fromJson(json); } if (SignatureHelpRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SignatureHelpRegistrationOptions.fromJson(json); } if (DeclarationRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DeclarationRegistrationOptions.fromJson(json); } if (DefinitionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DefinitionRegistrationOptions.fromJson(json); } if (TypeDefinitionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return TypeDefinitionRegistrationOptions.fromJson(json); } if (ImplementationRegistrationOptions.canParse(json, nullLspJsonReporter)) { return ImplementationRegistrationOptions.fromJson(json); } if (ReferenceRegistrationOptions.canParse(json, nullLspJsonReporter)) { return ReferenceRegistrationOptions.fromJson(json); } if (DocumentHighlightRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentHighlightRegistrationOptions.fromJson(json); } if (DocumentSymbolRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentSymbolRegistrationOptions.fromJson(json); } if (CodeActionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CodeActionRegistrationOptions.fromJson(json); } if (CodeLensRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CodeLensRegistrationOptions.fromJson(json); } if (DocumentLinkRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentLinkRegistrationOptions.fromJson(json); } if (DocumentColorRegistrationOptions.canParse(json, nullLspJsonReporter)) { return DocumentColorRegistrationOptions.fromJson(json); } if (DocumentFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentFormattingRegistrationOptions.fromJson(json); } if (DocumentRangeFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentRangeFormattingRegistrationOptions.fromJson(json); } if (DocumentOnTypeFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentOnTypeFormattingRegistrationOptions.fromJson(json); } if (RenameRegistrationOptions.canParse(json, nullLspJsonReporter)) { return RenameRegistrationOptions.fromJson(json); } if (FoldingRangeRegistrationOptions.canParse(json, nullLspJsonReporter)) { return FoldingRangeRegistrationOptions.fromJson(json); } if (SelectionRangeRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SelectionRangeRegistrationOptions.fromJson(json); } if (CallHierarchyRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CallHierarchyRegistrationOptions.fromJson(json); } if (SemanticTokensRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SemanticTokensRegistrationOptions.fromJson(json); } if (LinkedEditingRangeRegistrationOptions.canParse( json, nullLspJsonReporter)) { return LinkedEditingRangeRegistrationOptions.fromJson(json); } if (MonikerRegistrationOptions.canParse(json, nullLspJsonReporter)) { return MonikerRegistrationOptions.fromJson(json); } final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); return TextDocumentRegistrationOptions(documentSelector: documentSelector); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentRegistrationOptions && other.runtimeType == TextDocumentRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(documentSelector); @override String toString() => jsonEncoder.convert(toJson()); } /// Represents reasons why a text document is saved. class TextDocumentSaveReason { const TextDocumentSaveReason(this._value); const TextDocumentSaveReason.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Manually triggered, e.g. by the user pressing save, by starting debugging, /// or by an API call. static const Manual = TextDocumentSaveReason(1); /// Automatic after a delay. static const AfterDelay = TextDocumentSaveReason(2); /// When the editor lost focus. static const FocusOut = TextDocumentSaveReason(3); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is TextDocumentSaveReason && o._value == _value; } class TextDocumentSaveRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentSaveRegistrationOptions.canParse, TextDocumentSaveRegistrationOptions.fromJson); TextDocumentSaveRegistrationOptions( {this.includeText, this.documentSelector}); static TextDocumentSaveRegistrationOptions fromJson( Map json) { final includeTextJson = json['includeText']; final includeText = includeTextJson as bool?; final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); return TextDocumentSaveRegistrationOptions( includeText: includeText, documentSelector: documentSelector); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The client is supposed to include the content on save. final bool? includeText; Map toJson() { var __result = {}; if (includeText != null) { __result['includeText'] = includeText; } __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('includeText'); try { final includeText = obj['includeText']; if (includeText != null && !(includeText is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type TextDocumentSaveRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentSaveRegistrationOptions && other.runtimeType == TextDocumentSaveRegistrationOptions) { return includeText == other.includeText && listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(includeText, lspHashCode(documentSelector)); @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentSyncClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentSyncClientCapabilities.canParse, TextDocumentSyncClientCapabilities.fromJson); TextDocumentSyncClientCapabilities( {this.dynamicRegistration, this.willSave, this.willSaveWaitUntil, this.didSave}); static TextDocumentSyncClientCapabilities fromJson( Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final willSaveJson = json['willSave']; final willSave = willSaveJson as bool?; final willSaveWaitUntilJson = json['willSaveWaitUntil']; final willSaveWaitUntil = willSaveWaitUntilJson as bool?; final didSaveJson = json['didSave']; final didSave = didSaveJson as bool?; return TextDocumentSyncClientCapabilities( dynamicRegistration: dynamicRegistration, willSave: willSave, willSaveWaitUntil: willSaveWaitUntil, didSave: didSave); } /// The client supports did save notifications. final bool? didSave; /// Whether text document synchronization supports dynamic registration. final bool? dynamicRegistration; /// The client supports sending will save notifications. final bool? willSave; /// The client supports sending a will save request and waits for a response /// providing text edits which will be applied to the document before it is /// saved. final bool? willSaveWaitUntil; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (willSave != null) { __result['willSave'] = willSave; } if (willSaveWaitUntil != null) { __result['willSaveWaitUntil'] = willSaveWaitUntil; } if (didSave != null) { __result['didSave'] = didSave; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('willSave'); try { final willSave = obj['willSave']; if (willSave != null && !(willSave is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('willSaveWaitUntil'); try { final willSaveWaitUntil = obj['willSaveWaitUntil']; if (willSaveWaitUntil != null && !(willSaveWaitUntil is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('didSave'); try { final didSave = obj['didSave']; if (didSave != null && !(didSave is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type TextDocumentSyncClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentSyncClientCapabilities && other.runtimeType == TextDocumentSyncClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && willSave == other.willSave && willSaveWaitUntil == other.willSaveWaitUntil && didSave == other.didSave && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, willSave, willSaveWaitUntil, didSave); @override String toString() => jsonEncoder.convert(toJson()); } /// Defines how the host (editor) should sync document changes to the language /// server. class TextDocumentSyncKind { const TextDocumentSyncKind(this._value); const TextDocumentSyncKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Documents should not be synced at all. static const None = TextDocumentSyncKind(0); /// Documents are synced by always sending the full content of the document. static const Full = TextDocumentSyncKind(1); /// Documents are synced by sending the full content on open. After that only /// incremental updates to the document are send. static const Incremental = TextDocumentSyncKind(2); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is TextDocumentSyncKind && o._value == _value; } class TextDocumentSyncOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( TextDocumentSyncOptions.canParse, TextDocumentSyncOptions.fromJson); TextDocumentSyncOptions( {this.openClose, this.change, this.willSave, this.willSaveWaitUntil, this.save}); static TextDocumentSyncOptions fromJson(Map json) { final openCloseJson = json['openClose']; final openClose = openCloseJson as bool?; final changeJson = json['change']; final change = changeJson != null ? TextDocumentSyncKind.fromJson(changeJson as int) : null; final willSaveJson = json['willSave']; final willSave = willSaveJson as bool?; final willSaveWaitUntilJson = json['willSaveWaitUntil']; final willSaveWaitUntil = willSaveWaitUntilJson as bool?; final saveJson = json['save']; final save = saveJson == null ? null : (saveJson is bool ? Either2.t1(saveJson) : (SaveOptions.canParse(saveJson, nullLspJsonReporter) ? Either2.t2( SaveOptions.fromJson(saveJson as Map)) : (throw '''$saveJson was not one of (bool, SaveOptions)'''))); return TextDocumentSyncOptions( openClose: openClose, change: change, willSave: willSave, willSaveWaitUntil: willSaveWaitUntil, save: save); } /// Change notifications are sent to the server. See /// TextDocumentSyncKind.None, TextDocumentSyncKind.Full and /// TextDocumentSyncKind.Incremental. If omitted it defaults to /// TextDocumentSyncKind.None. final TextDocumentSyncKind? change; /// Open and close notifications are sent to the server. If omitted open close /// notification should not be sent. final bool? openClose; /// If present save notifications are sent to the server. If omitted the /// notification should not be sent. final Either2? save; /// If present will save notifications are sent to the server. If omitted the /// notification should not be sent. final bool? willSave; /// If present will save wait until requests are sent to the server. If /// omitted the request should not be sent. final bool? willSaveWaitUntil; Map toJson() { var __result = {}; if (openClose != null) { __result['openClose'] = openClose; } if (change != null) { __result['change'] = change?.toJson(); } if (willSave != null) { __result['willSave'] = willSave; } if (willSaveWaitUntil != null) { __result['willSaveWaitUntil'] = willSaveWaitUntil; } if (save != null) { __result['save'] = save; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('openClose'); try { final openClose = obj['openClose']; if (openClose != null && !(openClose is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('change'); try { final change = obj['change']; if (change != null && !(TextDocumentSyncKind.canParse(change, reporter))) { reporter.reportError('must be of type TextDocumentSyncKind'); return false; } } finally { reporter.pop(); } reporter.push('willSave'); try { final willSave = obj['willSave']; if (willSave != null && !(willSave is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('willSaveWaitUntil'); try { final willSaveWaitUntil = obj['willSaveWaitUntil']; if (willSaveWaitUntil != null && !(willSaveWaitUntil is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('save'); try { final save = obj['save']; if (save != null && !((save is bool || SaveOptions.canParse(save, reporter)))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextDocumentSyncOptions'); return false; } } @override bool operator ==(Object other) { if (other is TextDocumentSyncOptions && other.runtimeType == TextDocumentSyncOptions) { return openClose == other.openClose && change == other.change && willSave == other.willSave && willSaveWaitUntil == other.willSaveWaitUntil && save == other.save && true; } return false; } @override int get hashCode => Object.hash(openClose, change, willSave, willSaveWaitUntil, save); @override String toString() => jsonEncoder.convert(toJson()); } class TextEdit implements ToJsonable { static const jsonHandler = LspJsonHandler(TextEdit.canParse, TextEdit.fromJson); TextEdit({required this.range, required this.newText}); static TextEdit fromJson(Map json) { if (AnnotatedTextEdit.canParse(json, nullLspJsonReporter)) { return AnnotatedTextEdit.fromJson(json); } if (SnippetTextEdit.canParse(json, nullLspJsonReporter)) { return SnippetTextEdit.fromJson(json); } final rangeJson = json['range']; final range = Range.fromJson(rangeJson as Map); final newTextJson = json['newText']; final newText = newTextJson as String; return TextEdit(range: range, newText: newText); } /// The string to be inserted. For delete operations use an empty string. final String newText; /// The range of the text document to be manipulated. To insert text into a /// document create a range where start === end. final Range range; Map toJson() { var __result = {}; __result['range'] = range.toJson(); __result['newText'] = newText; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (!obj.containsKey('range')) { reporter.reportError('must not be undefined'); return false; } final range = obj['range']; if (range == null) { reporter.reportError('must not be null'); return false; } if (!(Range.canParse(range, reporter))) { reporter.reportError('must be of type Range'); return false; } } finally { reporter.pop(); } reporter.push('newText'); try { if (!obj.containsKey('newText')) { reporter.reportError('must not be undefined'); return false; } final newText = obj['newText']; if (newText == null) { reporter.reportError('must not be null'); return false; } if (!(newText is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TextEdit'); return false; } } @override bool operator ==(Object other) { if (other is TextEdit && other.runtimeType == TextEdit) { return range == other.range && newText == other.newText && true; } return false; } @override int get hashCode => Object.hash(range, newText); @override String toString() => jsonEncoder.convert(toJson()); } class TokenFormat { const TokenFormat(this._value); const TokenFormat.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } static const Relative = TokenFormat('relative'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is TokenFormat && o._value == _value; } class TypeDefinitionClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( TypeDefinitionClientCapabilities.canParse, TypeDefinitionClientCapabilities.fromJson); TypeDefinitionClientCapabilities( {this.dynamicRegistration, this.linkSupport}); static TypeDefinitionClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final linkSupportJson = json['linkSupport']; final linkSupport = linkSupportJson as bool?; return TypeDefinitionClientCapabilities( dynamicRegistration: dynamicRegistration, linkSupport: linkSupport); } /// Whether implementation supports dynamic registration. If this is set to /// `true` the client supports the new `TypeDefinitionRegistrationOptions` /// return value for the corresponding server capability as well. final bool? dynamicRegistration; /// The client supports additional metadata in the form of definition links. /// @since 3.14.0 final bool? linkSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (linkSupport != null) { __result['linkSupport'] = linkSupport; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('linkSupport'); try { final linkSupport = obj['linkSupport']; if (linkSupport != null && !(linkSupport is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TypeDefinitionClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is TypeDefinitionClientCapabilities && other.runtimeType == TypeDefinitionClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, linkSupport); @override String toString() => jsonEncoder.convert(toJson()); } class TypeDefinitionOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( TypeDefinitionOptions.canParse, TypeDefinitionOptions.fromJson); TypeDefinitionOptions({this.workDoneProgress}); static TypeDefinitionOptions fromJson(Map json) { if (TypeDefinitionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return TypeDefinitionRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return TypeDefinitionOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TypeDefinitionOptions'); return false; } } @override bool operator ==(Object other) { if (other is TypeDefinitionOptions && other.runtimeType == TypeDefinitionOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class TypeDefinitionParams implements TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( TypeDefinitionParams.canParse, TypeDefinitionParams.fromJson); TypeDefinitionParams( {required this.textDocument, required this.position, this.workDoneToken, this.partialResultToken}); static TypeDefinitionParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final positionJson = json['position']; final position = Position.fromJson(positionJson as Map); final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return TypeDefinitionParams( textDocument: textDocument, position: position, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['position'] = position.toJson(); if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('position'); try { if (!obj.containsKey('position')) { reporter.reportError('must not be undefined'); return false; } final position = obj['position']; if (position == null) { reporter.reportError('must not be null'); return false; } if (!(Position.canParse(position, reporter))) { reporter.reportError('must be of type Position'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TypeDefinitionParams'); return false; } } @override bool operator ==(Object other) { if (other is TypeDefinitionParams && other.runtimeType == TypeDefinitionParams) { return textDocument == other.textDocument && position == other.position && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(textDocument, position, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class TypeDefinitionRegistrationOptions implements TextDocumentRegistrationOptions, TypeDefinitionOptions, StaticRegistrationOptions, ToJsonable { static const jsonHandler = LspJsonHandler( TypeDefinitionRegistrationOptions.canParse, TypeDefinitionRegistrationOptions.fromJson); TypeDefinitionRegistrationOptions( {this.documentSelector, this.workDoneProgress, this.id}); static TypeDefinitionRegistrationOptions fromJson(Map json) { final documentSelectorJson = json['documentSelector']; final documentSelector = (documentSelectorJson as List?) ?.map((item) => DocumentFilter.fromJson(item as Map)) .toList(); final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; final idJson = json['id']; final id = idJson as String?; return TypeDefinitionRegistrationOptions( documentSelector: documentSelector, workDoneProgress: workDoneProgress, id: id); } /// A document selector to identify the scope of the registration. If set to /// null the document selector provided on the client side will be used. final List? documentSelector; /// The id used to register the request. The id can be used to deregister the /// request again. See also Registration#id. final String? id; final bool? workDoneProgress; Map toJson() { var __result = {}; __result['documentSelector'] = documentSelector; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError('must not be undefined'); return false; } final documentSelector = obj['documentSelector']; if (documentSelector != null && !((documentSelector is List && (documentSelector.every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('id'); try { final id = obj['id']; if (id != null && !(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type TypeDefinitionRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is TypeDefinitionRegistrationOptions && other.runtimeType == TypeDefinitionRegistrationOptions) { return listEqual(documentSelector, other.documentSelector, (DocumentFilter a, DocumentFilter b) => a == b) && workDoneProgress == other.workDoneProgress && id == other.id && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(documentSelector), workDoneProgress, id); @override String toString() => jsonEncoder.convert(toJson()); } /// Moniker uniqueness level to define scope of the moniker. class UniquenessLevel { const UniquenessLevel(this._value); const UniquenessLevel.fromJson(this._value); final String _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is String; } /// The moniker is only unique inside a document static const document = UniquenessLevel('document'); /// The moniker is unique inside a project for which a dump got created static const project = UniquenessLevel('project'); /// The moniker is unique inside the group to which a project belongs static const group = UniquenessLevel('group'); /// The moniker is unique inside the moniker scheme. static const scheme = UniquenessLevel('scheme'); /// The moniker is globally unique static const global = UniquenessLevel('global'); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is UniquenessLevel && o._value == _value; } /// General parameters to unregister a capability. class Unregistration implements ToJsonable { static const jsonHandler = LspJsonHandler(Unregistration.canParse, Unregistration.fromJson); Unregistration({required this.id, required this.method}); static Unregistration fromJson(Map json) { final idJson = json['id']; final id = idJson as String; final methodJson = json['method']; final method = methodJson as String; return Unregistration(id: id, method: method); } /// The id used to unregister the request or notification. Usually an id /// provided during the register request. final String id; /// The method / capability to unregister for. final String method; Map toJson() { var __result = {}; __result['id'] = id; __result['method'] = method; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { if (!obj.containsKey('id')) { reporter.reportError('must not be undefined'); return false; } final id = obj['id']; if (id == null) { reporter.reportError('must not be null'); return false; } if (!(id is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('method'); try { if (!obj.containsKey('method')) { reporter.reportError('must not be undefined'); return false; } final method = obj['method']; if (method == null) { reporter.reportError('must not be null'); return false; } if (!(method is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type Unregistration'); return false; } } @override bool operator ==(Object other) { if (other is Unregistration && other.runtimeType == Unregistration) { return id == other.id && method == other.method && true; } return false; } @override int get hashCode => Object.hash(id, method); @override String toString() => jsonEncoder.convert(toJson()); } class UnregistrationParams implements ToJsonable { static const jsonHandler = LspJsonHandler( UnregistrationParams.canParse, UnregistrationParams.fromJson); UnregistrationParams({required this.unregisterations}); static UnregistrationParams fromJson(Map json) { final unregisterationsJson = json['unregisterations']; final unregisterations = (unregisterationsJson as List) .map((item) => Unregistration.fromJson(item as Map)) .toList(); return UnregistrationParams(unregisterations: unregisterations); } /// This should correctly be named `unregistrations`. However changing this // /// is a breaking change and needs to wait until we deliver a 4.x version // /// of the specification. final List unregisterations; Map toJson() { var __result = {}; __result['unregisterations'] = unregisterations.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('unregisterations'); try { if (!obj.containsKey('unregisterations')) { reporter.reportError('must not be undefined'); return false; } final unregisterations = obj['unregisterations']; if (unregisterations == null) { reporter.reportError('must not be null'); return false; } if (!((unregisterations is List && (unregisterations .every((item) => Unregistration.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type UnregistrationParams'); return false; } } @override bool operator ==(Object other) { if (other is UnregistrationParams && other.runtimeType == UnregistrationParams) { return listEqual(unregisterations, other.unregisterations, (Unregistration a, Unregistration b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(unregisterations); @override String toString() => jsonEncoder.convert(toJson()); } class VersionedTextDocumentIdentifier implements TextDocumentIdentifier, ToJsonable { static const jsonHandler = LspJsonHandler( VersionedTextDocumentIdentifier.canParse, VersionedTextDocumentIdentifier.fromJson); VersionedTextDocumentIdentifier({required this.version, required this.uri}); static VersionedTextDocumentIdentifier fromJson(Map json) { final versionJson = json['version']; final version = versionJson as int; final uriJson = json['uri']; final uri = uriJson as String; return VersionedTextDocumentIdentifier(version: version, uri: uri); } /// The text document's URI. final String uri; /// The version number of this document. /// /// The version number of a document will increase after each change, /// including undo/redo. The number doesn't need to be consecutive. final int version; Map toJson() { var __result = {}; __result['version'] = version; __result['uri'] = uri; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('version'); try { if (!obj.containsKey('version')) { reporter.reportError('must not be undefined'); return false; } final version = obj['version']; if (version == null) { reporter.reportError('must not be null'); return false; } if (!(version is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type VersionedTextDocumentIdentifier'); return false; } } @override bool operator ==(Object other) { if (other is VersionedTextDocumentIdentifier && other.runtimeType == VersionedTextDocumentIdentifier) { return version == other.version && uri == other.uri && true; } return false; } @override int get hashCode => Object.hash(version, uri); @override String toString() => jsonEncoder.convert(toJson()); } class WatchKind { const WatchKind(this._value); const WatchKind.fromJson(this._value); final int _value; static bool canParse(Object? obj, LspJsonReporter reporter) { return obj is int; } /// Interested in create events. static const Create = WatchKind(1); /// Interested in change events static const Change = WatchKind(2); /// Interested in delete events static const Delete = WatchKind(4); Object toJson() => _value; @override String toString() => _value.toString(); @override int get hashCode => _value.hashCode; bool operator ==(Object o) => o is WatchKind && o._value == _value; } /// The parameters send in a will save text document notification. class WillSaveTextDocumentParams implements ToJsonable { static const jsonHandler = LspJsonHandler( WillSaveTextDocumentParams.canParse, WillSaveTextDocumentParams.fromJson); WillSaveTextDocumentParams( {required this.textDocument, required this.reason}); static WillSaveTextDocumentParams fromJson(Map json) { final textDocumentJson = json['textDocument']; final textDocument = TextDocumentIdentifier.fromJson( textDocumentJson as Map); final reasonJson = json['reason']; final reason = TextDocumentSaveReason.fromJson(reasonJson as int); return WillSaveTextDocumentParams( textDocument: textDocument, reason: reason); } /// The 'TextDocumentSaveReason'. final TextDocumentSaveReason reason; /// The document that will be saved. final TextDocumentIdentifier textDocument; Map toJson() { var __result = {}; __result['textDocument'] = textDocument.toJson(); __result['reason'] = reason.toJson(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocument'); try { if (!obj.containsKey('textDocument')) { reporter.reportError('must not be undefined'); return false; } final textDocument = obj['textDocument']; if (textDocument == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentIdentifier.canParse(textDocument, reporter))) { reporter.reportError('must be of type TextDocumentIdentifier'); return false; } } finally { reporter.pop(); } reporter.push('reason'); try { if (!obj.containsKey('reason')) { reporter.reportError('must not be undefined'); return false; } final reason = obj['reason']; if (reason == null) { reporter.reportError('must not be null'); return false; } if (!(TextDocumentSaveReason.canParse(reason, reporter))) { reporter.reportError('must be of type TextDocumentSaveReason'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WillSaveTextDocumentParams'); return false; } } @override bool operator ==(Object other) { if (other is WillSaveTextDocumentParams && other.runtimeType == WillSaveTextDocumentParams) { return textDocument == other.textDocument && reason == other.reason && true; } return false; } @override int get hashCode => Object.hash(textDocument, reason); @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressBegin implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressBegin.canParse, WorkDoneProgressBegin.fromJson); WorkDoneProgressBegin( {this.kind = 'begin', required this.title, this.cancellable, this.message, this.percentage}) { if (kind != 'begin') { throw 'kind may only be the literal \'begin\''; } } static WorkDoneProgressBegin fromJson(Map json) { final kindJson = json['kind']; final kind = kindJson as String; final titleJson = json['title']; final title = titleJson as String; final cancellableJson = json['cancellable']; final cancellable = cancellableJson as bool?; final messageJson = json['message']; final message = messageJson as String?; final percentageJson = json['percentage']; final percentage = percentageJson as int?; return WorkDoneProgressBegin( kind: kind, title: title, cancellable: cancellable, message: message, percentage: percentage); } /// Controls if a cancel button should show to allow the user to cancel the /// long running operation. Clients that don't support cancellation are /// allowed to ignore the setting. final bool? cancellable; final String kind; /// Optional, more detailed associated progress message. Contains /// complementary information to the `title`. /// /// Examples: "3/25 files", "project/src/module2", "node_modules/some_dep". If /// unset, the previous progress message (if any) is still valid. final String? message; /// Optional progress percentage to display (value 100 is considered 100%). If /// not provided infinite progress is assumed and clients are allowed to /// ignore the `percentage` value in subsequent in report notifications. /// /// The value should be steadily rising. Clients are free to ignore values /// that are not following this rule. The value range is [0, 100] final int? percentage; /// Mandatory title of the progress operation. Used to briefly inform about /// the kind of operation being performed. /// /// Examples: "Indexing" or "Linking dependencies". final String title; Map toJson() { var __result = {}; __result['kind'] = kind; __result['title'] = title; if (cancellable != null) { __result['cancellable'] = cancellable; } if (message != null) { __result['message'] = message; } if (percentage != null) { __result['percentage'] = percentage; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(kind == 'begin')) { reporter.reportError('must be the literal \'begin\''); return false; } } finally { reporter.pop(); } reporter.push('title'); try { if (!obj.containsKey('title')) { reporter.reportError('must not be undefined'); return false; } final title = obj['title']; if (title == null) { reporter.reportError('must not be null'); return false; } if (!(title is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('cancellable'); try { final cancellable = obj['cancellable']; if (cancellable != null && !(cancellable is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { final message = obj['message']; if (message != null && !(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('percentage'); try { final percentage = obj['percentage']; if (percentage != null && !(percentage is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressBegin'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressBegin && other.runtimeType == WorkDoneProgressBegin) { return kind == other.kind && title == other.title && cancellable == other.cancellable && message == other.message && percentage == other.percentage && true; } return false; } @override int get hashCode => Object.hash(kind, title, cancellable, message, percentage); @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressCancelParams implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressCancelParams.canParse, WorkDoneProgressCancelParams.fromJson); WorkDoneProgressCancelParams({required this.token}); static WorkDoneProgressCancelParams fromJson(Map json) { final tokenJson = json['token']; final token = tokenJson is int ? Either2.t1(tokenJson) : (tokenJson is String ? Either2.t2(tokenJson) : (throw '''$tokenJson was not one of (int, String)''')); return WorkDoneProgressCancelParams(token: token); } /// The token to be used to report progress. final Either2 token; Map toJson() { var __result = {}; __result['token'] = token; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('token'); try { if (!obj.containsKey('token')) { reporter.reportError('must not be undefined'); return false; } final token = obj['token']; if (token == null) { reporter.reportError('must not be null'); return false; } if (!((token is int || token is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressCancelParams'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressCancelParams && other.runtimeType == WorkDoneProgressCancelParams) { return token == other.token && true; } return false; } @override int get hashCode => token.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressCreateParams implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressCreateParams.canParse, WorkDoneProgressCreateParams.fromJson); WorkDoneProgressCreateParams({required this.token}); static WorkDoneProgressCreateParams fromJson(Map json) { final tokenJson = json['token']; final token = tokenJson is int ? Either2.t1(tokenJson) : (tokenJson is String ? Either2.t2(tokenJson) : (throw '''$tokenJson was not one of (int, String)''')); return WorkDoneProgressCreateParams(token: token); } /// The token to be used to report progress. final Either2 token; Map toJson() { var __result = {}; __result['token'] = token; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('token'); try { if (!obj.containsKey('token')) { reporter.reportError('must not be undefined'); return false; } final token = obj['token']; if (token == null) { reporter.reportError('must not be null'); return false; } if (!((token is int || token is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressCreateParams'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressCreateParams && other.runtimeType == WorkDoneProgressCreateParams) { return token == other.token && true; } return false; } @override int get hashCode => token.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressEnd implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressEnd.canParse, WorkDoneProgressEnd.fromJson); WorkDoneProgressEnd({this.kind = 'end', this.message}) { if (kind != 'end') { throw 'kind may only be the literal \'end\''; } } static WorkDoneProgressEnd fromJson(Map json) { final kindJson = json['kind']; final kind = kindJson as String; final messageJson = json['message']; final message = messageJson as String?; return WorkDoneProgressEnd(kind: kind, message: message); } final String kind; /// Optional, a final message indicating to for example indicate the outcome /// of the operation. final String? message; Map toJson() { var __result = {}; __result['kind'] = kind; if (message != null) { __result['message'] = message; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(kind == 'end')) { reporter.reportError('must be the literal \'end\''); return false; } } finally { reporter.pop(); } reporter.push('message'); try { final message = obj['message']; if (message != null && !(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressEnd'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressEnd && other.runtimeType == WorkDoneProgressEnd) { return kind == other.kind && message == other.message && true; } return false; } @override int get hashCode => Object.hash(kind, message); @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressOptions implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressOptions.canParse, WorkDoneProgressOptions.fromJson); WorkDoneProgressOptions({this.workDoneProgress}); static WorkDoneProgressOptions fromJson(Map json) { if (WorkspaceSymbolOptions.canParse(json, nullLspJsonReporter)) { return WorkspaceSymbolOptions.fromJson(json); } if (ExecuteCommandOptions.canParse(json, nullLspJsonReporter)) { return ExecuteCommandOptions.fromJson(json); } if (CompletionOptions.canParse(json, nullLspJsonReporter)) { return CompletionOptions.fromJson(json); } if (HoverOptions.canParse(json, nullLspJsonReporter)) { return HoverOptions.fromJson(json); } if (SignatureHelpOptions.canParse(json, nullLspJsonReporter)) { return SignatureHelpOptions.fromJson(json); } if (DeclarationOptions.canParse(json, nullLspJsonReporter)) { return DeclarationOptions.fromJson(json); } if (DefinitionOptions.canParse(json, nullLspJsonReporter)) { return DefinitionOptions.fromJson(json); } if (TypeDefinitionOptions.canParse(json, nullLspJsonReporter)) { return TypeDefinitionOptions.fromJson(json); } if (ImplementationOptions.canParse(json, nullLspJsonReporter)) { return ImplementationOptions.fromJson(json); } if (ReferenceOptions.canParse(json, nullLspJsonReporter)) { return ReferenceOptions.fromJson(json); } if (DocumentHighlightOptions.canParse(json, nullLspJsonReporter)) { return DocumentHighlightOptions.fromJson(json); } if (DocumentSymbolOptions.canParse(json, nullLspJsonReporter)) { return DocumentSymbolOptions.fromJson(json); } if (CodeActionOptions.canParse(json, nullLspJsonReporter)) { return CodeActionOptions.fromJson(json); } if (CodeLensOptions.canParse(json, nullLspJsonReporter)) { return CodeLensOptions.fromJson(json); } if (DocumentLinkOptions.canParse(json, nullLspJsonReporter)) { return DocumentLinkOptions.fromJson(json); } if (DocumentColorOptions.canParse(json, nullLspJsonReporter)) { return DocumentColorOptions.fromJson(json); } if (DocumentFormattingOptions.canParse(json, nullLspJsonReporter)) { return DocumentFormattingOptions.fromJson(json); } if (DocumentRangeFormattingOptions.canParse(json, nullLspJsonReporter)) { return DocumentRangeFormattingOptions.fromJson(json); } if (RenameOptions.canParse(json, nullLspJsonReporter)) { return RenameOptions.fromJson(json); } if (FoldingRangeOptions.canParse(json, nullLspJsonReporter)) { return FoldingRangeOptions.fromJson(json); } if (SelectionRangeOptions.canParse(json, nullLspJsonReporter)) { return SelectionRangeOptions.fromJson(json); } if (CallHierarchyOptions.canParse(json, nullLspJsonReporter)) { return CallHierarchyOptions.fromJson(json); } if (SemanticTokensOptions.canParse(json, nullLspJsonReporter)) { return SemanticTokensOptions.fromJson(json); } if (LinkedEditingRangeOptions.canParse(json, nullLspJsonReporter)) { return LinkedEditingRangeOptions.fromJson(json); } if (MonikerOptions.canParse(json, nullLspJsonReporter)) { return MonikerOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return WorkDoneProgressOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressOptions'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressOptions && other.runtimeType == WorkDoneProgressOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressParams implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressParams.canParse, WorkDoneProgressParams.fromJson); WorkDoneProgressParams({this.workDoneToken}); static WorkDoneProgressParams fromJson(Map json) { if (InitializeParams.canParse(json, nullLspJsonReporter)) { return InitializeParams.fromJson(json); } if (WorkspaceSymbolParams.canParse(json, nullLspJsonReporter)) { return WorkspaceSymbolParams.fromJson(json); } if (ExecuteCommandParams.canParse(json, nullLspJsonReporter)) { return ExecuteCommandParams.fromJson(json); } if (CompletionParams.canParse(json, nullLspJsonReporter)) { return CompletionParams.fromJson(json); } if (HoverParams.canParse(json, nullLspJsonReporter)) { return HoverParams.fromJson(json); } if (SignatureHelpParams.canParse(json, nullLspJsonReporter)) { return SignatureHelpParams.fromJson(json); } if (DeclarationParams.canParse(json, nullLspJsonReporter)) { return DeclarationParams.fromJson(json); } if (DefinitionParams.canParse(json, nullLspJsonReporter)) { return DefinitionParams.fromJson(json); } if (TypeDefinitionParams.canParse(json, nullLspJsonReporter)) { return TypeDefinitionParams.fromJson(json); } if (ImplementationParams.canParse(json, nullLspJsonReporter)) { return ImplementationParams.fromJson(json); } if (ReferenceParams.canParse(json, nullLspJsonReporter)) { return ReferenceParams.fromJson(json); } if (DocumentHighlightParams.canParse(json, nullLspJsonReporter)) { return DocumentHighlightParams.fromJson(json); } if (DocumentSymbolParams.canParse(json, nullLspJsonReporter)) { return DocumentSymbolParams.fromJson(json); } if (CodeActionParams.canParse(json, nullLspJsonReporter)) { return CodeActionParams.fromJson(json); } if (CodeLensParams.canParse(json, nullLspJsonReporter)) { return CodeLensParams.fromJson(json); } if (DocumentLinkParams.canParse(json, nullLspJsonReporter)) { return DocumentLinkParams.fromJson(json); } if (DocumentColorParams.canParse(json, nullLspJsonReporter)) { return DocumentColorParams.fromJson(json); } if (ColorPresentationParams.canParse(json, nullLspJsonReporter)) { return ColorPresentationParams.fromJson(json); } if (DocumentFormattingParams.canParse(json, nullLspJsonReporter)) { return DocumentFormattingParams.fromJson(json); } if (DocumentRangeFormattingParams.canParse(json, nullLspJsonReporter)) { return DocumentRangeFormattingParams.fromJson(json); } if (RenameParams.canParse(json, nullLspJsonReporter)) { return RenameParams.fromJson(json); } if (FoldingRangeParams.canParse(json, nullLspJsonReporter)) { return FoldingRangeParams.fromJson(json); } if (SelectionRangeParams.canParse(json, nullLspJsonReporter)) { return SelectionRangeParams.fromJson(json); } if (CallHierarchyPrepareParams.canParse(json, nullLspJsonReporter)) { return CallHierarchyPrepareParams.fromJson(json); } if (CallHierarchyIncomingCallsParams.canParse(json, nullLspJsonReporter)) { return CallHierarchyIncomingCallsParams.fromJson(json); } if (CallHierarchyOutgoingCallsParams.canParse(json, nullLspJsonReporter)) { return CallHierarchyOutgoingCallsParams.fromJson(json); } if (SemanticTokensParams.canParse(json, nullLspJsonReporter)) { return SemanticTokensParams.fromJson(json); } if (SemanticTokensDeltaParams.canParse(json, nullLspJsonReporter)) { return SemanticTokensDeltaParams.fromJson(json); } if (SemanticTokensRangeParams.canParse(json, nullLspJsonReporter)) { return SemanticTokensRangeParams.fromJson(json); } if (LinkedEditingRangeParams.canParse(json, nullLspJsonReporter)) { return LinkedEditingRangeParams.fromJson(json); } if (MonikerParams.canParse(json, nullLspJsonReporter)) { return MonikerParams.fromJson(json); } final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); return WorkDoneProgressParams(workDoneToken: workDoneToken); } /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneToken'); try { final workDoneToken = obj['workDoneToken']; if (workDoneToken != null && !((workDoneToken is int || workDoneToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressParams'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressParams && other.runtimeType == WorkDoneProgressParams) { return workDoneToken == other.workDoneToken && true; } return false; } @override int get hashCode => workDoneToken.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class WorkDoneProgressReport implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkDoneProgressReport.canParse, WorkDoneProgressReport.fromJson); WorkDoneProgressReport( {this.kind = 'report', this.cancellable, this.message, this.percentage}) { if (kind != 'report') { throw 'kind may only be the literal \'report\''; } } static WorkDoneProgressReport fromJson(Map json) { final kindJson = json['kind']; final kind = kindJson as String; final cancellableJson = json['cancellable']; final cancellable = cancellableJson as bool?; final messageJson = json['message']; final message = messageJson as String?; final percentageJson = json['percentage']; final percentage = percentageJson as int?; return WorkDoneProgressReport( kind: kind, cancellable: cancellable, message: message, percentage: percentage); } /// Controls enablement state of a cancel button. This property is only valid /// /// if a cancel button got requested in the `WorkDoneProgressStart` payload. /// /// Clients that don't support cancellation or don't support control the /// button's enablement state are allowed to ignore the setting. final bool? cancellable; final String kind; /// Optional, more detailed associated progress message. Contains /// complementary information to the `title`. /// /// Examples: "3/25 files", "project/src/module2", "node_modules/some_dep". If /// unset, the previous progress message (if any) is still valid. final String? message; /// Optional progress percentage to display (value 100 is considered 100%). If /// not provided infinite progress is assumed and clients are allowed to /// ignore the `percentage` value in subsequent in report notifications. /// /// The value should be steadily rising. Clients are free to ignore values /// that are not following this rule. The value range is [0, 100] final int? percentage; Map toJson() { var __result = {}; __result['kind'] = kind; if (cancellable != null) { __result['cancellable'] = cancellable; } if (message != null) { __result['message'] = message; } if (percentage != null) { __result['percentage'] = percentage; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('kind'); try { if (!obj.containsKey('kind')) { reporter.reportError('must not be undefined'); return false; } final kind = obj['kind']; if (kind == null) { reporter.reportError('must not be null'); return false; } if (!(kind == 'report')) { reporter.reportError('must be the literal \'report\''); return false; } } finally { reporter.pop(); } reporter.push('cancellable'); try { final cancellable = obj['cancellable']; if (cancellable != null && !(cancellable is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('message'); try { final message = obj['message']; if (message != null && !(message is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('percentage'); try { final percentage = obj['percentage']; if (percentage != null && !(percentage is int)) { reporter.reportError('must be of type int'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkDoneProgressReport'); return false; } } @override bool operator ==(Object other) { if (other is WorkDoneProgressReport && other.runtimeType == WorkDoneProgressReport) { return kind == other.kind && cancellable == other.cancellable && message == other.message && percentage == other.percentage && true; } return false; } @override int get hashCode => Object.hash(kind, cancellable, message, percentage); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceEdit implements ToJsonable { static const jsonHandler = LspJsonHandler(WorkspaceEdit.canParse, WorkspaceEdit.fromJson); WorkspaceEdit({this.changes, this.documentChanges, this.changeAnnotations}); static WorkspaceEdit fromJson(Map json) { final changesJson = json['changes']; final changes = (changesJson as Map?)?.map((key, value) => MapEntry( key as String, (value as List) .map((item) => TextEdit.fromJson(item as Map)) .toList())); final documentChangesJson = json['documentChanges']; final documentChanges = documentChangesJson == null ? null : ((documentChangesJson is List && (documentChangesJson.every((item) => TextDocumentEdit.canParse(item, nullLspJsonReporter)))) ? Either2, List>>.t1((documentChangesJson) .map((item) => TextDocumentEdit.fromJson(item as Map)) .toList()) : ((documentChangesJson is List && (documentChangesJson.every((item) => (TextDocumentEdit.canParse(item, nullLspJsonReporter) || CreateFile.canParse(item, nullLspJsonReporter) || RenameFile.canParse(item, nullLspJsonReporter) || DeleteFile.canParse(item, nullLspJsonReporter))))) ? Either2, List>>.t2( (documentChangesJson).map((item) => TextDocumentEdit.canParse(item, nullLspJsonReporter) ? Either4.t1(TextDocumentEdit.fromJson(item as Map)) : (CreateFile.canParse(item, nullLspJsonReporter) ? Either4.t2(CreateFile.fromJson(item as Map)) : (RenameFile.canParse(item, nullLspJsonReporter) ? Either4.t3(RenameFile.fromJson(item as Map)) : (DeleteFile.canParse(item, nullLspJsonReporter) ? Either4.t4(DeleteFile.fromJson(item as Map)) : (throw '''$item was not one of (TextDocumentEdit, CreateFile, RenameFile, DeleteFile)'''))))).toList()) : (throw '''$documentChangesJson was not one of (List, List>)'''))); final changeAnnotationsJson = json['changeAnnotations']; final changeAnnotations = (changeAnnotationsJson as Map?) ?.map((key, value) => MapEntry(key as String, ChangeAnnotation.fromJson(value as Map))); return WorkspaceEdit( changes: changes, documentChanges: documentChanges, changeAnnotations: changeAnnotations); } /// A map of change annotations that can be referenced in `AnnotatedTextEdit`s /// or create, rename and delete file / folder operations. /// /// Whether clients honor this property depends on the client capability /// `workspace.changeAnnotationSupport`. /// @since 3.16.0 final Map? changeAnnotations; /// Holds changes to existing resources. final Map>? changes; /// Depending on the client capability /// `workspace.workspaceEdit.resourceOperations` document changes are either /// an array of `TextDocumentEdit`s to express changes to n different text /// documents where each text document edit addresses a specific version of a /// text document. Or it can contain above `TextDocumentEdit`s mixed with /// create, rename and delete file / folder operations. /// /// Whether a client supports versioned document edits is expressed via /// `workspace.workspaceEdit.documentChanges` client capability. /// /// If a client neither supports `documentChanges` nor /// `workspace.workspaceEdit.resourceOperations` then only plain `TextEdit`s /// using the `changes` property are supported. final Either2, List>>? documentChanges; Map toJson() { var __result = {}; if (changes != null) { __result['changes'] = changes; } if (documentChanges != null) { __result['documentChanges'] = documentChanges; } if (changeAnnotations != null) { __result['changeAnnotations'] = changeAnnotations; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('changes'); try { final changes = obj['changes']; if (changes != null && !((changes is Map && (changes.keys.every((item) => item is String && changes.values.every((item) => (item is List && (item.every((item) => TextEdit.canParse(item, reporter)))))))))) { reporter.reportError('must be of type Map>'); return false; } } finally { reporter.pop(); } reporter.push('documentChanges'); try { final documentChanges = obj['documentChanges']; if (documentChanges != null && !(((documentChanges is List && (documentChanges.every((item) => TextDocumentEdit.canParse(item, reporter)))) || (documentChanges is List && (documentChanges.every((item) => (TextDocumentEdit.canParse(item, reporter) || CreateFile.canParse(item, reporter) || RenameFile.canParse(item, reporter) || DeleteFile.canParse(item, reporter)))))))) { reporter.reportError( 'must be of type Either2, List>>'); return false; } } finally { reporter.pop(); } reporter.push('changeAnnotations'); try { final changeAnnotations = obj['changeAnnotations']; if (changeAnnotations != null && !((changeAnnotations is Map && (changeAnnotations.keys.every((item) => item is String && changeAnnotations.values.every((item) => ChangeAnnotation.canParse(item, reporter))))))) { reporter.reportError('must be of type Map'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceEdit'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceEdit && other.runtimeType == WorkspaceEdit) { return mapEqual( changes, other.changes, (List a, List b) => listEqual(a, b, (TextEdit a, TextEdit b) => a == b)) && documentChanges == other.documentChanges && mapEqual(changeAnnotations, other.changeAnnotations, (ChangeAnnotation a, ChangeAnnotation b) => a == b) && true; } return false; } @override int get hashCode => Object.hash( lspHashCode(changes), documentChanges, lspHashCode(changeAnnotations)); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceEditClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceEditClientCapabilities.canParse, WorkspaceEditClientCapabilities.fromJson); WorkspaceEditClientCapabilities( {this.documentChanges, this.resourceOperations, this.failureHandling, this.normalizesLineEndings, this.changeAnnotationSupport}); static WorkspaceEditClientCapabilities fromJson(Map json) { final documentChangesJson = json['documentChanges']; final documentChanges = documentChangesJson as bool?; final resourceOperationsJson = json['resourceOperations']; final resourceOperations = (resourceOperationsJson as List?) ?.map((item) => ResourceOperationKind.fromJson(item as String)) .toList(); final failureHandlingJson = json['failureHandling']; final failureHandling = failureHandlingJson != null ? FailureHandlingKind.fromJson(failureHandlingJson as String) : null; final normalizesLineEndingsJson = json['normalizesLineEndings']; final normalizesLineEndings = normalizesLineEndingsJson as bool?; final changeAnnotationSupportJson = json['changeAnnotationSupport']; final changeAnnotationSupport = changeAnnotationSupportJson != null ? WorkspaceEditClientCapabilitiesChangeAnnotationSupport.fromJson( changeAnnotationSupportJson as Map) : null; return WorkspaceEditClientCapabilities( documentChanges: documentChanges, resourceOperations: resourceOperations, failureHandling: failureHandling, normalizesLineEndings: normalizesLineEndings, changeAnnotationSupport: changeAnnotationSupport); } /// Whether the client in general supports change annotations on text edits, /// create file, rename file and delete file changes. /// @since 3.16.0 final WorkspaceEditClientCapabilitiesChangeAnnotationSupport? changeAnnotationSupport; /// The client supports versioned document changes in `WorkspaceEdit`s final bool? documentChanges; /// The failure handling strategy of a client if applying the workspace edit /// fails. /// @since 3.13.0 final FailureHandlingKind? failureHandling; /// Whether the client normalizes line endings to the client specific setting. /// If set to `true` the client will normalize line ending characters in a /// workspace edit to the client specific new line character(s). /// @since 3.16.0 final bool? normalizesLineEndings; /// The resource operations the client supports. Clients should at least /// support 'create', 'rename' and 'delete' files and folders. /// @since 3.13.0 final List? resourceOperations; Map toJson() { var __result = {}; if (documentChanges != null) { __result['documentChanges'] = documentChanges; } if (resourceOperations != null) { __result['resourceOperations'] = resourceOperations?.map((item) => item.toJson()).toList(); } if (failureHandling != null) { __result['failureHandling'] = failureHandling?.toJson(); } if (normalizesLineEndings != null) { __result['normalizesLineEndings'] = normalizesLineEndings; } if (changeAnnotationSupport != null) { __result['changeAnnotationSupport'] = changeAnnotationSupport?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentChanges'); try { final documentChanges = obj['documentChanges']; if (documentChanges != null && !(documentChanges is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('resourceOperations'); try { final resourceOperations = obj['resourceOperations']; if (resourceOperations != null && !((resourceOperations is List && (resourceOperations.every((item) => ResourceOperationKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('failureHandling'); try { final failureHandling = obj['failureHandling']; if (failureHandling != null && !(FailureHandlingKind.canParse(failureHandling, reporter))) { reporter.reportError('must be of type FailureHandlingKind'); return false; } } finally { reporter.pop(); } reporter.push('normalizesLineEndings'); try { final normalizesLineEndings = obj['normalizesLineEndings']; if (normalizesLineEndings != null && !(normalizesLineEndings is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('changeAnnotationSupport'); try { final changeAnnotationSupport = obj['changeAnnotationSupport']; if (changeAnnotationSupport != null && !(WorkspaceEditClientCapabilitiesChangeAnnotationSupport.canParse( changeAnnotationSupport, reporter))) { reporter.reportError( 'must be of type WorkspaceEditClientCapabilitiesChangeAnnotationSupport'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceEditClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceEditClientCapabilities && other.runtimeType == WorkspaceEditClientCapabilities) { return documentChanges == other.documentChanges && listEqual(resourceOperations, other.resourceOperations, (ResourceOperationKind a, ResourceOperationKind b) => a == b) && failureHandling == other.failureHandling && normalizesLineEndings == other.normalizesLineEndings && changeAnnotationSupport == other.changeAnnotationSupport && true; } return false; } @override int get hashCode => Object.hash( documentChanges, lspHashCode(resourceOperations), failureHandling, normalizesLineEndings, changeAnnotationSupport); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceEditClientCapabilitiesChangeAnnotationSupport implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceEditClientCapabilitiesChangeAnnotationSupport.canParse, WorkspaceEditClientCapabilitiesChangeAnnotationSupport.fromJson); WorkspaceEditClientCapabilitiesChangeAnnotationSupport({this.groupsOnLabel}); static WorkspaceEditClientCapabilitiesChangeAnnotationSupport fromJson( Map json) { final groupsOnLabelJson = json['groupsOnLabel']; final groupsOnLabel = groupsOnLabelJson as bool?; return WorkspaceEditClientCapabilitiesChangeAnnotationSupport( groupsOnLabel: groupsOnLabel); } /// Whether the client groups edits with equal labels into tree nodes, for /// instance all edits labelled with "Changes in Strings" would be a tree /// node. final bool? groupsOnLabel; Map toJson() { var __result = {}; if (groupsOnLabel != null) { __result['groupsOnLabel'] = groupsOnLabel; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('groupsOnLabel'); try { final groupsOnLabel = obj['groupsOnLabel']; if (groupsOnLabel != null && !(groupsOnLabel is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type WorkspaceEditClientCapabilitiesChangeAnnotationSupport'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceEditClientCapabilitiesChangeAnnotationSupport && other.runtimeType == WorkspaceEditClientCapabilitiesChangeAnnotationSupport) { return groupsOnLabel == other.groupsOnLabel && true; } return false; } @override int get hashCode => groupsOnLabel.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceFolder implements ToJsonable { static const jsonHandler = LspJsonHandler(WorkspaceFolder.canParse, WorkspaceFolder.fromJson); WorkspaceFolder({required this.uri, required this.name}); static WorkspaceFolder fromJson(Map json) { final uriJson = json['uri']; final uri = uriJson as String; final nameJson = json['name']; final name = nameJson as String; return WorkspaceFolder(uri: uri, name: name); } /// The name of the workspace folder. Used to refer to this workspace folder /// in the user interface. final String name; /// The associated URI for this workspace folder. final String uri; Map toJson() { var __result = {}; __result['uri'] = uri; __result['name'] = name; return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError('must not be undefined'); return false; } final uri = obj['uri']; if (uri == null) { reporter.reportError('must not be null'); return false; } if (!(uri is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } reporter.push('name'); try { if (!obj.containsKey('name')) { reporter.reportError('must not be undefined'); return false; } final name = obj['name']; if (name == null) { reporter.reportError('must not be null'); return false; } if (!(name is String)) { reporter.reportError('must be of type String'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceFolder'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceFolder && other.runtimeType == WorkspaceFolder) { return uri == other.uri && name == other.name && true; } return false; } @override int get hashCode => Object.hash(uri, name); @override String toString() => jsonEncoder.convert(toJson()); } /// The workspace folder change event. class WorkspaceFoldersChangeEvent implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceFoldersChangeEvent.canParse, WorkspaceFoldersChangeEvent.fromJson); WorkspaceFoldersChangeEvent({required this.added, required this.removed}); static WorkspaceFoldersChangeEvent fromJson(Map json) { final addedJson = json['added']; final added = (addedJson as List) .map((item) => WorkspaceFolder.fromJson(item as Map)) .toList(); final removedJson = json['removed']; final removed = (removedJson as List) .map((item) => WorkspaceFolder.fromJson(item as Map)) .toList(); return WorkspaceFoldersChangeEvent(added: added, removed: removed); } /// The array of added workspace folders final List added; /// The array of the removed workspace folders final List removed; Map toJson() { var __result = {}; __result['added'] = added.map((item) => item.toJson()).toList(); __result['removed'] = removed.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('added'); try { if (!obj.containsKey('added')) { reporter.reportError('must not be undefined'); return false; } final added = obj['added']; if (added == null) { reporter.reportError('must not be null'); return false; } if (!((added is List && (added .every((item) => WorkspaceFolder.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } reporter.push('removed'); try { if (!obj.containsKey('removed')) { reporter.reportError('must not be undefined'); return false; } final removed = obj['removed']; if (removed == null) { reporter.reportError('must not be null'); return false; } if (!((removed is List && (removed .every((item) => WorkspaceFolder.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceFoldersChangeEvent'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceFoldersChangeEvent && other.runtimeType == WorkspaceFoldersChangeEvent) { return listEqual(added, other.added, (WorkspaceFolder a, WorkspaceFolder b) => a == b) && listEqual(removed, other.removed, (WorkspaceFolder a, WorkspaceFolder b) => a == b) && true; } return false; } @override int get hashCode => Object.hash(lspHashCode(added), lspHashCode(removed)); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceFoldersServerCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceFoldersServerCapabilities.canParse, WorkspaceFoldersServerCapabilities.fromJson); WorkspaceFoldersServerCapabilities( {this.supported, this.changeNotifications}); static WorkspaceFoldersServerCapabilities fromJson( Map json) { final supportedJson = json['supported']; final supported = supportedJson as bool?; final changeNotificationsJson = json['changeNotifications']; final changeNotifications = changeNotificationsJson == null ? null : (changeNotificationsJson is String ? Either2.t1(changeNotificationsJson) : (changeNotificationsJson is bool ? Either2.t2(changeNotificationsJson) : (throw '''$changeNotificationsJson was not one of (String, bool)'''))); return WorkspaceFoldersServerCapabilities( supported: supported, changeNotifications: changeNotifications); } /// Whether the server wants to receive workspace folder change notifications. /// /// If a string is provided, the string is treated as an ID under which the /// notification is registered on the client side. The ID can be used to /// unregister for these events using the `client/unregisterCapability` /// request. final Either2? changeNotifications; /// The server has support for workspace folders final bool? supported; Map toJson() { var __result = {}; if (supported != null) { __result['supported'] = supported; } if (changeNotifications != null) { __result['changeNotifications'] = changeNotifications; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('supported'); try { final supported = obj['supported']; if (supported != null && !(supported is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } reporter.push('changeNotifications'); try { final changeNotifications = obj['changeNotifications']; if (changeNotifications != null && !((changeNotifications is String || changeNotifications is bool))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type WorkspaceFoldersServerCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceFoldersServerCapabilities && other.runtimeType == WorkspaceFoldersServerCapabilities) { return supported == other.supported && changeNotifications == other.changeNotifications && true; } return false; } @override int get hashCode => Object.hash(supported, changeNotifications); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceSymbolClientCapabilities implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceSymbolClientCapabilities.canParse, WorkspaceSymbolClientCapabilities.fromJson); WorkspaceSymbolClientCapabilities( {this.dynamicRegistration, this.symbolKind, this.tagSupport}); static WorkspaceSymbolClientCapabilities fromJson(Map json) { final dynamicRegistrationJson = json['dynamicRegistration']; final dynamicRegistration = dynamicRegistrationJson as bool?; final symbolKindJson = json['symbolKind']; final symbolKind = symbolKindJson != null ? WorkspaceSymbolClientCapabilitiesSymbolKind.fromJson( symbolKindJson as Map) : null; final tagSupportJson = json['tagSupport']; final tagSupport = tagSupportJson != null ? WorkspaceSymbolClientCapabilitiesTagSupport.fromJson( tagSupportJson as Map) : null; return WorkspaceSymbolClientCapabilities( dynamicRegistration: dynamicRegistration, symbolKind: symbolKind, tagSupport: tagSupport); } /// Symbol request supports dynamic registration. final bool? dynamicRegistration; /// Specific capabilities for the `SymbolKind` in the `workspace/symbol` /// request. final WorkspaceSymbolClientCapabilitiesSymbolKind? symbolKind; /// The client supports tags on `SymbolInformation`. Clients supporting tags /// have to handle unknown tags gracefully. /// @since 3.16.0 final WorkspaceSymbolClientCapabilitiesTagSupport? tagSupport; Map toJson() { var __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (symbolKind != null) { __result['symbolKind'] = symbolKind?.toJson(); } if (tagSupport != null) { __result['tagSupport'] = tagSupport?.toJson(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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('symbolKind'); try { final symbolKind = obj['symbolKind']; if (symbolKind != null && !(WorkspaceSymbolClientCapabilitiesSymbolKind.canParse( symbolKind, reporter))) { reporter.reportError( 'must be of type WorkspaceSymbolClientCapabilitiesSymbolKind'); return false; } } finally { reporter.pop(); } reporter.push('tagSupport'); try { final tagSupport = obj['tagSupport']; if (tagSupport != null && !(WorkspaceSymbolClientCapabilitiesTagSupport.canParse( tagSupport, reporter))) { reporter.reportError( 'must be of type WorkspaceSymbolClientCapabilitiesTagSupport'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceSymbolClientCapabilities'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceSymbolClientCapabilities && other.runtimeType == WorkspaceSymbolClientCapabilities) { return dynamicRegistration == other.dynamicRegistration && symbolKind == other.symbolKind && tagSupport == other.tagSupport && true; } return false; } @override int get hashCode => Object.hash(dynamicRegistration, symbolKind, tagSupport); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceSymbolClientCapabilitiesSymbolKind implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceSymbolClientCapabilitiesSymbolKind.canParse, WorkspaceSymbolClientCapabilitiesSymbolKind.fromJson); WorkspaceSymbolClientCapabilitiesSymbolKind({this.valueSet}); static WorkspaceSymbolClientCapabilitiesSymbolKind fromJson( Map json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List?) ?.map((item) => SymbolKind.fromJson(item as int)) .toList(); return WorkspaceSymbolClientCapabilitiesSymbolKind(valueSet: valueSet); } /// The symbol 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. /// /// If this property is not present the client only supports the symbol kinds /// from `File` to `Array` as defined in the initial version of the protocol. final List? valueSet; Map toJson() { var __result = {}; if (valueSet != null) { __result['valueSet'] = valueSet?.map((item) => item.toJson()).toList(); } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('valueSet'); try { final valueSet = obj['valueSet']; if (valueSet != null && !((valueSet is List && (valueSet .every((item) => SymbolKind.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type WorkspaceSymbolClientCapabilitiesSymbolKind'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceSymbolClientCapabilitiesSymbolKind && other.runtimeType == WorkspaceSymbolClientCapabilitiesSymbolKind) { return listEqual(valueSet, other.valueSet, (SymbolKind a, SymbolKind b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(valueSet); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceSymbolClientCapabilitiesTagSupport implements ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceSymbolClientCapabilitiesTagSupport.canParse, WorkspaceSymbolClientCapabilitiesTagSupport.fromJson); WorkspaceSymbolClientCapabilitiesTagSupport({required this.valueSet}); static WorkspaceSymbolClientCapabilitiesTagSupport fromJson( Map json) { final valueSetJson = json['valueSet']; final valueSet = (valueSetJson as List) .map((item) => SymbolTag.fromJson(item as int)) .toList(); return WorkspaceSymbolClientCapabilitiesTagSupport(valueSet: valueSet); } /// The tags supported by the client. final List valueSet; Map toJson() { var __result = {}; __result['valueSet'] = valueSet.map((item) => item.toJson()).toList(); return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { 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 && (valueSet.every((item) => SymbolTag.canParse(item, reporter)))))) { reporter.reportError('must be of type List'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( 'must be of type WorkspaceSymbolClientCapabilitiesTagSupport'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceSymbolClientCapabilitiesTagSupport && other.runtimeType == WorkspaceSymbolClientCapabilitiesTagSupport) { return listEqual( valueSet, other.valueSet, (SymbolTag a, SymbolTag b) => a == b) && true; } return false; } @override int get hashCode => lspHashCode(valueSet); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceSymbolOptions implements WorkDoneProgressOptions, ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceSymbolOptions.canParse, WorkspaceSymbolOptions.fromJson); WorkspaceSymbolOptions({this.workDoneProgress}); static WorkspaceSymbolOptions fromJson(Map json) { if (WorkspaceSymbolRegistrationOptions.canParse( json, nullLspJsonReporter)) { return WorkspaceSymbolRegistrationOptions.fromJson(json); } final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return WorkspaceSymbolOptions(workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceSymbolOptions'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceSymbolOptions && other.runtimeType == WorkspaceSymbolOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); } /// The parameters of a Workspace Symbol Request. class WorkspaceSymbolParams implements WorkDoneProgressParams, PartialResultParams, ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceSymbolParams.canParse, WorkspaceSymbolParams.fromJson); WorkspaceSymbolParams( {required this.query, this.workDoneToken, this.partialResultToken}); static WorkspaceSymbolParams fromJson(Map json) { final queryJson = json['query']; final query = queryJson as String; final workDoneTokenJson = json['workDoneToken']; final workDoneToken = workDoneTokenJson == null ? null : (workDoneTokenJson is int ? Either2.t1(workDoneTokenJson) : (workDoneTokenJson is String ? Either2.t2(workDoneTokenJson) : (throw '''$workDoneTokenJson was not one of (int, String)'''))); final partialResultTokenJson = json['partialResultToken']; final partialResultToken = partialResultTokenJson == null ? null : (partialResultTokenJson is int ? Either2.t1(partialResultTokenJson) : (partialResultTokenJson is String ? Either2.t2(partialResultTokenJson) : (throw '''$partialResultTokenJson was not one of (int, String)'''))); return WorkspaceSymbolParams( query: query, workDoneToken: workDoneToken, partialResultToken: partialResultToken); } /// An optional token that a server can use to report partial results (e.g. /// streaming) to the client. final Either2? partialResultToken; /// A query string to filter symbols by. Clients may send an empty string here /// to request all symbols. final String query; /// An optional token that a server can use to report work done progress. final Either2? workDoneToken; Map toJson() { var __result = {}; __result['query'] = query; if (workDoneToken != null) { __result['workDoneToken'] = workDoneToken; } if (partialResultToken != null) { __result['partialResultToken'] = partialResultToken; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('query'); try { if (!obj.containsKey('query')) { reporter.reportError('must not be undefined'); return false; } final query = obj['query']; if (query == null) { reporter.reportError('must not be null'); return false; } if (!(query is String)) { reporter.reportError('must be of type String'); return false; } } 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'); return false; } } finally { reporter.pop(); } reporter.push('partialResultToken'); try { final partialResultToken = obj['partialResultToken']; if (partialResultToken != null && !((partialResultToken is int || partialResultToken is String))) { reporter.reportError('must be of type Either2'); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError('must be of type WorkspaceSymbolParams'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceSymbolParams && other.runtimeType == WorkspaceSymbolParams) { return query == other.query && workDoneToken == other.workDoneToken && partialResultToken == other.partialResultToken && true; } return false; } @override int get hashCode => Object.hash(query, workDoneToken, partialResultToken); @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceSymbolRegistrationOptions implements WorkspaceSymbolOptions, ToJsonable { static const jsonHandler = LspJsonHandler( WorkspaceSymbolRegistrationOptions.canParse, WorkspaceSymbolRegistrationOptions.fromJson); WorkspaceSymbolRegistrationOptions({this.workDoneProgress}); static WorkspaceSymbolRegistrationOptions fromJson( Map json) { final workDoneProgressJson = json['workDoneProgress']; final workDoneProgress = workDoneProgressJson as bool?; return WorkspaceSymbolRegistrationOptions( workDoneProgress: workDoneProgress); } final bool? workDoneProgress; Map toJson() { var __result = {}; if (workDoneProgress != null) { __result['workDoneProgress'] = workDoneProgress; } return __result; } static bool canParse(Object? obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workDoneProgress'); try { final workDoneProgress = obj['workDoneProgress']; if (workDoneProgress != null && !(workDoneProgress is bool)) { reporter.reportError('must be of type bool'); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError('must be of type WorkspaceSymbolRegistrationOptions'); return false; } } @override bool operator ==(Object other) { if (other is WorkspaceSymbolRegistrationOptions && other.runtimeType == WorkspaceSymbolRegistrationOptions) { return workDoneProgress == other.workDoneProgress && true; } return false; } @override int get hashCode => workDoneProgress.hashCode; @override String toString() => jsonEncoder.convert(toJson()); }