// 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: deprecated_member_use // ignore_for_file: deprecated_member_use_from_same_package // ignore_for_file: unnecessary_brace_in_string_interps // ignore_for_file: unused_import // ignore_for_file: unused_shown_name 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' show listEqual, mapEqual; import 'package:analyzer/src/generated/utilities_general.dart'; const jsonEncoder = const JsonEncoder.withIndent(' '); class ApplyWorkspaceEditParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( ApplyWorkspaceEditParams.canParse, ApplyWorkspaceEditParams.fromJson); ApplyWorkspaceEditParams(this.label, this.edit) { if (edit == null) { throw 'edit is required but was not provided'; } } static ApplyWorkspaceEditParams fromJson(Map json) { final label = json['label']; final edit = json['edit'] != null ? WorkspaceEdit.fromJson(json['edit']) : null; return new ApplyWorkspaceEditParams(label, 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() { Map __result = {}; if (label != null) { __result['label'] = label; } __result['edit'] = edit ?? (throw 'edit is required but was not set'); return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('label'); try { if (obj['label'] != null && !(obj['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; } if (obj['edit'] == null) { reporter.reportError("must not be null"); return false; } if (!(WorkspaceEdit.canParse(obj['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 ==(other) { if (other is ApplyWorkspaceEditParams) { return label == other.label && edit == other.edit && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, label.hashCode); hash = JenkinsSmiHash.combine(hash, edit.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ApplyWorkspaceEditResponse implements ToJsonable { static const jsonHandler = const LspJsonHandler( ApplyWorkspaceEditResponse.canParse, ApplyWorkspaceEditResponse.fromJson); ApplyWorkspaceEditResponse(this.applied, this.failureReason) { if (applied == null) { throw 'applied is required but was not provided'; } } static ApplyWorkspaceEditResponse fromJson(Map json) { final applied = json['applied']; final failureReason = json['failureReason']; return new ApplyWorkspaceEditResponse(applied, failureReason); } /// Indicates whether the edit was applied or not. final bool applied; /// An optional textual description for why the edit was not applied. This may /// be used 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() { Map __result = {}; __result['applied'] = applied ?? (throw 'applied is required but was not set'); if (failureReason != null) { __result['failureReason'] = failureReason; } 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; } if (obj['applied'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['applied'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('failureReason'); try { if (obj['failureReason'] != null && !(obj['failureReason'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ApplyWorkspaceEditResponse"); return false; } } @override bool operator ==(other) { if (other is ApplyWorkspaceEditResponse) { return applied == other.applied && failureReason == other.failureReason && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, applied.hashCode); hash = JenkinsSmiHash.combine(hash, failureReason.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CancelParams implements ToJsonable { static const jsonHandler = const LspJsonHandler(CancelParams.canParse, CancelParams.fromJson); CancelParams(this.id) { if (id == null) { throw 'id is required but was not provided'; } } static CancelParams fromJson(Map json) { final id = json['id'] is num ? new Either2.t1(json['id']) : (json['id'] is String ? new Either2.t2(json['id']) : (throw '''${json['id']} was not one of (num, String)''')); return new CancelParams(id); } /// The request id to cancel. final Either2 id; Map toJson() { Map __result = {}; __result['id'] = id ?? (throw 'id is required but was not set'); 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; } if (obj['id'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['id'] is num || obj['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 ==(other) { if (other is CancelParams) { return id == other.id && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, id.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ClientCapabilities implements ToJsonable { static const jsonHandler = const LspJsonHandler( ClientCapabilities.canParse, ClientCapabilities.fromJson); ClientCapabilities(this.workspace, this.textDocument, this.experimental); static ClientCapabilities fromJson(Map json) { final workspace = json['workspace'] != null ? WorkspaceClientCapabilities.fromJson(json['workspace']) : null; final textDocument = json['textDocument'] != null ? TextDocumentClientCapabilities.fromJson(json['textDocument']) : null; final experimental = json['experimental']; return new ClientCapabilities(workspace, textDocument, experimental); } /// Experimental client capabilities. final dynamic experimental; /// Text document specific client capabilities. final TextDocumentClientCapabilities textDocument; /// Workspace specific client capabilities. final WorkspaceClientCapabilities workspace; Map toJson() { Map __result = {}; if (workspace != null) { __result['workspace'] = workspace; } if (textDocument != null) { __result['textDocument'] = textDocument; } if (experimental != null) { __result['experimental'] = experimental; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workspace'); try { if (obj['workspace'] != null && !(WorkspaceClientCapabilities.canParse( obj['workspace'], reporter))) { reporter.reportError("must be of type WorkspaceClientCapabilities"); return false; } } finally { reporter.pop(); } reporter.push('textDocument'); try { if (obj['textDocument'] != null && !(TextDocumentClientCapabilities.canParse( obj['textDocument'], reporter))) { reporter .reportError("must be of type TextDocumentClientCapabilities"); return false; } } finally { reporter.pop(); } reporter.push('experimental'); try { if (obj['experimental'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ClientCapabilities"); return false; } } @override bool operator ==(other) { if (other is ClientCapabilities) { return workspace == other.workspace && textDocument == other.textDocument && experimental == other.experimental && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, workspace.hashCode); hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, experimental.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler(CodeAction.canParse, CodeAction.fromJson); CodeAction(this.title, this.kind, this.diagnostics, this.edit, this.command) { if (title == null) { throw 'title is required but was not provided'; } } static CodeAction fromJson(Map json) { final title = json['title']; final kind = json['kind'] != null ? CodeActionKind.fromJson(json['kind']) : null; final diagnostics = json['diagnostics'] ?.map((item) => item != null ? Diagnostic.fromJson(item) : null) ?.cast() ?.toList(); final edit = json['edit'] != null ? WorkspaceEdit.fromJson(json['edit']) : null; final command = json['command'] != null ? Command.fromJson(json['command']) : null; return new CodeAction(title, kind, diagnostics, edit, command); } /// 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; /// The diagnostics that this code action resolves. final List diagnostics; /// The workspace edit this code action performs. final WorkspaceEdit edit; /// 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() { Map __result = {}; __result['title'] = title ?? (throw 'title is required but was not set'); if (kind != null) { __result['kind'] = kind; } if (diagnostics != null) { __result['diagnostics'] = diagnostics; } if (edit != null) { __result['edit'] = edit; } if (command != null) { __result['command'] = command; } 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; } if (obj['title'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['title'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (obj['kind'] != null && !(CodeActionKind.canParse(obj['kind'], reporter))) { reporter.reportError("must be of type CodeActionKind"); return false; } } finally { reporter.pop(); } reporter.push('diagnostics'); try { if (obj['diagnostics'] != null && !((obj['diagnostics'] is List && (obj['diagnostics'] .every((item) => Diagnostic.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('edit'); try { if (obj['edit'] != null && !(WorkspaceEdit.canParse(obj['edit'], reporter))) { reporter.reportError("must be of type WorkspaceEdit"); return false; } } finally { reporter.pop(); } reporter.push('command'); try { if (obj['command'] != null && !(Command.canParse(obj['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 ==(other) { if (other is CodeAction) { return title == other.title && kind == other.kind && listEqual(diagnostics, other.diagnostics, (Diagnostic a, Diagnostic b) => a == b) && edit == other.edit && command == other.command && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, title.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, diagnostics.hashCode); hash = JenkinsSmiHash.combine(hash, edit.hashCode); hash = JenkinsSmiHash.combine(hash, command.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler( CodeActionContext.canParse, CodeActionContext.fromJson); CodeActionContext(this.diagnostics, this.only) { if (diagnostics == null) { throw 'diagnostics is required but was not provided'; } } static CodeActionContext fromJson(Map json) { final diagnostics = json['diagnostics'] ?.map((item) => item != null ? Diagnostic.fromJson(item) : null) ?.cast() ?.toList(); final only = json['only'] ?.map((item) => item != null ? CodeActionKind.fromJson(item) : null) ?.cast() ?.toList(); return new CodeActionContext(diagnostics, only); } /// An array of diagnostics. 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() { Map __result = {}; __result['diagnostics'] = diagnostics ?? (throw 'diagnostics is required but was not set'); if (only != null) { __result['only'] = only; } 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; } if (obj['diagnostics'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['diagnostics'] is List && (obj['diagnostics'] .every((item) => Diagnostic.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('only'); try { if (obj['only'] != null && !((obj['only'] is List && (obj['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 ==(other) { if (other is 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, diagnostics.hashCode); hash = JenkinsSmiHash.combine(hash, only.hashCode); return JenkinsSmiHash.finish(hash); } @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; } /// Base kind for quickfix actions: 'quickfix' static const QuickFix = const CodeActionKind('quickfix'); /// Base kind for refactoring actions: 'refactor' static const Refactor = const 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 = const CodeActionKind('refactor.extract'); /// Base kind for refactoring inline actions: 'refactor.inline' /// /// Example inline actions: /// /// - Inline function /// - Inline variable /// - Inline constant /// - ... static const RefactorInline = const 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 = const CodeActionKind('refactor.rewrite'); /// Base kind for source actions: `source` /// /// Source code actions apply to the entire file. static const Source = const CodeActionKind('source'); /// Base kind for an organize imports source action: `source.organizeImports` static const SourceOrganizeImports = const CodeActionKind('source.organizeImports'); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is CodeActionKind && o._value == _value; } /// Code Action options. class CodeActionOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( CodeActionOptions.canParse, CodeActionOptions.fromJson); CodeActionOptions(this.codeActionKinds); static CodeActionOptions fromJson(Map json) { if (CodeActionRegistrationOptions.canParse(json, nullLspJsonReporter)) { return CodeActionRegistrationOptions.fromJson(json); } final codeActionKinds = json['codeActionKinds'] ?.map((item) => item != null ? CodeActionKind.fromJson(item) : null) ?.cast() ?.toList(); return new CodeActionOptions(codeActionKinds); } /// 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; Map toJson() { Map __result = {}; if (codeActionKinds != null) { __result['codeActionKinds'] = codeActionKinds; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('codeActionKinds'); try { if (obj['codeActionKinds'] != null && !((obj['codeActionKinds'] is List && (obj['codeActionKinds'].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 CodeActionOptions"); return false; } } @override bool operator ==(other) { if (other is CodeActionOptions) { return listEqual(codeActionKinds, other.codeActionKinds, (CodeActionKind a, CodeActionKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, codeActionKinds.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Params for the CodeActionRequest class CodeActionParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( CodeActionParams.canParse, CodeActionParams.fromJson); CodeActionParams(this.textDocument, this.range, this.context) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (range == null) { throw 'range is required but was not provided'; } if (context == null) { throw 'context is required but was not provided'; } } static CodeActionParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final range = json['range'] != null ? Range.fromJson(json['range']) : null; final context = json['context'] != null ? CodeActionContext.fromJson(json['context']) : null; return new CodeActionParams(textDocument, range, context); } /// Context carrying additional information. final CodeActionContext context; /// The range for which the command was invoked. final Range range; /// The document in which the command was invoked. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['range'] = range ?? (throw 'range is required but was not set'); __result['context'] = context ?? (throw 'context is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['context'] == null) { reporter.reportError("must not be null"); return false; } if (!(CodeActionContext.canParse(obj['context'], reporter))) { reporter.reportError("must be of type CodeActionContext"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type CodeActionParams"); return false; } } @override bool operator ==(other) { if (other is CodeActionParams) { return textDocument == other.textDocument && range == other.range && context == other.context && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, context.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CodeActionRegistrationOptions implements TextDocumentRegistrationOptions, CodeActionOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( CodeActionRegistrationOptions.canParse, CodeActionRegistrationOptions.fromJson); CodeActionRegistrationOptions(this.documentSelector, this.codeActionKinds); static CodeActionRegistrationOptions fromJson(Map json) { final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); final codeActionKinds = json['codeActionKinds'] ?.map((item) => item != null ? CodeActionKind.fromJson(item) : null) ?.cast() ?.toList(); return new CodeActionRegistrationOptions(documentSelector, codeActionKinds); } /// 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; Map toJson() { Map __result = {}; __result['documentSelector'] = documentSelector; if (codeActionKinds != null) { __result['codeActionKinds'] = codeActionKinds; } 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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['documentSelector'].every( (item) => DocumentFilter.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('codeActionKinds'); try { if (obj['codeActionKinds'] != null && !((obj['codeActionKinds'] is List && (obj['codeActionKinds'].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 CodeActionRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is CodeActionRegistrationOptions) { return documentSelector == other.documentSelector && listEqual(codeActionKinds, other.codeActionKinds, (CodeActionKind a, CodeActionKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); hash = JenkinsSmiHash.combine(hash, codeActionKinds.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler(CodeLens.canParse, CodeLens.fromJson); CodeLens(this.range, this.command, this.data) { if (range == null) { throw 'range is required but was not provided'; } } static CodeLens fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final command = json['command'] != null ? Command.fromJson(json['command']) : null; final data = json['data']; return new CodeLens(range, command, 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 dynamic data; /// The range in which this code lens is valid. Should only span a single /// line. final Range range; Map toJson() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); if (command != null) { __result['command'] = command; } 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['range'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } reporter.push('command'); try { if (obj['command'] != null && !(Command.canParse(obj['command'], reporter))) { reporter.reportError("must be of type Command"); return false; } } finally { reporter.pop(); } reporter.push('data'); try { if (obj['data'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type CodeLens"); return false; } } @override bool operator ==(other) { if (other is CodeLens) { return range == other.range && command == other.command && data == other.data && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, command.hashCode); hash = JenkinsSmiHash.combine(hash, data.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Code Lens options. class CodeLensOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler(CodeLensOptions.canParse, CodeLensOptions.fromJson); CodeLensOptions(this.resolveProvider); static CodeLensOptions fromJson(Map json) { final resolveProvider = json['resolveProvider']; return new CodeLensOptions(resolveProvider); } /// Code lens has a resolve provider as well. final bool resolveProvider; Map toJson() { Map __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { if (obj['resolveProvider'] != null && !(obj['resolveProvider'] 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 ==(other) { if (other is CodeLensOptions) { return resolveProvider == other.resolveProvider && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, resolveProvider.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensParams implements ToJsonable { static const jsonHandler = const LspJsonHandler(CodeLensParams.canParse, CodeLensParams.fromJson); CodeLensParams(this.textDocument) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static CodeLensParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; return new CodeLensParams(textDocument); } /// The document to request code lens for. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['textDocument'], reporter))) { reporter.reportError("must be of type TextDocumentIdentifier"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type CodeLensParams"); return false; } } @override bool operator ==(other) { if (other is CodeLensParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CodeLensRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( CodeLensRegistrationOptions.canParse, CodeLensRegistrationOptions.fromJson); CodeLensRegistrationOptions(this.resolveProvider, this.documentSelector); static CodeLensRegistrationOptions fromJson(Map json) { final resolveProvider = json['resolveProvider']; final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new CodeLensRegistrationOptions(resolveProvider, 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; /// Code lens has a resolve provider as well. final bool resolveProvider; Map toJson() { Map __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { if (obj['resolveProvider'] != null && !(obj['resolveProvider'] 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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 CodeLensRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is CodeLensRegistrationOptions) { return resolveProvider == other.resolveProvider && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, resolveProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Represents a color in RGBA space. class Color implements ToJsonable { static const jsonHandler = const LspJsonHandler(Color.canParse, Color.fromJson); Color(this.red, this.green, this.blue, this.alpha) { if (red == null) { throw 'red is required but was not provided'; } if (green == null) { throw 'green is required but was not provided'; } if (blue == null) { throw 'blue is required but was not provided'; } if (alpha == null) { throw 'alpha is required but was not provided'; } } static Color fromJson(Map json) { final red = json['red']; final green = json['green']; final blue = json['blue']; final alpha = json['alpha']; return new Color(red, green, blue, 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() { Map __result = {}; __result['red'] = red ?? (throw 'red is required but was not set'); __result['green'] = green ?? (throw 'green is required but was not set'); __result['blue'] = blue ?? (throw 'blue is required but was not set'); __result['alpha'] = alpha ?? (throw 'alpha is required but was not set'); 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; } if (obj['red'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['green'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['blue'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['alpha'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is Color) { return red == other.red && green == other.green && blue == other.blue && alpha == other.alpha && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, red.hashCode); hash = JenkinsSmiHash.combine(hash, green.hashCode); hash = JenkinsSmiHash.combine(hash, blue.hashCode); hash = JenkinsSmiHash.combine(hash, alpha.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ColorInformation implements ToJsonable { static const jsonHandler = const LspJsonHandler( ColorInformation.canParse, ColorInformation.fromJson); ColorInformation(this.range, this.color) { if (range == null) { throw 'range is required but was not provided'; } if (color == null) { throw 'color is required but was not provided'; } } static ColorInformation fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final color = json['color'] != null ? Color.fromJson(json['color']) : null; return new ColorInformation(range, 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() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); __result['color'] = color ?? (throw 'color is required but was not set'); 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['color'] == null) { reporter.reportError("must not be null"); return false; } if (!(Color.canParse(obj['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 ==(other) { if (other is ColorInformation) { return range == other.range && color == other.color && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, color.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ColorPresentation implements ToJsonable { static const jsonHandler = const LspJsonHandler( ColorPresentation.canParse, ColorPresentation.fromJson); ColorPresentation(this.label, this.textEdit, this.additionalTextEdits) { if (label == null) { throw 'label is required but was not provided'; } } static ColorPresentation fromJson(Map json) { final label = json['label']; final textEdit = json['textEdit'] != null ? TextEdit.fromJson(json['textEdit']) : null; final additionalTextEdits = json['additionalTextEdits'] ?.map((item) => item != null ? TextEdit.fromJson(item) : null) ?.cast() ?.toList(); return new ColorPresentation(label, textEdit, 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() { Map __result = {}; __result['label'] = label ?? (throw 'label is required but was not set'); if (textEdit != null) { __result['textEdit'] = textEdit; } if (additionalTextEdits != null) { __result['additionalTextEdits'] = additionalTextEdits; } 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; } if (obj['label'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['label'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('textEdit'); try { if (obj['textEdit'] != null && !(TextEdit.canParse(obj['textEdit'], reporter))) { reporter.reportError("must be of type TextEdit"); return false; } } finally { reporter.pop(); } reporter.push('additionalTextEdits'); try { if (obj['additionalTextEdits'] != null && !((obj['additionalTextEdits'] is List && (obj['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 ==(other) { if (other is 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, label.hashCode); hash = JenkinsSmiHash.combine(hash, textEdit.hashCode); hash = JenkinsSmiHash.combine(hash, additionalTextEdits.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ColorPresentationParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( ColorPresentationParams.canParse, ColorPresentationParams.fromJson); ColorPresentationParams(this.textDocument, this.color, this.range) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (color == null) { throw 'color is required but was not provided'; } if (range == null) { throw 'range is required but was not provided'; } } static ColorPresentationParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final color = json['color'] != null ? Color.fromJson(json['color']) : null; final range = json['range'] != null ? Range.fromJson(json['range']) : null; return new ColorPresentationParams(textDocument, color, range); } /// The color information to request presentations for. final Color color; /// The range where the color would be inserted. Serves as a context. final Range range; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['color'] = color ?? (throw 'color is required but was not set'); __result['range'] = range ?? (throw 'range is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['color'] == null) { reporter.reportError("must not be null"); return false; } if (!(Color.canParse(obj['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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['range'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ColorPresentationParams"); return false; } } @override bool operator ==(other) { if (other is ColorPresentationParams) { return textDocument == other.textDocument && color == other.color && range == other.range && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, color.hashCode); hash = JenkinsSmiHash.combine(hash, range.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Color provider options. class ColorProviderOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( ColorProviderOptions.canParse, ColorProviderOptions.fromJson); static ColorProviderOptions fromJson(Map json) { return new ColorProviderOptions(); } Map toJson() { Map __result = {}; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { return true; } else { reporter.reportError("must be of type ColorProviderOptions"); return false; } } @override bool operator ==(other) { if (other is ColorProviderOptions) { return true; } return false; } @override int get hashCode { int hash = 0; return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class Command implements ToJsonable { static const jsonHandler = const LspJsonHandler(Command.canParse, Command.fromJson); Command(this.title, this.command, this.arguments) { if (title == null) { throw 'title is required but was not provided'; } if (command == null) { throw 'command is required but was not provided'; } } static Command fromJson(Map json) { final title = json['title']; final command = json['command']; final arguments = json['arguments']?.map((item) => item)?.cast()?.toList(); return new Command(title, command, 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() { Map __result = {}; __result['title'] = title ?? (throw 'title is required but was not set'); __result['command'] = command ?? (throw 'command is required but was not set'); 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; } if (obj['title'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['command'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['command'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('arguments'); try { if (obj['arguments'] != null && !((obj['arguments'] is List && (obj['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 ==(other) { if (other is Command) { return title == other.title && command == other.command && listEqual( arguments, other.arguments, (dynamic a, dynamic b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, title.hashCode); hash = JenkinsSmiHash.combine(hash, command.hashCode); hash = JenkinsSmiHash.combine(hash, arguments.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler( CompletionContext.canParse, CompletionContext.fromJson); CompletionContext(this.triggerKind, this.triggerCharacter) { if (triggerKind == null) { throw 'triggerKind is required but was not provided'; } } static CompletionContext fromJson(Map json) { final triggerKind = json['triggerKind'] != null ? CompletionTriggerKind.fromJson(json['triggerKind']) : null; final triggerCharacter = json['triggerCharacter']; return new CompletionContext(triggerKind, 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() { Map __result = {}; __result['triggerKind'] = triggerKind ?? (throw 'triggerKind is required but was not set'); 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; } if (obj['triggerKind'] == null) { reporter.reportError("must not be null"); return false; } if (!(CompletionTriggerKind.canParse(obj['triggerKind'], reporter))) { reporter.reportError("must be of type CompletionTriggerKind"); return false; } } finally { reporter.pop(); } reporter.push('triggerCharacter'); try { if (obj['triggerCharacter'] != null && !(obj['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 ==(other) { if (other is CompletionContext) { return triggerKind == other.triggerKind && triggerCharacter == other.triggerCharacter && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, triggerKind.hashCode); hash = JenkinsSmiHash.combine(hash, triggerCharacter.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CompletionItem implements ToJsonable { static const jsonHandler = const LspJsonHandler(CompletionItem.canParse, CompletionItem.fromJson); CompletionItem( this.label, this.kind, this.detail, this.documentation, this.deprecated, this.preselect, this.sortText, this.filterText, this.insertText, this.insertTextFormat, this.textEdit, this.additionalTextEdits, this.commitCharacters, this.command, this.data) { if (label == null) { throw 'label is required but was not provided'; } } static CompletionItem fromJson(Map json) { final label = json['label']; final kind = json['kind'] != null ? CompletionItemKind.fromJson(json['kind']) : null; final detail = json['detail']; final documentation = json['documentation'] is String ? new Either2.t1(json['documentation']) : (MarkupContent.canParse(json['documentation'], nullLspJsonReporter) ? new Either2.t2( json['documentation'] != null ? MarkupContent.fromJson(json['documentation']) : null) : (json['documentation'] == null ? null : (throw '''${json['documentation']} was not one of (String, MarkupContent)'''))); final deprecated = json['deprecated']; final preselect = json['preselect']; final sortText = json['sortText']; final filterText = json['filterText']; final insertText = json['insertText']; final insertTextFormat = json['insertTextFormat'] != null ? InsertTextFormat.fromJson(json['insertTextFormat']) : null; final textEdit = json['textEdit'] != null ? TextEdit.fromJson(json['textEdit']) : null; final additionalTextEdits = json['additionalTextEdits'] ?.map((item) => item != null ? TextEdit.fromJson(item) : null) ?.cast() ?.toList(); final commitCharacters = json['commitCharacters']?.map((item) => item)?.cast()?.toList(); final command = json['command'] != null ? Command.fromJson(json['command']) : null; final data = json['data'] != null ? CompletionItemResolutionInfo.fromJson(json['data']) : null; return new CompletionItem( label, kind, detail, documentation, deprecated, preselect, sortText, filterText, insertText, insertTextFormat, textEdit, additionalTextEdits, commitCharacters, command, 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. 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. /// @deprecated Use textEdit instead. @core.deprecated 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`. final InsertTextFormat insertTextFormat; /// 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; /// 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. final TextEdit textEdit; Map toJson() { Map __result = {}; __result['label'] = label ?? (throw 'label is required but was not set'); if (kind != null) { __result['kind'] = kind; } 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; } if (textEdit != null) { __result['textEdit'] = textEdit; } if (additionalTextEdits != null) { __result['additionalTextEdits'] = additionalTextEdits; } if (commitCharacters != null) { __result['commitCharacters'] = commitCharacters; } if (command != null) { __result['command'] = command; } if (data != null) { __result['data'] = data; } 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; } if (obj['label'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['label'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (obj['kind'] != null && !(CompletionItemKind.canParse(obj['kind'], reporter))) { reporter.reportError("must be of type CompletionItemKind"); return false; } } finally { reporter.pop(); } reporter.push('detail'); try { if (obj['detail'] != null && !(obj['detail'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('documentation'); try { if (obj['documentation'] != null && !((obj['documentation'] is String || MarkupContent.canParse(obj['documentation'], reporter)))) { reporter .reportError("must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('deprecated'); try { if (obj['deprecated'] != null && !(obj['deprecated'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('preselect'); try { if (obj['preselect'] != null && !(obj['preselect'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('sortText'); try { if (obj['sortText'] != null && !(obj['sortText'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('filterText'); try { if (obj['filterText'] != null && !(obj['filterText'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('insertText'); try { if (obj['insertText'] != null && !(obj['insertText'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('insertTextFormat'); try { if (obj['insertTextFormat'] != null && !(InsertTextFormat.canParse(obj['insertTextFormat'], reporter))) { reporter.reportError("must be of type InsertTextFormat"); return false; } } finally { reporter.pop(); } reporter.push('textEdit'); try { if (obj['textEdit'] != null && !(TextEdit.canParse(obj['textEdit'], reporter))) { reporter.reportError("must be of type TextEdit"); return false; } } finally { reporter.pop(); } reporter.push('additionalTextEdits'); try { if (obj['additionalTextEdits'] != null && !((obj['additionalTextEdits'] is List && (obj['additionalTextEdits'] .every((item) => TextEdit.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('commitCharacters'); try { if (obj['commitCharacters'] != null && !((obj['commitCharacters'] is List && (obj['commitCharacters'].every((item) => item is String))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('command'); try { if (obj['command'] != null && !(Command.canParse(obj['command'], reporter))) { reporter.reportError("must be of type Command"); return false; } } finally { reporter.pop(); } reporter.push('data'); try { if (obj['data'] != null && !(CompletionItemResolutionInfo.canParse(obj['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 ==(other) { if (other is CompletionItem) { return label == other.label && kind == other.kind && detail == other.detail && documentation == other.documentation && deprecated == other.deprecated && preselect == other.preselect && sortText == other.sortText && filterText == other.filterText && insertText == other.insertText && insertTextFormat == other.insertTextFormat && 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, label.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, detail.hashCode); hash = JenkinsSmiHash.combine(hash, documentation.hashCode); hash = JenkinsSmiHash.combine(hash, deprecated.hashCode); hash = JenkinsSmiHash.combine(hash, preselect.hashCode); hash = JenkinsSmiHash.combine(hash, sortText.hashCode); hash = JenkinsSmiHash.combine(hash, filterText.hashCode); hash = JenkinsSmiHash.combine(hash, insertText.hashCode); hash = JenkinsSmiHash.combine(hash, insertTextFormat.hashCode); hash = JenkinsSmiHash.combine(hash, textEdit.hashCode); hash = JenkinsSmiHash.combine(hash, additionalTextEdits.hashCode); hash = JenkinsSmiHash.combine(hash, commitCharacters.hashCode); hash = JenkinsSmiHash.combine(hash, command.hashCode); hash = JenkinsSmiHash.combine(hash, data.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// The kind of a completion entry. class CompletionItemKind { const CompletionItemKind(this._value); const CompletionItemKind.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } static const Text = const CompletionItemKind(1); static const Method = const CompletionItemKind(2); static const Function = const CompletionItemKind(3); static const Constructor = const CompletionItemKind(4); static const Field = const CompletionItemKind(5); static const Variable = const CompletionItemKind(6); static const Class = const CompletionItemKind(7); static const Interface = const CompletionItemKind(8); static const Module = const CompletionItemKind(9); static const Property = const CompletionItemKind(10); static const Unit = const CompletionItemKind(11); static const Value = const CompletionItemKind(12); static const Enum = const CompletionItemKind(13); static const Keyword = const CompletionItemKind(14); static const Snippet = const CompletionItemKind(15); static const Color = const CompletionItemKind(16); static const File = const CompletionItemKind(17); static const Reference = const CompletionItemKind(18); static const Folder = const CompletionItemKind(19); static const EnumMember = const CompletionItemKind(20); static const Constant = const CompletionItemKind(21); static const Struct = const CompletionItemKind(22); static const Event = const CompletionItemKind(23); static const Operator = const CompletionItemKind(24); static const TypeParameter = const CompletionItemKind(25); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is CompletionItemKind && o._value == _value; } /// Represents a collection of completion items ([CompletionItem]) to be /// presented in the editor. class CompletionList implements ToJsonable { static const jsonHandler = const LspJsonHandler(CompletionList.canParse, CompletionList.fromJson); CompletionList(this.isIncomplete, this.items) { if (isIncomplete == null) { throw 'isIncomplete is required but was not provided'; } if (items == null) { throw 'items is required but was not provided'; } } static CompletionList fromJson(Map json) { final isIncomplete = json['isIncomplete']; final items = json['items'] ?.map((item) => item != null ? CompletionItem.fromJson(item) : null) ?.cast() ?.toList(); return new CompletionList(isIncomplete, 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() { Map __result = {}; __result['isIncomplete'] = isIncomplete ?? (throw 'isIncomplete is required but was not set'); __result['items'] = items ?? (throw 'items is required but was not set'); 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; } if (obj['isIncomplete'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['items'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['items'] is List && (obj['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 ==(other) { if (other is CompletionList) { return isIncomplete == other.isIncomplete && listEqual(items, other.items, (CompletionItem a, CompletionItem b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, isIncomplete.hashCode); hash = JenkinsSmiHash.combine(hash, items.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Completion options. class CompletionOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( CompletionOptions.canParse, CompletionOptions.fromJson); CompletionOptions(this.resolveProvider, this.triggerCharacters); static CompletionOptions fromJson(Map json) { final resolveProvider = json['resolveProvider']; final triggerCharacters = json['triggerCharacters'] ?.map((item) => item) ?.cast() ?.toList(); return new CompletionOptions(resolveProvider, triggerCharacters); } /// The server provides support to resolve additional information for a /// completion item. final bool resolveProvider; /// The characters that trigger completion automatically. final List triggerCharacters; Map toJson() { Map __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { if (obj['resolveProvider'] != null && !(obj['resolveProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('triggerCharacters'); try { if (obj['triggerCharacters'] != null && !((obj['triggerCharacters'] is List && (obj['triggerCharacters'].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 CompletionOptions"); return false; } } @override bool operator ==(other) { if (other is CompletionOptions) { return resolveProvider == other.resolveProvider && listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, resolveProvider.hashCode); hash = JenkinsSmiHash.combine(hash, triggerCharacters.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CompletionParams implements TextDocumentPositionParams, ToJsonable { static const jsonHandler = const LspJsonHandler( CompletionParams.canParse, CompletionParams.fromJson); CompletionParams(this.context, this.textDocument, this.position) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (position == null) { throw 'position is required but was not provided'; } } static CompletionParams fromJson(Map json) { final context = json['context'] != null ? CompletionContext.fromJson(json['context']) : null; final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final position = json['position'] != null ? Position.fromJson(json['position']) : null; return new CompletionParams(context, textDocument, position); } /// The completion context. This is only available if the client specifies to /// send this using `ClientCapabilities.textDocument.completion.contextSupport /// === true` final CompletionContext context; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; if (context != null) { __result['context'] = context; } __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['position'] = position ?? (throw 'position is required but was not set'); return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('context'); try { if (obj['context'] != null && !(CompletionContext.canParse(obj['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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['position'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['position'], reporter))) { reporter.reportError("must be of type Position"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type CompletionParams"); return false; } } @override bool operator ==(other) { if (other is CompletionParams) { return context == other.context && textDocument == other.textDocument && position == other.position && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, context.hashCode); hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, position.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class CompletionRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( CompletionRegistrationOptions.canParse, CompletionRegistrationOptions.fromJson); CompletionRegistrationOptions(this.triggerCharacters, this.allCommitCharacters, this.resolveProvider, this.documentSelector); static CompletionRegistrationOptions fromJson(Map json) { final triggerCharacters = json['triggerCharacters'] ?.map((item) => item) ?.cast() ?.toList(); final allCommitCharacters = json['allCommitCharacters'] ?.map((item) => item) ?.cast() ?.toList(); final resolveProvider = json['resolveProvider']; final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new CompletionRegistrationOptions(triggerCharacters, allCommitCharacters, resolveProvider, documentSelector); } /// The list of all possible characters that commit a completion. This field /// can be used if clients don't support individual commmit characters per /// completion item. See /// `ClientCapabilities.textDocument.completion.completionItem.commitCharactersSupport` /// /// 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; Map toJson() { Map __result = {}; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } if (allCommitCharacters != null) { __result['allCommitCharacters'] = allCommitCharacters; } if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerCharacters'); try { if (obj['triggerCharacters'] != null && !((obj['triggerCharacters'] is List && (obj['triggerCharacters'].every((item) => item is String))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('allCommitCharacters'); try { if (obj['allCommitCharacters'] != null && !((obj['allCommitCharacters'] is List && (obj['allCommitCharacters'] .every((item) => item is String))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('resolveProvider'); try { if (obj['resolveProvider'] != null && !(obj['resolveProvider'] 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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 CompletionRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is CompletionRegistrationOptions) { return listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && listEqual(allCommitCharacters, other.allCommitCharacters, (String a, String b) => a == b) && resolveProvider == other.resolveProvider && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, triggerCharacters.hashCode); hash = JenkinsSmiHash.combine(hash, allCommitCharacters.hashCode); hash = JenkinsSmiHash.combine(hash, resolveProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// How a completion was triggered class CompletionTriggerKind { const CompletionTriggerKind._(this._value); const CompletionTriggerKind.fromJson(this._value); final num _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 = const CompletionTriggerKind._(1); /// Completion was triggered by a trigger character specified by the /// `triggerCharacters` properties of the `CompletionRegistrationOptions`. static const TriggerCharacter = const CompletionTriggerKind._(2); /// Completion was re-triggered as the current completion list is incomplete. static const TriggerForIncompleteCompletions = const CompletionTriggerKind._(3); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is CompletionTriggerKind && o._value == _value; } class ConfigurationItem implements ToJsonable { static const jsonHandler = const LspJsonHandler( ConfigurationItem.canParse, ConfigurationItem.fromJson); ConfigurationItem(this.scopeUri, this.section); static ConfigurationItem fromJson(Map json) { final scopeUri = json['scopeUri']; final section = json['section']; return new ConfigurationItem(scopeUri, section); } /// The scope to get the configuration section for. final String scopeUri; /// The configuration section asked for. final String section; Map toJson() { Map __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 { if (obj['scopeUri'] != null && !(obj['scopeUri'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('section'); try { if (obj['section'] != null && !(obj['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 ==(other) { if (other is ConfigurationItem) { return scopeUri == other.scopeUri && section == other.section && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, scopeUri.hashCode); hash = JenkinsSmiHash.combine(hash, section.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ConfigurationParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( ConfigurationParams.canParse, ConfigurationParams.fromJson); ConfigurationParams(this.items) { if (items == null) { throw 'items is required but was not provided'; } } static ConfigurationParams fromJson(Map json) { final items = json['items'] ?.map((item) => item != null ? ConfigurationItem.fromJson(item) : null) ?.cast() ?.toList(); return new ConfigurationParams(items); } final List items; Map toJson() { Map __result = {}; __result['items'] = items ?? (throw 'items is required but was not set'); 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; } if (obj['items'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['items'] is List && (obj['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 ==(other) { if (other is ConfigurationParams) { return listEqual(items, other.items, (ConfigurationItem a, ConfigurationItem b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, items.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Create file operation class CreateFile implements ToJsonable { static const jsonHandler = const LspJsonHandler(CreateFile.canParse, CreateFile.fromJson); CreateFile(this.kind, this.uri, this.options) { if (kind == null) { throw 'kind is required but was not provided'; } if (uri == null) { throw 'uri is required but was not provided'; } } static CreateFile fromJson(Map json) { final kind = json['kind']; final uri = json['uri']; final options = json['options'] != null ? CreateFileOptions.fromJson(json['options']) : null; return new CreateFile(kind, uri, options); } /// A create final String kind; /// Additional options final CreateFileOptions options; /// The resource to create. final String uri; Map toJson() { Map __result = {}; __result['kind'] = kind ?? (throw 'kind is required but was not set'); __result['uri'] = uri ?? (throw 'uri is required but was not set'); if (options != null) { __result['options'] = options; } 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; } if (obj['kind'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['kind'] 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['uri'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('options'); try { if (obj['options'] != null && !(CreateFileOptions.canParse(obj['options'], reporter))) { reporter.reportError("must be of type CreateFileOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type CreateFile"); return false; } } @override bool operator ==(other) { if (other is CreateFile) { return kind == other.kind && uri == other.uri && options == other.options && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, options.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Options to create a file. class CreateFileOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( CreateFileOptions.canParse, CreateFileOptions.fromJson); CreateFileOptions(this.overwrite, this.ignoreIfExists); static CreateFileOptions fromJson(Map json) { final overwrite = json['overwrite']; final ignoreIfExists = json['ignoreIfExists']; return new CreateFileOptions(overwrite, ignoreIfExists); } /// Ignore if exists. final bool ignoreIfExists; /// Overwrite existing file. Overwrite wins over `ignoreIfExists` final bool overwrite; Map toJson() { Map __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 { if (obj['overwrite'] != null && !(obj['overwrite'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('ignoreIfExists'); try { if (obj['ignoreIfExists'] != null && !(obj['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 ==(other) { if (other is CreateFileOptions) { return overwrite == other.overwrite && ignoreIfExists == other.ignoreIfExists && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, overwrite.hashCode); hash = JenkinsSmiHash.combine(hash, ignoreIfExists.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Delete file operation class DeleteFile implements ToJsonable { static const jsonHandler = const LspJsonHandler(DeleteFile.canParse, DeleteFile.fromJson); DeleteFile(this.kind, this.uri, this.options) { if (kind == null) { throw 'kind is required but was not provided'; } if (uri == null) { throw 'uri is required but was not provided'; } } static DeleteFile fromJson(Map json) { final kind = json['kind']; final uri = json['uri']; final options = json['options'] != null ? DeleteFileOptions.fromJson(json['options']) : null; return new DeleteFile(kind, uri, options); } /// A delete final String kind; /// Delete options. final DeleteFileOptions options; /// The file to delete. final String uri; Map toJson() { Map __result = {}; __result['kind'] = kind ?? (throw 'kind is required but was not set'); __result['uri'] = uri ?? (throw 'uri is required but was not set'); if (options != null) { __result['options'] = options; } 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; } if (obj['kind'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['kind'] 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['uri'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('options'); try { if (obj['options'] != null && !(DeleteFileOptions.canParse(obj['options'], reporter))) { reporter.reportError("must be of type DeleteFileOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DeleteFile"); return false; } } @override bool operator ==(other) { if (other is DeleteFile) { return kind == other.kind && uri == other.uri && options == other.options && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, options.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Delete file options class DeleteFileOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( DeleteFileOptions.canParse, DeleteFileOptions.fromJson); DeleteFileOptions(this.recursive, this.ignoreIfNotExists); static DeleteFileOptions fromJson(Map json) { final recursive = json['recursive']; final ignoreIfNotExists = json['ignoreIfNotExists']; return new DeleteFileOptions(recursive, 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() { Map __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 { if (obj['recursive'] != null && !(obj['recursive'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('ignoreIfNotExists'); try { if (obj['ignoreIfNotExists'] != null && !(obj['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 ==(other) { if (other is DeleteFileOptions) { return recursive == other.recursive && ignoreIfNotExists == other.ignoreIfNotExists && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, recursive.hashCode); hash = JenkinsSmiHash.combine(hash, ignoreIfNotExists.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class Diagnostic implements ToJsonable { static const jsonHandler = const LspJsonHandler(Diagnostic.canParse, Diagnostic.fromJson); Diagnostic(this.range, this.severity, this.code, this.source, this.message, this.relatedInformation) { if (range == null) { throw 'range is required but was not provided'; } if (message == null) { throw 'message is required but was not provided'; } } static Diagnostic fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final severity = json['severity'] != null ? DiagnosticSeverity.fromJson(json['severity']) : null; final code = json['code']; final source = json['source']; final message = json['message']; final relatedInformation = json['relatedInformation'] ?.map((item) => item != null ? DiagnosticRelatedInformation.fromJson(item) : null) ?.cast() ?.toList(); return new Diagnostic( range, severity, code, source, message, relatedInformation); } /// The diagnostic's code, which might appear in the user interface. final String code; /// 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; Map toJson() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); if (severity != null) { __result['severity'] = severity; } if (code != null) { __result['code'] = code; } if (source != null) { __result['source'] = source; } __result['message'] = message ?? (throw 'message is required but was not set'); if (relatedInformation != null) { __result['relatedInformation'] = relatedInformation; } 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['range'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } reporter.push('severity'); try { if (obj['severity'] != null && !(DiagnosticSeverity.canParse(obj['severity'], reporter))) { reporter.reportError("must be of type DiagnosticSeverity"); return false; } } finally { reporter.pop(); } reporter.push('code'); try { if (obj['code'] != null && !(obj['code'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('source'); try { if (obj['source'] != null && !(obj['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; } if (obj['message'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['message'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('relatedInformation'); try { if (obj['relatedInformation'] != null && !((obj['relatedInformation'] is List && (obj['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 ==(other) { if (other is Diagnostic) { return range == other.range && severity == other.severity && code == other.code && source == other.source && message == other.message && listEqual( relatedInformation, other.relatedInformation, (DiagnosticRelatedInformation a, DiagnosticRelatedInformation b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, severity.hashCode); hash = JenkinsSmiHash.combine(hash, code.hashCode); hash = JenkinsSmiHash.combine(hash, source.hashCode); hash = JenkinsSmiHash.combine(hash, message.hashCode); hash = JenkinsSmiHash.combine(hash, relatedInformation.hashCode); return JenkinsSmiHash.finish(hash); } @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 related to a /// diagnostics, e.g when duplicating a symbol in a scope. class DiagnosticRelatedInformation implements ToJsonable { static const jsonHandler = const LspJsonHandler( DiagnosticRelatedInformation.canParse, DiagnosticRelatedInformation.fromJson); DiagnosticRelatedInformation(this.location, this.message) { if (location == null) { throw 'location is required but was not provided'; } if (message == null) { throw 'message is required but was not provided'; } } static DiagnosticRelatedInformation fromJson(Map json) { final location = json['location'] != null ? Location.fromJson(json['location']) : null; final message = json['message']; return new DiagnosticRelatedInformation(location, message); } /// The location of this related diagnostic information. final Location location; /// The message of this related diagnostic information. final String message; Map toJson() { Map __result = {}; __result['location'] = location ?? (throw 'location is required but was not set'); __result['message'] = message ?? (throw 'message is required but was not set'); 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; } if (obj['location'] == null) { reporter.reportError("must not be null"); return false; } if (!(Location.canParse(obj['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; } if (obj['message'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is DiagnosticRelatedInformation) { return location == other.location && message == other.message && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, location.hashCode); hash = JenkinsSmiHash.combine(hash, message.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DiagnosticSeverity { const DiagnosticSeverity(this._value); const DiagnosticSeverity.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// Reports an error. static const Error = const DiagnosticSeverity(1); /// Reports a warning. static const Warning = const DiagnosticSeverity(2); /// Reports an information. static const Information = const DiagnosticSeverity(3); /// Reports a hint. static const Hint = const DiagnosticSeverity(4); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is DiagnosticSeverity && o._value == _value; } class DidChangeConfigurationParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidChangeConfigurationParams.canParse, DidChangeConfigurationParams.fromJson); DidChangeConfigurationParams(this.settings); static DidChangeConfigurationParams fromJson(Map json) { final settings = json['settings']; return new DidChangeConfigurationParams(settings); } /// The actual changed settings final dynamic settings; Map toJson() { Map __result = {}; __result['settings'] = settings; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('settings'); try { if (!obj.containsKey('settings')) { reporter.reportError("must not be undefined"); return false; } if (obj['settings'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DidChangeConfigurationParams"); return false; } } @override bool operator ==(other) { if (other is DidChangeConfigurationParams) { return settings == other.settings && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, settings.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeTextDocumentParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidChangeTextDocumentParams.canParse, DidChangeTextDocumentParams.fromJson); DidChangeTextDocumentParams(this.textDocument, this.contentChanges) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (contentChanges == null) { throw 'contentChanges is required but was not provided'; } } static DidChangeTextDocumentParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? VersionedTextDocumentIdentifier.fromJson(json['textDocument']) : null; final contentChanges = json['contentChanges'] ?.map((item) => item != null ? TextDocumentContentChangeEvent.fromJson(item) : null) ?.cast() ?.toList(); return new DidChangeTextDocumentParams(textDocument, contentChanges); } /// The actual content changes. The content changes describe single state /// changes to the document. So if there are two content changes c1 and c2 for /// a document in state S then c1 move the document to S' and c2 to S''. final List 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() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['contentChanges'] = contentChanges ?? (throw 'contentChanges is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(VersionedTextDocumentIdentifier.canParse( obj['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; } if (obj['contentChanges'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['contentChanges'] is List && (obj['contentChanges'].every((item) => TextDocumentContentChangeEvent.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 ==(other) { if (other is DidChangeTextDocumentParams) { return textDocument == other.textDocument && listEqual( contentChanges, other.contentChanges, (TextDocumentContentChangeEvent a, TextDocumentContentChangeEvent b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, contentChanges.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeWatchedFilesParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidChangeWatchedFilesParams.canParse, DidChangeWatchedFilesParams.fromJson); DidChangeWatchedFilesParams(this.changes) { if (changes == null) { throw 'changes is required but was not provided'; } } static DidChangeWatchedFilesParams fromJson(Map json) { final changes = json['changes'] ?.map((item) => item != null ? FileEvent.fromJson(item) : null) ?.cast() ?.toList(); return new DidChangeWatchedFilesParams(changes); } /// The actual file events. final List changes; Map toJson() { Map __result = {}; __result['changes'] = changes ?? (throw 'changes is required but was not set'); 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; } if (obj['changes'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['changes'] is List && (obj['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 ==(other) { if (other is DidChangeWatchedFilesParams) { return listEqual( changes, other.changes, (FileEvent a, FileEvent b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, changes.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler( DidChangeWatchedFilesRegistrationOptions.canParse, DidChangeWatchedFilesRegistrationOptions.fromJson); DidChangeWatchedFilesRegistrationOptions(this.watchers) { if (watchers == null) { throw 'watchers is required but was not provided'; } } static DidChangeWatchedFilesRegistrationOptions fromJson( Map json) { final watchers = json['watchers'] ?.map((item) => item != null ? FileSystemWatcher.fromJson(item) : null) ?.cast() ?.toList(); return new DidChangeWatchedFilesRegistrationOptions(watchers); } /// The watchers to register. final List watchers; Map toJson() { Map __result = {}; __result['watchers'] = watchers ?? (throw 'watchers is required but was not set'); 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; } if (obj['watchers'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['watchers'] is List && (obj['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 ==(other) { if (other is DidChangeWatchedFilesRegistrationOptions) { return listEqual(watchers, other.watchers, (FileSystemWatcher a, FileSystemWatcher b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, watchers.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DidChangeWorkspaceFoldersParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidChangeWorkspaceFoldersParams.canParse, DidChangeWorkspaceFoldersParams.fromJson); DidChangeWorkspaceFoldersParams(this.event) { if (event == null) { throw 'event is required but was not provided'; } } static DidChangeWorkspaceFoldersParams fromJson(Map json) { final event = json['event'] != null ? WorkspaceFoldersChangeEvent.fromJson(json['event']) : null; return new DidChangeWorkspaceFoldersParams(event); } /// The actual workspace folder change event. final WorkspaceFoldersChangeEvent event; Map toJson() { Map __result = {}; __result['event'] = event ?? (throw 'event is required but was not set'); 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; } if (obj['event'] == null) { reporter.reportError("must not be null"); return false; } if (!(WorkspaceFoldersChangeEvent.canParse(obj['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 ==(other) { if (other is DidChangeWorkspaceFoldersParams) { return event == other.event && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, event.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DidCloseTextDocumentParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidCloseTextDocumentParams.canParse, DidCloseTextDocumentParams.fromJson); DidCloseTextDocumentParams(this.textDocument) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static DidCloseTextDocumentParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; return new DidCloseTextDocumentParams(textDocument); } /// The document that was closed. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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 ==(other) { if (other is DidCloseTextDocumentParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DidOpenTextDocumentParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidOpenTextDocumentParams.canParse, DidOpenTextDocumentParams.fromJson); DidOpenTextDocumentParams(this.textDocument) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static DidOpenTextDocumentParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentItem.fromJson(json['textDocument']) : null; return new DidOpenTextDocumentParams(textDocument); } /// The document that was opened. final TextDocumentItem textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentItem.canParse(obj['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 ==(other) { if (other is DidOpenTextDocumentParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DidSaveTextDocumentParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DidSaveTextDocumentParams.canParse, DidSaveTextDocumentParams.fromJson); DidSaveTextDocumentParams(this.textDocument, this.text) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static DidSaveTextDocumentParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final text = json['text']; return new DidSaveTextDocumentParams(textDocument, 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() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['textDocument'], reporter))) { reporter.reportError("must be of type TextDocumentIdentifier"); return false; } } finally { reporter.pop(); } reporter.push('text'); try { if (obj['text'] != null && !(obj['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 ==(other) { if (other is DidSaveTextDocumentParams) { return textDocument == other.textDocument && text == other.text && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, text.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFilter implements ToJsonable { static const jsonHandler = const LspJsonHandler(DocumentFilter.canParse, DocumentFilter.fromJson); DocumentFilter(this.language, this.scheme, this.pattern); static DocumentFilter fromJson(Map json) { final language = json['language']; final scheme = json['scheme']; final pattern = json['pattern']; return new DocumentFilter(language, scheme, 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() { Map __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 { if (obj['language'] != null && !(obj['language'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('scheme'); try { if (obj['scheme'] != null && !(obj['scheme'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('pattern'); try { if (obj['pattern'] != null && !(obj['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 ==(other) { if (other is DocumentFilter) { return language == other.language && scheme == other.scheme && pattern == other.pattern && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, language.hashCode); hash = JenkinsSmiHash.combine(hash, scheme.hashCode); hash = JenkinsSmiHash.combine(hash, pattern.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentFormattingParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentFormattingParams.canParse, DocumentFormattingParams.fromJson); DocumentFormattingParams(this.textDocument, this.options) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (options == null) { throw 'options is required but was not provided'; } } static DocumentFormattingParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final options = json['options'] != null ? FormattingOptions.fromJson(json['options']) : null; return new DocumentFormattingParams(textDocument, options); } /// The format options. final FormattingOptions options; /// The document to format. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['options'] = options ?? (throw 'options is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['options'] == null) { reporter.reportError("must not be null"); return false; } if (!(FormattingOptions.canParse(obj['options'], reporter))) { reporter.reportError("must be of type FormattingOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DocumentFormattingParams"); return false; } } @override bool operator ==(other) { if (other is DocumentFormattingParams) { return textDocument == other.textDocument && options == other.options && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, options.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler( DocumentHighlight.canParse, DocumentHighlight.fromJson); DocumentHighlight(this.range, this.kind) { if (range == null) { throw 'range is required but was not provided'; } } static DocumentHighlight fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final kind = json['kind'] != null ? DocumentHighlightKind.fromJson(json['kind']) : null; return new DocumentHighlight(range, kind); } /// The highlight kind, default is DocumentHighlightKind.Text. final DocumentHighlightKind kind; /// The range this highlight applies to. final Range range; Map toJson() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); if (kind != null) { __result['kind'] = kind; } 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['range'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (obj['kind'] != null && !(DocumentHighlightKind.canParse(obj['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 ==(other) { if (other is DocumentHighlight) { return range == other.range && kind == other.kind && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// A document highlight kind. class DocumentHighlightKind { const DocumentHighlightKind(this._value); const DocumentHighlightKind.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// A textual occurrence. static const Text = const DocumentHighlightKind(1); /// Read-access of a symbol, like reading a variable. static const Read = const DocumentHighlightKind(2); /// Write-access of a symbol, like writing to a variable. static const Write = const DocumentHighlightKind(3); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is DocumentHighlightKind && o._value == _value; } /// 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 = const LspJsonHandler(DocumentLink.canParse, DocumentLink.fromJson); DocumentLink(this.range, this.target, this.data) { if (range == null) { throw 'range is required but was not provided'; } } static DocumentLink fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final target = json['target']; final data = json['data']; return new DocumentLink(range, target, data); } /// A data entry field that is preserved on a document link between a /// DocumentLinkRequest and a DocumentLinkResolveRequest. final dynamic 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; Map toJson() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); if (target != null) { __result['target'] = target; } 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['range'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } reporter.push('target'); try { if (obj['target'] != null && !(obj['target'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('data'); try { if (obj['data'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DocumentLink"); return false; } } @override bool operator ==(other) { if (other is DocumentLink) { return range == other.range && target == other.target && data == other.data && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, target.hashCode); hash = JenkinsSmiHash.combine(hash, data.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Document link options. class DocumentLinkOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentLinkOptions.canParse, DocumentLinkOptions.fromJson); DocumentLinkOptions(this.resolveProvider); static DocumentLinkOptions fromJson(Map json) { final resolveProvider = json['resolveProvider']; return new DocumentLinkOptions(resolveProvider); } /// Document links have a resolve provider as well. final bool resolveProvider; Map toJson() { Map __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { if (obj['resolveProvider'] != null && !(obj['resolveProvider'] 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 ==(other) { if (other is DocumentLinkOptions) { return resolveProvider == other.resolveProvider && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, resolveProvider.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentLinkParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentLinkParams.canParse, DocumentLinkParams.fromJson); DocumentLinkParams(this.textDocument) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static DocumentLinkParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; return new DocumentLinkParams(textDocument); } /// The document to provide document links for. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['textDocument'], reporter))) { reporter.reportError("must be of type TextDocumentIdentifier"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DocumentLinkParams"); return false; } } @override bool operator ==(other) { if (other is DocumentLinkParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentLinkRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentLinkRegistrationOptions.canParse, DocumentLinkRegistrationOptions.fromJson); DocumentLinkRegistrationOptions(this.resolveProvider, this.documentSelector); static DocumentLinkRegistrationOptions fromJson(Map json) { final resolveProvider = json['resolveProvider']; final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new DocumentLinkRegistrationOptions( resolveProvider, 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; /// Document links have a resolve provider as well. final bool resolveProvider; Map toJson() { Map __result = {}; if (resolveProvider != null) { __result['resolveProvider'] = resolveProvider; } __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('resolveProvider'); try { if (obj['resolveProvider'] != null && !(obj['resolveProvider'] 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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 DocumentLinkRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is DocumentLinkRegistrationOptions) { return resolveProvider == other.resolveProvider && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, resolveProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Format document on type options. class DocumentOnTypeFormattingOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentOnTypeFormattingOptions.canParse, DocumentOnTypeFormattingOptions.fromJson); DocumentOnTypeFormattingOptions( this.firstTriggerCharacter, this.moreTriggerCharacter) { if (firstTriggerCharacter == null) { throw 'firstTriggerCharacter is required but was not provided'; } } static DocumentOnTypeFormattingOptions fromJson(Map json) { final firstTriggerCharacter = json['firstTriggerCharacter']; final moreTriggerCharacter = json['moreTriggerCharacter'] ?.map((item) => item) ?.cast() ?.toList(); return new DocumentOnTypeFormattingOptions( firstTriggerCharacter, moreTriggerCharacter); } /// A character on which formatting should be triggered, like `}`. final String firstTriggerCharacter; /// More trigger characters. final List moreTriggerCharacter; Map toJson() { Map __result = {}; __result['firstTriggerCharacter'] = firstTriggerCharacter ?? (throw 'firstTriggerCharacter is required but was not set'); 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; } if (obj['firstTriggerCharacter'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['firstTriggerCharacter'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('moreTriggerCharacter'); try { if (obj['moreTriggerCharacter'] != null && !((obj['moreTriggerCharacter'] is List && (obj['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 ==(other) { if (other is DocumentOnTypeFormattingOptions) { return firstTriggerCharacter == other.firstTriggerCharacter && listEqual(moreTriggerCharacter, other.moreTriggerCharacter, (String a, String b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, firstTriggerCharacter.hashCode); hash = JenkinsSmiHash.combine(hash, moreTriggerCharacter.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentOnTypeFormattingParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentOnTypeFormattingParams.canParse, DocumentOnTypeFormattingParams.fromJson); DocumentOnTypeFormattingParams( this.textDocument, this.position, this.ch, this.options) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (position == null) { throw 'position is required but was not provided'; } if (ch == null) { throw 'ch is required but was not provided'; } if (options == null) { throw 'options is required but was not provided'; } } static DocumentOnTypeFormattingParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final position = json['position'] != null ? Position.fromJson(json['position']) : null; final ch = json['ch']; final options = json['options'] != null ? FormattingOptions.fromJson(json['options']) : null; return new DocumentOnTypeFormattingParams( textDocument, position, ch, options); } /// The character that has been typed. final String ch; /// The format options. final FormattingOptions options; /// The position at which this request was sent. final Position position; /// The document to format. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['position'] = position ?? (throw 'position is required but was not set'); __result['ch'] = ch ?? (throw 'ch is required but was not set'); __result['options'] = options ?? (throw 'options is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['position'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['position'], reporter))) { reporter.reportError("must be of type Position"); return false; } } finally { reporter.pop(); } reporter.push('ch'); try { if (!obj.containsKey('ch')) { reporter.reportError("must not be undefined"); return false; } if (obj['ch'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['options'] == null) { reporter.reportError("must not be null"); return false; } if (!(FormattingOptions.canParse(obj['options'], reporter))) { reporter.reportError("must be of type FormattingOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DocumentOnTypeFormattingParams"); return false; } } @override bool operator ==(other) { if (other is DocumentOnTypeFormattingParams) { return textDocument == other.textDocument && position == other.position && ch == other.ch && options == other.options && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, position.hashCode); hash = JenkinsSmiHash.combine(hash, ch.hashCode); hash = JenkinsSmiHash.combine(hash, options.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentOnTypeFormattingRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentOnTypeFormattingRegistrationOptions.canParse, DocumentOnTypeFormattingRegistrationOptions.fromJson); DocumentOnTypeFormattingRegistrationOptions(this.firstTriggerCharacter, this.moreTriggerCharacter, this.documentSelector) { if (firstTriggerCharacter == null) { throw 'firstTriggerCharacter is required but was not provided'; } } static DocumentOnTypeFormattingRegistrationOptions fromJson( Map json) { final firstTriggerCharacter = json['firstTriggerCharacter']; final moreTriggerCharacter = json['moreTriggerCharacter'] ?.map((item) => item) ?.cast() ?.toList(); final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new DocumentOnTypeFormattingRegistrationOptions( firstTriggerCharacter, moreTriggerCharacter, 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; /// A character on which formatting should be triggered, like `}`. final String firstTriggerCharacter; /// More trigger characters. final List moreTriggerCharacter; Map toJson() { Map __result = {}; __result['firstTriggerCharacter'] = firstTriggerCharacter ?? (throw 'firstTriggerCharacter is required but was not set'); if (moreTriggerCharacter != null) { __result['moreTriggerCharacter'] = moreTriggerCharacter; } __result['documentSelector'] = documentSelector; 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; } if (obj['firstTriggerCharacter'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['firstTriggerCharacter'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('moreTriggerCharacter'); try { if (obj['moreTriggerCharacter'] != null && !((obj['moreTriggerCharacter'] is List && (obj['moreTriggerCharacter'] .every((item) => item is String))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError("must not be undefined"); return false; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 DocumentOnTypeFormattingRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is DocumentOnTypeFormattingRegistrationOptions) { return firstTriggerCharacter == other.firstTriggerCharacter && listEqual(moreTriggerCharacter, other.moreTriggerCharacter, (String a, String b) => a == b) && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, firstTriggerCharacter.hashCode); hash = JenkinsSmiHash.combine(hash, moreTriggerCharacter.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentRangeFormattingParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentRangeFormattingParams.canParse, DocumentRangeFormattingParams.fromJson); DocumentRangeFormattingParams(this.textDocument, this.range, this.options) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (range == null) { throw 'range is required but was not provided'; } if (options == null) { throw 'options is required but was not provided'; } } static DocumentRangeFormattingParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final range = json['range'] != null ? Range.fromJson(json['range']) : null; final options = json['options'] != null ? FormattingOptions.fromJson(json['options']) : null; return new DocumentRangeFormattingParams(textDocument, range, options); } /// The format options final FormattingOptions options; /// The range to format final Range range; /// The document to format. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['range'] = range ?? (throw 'range is required but was not set'); __result['options'] = options ?? (throw 'options is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['options'] == null) { reporter.reportError("must not be null"); return false; } if (!(FormattingOptions.canParse(obj['options'], reporter))) { reporter.reportError("must be of type FormattingOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DocumentRangeFormattingParams"); return false; } } @override bool operator ==(other) { if (other is DocumentRangeFormattingParams) { return textDocument == other.textDocument && range == other.range && options == other.options && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, options.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler(DocumentSymbol.canParse, DocumentSymbol.fromJson); DocumentSymbol(this.name, this.detail, this.kind, this.deprecated, this.range, this.selectionRange, this.children) { if (name == null) { throw 'name is required but was not provided'; } if (kind == null) { throw 'kind is required but was not provided'; } if (range == null) { throw 'range is required but was not provided'; } if (selectionRange == null) { throw 'selectionRange is required but was not provided'; } } static DocumentSymbol fromJson(Map json) { final name = json['name']; final detail = json['detail']; final kind = json['kind'] != null ? SymbolKind.fromJson(json['kind']) : null; final deprecated = json['deprecated']; final range = json['range'] != null ? Range.fromJson(json['range']) : null; final selectionRange = json['selectionRange'] != null ? Range.fromJson(json['selectionRange']) : null; final children = json['children'] ?.map((item) => item != null ? DocumentSymbol.fromJson(item) : null) ?.cast() ?.toList(); return new DocumentSymbol( name, detail, kind, deprecated, range, selectionRange, children); } /// Children of this symbol, e.g. properties of a class. final List children; /// Indicates if this symbol is deprecated. 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; Map toJson() { Map __result = {}; __result['name'] = name ?? (throw 'name is required but was not set'); if (detail != null) { __result['detail'] = detail; } __result['kind'] = kind ?? (throw 'kind is required but was not set'); if (deprecated != null) { __result['deprecated'] = deprecated; } __result['range'] = range ?? (throw 'range is required but was not set'); __result['selectionRange'] = selectionRange ?? (throw 'selectionRange is required but was not set'); if (children != null) { __result['children'] = children; } 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; } if (obj['name'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['name'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('detail'); try { if (obj['detail'] != null && !(obj['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; } if (obj['kind'] == null) { reporter.reportError("must not be null"); return false; } if (!(SymbolKind.canParse(obj['kind'], reporter))) { reporter.reportError("must be of type SymbolKind"); return false; } } finally { reporter.pop(); } reporter.push('deprecated'); try { if (obj['deprecated'] != null && !(obj['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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['selectionRange'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['selectionRange'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } reporter.push('children'); try { if (obj['children'] != null && !((obj['children'] is List && (obj['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 ==(other) { if (other is DocumentSymbol) { return name == other.name && detail == other.detail && kind == other.kind && 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, name.hashCode); hash = JenkinsSmiHash.combine(hash, detail.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, deprecated.hashCode); hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, selectionRange.hashCode); hash = JenkinsSmiHash.combine(hash, children.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class DocumentSymbolParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( DocumentSymbolParams.canParse, DocumentSymbolParams.fromJson); DocumentSymbolParams(this.textDocument) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static DocumentSymbolParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; return new DocumentSymbolParams(textDocument); } /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['textDocument'], reporter))) { reporter.reportError("must be of type TextDocumentIdentifier"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type DocumentSymbolParams"); return false; } } @override bool operator ==(other) { if (other is DocumentSymbolParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ErrorCodes { const ErrorCodes(this._value); const ErrorCodes.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// Defined by JSON RPC static const ParseError = const ErrorCodes(-32700); static const InvalidRequest = const ErrorCodes(-32600); static const MethodNotFound = const ErrorCodes(-32601); static const InvalidParams = const ErrorCodes(-32602); static const InternalError = const ErrorCodes(-32603); static const serverErrorStart = const ErrorCodes(-32099); static const serverErrorEnd = const ErrorCodes(-32000); static const ServerNotInitialized = const ErrorCodes(-32002); static const UnknownErrorCode = const ErrorCodes(-32001); /// Defined by the protocol. static const RequestCancelled = const ErrorCodes(-32800); static const ContentModified = const ErrorCodes(-32801); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is ErrorCodes && o._value == _value; } /// Execute command options. class ExecuteCommandOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( ExecuteCommandOptions.canParse, ExecuteCommandOptions.fromJson); ExecuteCommandOptions(this.commands) { if (commands == null) { throw 'commands is required but was not provided'; } } static ExecuteCommandOptions fromJson(Map json) { final commands = json['commands']?.map((item) => item)?.cast()?.toList(); return new ExecuteCommandOptions(commands); } /// The commands to be executed on the server final List commands; Map toJson() { Map __result = {}; __result['commands'] = commands ?? (throw 'commands is required but was not set'); 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; } if (obj['commands'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['commands'] is List && (obj['commands'].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 ExecuteCommandOptions"); return false; } } @override bool operator ==(other) { if (other is ExecuteCommandOptions) { return listEqual( commands, other.commands, (String a, String b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, commands.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ExecuteCommandParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( ExecuteCommandParams.canParse, ExecuteCommandParams.fromJson); ExecuteCommandParams(this.command, this.arguments) { if (command == null) { throw 'command is required but was not provided'; } } static ExecuteCommandParams fromJson(Map json) { final command = json['command']; final arguments = json['arguments']?.map((item) => item)?.cast()?.toList(); return new ExecuteCommandParams(command, arguments); } /// Arguments that the command should be invoked with. final List arguments; /// The identifier of the actual command handler. final String command; Map toJson() { Map __result = {}; __result['command'] = command ?? (throw 'command is required but was not set'); if (arguments != null) { __result['arguments'] = arguments; } 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; } if (obj['command'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['command'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('arguments'); try { if (obj['arguments'] != null && !((obj['arguments'] is List && (obj['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 ExecuteCommandParams"); return false; } } @override bool operator ==(other) { if (other is ExecuteCommandParams) { return command == other.command && listEqual( arguments, other.arguments, (dynamic a, dynamic b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, command.hashCode); hash = JenkinsSmiHash.combine(hash, arguments.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Execute command registration options. class ExecuteCommandRegistrationOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( ExecuteCommandRegistrationOptions.canParse, ExecuteCommandRegistrationOptions.fromJson); ExecuteCommandRegistrationOptions(this.commands) { if (commands == null) { throw 'commands is required but was not provided'; } } static ExecuteCommandRegistrationOptions fromJson(Map json) { final commands = json['commands']?.map((item) => item)?.cast()?.toList(); return new ExecuteCommandRegistrationOptions(commands); } /// The commands to be executed on the server final List commands; Map toJson() { Map __result = {}; __result['commands'] = commands ?? (throw 'commands is required but was not set'); 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; } if (obj['commands'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['commands'] is List && (obj['commands'].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 ExecuteCommandRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is ExecuteCommandRegistrationOptions) { return listEqual( commands, other.commands, (String a, String b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, commands.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const 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 = const 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 = const FailureHandlingKind._('textOnlyTransactional'); /// The client tries to undo the operations already executed. But there is no /// guarantee that this is succeeding. static const Undo = const FailureHandlingKind._('undo'); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is FailureHandlingKind && o._value == _value; } /// The file event type. class FileChangeType { const FileChangeType(this._value); const FileChangeType.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// The file got created. static const Created = const FileChangeType(1); /// The file got changed. static const Changed = const FileChangeType(2); /// The file got deleted. static const Deleted = const FileChangeType(3); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is FileChangeType && o._value == _value; } /// An event describing a file change. class FileEvent implements ToJsonable { static const jsonHandler = const LspJsonHandler(FileEvent.canParse, FileEvent.fromJson); FileEvent(this.uri, this.type) { if (uri == null) { throw 'uri is required but was not provided'; } if (type == null) { throw 'type is required but was not provided'; } } static FileEvent fromJson(Map json) { final uri = json['uri']; final type = json['type']; return new FileEvent(uri, type); } /// The change type. final num type; /// The file's URI. final String uri; Map toJson() { Map __result = {}; __result['uri'] = uri ?? (throw 'uri is required but was not set'); __result['type'] = type ?? (throw 'type is required but was not set'); 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['type'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['type'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type FileEvent"); return false; } } @override bool operator ==(other) { if (other is FileEvent) { return uri == other.uri && type == other.type && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, type.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class FileSystemWatcher implements ToJsonable { static const jsonHandler = const LspJsonHandler( FileSystemWatcher.canParse, FileSystemWatcher.fromJson); FileSystemWatcher(this.globPattern, this.kind) { if (globPattern == null) { throw 'globPattern is required but was not provided'; } } static FileSystemWatcher fromJson(Map json) { final globPattern = json['globPattern']; final kind = json['kind'] != null ? WatchKind.fromJson(json['kind']) : null; return new FileSystemWatcher(globPattern, 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() { Map __result = {}; __result['globPattern'] = globPattern ?? (throw 'globPattern is required but was not set'); if (kind != null) { __result['kind'] = kind; } 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; } if (obj['globPattern'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['globPattern'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (obj['kind'] != null && !(WatchKind.canParse(obj['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 ==(other) { if (other is FileSystemWatcher) { return globPattern == other.globPattern && kind == other.kind && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, globPattern.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Represents a folding range. class FoldingRange implements ToJsonable { static const jsonHandler = const LspJsonHandler(FoldingRange.canParse, FoldingRange.fromJson); FoldingRange(this.startLine, this.startCharacter, this.endLine, this.endCharacter, this.kind) { if (startLine == null) { throw 'startLine is required but was not provided'; } if (endLine == null) { throw 'endLine is required but was not provided'; } } static FoldingRange fromJson(Map json) { final startLine = json['startLine']; final startCharacter = json['startCharacter']; final endLine = json['endLine']; final endCharacter = json['endCharacter']; final kind = json['kind'] != null ? FoldingRangeKind.fromJson(json['kind']) : null; return new FoldingRange( startLine, startCharacter, endLine, endCharacter, kind); } /// The zero-based character offset before the folded range ends. If not /// defined, defaults to the length of the end line. final num endCharacter; /// The zero-based line number where the folded range ends. final num 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 num startCharacter; /// The zero-based line number from where the folded range starts. final num startLine; Map toJson() { Map __result = {}; __result['startLine'] = startLine ?? (throw 'startLine is required but was not set'); if (startCharacter != null) { __result['startCharacter'] = startCharacter; } __result['endLine'] = endLine ?? (throw 'endLine is required but was not set'); if (endCharacter != null) { __result['endCharacter'] = endCharacter; } if (kind != null) { __result['kind'] = kind; } 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; } if (obj['startLine'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['startLine'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('startCharacter'); try { if (obj['startCharacter'] != null && !(obj['startCharacter'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('endLine'); try { if (!obj.containsKey('endLine')) { reporter.reportError("must not be undefined"); return false; } if (obj['endLine'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['endLine'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('endCharacter'); try { if (obj['endCharacter'] != null && !(obj['endCharacter'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('kind'); try { if (obj['kind'] != null && !(FoldingRangeKind.canParse(obj['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 ==(other) { if (other is FoldingRange) { return startLine == other.startLine && startCharacter == other.startCharacter && endLine == other.endLine && endCharacter == other.endCharacter && kind == other.kind && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, startLine.hashCode); hash = JenkinsSmiHash.combine(hash, startCharacter.hashCode); hash = JenkinsSmiHash.combine(hash, endLine.hashCode); hash = JenkinsSmiHash.combine(hash, endCharacter.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const FoldingRangeKind(r'comment'); /// Folding range for a imports or includes static const Imports = const FoldingRangeKind(r'imports'); /// Folding range for a region (e.g. `#region`) static const Region = const FoldingRangeKind(r'region'); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is FoldingRangeKind && o._value == _value; } class FoldingRangeParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( FoldingRangeParams.canParse, FoldingRangeParams.fromJson); FoldingRangeParams(this.textDocument) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } } static FoldingRangeParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; return new FoldingRangeParams(textDocument); } /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['textDocument'], reporter))) { reporter.reportError("must be of type TextDocumentIdentifier"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type FoldingRangeParams"); return false; } } @override bool operator ==(other) { if (other is FoldingRangeParams) { return textDocument == other.textDocument && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Folding range provider options. class FoldingRangeProviderOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( FoldingRangeProviderOptions.canParse, FoldingRangeProviderOptions.fromJson); static FoldingRangeProviderOptions fromJson(Map json) { return new FoldingRangeProviderOptions(); } Map toJson() { Map __result = {}; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { return true; } else { reporter.reportError("must be of type FoldingRangeProviderOptions"); return false; } } @override bool operator ==(other) { if (other is FoldingRangeProviderOptions) { return true; } return false; } @override int get hashCode { int hash = 0; return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Value-object describing what options formatting should use. class FormattingOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( FormattingOptions.canParse, FormattingOptions.fromJson); FormattingOptions(this.tabSize, this.insertSpaces) { if (tabSize == null) { throw 'tabSize is required but was not provided'; } if (insertSpaces == null) { throw 'insertSpaces is required but was not provided'; } } static FormattingOptions fromJson(Map json) { final tabSize = json['tabSize']; final insertSpaces = json['insertSpaces']; return new FormattingOptions(tabSize, insertSpaces); } /// Prefer spaces over tabs. final bool insertSpaces; /// Size of a tab in spaces. final num tabSize; Map toJson() { Map __result = {}; __result['tabSize'] = tabSize ?? (throw 'tabSize is required but was not set'); __result['insertSpaces'] = insertSpaces ?? (throw 'insertSpaces is required but was not set'); 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; } if (obj['tabSize'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['tabSize'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('insertSpaces'); try { if (!obj.containsKey('insertSpaces')) { reporter.reportError("must not be undefined"); return false; } if (obj['insertSpaces'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['insertSpaces'] 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 ==(other) { if (other is FormattingOptions) { return tabSize == other.tabSize && insertSpaces == other.insertSpaces && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, tabSize.hashCode); hash = JenkinsSmiHash.combine(hash, insertSpaces.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// The result of a hover request. class Hover implements ToJsonable { static const jsonHandler = const LspJsonHandler(Hover.canParse, Hover.fromJson); Hover(this.contents, this.range) { if (contents == null) { throw 'contents is required but was not provided'; } } static Hover fromJson(Map json) { final contents = json['contents'] is String ? new Either2.t1(json['contents']) : (MarkupContent.canParse(json['contents'], nullLspJsonReporter) ? new Either2.t2(json['contents'] != null ? MarkupContent.fromJson(json['contents']) : null) : (throw '''${json['contents']} was not one of (String, MarkupContent)''')); final range = json['range'] != null ? Range.fromJson(json['range']) : null; return new Hover(contents, 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() { Map __result = {}; __result['contents'] = contents ?? (throw 'contents is required but was not set'); if (range != null) { __result['range'] = range; } 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; } if (obj['contents'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['contents'] is String || MarkupContent.canParse(obj['contents'], reporter)))) { reporter .reportError("must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('range'); try { if (obj['range'] != null && !(Range.canParse(obj['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 ==(other) { if (other is Hover) { return contents == other.contents && range == other.range && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, contents.hashCode); hash = JenkinsSmiHash.combine(hash, range.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class InitializeParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( InitializeParams.canParse, InitializeParams.fromJson); InitializeParams( this.processId, this.rootPath, this.rootUri, this.initializationOptions, this.capabilities, this.trace, this.workspaceFolders) { if (capabilities == null) { throw 'capabilities is required but was not provided'; } } static InitializeParams fromJson(Map json) { final processId = json['processId']; final rootPath = json['rootPath']; final rootUri = json['rootUri']; final initializationOptions = json['initializationOptions']; final capabilities = json['capabilities'] != null ? ClientCapabilities.fromJson(json['capabilities']) : null; final trace = json['trace']; final workspaceFolders = json['workspaceFolders'] ?.map((item) => item != null ? WorkspaceFolder.fromJson(item) : null) ?.cast() ?.toList(); return new InitializeParams(processId, rootPath, rootUri, initializationOptions, capabilities, trace, workspaceFolders); } /// The capabilities provided by the client (editor or tool) final ClientCapabilities capabilities; /// User provided initialization options. final dynamic initializationOptions; /// 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 num processId; /// The rootPath of the workspace. Is null if no folder is open. /// @deprecated in favour of rootUri. @core.deprecated final String rootPath; /// The rootUri of the workspace. Is null if no folder is open. If both /// `rootPath` and `rootUri` are set `rootUri` wins. final String rootUri; /// The initial trace setting. If omitted trace is disabled ('off'). final String trace; /// 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() { Map __result = {}; __result['processId'] = processId; if (rootPath != null) { __result['rootPath'] = rootPath; } __result['rootUri'] = rootUri; if (initializationOptions != null) { __result['initializationOptions'] = initializationOptions; } __result['capabilities'] = capabilities ?? (throw 'capabilities is required but was not set'); if (trace != null) { __result['trace'] = trace; } if (workspaceFolders != null) { __result['workspaceFolders'] = workspaceFolders; } 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; } if (obj['processId'] != null && !(obj['processId'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('rootPath'); try { if (obj['rootPath'] != null && !(obj['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; } if (obj['rootUri'] != null && !(obj['rootUri'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('initializationOptions'); try { if (obj['initializationOptions'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('capabilities'); try { if (!obj.containsKey('capabilities')) { reporter.reportError("must not be undefined"); return false; } if (obj['capabilities'] == null) { reporter.reportError("must not be null"); return false; } if (!(ClientCapabilities.canParse(obj['capabilities'], reporter))) { reporter.reportError("must be of type ClientCapabilities"); return false; } } finally { reporter.pop(); } reporter.push('trace'); try { if (obj['trace'] != null && !(obj['trace'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('workspaceFolders'); try { if (obj['workspaceFolders'] != null && !((obj['workspaceFolders'] is List && (obj['workspaceFolders'].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 InitializeParams"); return false; } } @override bool operator ==(other) { if (other is InitializeParams) { return processId == other.processId && 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) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, processId.hashCode); hash = JenkinsSmiHash.combine(hash, rootPath.hashCode); hash = JenkinsSmiHash.combine(hash, rootUri.hashCode); hash = JenkinsSmiHash.combine(hash, initializationOptions.hashCode); hash = JenkinsSmiHash.combine(hash, capabilities.hashCode); hash = JenkinsSmiHash.combine(hash, trace.hashCode); hash = JenkinsSmiHash.combine(hash, workspaceFolders.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class InitializeResult implements ToJsonable { static const jsonHandler = const LspJsonHandler( InitializeResult.canParse, InitializeResult.fromJson); InitializeResult(this.capabilities) { if (capabilities == null) { throw 'capabilities is required but was not provided'; } } static InitializeResult fromJson(Map json) { final capabilities = json['capabilities'] != null ? ServerCapabilities.fromJson(json['capabilities']) : null; return new InitializeResult(capabilities); } /// The capabilities the language server provides. final ServerCapabilities capabilities; Map toJson() { Map __result = {}; __result['capabilities'] = capabilities ?? (throw 'capabilities is required but was not set'); 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; } if (obj['capabilities'] == null) { reporter.reportError("must not be null"); return false; } if (!(ServerCapabilities.canParse(obj['capabilities'], reporter))) { reporter.reportError("must be of type ServerCapabilities"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type InitializeResult"); return false; } } @override bool operator ==(other) { if (other is InitializeResult) { return capabilities == other.capabilities && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, capabilities.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class InitializedParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( InitializedParams.canParse, InitializedParams.fromJson); static InitializedParams fromJson(Map json) { return new InitializedParams(); } Map toJson() { Map __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 ==(other) { if (other is InitializedParams) { return true; } return false; } @override int get hashCode { int hash = 0; return JenkinsSmiHash.finish(hash); } @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 num _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 = const 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 = const InsertTextFormat._(2); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is InsertTextFormat && o._value == _value; } class Location implements ToJsonable { static const jsonHandler = const LspJsonHandler(Location.canParse, Location.fromJson); Location(this.uri, this.range) { if (uri == null) { throw 'uri is required but was not provided'; } if (range == null) { throw 'range is required but was not provided'; } } static Location fromJson(Map json) { final uri = json['uri']; final range = json['range'] != null ? Range.fromJson(json['range']) : null; return new Location(uri, range); } final Range range; final String uri; Map toJson() { Map __result = {}; __result['uri'] = uri ?? (throw 'uri is required but was not set'); __result['range'] = range ?? (throw 'range is required but was not set'); 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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 ==(other) { if (other is Location) { return uri == other.uri && range == other.range && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, range.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class LocationLink implements ToJsonable { static const jsonHandler = const LspJsonHandler(LocationLink.canParse, LocationLink.fromJson); LocationLink(this.originSelectionRange, this.targetUri, this.targetRange, this.targetSelectionRange) { if (targetUri == null) { throw 'targetUri is required but was not provided'; } if (targetRange == null) { throw 'targetRange is required but was not provided'; } if (targetSelectionRange == null) { throw 'targetSelectionRange is required but was not provided'; } } static LocationLink fromJson(Map json) { final originSelectionRange = json['originSelectionRange'] != null ? Range.fromJson(json['originSelectionRange']) : null; final targetUri = json['targetUri']; final targetRange = json['targetRange'] != null ? Range.fromJson(json['targetRange']) : null; final targetSelectionRange = json['targetSelectionRange'] != null ? Range.fromJson(json['targetSelectionRange']) : null; return new LocationLink( originSelectionRange, targetUri, targetRange, 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 the /// `targetRange`. See also `DocumentSymbol#range` final Range targetSelectionRange; /// The target resource identifier of this link. final String targetUri; Map toJson() { Map __result = {}; if (originSelectionRange != null) { __result['originSelectionRange'] = originSelectionRange; } __result['targetUri'] = targetUri ?? (throw 'targetUri is required but was not set'); __result['targetRange'] = targetRange ?? (throw 'targetRange is required but was not set'); __result['targetSelectionRange'] = targetSelectionRange ?? (throw 'targetSelectionRange is required but was not set'); return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('originSelectionRange'); try { if (obj['originSelectionRange'] != null && !(Range.canParse(obj['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; } if (obj['targetUri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['targetRange'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['targetSelectionRange'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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 ==(other) { if (other is LocationLink) { return originSelectionRange == other.originSelectionRange && targetUri == other.targetUri && targetRange == other.targetRange && targetSelectionRange == other.targetSelectionRange && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, originSelectionRange.hashCode); hash = JenkinsSmiHash.combine(hash, targetUri.hashCode); hash = JenkinsSmiHash.combine(hash, targetRange.hashCode); hash = JenkinsSmiHash.combine(hash, targetSelectionRange.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class LogMessageParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( LogMessageParams.canParse, LogMessageParams.fromJson); LogMessageParams(this.type, this.message) { if (type == null) { throw 'type is required but was not provided'; } if (message == null) { throw 'message is required but was not provided'; } } static LogMessageParams fromJson(Map json) { final type = json['type'] != null ? MessageType.fromJson(json['type']) : null; final message = json['message']; return new LogMessageParams(type, message); } /// The actual message final String message; /// The message type. final MessageType type; Map toJson() { Map __result = {}; __result['type'] = type ?? (throw 'type is required but was not set'); __result['message'] = message ?? (throw 'message is required but was not set'); 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; } if (obj['type'] == null) { reporter.reportError("must not be null"); return false; } if (!(MessageType.canParse(obj['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; } if (obj['message'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is LogMessageParams) { return type == other.type && message == other.message && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, type.hashCode); hash = JenkinsSmiHash.combine(hash, message.hashCode); return JenkinsSmiHash.finish(hash); } @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. See /// https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting /// /// 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 = const LspJsonHandler(MarkupContent.canParse, MarkupContent.fromJson); MarkupContent(this.kind, this.value) { if (kind == null) { throw 'kind is required but was not provided'; } if (value == null) { throw 'value is required but was not provided'; } } static MarkupContent fromJson(Map json) { final kind = json['kind'] != null ? MarkupKind.fromJson(json['kind']) : null; final value = json['value']; return new MarkupContent(kind, value); } /// The type of the Markup final MarkupKind kind; /// The content itself final String value; Map toJson() { Map __result = {}; __result['kind'] = kind ?? (throw 'kind is required but was not set'); __result['value'] = value ?? (throw 'value is required but was not set'); 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; } if (obj['kind'] == null) { reporter.reportError("must not be null"); return false; } if (!(MarkupKind.canParse(obj['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; } if (obj['value'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is MarkupContent) { return kind == other.kind && value == other.value && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, value.hashCode); return JenkinsSmiHash.finish(hash); } @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 r'plaintext': case r'markdown': return true; } return false; } /// Plain text is supported as a content format static const PlainText = const MarkupKind._(r'plaintext'); /// Markdown is supported as a content format static const Markdown = const MarkupKind._(r'markdown'); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is MarkupKind && o._value == _value; } class Message implements ToJsonable { static const jsonHandler = const LspJsonHandler(Message.canParse, Message.fromJson); Message(this.jsonrpc) { if (jsonrpc == null) { throw 'jsonrpc is required but was not provided'; } } 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 jsonrpc = json['jsonrpc']; return new Message(jsonrpc); } final String jsonrpc; Map toJson() { Map __result = {}; __result['jsonrpc'] = jsonrpc ?? (throw 'jsonrpc is required but was not set'); 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; } if (obj['jsonrpc'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['jsonrpc'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type Message"); return false; } } @override bool operator ==(other) { if (other is Message) { return jsonrpc == other.jsonrpc && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, jsonrpc.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class MessageActionItem implements ToJsonable { static const jsonHandler = const LspJsonHandler( MessageActionItem.canParse, MessageActionItem.fromJson); MessageActionItem(this.title) { if (title == null) { throw 'title is required but was not provided'; } } static MessageActionItem fromJson(Map json) { final title = json['title']; return new MessageActionItem(title); } /// A short title like 'Retry', 'Open Log' etc. final String title; Map toJson() { Map __result = {}; __result['title'] = title ?? (throw 'title is required but was not set'); 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; } if (obj['title'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is MessageActionItem) { return title == other.title && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, title.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class MessageType { const MessageType(this._value); const MessageType.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// An error message. static const Error = const MessageType(1); /// A warning message. static const Warning = const MessageType(2); /// An information message. static const Info = const MessageType(3); /// A log message. static const Log = const MessageType(4); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(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 = const Method(r'$/cancelRequest'); /// Constant for the 'initialize' method. static const initialize = const Method(r'initialize'); /// Constant for the 'initialized' method. static const initialized = const Method(r'initialized'); /// Constant for the 'shutdown' method. static const shutdown = const Method(r'shutdown'); /// Constant for the 'exit' method. static const exit = const Method(r'exit'); /// Constant for the 'window/showMessage' method. static const window_showMessage = const Method(r'window/showMessage'); /// Constant for the 'window/showMessageRequest' method. static const window_showMessageRequest = const Method(r'window/showMessageRequest'); /// Constant for the 'window/logMessage' method. static const window_logMessage = const Method(r'window/logMessage'); /// Constant for the 'telemetry/event' method. static const telemetry_event = const Method(r'telemetry/event'); /// Constant for the 'client/registerCapability' method. static const client_registerCapability = const Method(r'client/registerCapability'); /// Constant for the 'client/unregisterCapability' method. static const client_unregisterCapability = const Method(r'client/unregisterCapability'); /// Constant for the 'workspace/workspaceFolders' method. static const workspace_workspaceFolders = const Method(r'workspace/workspaceFolders'); /// Constant for the 'workspace/didChangeWorkspaceFolders' method. static const workspace_didChangeWorkspaceFolders = const Method(r'workspace/didChangeWorkspaceFolders'); /// Constant for the 'workspace/configuration' method. static const workspace_configuration = const Method(r'workspace/configuration'); /// Constant for the 'workspace/didChangeWatchedFiles' method. static const workspace_didChangeWatchedFiles = const Method(r'workspace/didChangeWatchedFiles'); /// Constant for the 'workspace/symbol' method. static const workspace_symbol = const Method(r'workspace/symbol'); /// Constant for the 'workspace/executeCommand' method. static const workspace_executeCommand = const Method(r'workspace/executeCommand'); /// Constant for the 'workspace/applyEdit' method. static const workspace_applyEdit = const Method(r'workspace/applyEdit'); /// Constant for the 'textDocument/didOpen' method. static const textDocument_didOpen = const Method(r'textDocument/didOpen'); /// Constant for the 'textDocument/didChange' method. static const textDocument_didChange = const Method(r'textDocument/didChange'); /// Constant for the 'textDocument/willSave' method. static const textDocument_willSave = const Method(r'textDocument/willSave'); /// Constant for the 'textDocument/willSaveWaitUntil' method. static const textDocument_willSaveWaitUntil = const Method(r'textDocument/willSaveWaitUntil'); /// Constant for the 'textDocument/didClose' method. static const textDocument_didClose = const Method(r'textDocument/didClose'); /// Constant for the 'textDocument/publishDiagnostics' method. static const textDocument_publishDiagnostics = const Method(r'textDocument/publishDiagnostics'); /// Constant for the 'textDocument/completion' method. static const textDocument_completion = const Method(r'textDocument/completion'); /// Constant for the 'completionItem/resolve' method. static const completionItem_resolve = const Method(r'completionItem/resolve'); /// Constant for the 'textDocument/hover' method. static const textDocument_hover = const Method(r'textDocument/hover'); /// Constant for the 'textDocument/signatureHelp' method. static const textDocument_signatureHelp = const Method(r'textDocument/signatureHelp'); /// Constant for the 'textDocument/declaration' method. static const textDocument_declaration = const Method(r'textDocument/declaration'); /// Constant for the 'textDocument/definition' method. static const textDocument_definition = const Method(r'textDocument/definition'); /// Constant for the 'textDocument/typeDefinition' method. static const textDocument_typeDefinition = const Method(r'textDocument/typeDefinition'); /// Constant for the 'textDocument/implementation' method. static const textDocument_implementation = const Method(r'textDocument/implementation'); /// Constant for the 'textDocument/references' method. static const textDocument_references = const Method(r'textDocument/references'); /// Constant for the 'textDocument/documentHighlight' method. static const textDocument_documentHighlight = const Method(r'textDocument/documentHighlight'); /// Constant for the 'textDocument/documentSymbol' method. static const textDocument_documentSymbol = const Method(r'textDocument/documentSymbol'); /// Constant for the 'textDocument/codeAction' method. static const textDocument_codeAction = const Method(r'textDocument/codeAction'); /// Constant for the 'textDocument/codeLens' method. static const textDocument_codeLens = const Method(r'textDocument/codeLens'); /// Constant for the 'codeLens/resolve' method. static const codeLens_resolve = const Method(r'codeLens/resolve'); /// Constant for the 'textDocument/documentLink' method. static const textDocument_documentLink = const Method(r'textDocument/documentLink'); /// Constant for the 'documentLink/resolve' method. static const documentLink_resolve = const Method(r'documentLink/resolve'); /// Constant for the 'textDocument/documentColor' method. static const textDocument_documentColor = const Method(r'textDocument/documentColor'); /// Constant for the 'textDocument/colorPresentation' method. static const textDocument_colorPresentation = const Method(r'textDocument/colorPresentation'); /// Constant for the 'textDocument/formatting' method. static const textDocument_formatting = const Method(r'textDocument/formatting'); /// Constant for the 'textDocument/onTypeFormatting' method. static const textDocument_onTypeFormatting = const Method(r'textDocument/onTypeFormatting'); /// Constant for the 'textDocument/rename' method. static const textDocument_rename = const Method(r'textDocument/rename'); /// Constant for the 'textDocument/prepareRename' method. static const textDocument_prepareRename = const Method(r'textDocument/prepareRename'); /// Constant for the 'textDocument/foldingRange' method. static const textDocument_foldingRange = const Method(r'textDocument/foldingRange'); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is Method && o._value == _value; } class NotificationMessage implements Message, IncomingMessage, ToJsonable { static const jsonHandler = const LspJsonHandler( NotificationMessage.canParse, NotificationMessage.fromJson); NotificationMessage(this.method, this.params, this.jsonrpc) { if (method == null) { throw 'method is required but was not provided'; } if (jsonrpc == null) { throw 'jsonrpc is required but was not provided'; } } static NotificationMessage fromJson(Map json) { final method = json['method'] != null ? Method.fromJson(json['method']) : null; final params = json['params']; final jsonrpc = json['jsonrpc']; return new NotificationMessage(method, params, jsonrpc); } final String jsonrpc; /// The method to be invoked. final Method method; /// The notification's params. final dynamic params; Map toJson() { Map __result = {}; __result['method'] = method ?? (throw 'method is required but was not set'); if (params != null) { __result['params'] = params; } __result['jsonrpc'] = jsonrpc ?? (throw 'jsonrpc is required but was not set'); 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; } if (obj['method'] == null) { reporter.reportError("must not be null"); return false; } if (!(Method.canParse(obj['method'], reporter))) { reporter.reportError("must be of type Method"); return false; } } finally { reporter.pop(); } reporter.push('params'); try { if (obj['params'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('jsonrpc'); try { if (!obj.containsKey('jsonrpc')) { reporter.reportError("must not be undefined"); return false; } if (obj['jsonrpc'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['jsonrpc'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type NotificationMessage"); return false; } } @override bool operator ==(other) { if (other is NotificationMessage) { return method == other.method && params == other.params && jsonrpc == other.jsonrpc && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, method.hashCode); hash = JenkinsSmiHash.combine(hash, params.hashCode); hash = JenkinsSmiHash.combine(hash, jsonrpc.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler( ParameterInformation.canParse, ParameterInformation.fromJson); ParameterInformation(this.label, this.documentation) { if (label == null) { throw 'label is required but was not provided'; } } static ParameterInformation fromJson(Map json) { final label = json['label']; final documentation = json['documentation'] is String ? new Either2.t1(json['documentation']) : (MarkupContent.canParse(json['documentation'], nullLspJsonReporter) ? new Either2.t2( json['documentation'] != null ? MarkupContent.fromJson(json['documentation']) : null) : (json['documentation'] == null ? null : (throw '''${json['documentation']} was not one of (String, MarkupContent)'''))); return new ParameterInformation(label, 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() { Map __result = {}; __result['label'] = label ?? (throw 'label is required but was not set'); 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; } if (obj['label'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['label'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('documentation'); try { if (obj['documentation'] != null && !((obj['documentation'] is String || MarkupContent.canParse(obj['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 ==(other) { if (other is ParameterInformation) { return label == other.label && documentation == other.documentation && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, label.hashCode); hash = JenkinsSmiHash.combine(hash, documentation.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class Position implements ToJsonable { static const jsonHandler = const LspJsonHandler(Position.canParse, Position.fromJson); Position(this.line, this.character) { if (line == null) { throw 'line is required but was not provided'; } if (character == null) { throw 'character is required but was not provided'; } } static Position fromJson(Map json) { final line = json['line']; final character = json['character']; return new Position(line, 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 num character; /// Line position in a document (zero-based). final num line; Map toJson() { Map __result = {}; __result['line'] = line ?? (throw 'line is required but was not set'); __result['character'] = character ?? (throw 'character is required but was not set'); 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; } if (obj['line'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['line'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('character'); try { if (!obj.containsKey('character')) { reporter.reportError("must not be undefined"); return false; } if (obj['character'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['character'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type Position"); return false; } } @override bool operator ==(other) { if (other is Position) { return line == other.line && character == other.character && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, line.hashCode); hash = JenkinsSmiHash.combine(hash, character.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class PublishDiagnosticsParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( PublishDiagnosticsParams.canParse, PublishDiagnosticsParams.fromJson); PublishDiagnosticsParams(this.uri, this.diagnostics) { if (uri == null) { throw 'uri is required but was not provided'; } if (diagnostics == null) { throw 'diagnostics is required but was not provided'; } } static PublishDiagnosticsParams fromJson(Map json) { final uri = json['uri']; final diagnostics = json['diagnostics'] ?.map((item) => item != null ? Diagnostic.fromJson(item) : null) ?.cast() ?.toList(); return new PublishDiagnosticsParams(uri, diagnostics); } /// An array of diagnostic information items. final List diagnostics; /// The URI for which diagnostic information is reported. final String uri; Map toJson() { Map __result = {}; __result['uri'] = uri ?? (throw 'uri is required but was not set'); __result['diagnostics'] = diagnostics ?? (throw 'diagnostics is required but was not set'); 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['uri'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('diagnostics'); try { if (!obj.containsKey('diagnostics')) { reporter.reportError("must not be undefined"); return false; } if (obj['diagnostics'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['diagnostics'] is List && (obj['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 ==(other) { if (other is PublishDiagnosticsParams) { return uri == other.uri && listEqual(diagnostics, other.diagnostics, (Diagnostic a, Diagnostic b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, diagnostics.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class Range implements ToJsonable { static const jsonHandler = const LspJsonHandler(Range.canParse, Range.fromJson); Range(this.start, this.end) { if (start == null) { throw 'start is required but was not provided'; } if (end == null) { throw 'end is required but was not provided'; } } static Range fromJson(Map json) { final start = json['start'] != null ? Position.fromJson(json['start']) : null; final end = json['end'] != null ? Position.fromJson(json['end']) : null; return new Range(start, end); } /// The range's end position. final Position end; /// The range's start position. final Position start; Map toJson() { Map __result = {}; __result['start'] = start ?? (throw 'start is required but was not set'); __result['end'] = end ?? (throw 'end is required but was not set'); 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; } if (obj['start'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['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; } if (obj['end'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['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 ==(other) { if (other is Range) { return start == other.start && end == other.end && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, start.hashCode); hash = JenkinsSmiHash.combine(hash, end.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class RangeAndPlaceholder implements ToJsonable { static const jsonHandler = const LspJsonHandler( RangeAndPlaceholder.canParse, RangeAndPlaceholder.fromJson); RangeAndPlaceholder(this.range, this.placeholder) { if (range == null) { throw 'range is required but was not provided'; } if (placeholder == null) { throw 'placeholder is required but was not provided'; } } static RangeAndPlaceholder fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final placeholder = json['placeholder']; return new RangeAndPlaceholder(range, placeholder); } final String placeholder; final Range range; Map toJson() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); __result['placeholder'] = placeholder ?? (throw 'placeholder is required but was not set'); 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['placeholder'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is RangeAndPlaceholder) { return range == other.range && placeholder == other.placeholder && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, placeholder.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceContext implements ToJsonable { static const jsonHandler = const LspJsonHandler( ReferenceContext.canParse, ReferenceContext.fromJson); ReferenceContext(this.includeDeclaration) { if (includeDeclaration == null) { throw 'includeDeclaration is required but was not provided'; } } static ReferenceContext fromJson(Map json) { final includeDeclaration = json['includeDeclaration']; return new ReferenceContext(includeDeclaration); } /// Include the declaration of the current symbol. final bool includeDeclaration; Map toJson() { Map __result = {}; __result['includeDeclaration'] = includeDeclaration ?? (throw 'includeDeclaration is required but was not set'); 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; } if (obj['includeDeclaration'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is ReferenceContext) { return includeDeclaration == other.includeDeclaration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, includeDeclaration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ReferenceParams implements TextDocumentPositionParams, ToJsonable { static const jsonHandler = const LspJsonHandler(ReferenceParams.canParse, ReferenceParams.fromJson); ReferenceParams(this.context, this.textDocument, this.position) { if (context == null) { throw 'context is required but was not provided'; } if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (position == null) { throw 'position is required but was not provided'; } } static ReferenceParams fromJson(Map json) { final context = json['context'] != null ? ReferenceContext.fromJson(json['context']) : null; final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final position = json['position'] != null ? Position.fromJson(json['position']) : null; return new ReferenceParams(context, textDocument, position); } final ReferenceContext context; /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['context'] = context ?? (throw 'context is required but was not set'); __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['position'] = position ?? (throw 'position is required but was not set'); 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; } if (obj['context'] == null) { reporter.reportError("must not be null"); return false; } if (!(ReferenceContext.canParse(obj['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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['position'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['position'], reporter))) { reporter.reportError("must be of type Position"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ReferenceParams"); return false; } } @override bool operator ==(other) { if (other is ReferenceParams) { return context == other.context && textDocument == other.textDocument && position == other.position && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, context.hashCode); hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, position.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// General parameters to register for a capability. class Registration implements ToJsonable { static const jsonHandler = const LspJsonHandler(Registration.canParse, Registration.fromJson); Registration(this.id, this.method, this.registerOptions) { if (id == null) { throw 'id is required but was not provided'; } if (method == null) { throw 'method is required but was not provided'; } } static Registration fromJson(Map json) { final id = json['id']; final method = json['method']; final registerOptions = json['registerOptions']; return new Registration(id, method, 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 dynamic registerOptions; Map toJson() { Map __result = {}; __result['id'] = id ?? (throw 'id is required but was not set'); __result['method'] = method ?? (throw 'method is required but was not set'); 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; } if (obj['id'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['method'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['method'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('registerOptions'); try { if (obj['registerOptions'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type Registration"); return false; } } @override bool operator ==(other) { if (other is Registration) { return id == other.id && method == other.method && registerOptions == other.registerOptions && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, id.hashCode); hash = JenkinsSmiHash.combine(hash, method.hashCode); hash = JenkinsSmiHash.combine(hash, registerOptions.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class RegistrationParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( RegistrationParams.canParse, RegistrationParams.fromJson); RegistrationParams(this.registrations) { if (registrations == null) { throw 'registrations is required but was not provided'; } } static RegistrationParams fromJson(Map json) { final registrations = json['registrations'] ?.map((item) => item != null ? Registration.fromJson(item) : null) ?.cast() ?.toList(); return new RegistrationParams(registrations); } final List registrations; Map toJson() { Map __result = {}; __result['registrations'] = registrations ?? (throw 'registrations is required but was not set'); 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; } if (obj['registrations'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['registrations'] is List && (obj['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 ==(other) { if (other is RegistrationParams) { return listEqual(registrations, other.registrations, (Registration a, Registration b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, registrations.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Rename file operation class RenameFile implements ToJsonable { static const jsonHandler = const LspJsonHandler(RenameFile.canParse, RenameFile.fromJson); RenameFile(this.kind, this.oldUri, this.newUri, this.options) { if (kind == null) { throw 'kind is required but was not provided'; } if (oldUri == null) { throw 'oldUri is required but was not provided'; } if (newUri == null) { throw 'newUri is required but was not provided'; } } static RenameFile fromJson(Map json) { final kind = json['kind']; final oldUri = json['oldUri']; final newUri = json['newUri']; final options = json['options'] != null ? RenameFileOptions.fromJson(json['options']) : null; return new RenameFile(kind, oldUri, newUri, options); } /// 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() { Map __result = {}; __result['kind'] = kind ?? (throw 'kind is required but was not set'); __result['oldUri'] = oldUri ?? (throw 'oldUri is required but was not set'); __result['newUri'] = newUri ?? (throw 'newUri is required but was not set'); if (options != null) { __result['options'] = options; } 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; } if (obj['kind'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['kind'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('oldUri'); try { if (!obj.containsKey('oldUri')) { reporter.reportError("must not be undefined"); return false; } if (obj['oldUri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['newUri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['newUri'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('options'); try { if (obj['options'] != null && !(RenameFileOptions.canParse(obj['options'], reporter))) { reporter.reportError("must be of type RenameFileOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type RenameFile"); return false; } } @override bool operator ==(other) { if (other is RenameFile) { return kind == other.kind && oldUri == other.oldUri && newUri == other.newUri && options == other.options && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, oldUri.hashCode); hash = JenkinsSmiHash.combine(hash, newUri.hashCode); hash = JenkinsSmiHash.combine(hash, options.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Rename file options class RenameFileOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( RenameFileOptions.canParse, RenameFileOptions.fromJson); RenameFileOptions(this.overwrite, this.ignoreIfExists); static RenameFileOptions fromJson(Map json) { final overwrite = json['overwrite']; final ignoreIfExists = json['ignoreIfExists']; return new RenameFileOptions(overwrite, ignoreIfExists); } /// Ignores if target exists. final bool ignoreIfExists; /// Overwrite target if existing. Overwrite wins over `ignoreIfExists` final bool overwrite; Map toJson() { Map __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 { if (obj['overwrite'] != null && !(obj['overwrite'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('ignoreIfExists'); try { if (obj['ignoreIfExists'] != null && !(obj['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 ==(other) { if (other is RenameFileOptions) { return overwrite == other.overwrite && ignoreIfExists == other.ignoreIfExists && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, overwrite.hashCode); hash = JenkinsSmiHash.combine(hash, ignoreIfExists.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Rename options class RenameOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler(RenameOptions.canParse, RenameOptions.fromJson); RenameOptions(this.prepareProvider); static RenameOptions fromJson(Map json) { final prepareProvider = json['prepareProvider']; return new RenameOptions(prepareProvider); } /// Renames should be checked and tested before being executed. final bool prepareProvider; Map toJson() { Map __result = {}; if (prepareProvider != null) { __result['prepareProvider'] = prepareProvider; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('prepareProvider'); try { if (obj['prepareProvider'] != null && !(obj['prepareProvider'] 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 ==(other) { if (other is RenameOptions) { return prepareProvider == other.prepareProvider && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, prepareProvider.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class RenameParams implements ToJsonable { static const jsonHandler = const LspJsonHandler(RenameParams.canParse, RenameParams.fromJson); RenameParams(this.textDocument, this.position, this.newName) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (position == null) { throw 'position is required but was not provided'; } if (newName == null) { throw 'newName is required but was not provided'; } } static RenameParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final position = json['position'] != null ? Position.fromJson(json['position']) : null; final newName = json['newName']; return new RenameParams(textDocument, position, newName); } /// 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 at which this request was sent. final Position position; /// The document to rename. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['position'] = position ?? (throw 'position is required but was not set'); __result['newName'] = newName ?? (throw 'newName is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['position'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['position'], reporter))) { reporter.reportError("must be of type Position"); return false; } } finally { reporter.pop(); } reporter.push('newName'); try { if (!obj.containsKey('newName')) { reporter.reportError("must not be undefined"); return false; } if (obj['newName'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['newName'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type RenameParams"); return false; } } @override bool operator ==(other) { if (other is RenameParams) { return textDocument == other.textDocument && position == other.position && newName == other.newName && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, position.hashCode); hash = JenkinsSmiHash.combine(hash, newName.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class RenameRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( RenameRegistrationOptions.canParse, RenameRegistrationOptions.fromJson); RenameRegistrationOptions(this.prepareProvider, this.documentSelector); static RenameRegistrationOptions fromJson(Map json) { final prepareProvider = json['prepareProvider']; final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new RenameRegistrationOptions(prepareProvider, 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; /// Renames should be checked and tested for validity before being executed. final bool prepareProvider; Map toJson() { Map __result = {}; if (prepareProvider != null) { __result['prepareProvider'] = prepareProvider; } __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('prepareProvider'); try { if (obj['prepareProvider'] != null && !(obj['prepareProvider'] 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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 RenameRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is RenameRegistrationOptions) { return prepareProvider == other.prepareProvider && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, prepareProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class RequestMessage implements Message, IncomingMessage, ToJsonable { static const jsonHandler = const LspJsonHandler(RequestMessage.canParse, RequestMessage.fromJson); RequestMessage(this.id, this.method, this.params, this.jsonrpc) { if (id == null) { throw 'id is required but was not provided'; } if (method == null) { throw 'method is required but was not provided'; } if (jsonrpc == null) { throw 'jsonrpc is required but was not provided'; } } static RequestMessage fromJson(Map json) { final id = json['id'] is num ? new Either2.t1(json['id']) : (json['id'] is String ? new Either2.t2(json['id']) : (throw '''${json['id']} was not one of (num, String)''')); final method = json['method'] != null ? Method.fromJson(json['method']) : null; final params = json['params']; final jsonrpc = json['jsonrpc']; return new RequestMessage(id, method, params, jsonrpc); } /// The request id. final Either2 id; final String jsonrpc; /// The method to be invoked. final Method method; /// The method's params. final dynamic params; Map toJson() { Map __result = {}; __result['id'] = id ?? (throw 'id is required but was not set'); __result['method'] = method ?? (throw 'method is required but was not set'); if (params != null) { __result['params'] = params; } __result['jsonrpc'] = jsonrpc ?? (throw 'jsonrpc is required but was not set'); 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; } if (obj['id'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['id'] is num || obj['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; } if (obj['method'] == null) { reporter.reportError("must not be null"); return false; } if (!(Method.canParse(obj['method'], reporter))) { reporter.reportError("must be of type Method"); return false; } } finally { reporter.pop(); } reporter.push('params'); try { if (obj['params'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('jsonrpc'); try { if (!obj.containsKey('jsonrpc')) { reporter.reportError("must not be undefined"); return false; } if (obj['jsonrpc'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['jsonrpc'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type RequestMessage"); return false; } } @override bool operator ==(other) { if (other is RequestMessage) { return id == other.id && method == other.method && params == other.params && jsonrpc == other.jsonrpc && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, id.hashCode); hash = JenkinsSmiHash.combine(hash, method.hashCode); hash = JenkinsSmiHash.combine(hash, params.hashCode); hash = JenkinsSmiHash.combine(hash, jsonrpc.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const ResourceOperationKind._('create'); /// Supports renaming existing files and folders. static const Rename = const ResourceOperationKind._('rename'); /// Supports deleting existing files and folders. static const Delete = const ResourceOperationKind._('delete'); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is ResourceOperationKind && o._value == _value; } class ResponseError implements ToJsonable { static const jsonHandler = const LspJsonHandler(ResponseError.canParse, ResponseError.fromJson); ResponseError(this.code, this.message, this.data) { if (code == null) { throw 'code is required but was not provided'; } if (message == null) { throw 'message is required but was not provided'; } } static ResponseError fromJson(Map json) { final code = json['code'] != null ? ErrorCodes.fromJson(json['code']) : null; final message = json['message']; final data = json['data']; return new ResponseError(code, message, 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() { Map __result = {}; __result['code'] = code ?? (throw 'code is required but was not set'); __result['message'] = message ?? (throw 'message is required but was not set'); 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; } if (obj['code'] == null) { reporter.reportError("must not be null"); return false; } if (!(ErrorCodes.canParse(obj['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; } if (obj['message'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['message'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('data'); try { if (obj['data'] != null && !(obj['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 ==(other) { if (other is ResponseError) { return code == other.code && message == other.message && data == other.data && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, code.hashCode); hash = JenkinsSmiHash.combine(hash, message.hashCode); hash = JenkinsSmiHash.combine(hash, data.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ResponseMessage implements Message, ToJsonable { static const jsonHandler = const LspJsonHandler(ResponseMessage.canParse, ResponseMessage.fromJson); ResponseMessage(this.id, this.result, this.error, this.jsonrpc) { if (jsonrpc == null) { throw 'jsonrpc is required but was not provided'; } } static ResponseMessage fromJson(Map json) { final id = json['id'] is num ? new Either2.t1(json['id']) : (json['id'] is String ? new Either2.t2(json['id']) : (json['id'] == null ? null : (throw '''${json['id']} was not one of (num, String)'''))); final result = json['result']; final error = json['error'] != null ? ResponseError.fromJson(json['error']) : null; final jsonrpc = json['jsonrpc']; return new ResponseMessage(id, result, error, jsonrpc); } /// 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 dynamic result; Map toJson() { Map __result = {}; __result['id'] = id; __result['jsonrpc'] = jsonrpc ?? (throw 'jsonrpc is required but was not set'); 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; } if (obj['id'] != null && !((obj['id'] is num || obj['id'] is String))) { reporter.reportError("must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('result'); try { if (obj['result'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('error'); try { if (obj['error'] != null && !(ResponseError.canParse(obj['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; } if (obj['jsonrpc'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['jsonrpc'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ResponseMessage"); return false; } } @override bool operator ==(other) { if (other is ResponseMessage) { return id == other.id && result == other.result && error == other.error && jsonrpc == other.jsonrpc && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, id.hashCode); hash = JenkinsSmiHash.combine(hash, result.hashCode); hash = JenkinsSmiHash.combine(hash, error.hashCode); hash = JenkinsSmiHash.combine(hash, jsonrpc.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Save options. class SaveOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler(SaveOptions.canParse, SaveOptions.fromJson); SaveOptions(this.includeText); static SaveOptions fromJson(Map json) { final includeText = json['includeText']; return new SaveOptions(includeText); } /// The client is supposed to include the content on save. final bool includeText; Map toJson() { Map __result = {}; if (includeText != null) { __result['includeText'] = includeText; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('includeText'); try { if (obj['includeText'] != null && !(obj['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 ==(other) { if (other is SaveOptions) { return includeText == other.includeText && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, includeText.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ServerCapabilities implements ToJsonable { static const jsonHandler = const LspJsonHandler( ServerCapabilities.canParse, ServerCapabilities.fromJson); ServerCapabilities( this.textDocumentSync, this.hoverProvider, this.completionProvider, this.signatureHelpProvider, this.definitionProvider, this.typeDefinitionProvider, this.implementationProvider, this.referencesProvider, this.documentHighlightProvider, this.documentSymbolProvider, this.workspaceSymbolProvider, this.codeActionProvider, this.codeLensProvider, this.documentFormattingProvider, this.documentRangeFormattingProvider, this.documentOnTypeFormattingProvider, this.renameProvider, this.documentLinkProvider, this.colorProvider, this.foldingRangeProvider, this.declarationProvider, this.executeCommandProvider, this.workspace, this.experimental); static ServerCapabilities fromJson(Map json) { final textDocumentSync = TextDocumentSyncOptions.canParse( json['textDocumentSync'], nullLspJsonReporter) ? new Either2.t1( json['textDocumentSync'] != null ? TextDocumentSyncOptions.fromJson(json['textDocumentSync']) : null) : (json['textDocumentSync'] is num ? new Either2.t2( json['textDocumentSync']) : (json['textDocumentSync'] == null ? null : (throw '''${json['textDocumentSync']} was not one of (TextDocumentSyncOptions, num)'''))); final hoverProvider = json['hoverProvider']; final completionProvider = json['completionProvider'] != null ? CompletionOptions.fromJson(json['completionProvider']) : null; final signatureHelpProvider = json['signatureHelpProvider'] != null ? SignatureHelpOptions.fromJson(json['signatureHelpProvider']) : null; final definitionProvider = json['definitionProvider']; final typeDefinitionProvider = json['typeDefinitionProvider']; final implementationProvider = json['implementationProvider']; final referencesProvider = json['referencesProvider']; final documentHighlightProvider = json['documentHighlightProvider']; final documentSymbolProvider = json['documentSymbolProvider']; final workspaceSymbolProvider = json['workspaceSymbolProvider']; final codeActionProvider = json['codeActionProvider'] is bool ? new Either2.t1(json['codeActionProvider']) : (CodeActionOptions.canParse( json['codeActionProvider'], nullLspJsonReporter) ? new Either2.t2( json['codeActionProvider'] != null ? CodeActionOptions.fromJson(json['codeActionProvider']) : null) : (json['codeActionProvider'] == null ? null : (throw '''${json['codeActionProvider']} was not one of (bool, CodeActionOptions)'''))); final codeLensProvider = json['codeLensProvider'] != null ? CodeLensOptions.fromJson(json['codeLensProvider']) : null; final documentFormattingProvider = json['documentFormattingProvider']; final documentRangeFormattingProvider = json['documentRangeFormattingProvider']; final documentOnTypeFormattingProvider = json['documentOnTypeFormattingProvider'] != null ? DocumentOnTypeFormattingOptions.fromJson( json['documentOnTypeFormattingProvider']) : null; final renameProvider = json['renameProvider'] is bool ? new Either2.t1(json['renameProvider']) : (RenameOptions.canParse(json['renameProvider'], nullLspJsonReporter) ? new Either2.t2(json['renameProvider'] != null ? RenameOptions.fromJson(json['renameProvider']) : null) : (json['renameProvider'] == null ? null : (throw '''${json['renameProvider']} was not one of (bool, RenameOptions)'''))); final documentLinkProvider = json['documentLinkProvider'] != null ? DocumentLinkOptions.fromJson(json['documentLinkProvider']) : null; final colorProvider = json['colorProvider']; final foldingRangeProvider = json['foldingRangeProvider']; final declarationProvider = json['declarationProvider']; final executeCommandProvider = json['executeCommandProvider'] != null ? ExecuteCommandOptions.fromJson(json['executeCommandProvider']) : null; final workspace = json['workspace'] != null ? ServerCapabilitiesWorkspace.fromJson(json['workspace']) : null; final experimental = json['experimental']; return new ServerCapabilities( textDocumentSync, hoverProvider, completionProvider, signatureHelpProvider, definitionProvider, typeDefinitionProvider, implementationProvider, referencesProvider, documentHighlightProvider, documentSymbolProvider, workspaceSymbolProvider, codeActionProvider, codeLensProvider, documentFormattingProvider, documentRangeFormattingProvider, documentOnTypeFormattingProvider, renameProvider, documentLinkProvider, colorProvider, foldingRangeProvider, declarationProvider, executeCommandProvider, workspace, experimental); } /// 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 dynamic colorProvider; /// The server provides completion support. final CompletionOptions completionProvider; /// The server provides go to declaration support. /// /// Since 3.14.0 final dynamic declarationProvider; /// The server provides goto definition support. final bool definitionProvider; /// The server provides document formatting. final bool documentFormattingProvider; /// The server provides document highlight support. final bool 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 bool documentRangeFormattingProvider; /// The server provides document symbol support. final bool documentSymbolProvider; /// The server provides execute command support. final ExecuteCommandOptions executeCommandProvider; /// Experimental server capabilities. final dynamic experimental; /// The server provides folding provider support. /// /// Since 3.10.0 final dynamic foldingRangeProvider; /// The server provides hover support. final bool hoverProvider; /// The server provides Goto Implementation support. /// /// Since 3.6.0 final dynamic implementationProvider; /// The server provides find references support. final bool 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 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 dynamic typeDefinitionProvider; /// Workspace specific server capabilities final ServerCapabilitiesWorkspace workspace; /// The server provides workspace symbol support. final bool workspaceSymbolProvider; Map toJson() { Map __result = {}; if (textDocumentSync != null) { __result['textDocumentSync'] = textDocumentSync; } if (hoverProvider != null) { __result['hoverProvider'] = hoverProvider; } if (completionProvider != null) { __result['completionProvider'] = completionProvider; } if (signatureHelpProvider != null) { __result['signatureHelpProvider'] = signatureHelpProvider; } 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 (workspaceSymbolProvider != null) { __result['workspaceSymbolProvider'] = workspaceSymbolProvider; } if (codeActionProvider != null) { __result['codeActionProvider'] = codeActionProvider; } if (codeLensProvider != null) { __result['codeLensProvider'] = codeLensProvider; } if (documentFormattingProvider != null) { __result['documentFormattingProvider'] = documentFormattingProvider; } if (documentRangeFormattingProvider != null) { __result['documentRangeFormattingProvider'] = documentRangeFormattingProvider; } if (documentOnTypeFormattingProvider != null) { __result['documentOnTypeFormattingProvider'] = documentOnTypeFormattingProvider; } if (renameProvider != null) { __result['renameProvider'] = renameProvider; } if (documentLinkProvider != null) { __result['documentLinkProvider'] = documentLinkProvider; } if (colorProvider != null) { __result['colorProvider'] = colorProvider; } if (foldingRangeProvider != null) { __result['foldingRangeProvider'] = foldingRangeProvider; } if (declarationProvider != null) { __result['declarationProvider'] = declarationProvider; } if (executeCommandProvider != null) { __result['executeCommandProvider'] = executeCommandProvider; } if (workspace != null) { __result['workspace'] = workspace; } if (experimental != null) { __result['experimental'] = experimental; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('textDocumentSync'); try { if (obj['textDocumentSync'] != null && !((TextDocumentSyncOptions.canParse( obj['textDocumentSync'], reporter) || obj['textDocumentSync'] is num))) { reporter.reportError( "must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('hoverProvider'); try { if (obj['hoverProvider'] != null && !(obj['hoverProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('completionProvider'); try { if (obj['completionProvider'] != null && !(CompletionOptions.canParse( obj['completionProvider'], reporter))) { reporter.reportError("must be of type CompletionOptions"); return false; } } finally { reporter.pop(); } reporter.push('signatureHelpProvider'); try { if (obj['signatureHelpProvider'] != null && !(SignatureHelpOptions.canParse( obj['signatureHelpProvider'], reporter))) { reporter.reportError("must be of type SignatureHelpOptions"); return false; } } finally { reporter.pop(); } reporter.push('definitionProvider'); try { if (obj['definitionProvider'] != null && !(obj['definitionProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('typeDefinitionProvider'); try { if (obj['typeDefinitionProvider'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('implementationProvider'); try { if (obj['implementationProvider'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('referencesProvider'); try { if (obj['referencesProvider'] != null && !(obj['referencesProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('documentHighlightProvider'); try { if (obj['documentHighlightProvider'] != null && !(obj['documentHighlightProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('documentSymbolProvider'); try { if (obj['documentSymbolProvider'] != null && !(obj['documentSymbolProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('workspaceSymbolProvider'); try { if (obj['workspaceSymbolProvider'] != null && !(obj['workspaceSymbolProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('codeActionProvider'); try { if (obj['codeActionProvider'] != null && !((obj['codeActionProvider'] is bool || CodeActionOptions.canParse( obj['codeActionProvider'], reporter)))) { reporter .reportError("must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('codeLensProvider'); try { if (obj['codeLensProvider'] != null && !(CodeLensOptions.canParse(obj['codeLensProvider'], reporter))) { reporter.reportError("must be of type CodeLensOptions"); return false; } } finally { reporter.pop(); } reporter.push('documentFormattingProvider'); try { if (obj['documentFormattingProvider'] != null && !(obj['documentFormattingProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('documentRangeFormattingProvider'); try { if (obj['documentRangeFormattingProvider'] != null && !(obj['documentRangeFormattingProvider'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('documentOnTypeFormattingProvider'); try { if (obj['documentOnTypeFormattingProvider'] != null && !(DocumentOnTypeFormattingOptions.canParse( obj['documentOnTypeFormattingProvider'], reporter))) { reporter .reportError("must be of type DocumentOnTypeFormattingOptions"); return false; } } finally { reporter.pop(); } reporter.push('renameProvider'); try { if (obj['renameProvider'] != null && !((obj['renameProvider'] is bool || RenameOptions.canParse(obj['renameProvider'], reporter)))) { reporter.reportError("must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('documentLinkProvider'); try { if (obj['documentLinkProvider'] != null && !(DocumentLinkOptions.canParse( obj['documentLinkProvider'], reporter))) { reporter.reportError("must be of type DocumentLinkOptions"); return false; } } finally { reporter.pop(); } reporter.push('colorProvider'); try { if (obj['colorProvider'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('foldingRangeProvider'); try { if (obj['foldingRangeProvider'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('declarationProvider'); try { if (obj['declarationProvider'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } reporter.push('executeCommandProvider'); try { if (obj['executeCommandProvider'] != null && !(ExecuteCommandOptions.canParse( obj['executeCommandProvider'], reporter))) { reporter.reportError("must be of type ExecuteCommandOptions"); return false; } } finally { reporter.pop(); } reporter.push('workspace'); try { if (obj['workspace'] != null && !(ServerCapabilitiesWorkspace.canParse( obj['workspace'], reporter))) { reporter.reportError("must be of type ServerCapabilitiesWorkspace"); return false; } } finally { reporter.pop(); } reporter.push('experimental'); try { if (obj['experimental'] != null && !(true)) { reporter.reportError("must be of type dynamic"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ServerCapabilities"); return false; } } @override bool operator ==(other) { if (other is ServerCapabilities) { return textDocumentSync == other.textDocumentSync && hoverProvider == other.hoverProvider && completionProvider == other.completionProvider && signatureHelpProvider == other.signatureHelpProvider && definitionProvider == other.definitionProvider && typeDefinitionProvider == other.typeDefinitionProvider && implementationProvider == other.implementationProvider && referencesProvider == other.referencesProvider && documentHighlightProvider == other.documentHighlightProvider && documentSymbolProvider == other.documentSymbolProvider && workspaceSymbolProvider == other.workspaceSymbolProvider && codeActionProvider == other.codeActionProvider && codeLensProvider == other.codeLensProvider && documentFormattingProvider == other.documentFormattingProvider && documentRangeFormattingProvider == other.documentRangeFormattingProvider && documentOnTypeFormattingProvider == other.documentOnTypeFormattingProvider && renameProvider == other.renameProvider && documentLinkProvider == other.documentLinkProvider && colorProvider == other.colorProvider && foldingRangeProvider == other.foldingRangeProvider && declarationProvider == other.declarationProvider && executeCommandProvider == other.executeCommandProvider && workspace == other.workspace && experimental == other.experimental && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocumentSync.hashCode); hash = JenkinsSmiHash.combine(hash, hoverProvider.hashCode); hash = JenkinsSmiHash.combine(hash, completionProvider.hashCode); hash = JenkinsSmiHash.combine(hash, signatureHelpProvider.hashCode); hash = JenkinsSmiHash.combine(hash, definitionProvider.hashCode); hash = JenkinsSmiHash.combine(hash, typeDefinitionProvider.hashCode); hash = JenkinsSmiHash.combine(hash, implementationProvider.hashCode); hash = JenkinsSmiHash.combine(hash, referencesProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentHighlightProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentSymbolProvider.hashCode); hash = JenkinsSmiHash.combine(hash, workspaceSymbolProvider.hashCode); hash = JenkinsSmiHash.combine(hash, codeActionProvider.hashCode); hash = JenkinsSmiHash.combine(hash, codeLensProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentFormattingProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentRangeFormattingProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentOnTypeFormattingProvider.hashCode); hash = JenkinsSmiHash.combine(hash, renameProvider.hashCode); hash = JenkinsSmiHash.combine(hash, documentLinkProvider.hashCode); hash = JenkinsSmiHash.combine(hash, colorProvider.hashCode); hash = JenkinsSmiHash.combine(hash, foldingRangeProvider.hashCode); hash = JenkinsSmiHash.combine(hash, declarationProvider.hashCode); hash = JenkinsSmiHash.combine(hash, executeCommandProvider.hashCode); hash = JenkinsSmiHash.combine(hash, workspace.hashCode); hash = JenkinsSmiHash.combine(hash, experimental.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ServerCapabilitiesWorkspace implements ToJsonable { static const jsonHandler = const LspJsonHandler( ServerCapabilitiesWorkspace.canParse, ServerCapabilitiesWorkspace.fromJson); ServerCapabilitiesWorkspace(this.workspaceFolders); static ServerCapabilitiesWorkspace fromJson(Map json) { final workspaceFolders = json['workspaceFolders'] != null ? ServerCapabilitiesWorkspaceFolders.fromJson(json['workspaceFolders']) : null; return new ServerCapabilitiesWorkspace(workspaceFolders); } /// The server supports workspace folder. /// /// Since 3.6.0 final ServerCapabilitiesWorkspaceFolders workspaceFolders; Map toJson() { Map __result = {}; if (workspaceFolders != null) { __result['workspaceFolders'] = workspaceFolders; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('workspaceFolders'); try { if (obj['workspaceFolders'] != null && !(ServerCapabilitiesWorkspaceFolders.canParse( obj['workspaceFolders'], reporter))) { reporter.reportError( "must be of type ServerCapabilitiesWorkspaceFolders"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type ServerCapabilitiesWorkspace"); return false; } } @override bool operator ==(other) { if (other is ServerCapabilitiesWorkspace) { return workspaceFolders == other.workspaceFolders && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, workspaceFolders.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ServerCapabilitiesWorkspaceFolders implements ToJsonable { static const jsonHandler = const LspJsonHandler( ServerCapabilitiesWorkspaceFolders.canParse, ServerCapabilitiesWorkspaceFolders.fromJson); ServerCapabilitiesWorkspaceFolders(this.supported, this.changeNotifications); static ServerCapabilitiesWorkspaceFolders fromJson( Map json) { final supported = json['supported']; final changeNotifications = json['changeNotifications']; return new ServerCapabilitiesWorkspaceFolders( supported, changeNotifications); } /// Whether the server wants to receive workspace folder change notifications. /// /// If a strings is provided the string is treated as a 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 bool changeNotifications; /// The server has support for workspace folders final bool supported; Map toJson() { Map __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 { if (obj['supported'] != null && !(obj['supported'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('changeNotifications'); try { if (obj['changeNotifications'] != null && !(obj['changeNotifications'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError("must be of type ServerCapabilitiesWorkspaceFolders"); return false; } } @override bool operator ==(other) { if (other is ServerCapabilitiesWorkspaceFolders) { return supported == other.supported && changeNotifications == other.changeNotifications && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, supported.hashCode); hash = JenkinsSmiHash.combine(hash, changeNotifications.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ShowMessageParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( ShowMessageParams.canParse, ShowMessageParams.fromJson); ShowMessageParams(this.type, this.message) { if (type == null) { throw 'type is required but was not provided'; } if (message == null) { throw 'message is required but was not provided'; } } static ShowMessageParams fromJson(Map json) { final type = json['type'] != null ? MessageType.fromJson(json['type']) : null; final message = json['message']; return new ShowMessageParams(type, message); } /// The actual message. final String message; /// The message type. final MessageType type; Map toJson() { Map __result = {}; __result['type'] = type ?? (throw 'type is required but was not set'); __result['message'] = message ?? (throw 'message is required but was not set'); 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; } if (obj['type'] == null) { reporter.reportError("must not be null"); return false; } if (!(MessageType.canParse(obj['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; } if (obj['message'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is ShowMessageParams) { return type == other.type && message == other.message && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, type.hashCode); hash = JenkinsSmiHash.combine(hash, message.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class ShowMessageRequestParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( ShowMessageRequestParams.canParse, ShowMessageRequestParams.fromJson); ShowMessageRequestParams(this.type, this.message, this.actions) { if (type == null) { throw 'type is required but was not provided'; } if (message == null) { throw 'message is required but was not provided'; } } static ShowMessageRequestParams fromJson(Map json) { final type = json['type'] != null ? MessageType.fromJson(json['type']) : null; final message = json['message']; final actions = json['actions'] ?.map((item) => item != null ? MessageActionItem.fromJson(item) : null) ?.cast() ?.toList(); return new ShowMessageRequestParams(type, message, actions); } /// The message action items to present. final List actions; /// The actual message final String message; /// The message type. final MessageType type; Map toJson() { Map __result = {}; __result['type'] = type ?? (throw 'type is required but was not set'); __result['message'] = message ?? (throw 'message is required but was not set'); if (actions != null) { __result['actions'] = actions; } 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; } if (obj['type'] == null) { reporter.reportError("must not be null"); return false; } if (!(MessageType.canParse(obj['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; } if (obj['message'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['message'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('actions'); try { if (obj['actions'] != null && !((obj['actions'] is List && (obj['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 ==(other) { if (other is 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, type.hashCode); hash = JenkinsSmiHash.combine(hash, message.hashCode); hash = JenkinsSmiHash.combine(hash, actions.hashCode); return JenkinsSmiHash.finish(hash); } @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 = const LspJsonHandler(SignatureHelp.canParse, SignatureHelp.fromJson); SignatureHelp(this.signatures, this.activeSignature, this.activeParameter) { if (signatures == null) { throw 'signatures is required but was not provided'; } } static SignatureHelp fromJson(Map json) { final signatures = json['signatures'] ?.map( (item) => item != null ? SignatureInformation.fromJson(item) : null) ?.cast() ?.toList(); final activeSignature = json['activeSignature']; final activeParameter = json['activeParameter']; return new SignatureHelp(signatures, activeSignature, 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 num activeParameter; /// The active signature. If omitted or the value lies outside the range of /// `signatures` the value defaults to zero or is ignored if /// `signatures.length === 0`. 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 num activeSignature; /// One or more signatures. final List signatures; Map toJson() { Map __result = {}; __result['signatures'] = signatures ?? (throw 'signatures is required but was not set'); 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; } if (obj['signatures'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['signatures'] is List && (obj['signatures'].every( (item) => SignatureInformation.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('activeSignature'); try { if (obj['activeSignature'] != null && !(obj['activeSignature'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('activeParameter'); try { if (obj['activeParameter'] != null && !(obj['activeParameter'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type SignatureHelp"); return false; } } @override bool operator ==(other) { if (other is 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, signatures.hashCode); hash = JenkinsSmiHash.combine(hash, activeSignature.hashCode); hash = JenkinsSmiHash.combine(hash, activeParameter.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Signature help options. class SignatureHelpOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( SignatureHelpOptions.canParse, SignatureHelpOptions.fromJson); SignatureHelpOptions(this.triggerCharacters); static SignatureHelpOptions fromJson(Map json) { final triggerCharacters = json['triggerCharacters'] ?.map((item) => item) ?.cast() ?.toList(); return new SignatureHelpOptions(triggerCharacters); } /// The characters that trigger signature help automatically. final List triggerCharacters; Map toJson() { Map __result = {}; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerCharacters'); try { if (obj['triggerCharacters'] != null && !((obj['triggerCharacters'] is List && (obj['triggerCharacters'].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 SignatureHelpOptions"); return false; } } @override bool operator ==(other) { if (other is SignatureHelpOptions) { return listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, triggerCharacters.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class SignatureHelpRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( SignatureHelpRegistrationOptions.canParse, SignatureHelpRegistrationOptions.fromJson); SignatureHelpRegistrationOptions( this.triggerCharacters, this.documentSelector); static SignatureHelpRegistrationOptions fromJson(Map json) { final triggerCharacters = json['triggerCharacters'] ?.map((item) => item) ?.cast() ?.toList(); final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new SignatureHelpRegistrationOptions( triggerCharacters, 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 characters that trigger signature help automatically. final List triggerCharacters; Map toJson() { Map __result = {}; if (triggerCharacters != null) { __result['triggerCharacters'] = triggerCharacters; } __result['documentSelector'] = documentSelector; return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('triggerCharacters'); try { if (obj['triggerCharacters'] != null && !((obj['triggerCharacters'] is List && (obj['triggerCharacters'].every((item) => item is String))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('documentSelector'); try { if (!obj.containsKey('documentSelector')) { reporter.reportError("must not be undefined"); return false; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 SignatureHelpRegistrationOptions"); return false; } } @override bool operator ==(other) { if (other is SignatureHelpRegistrationOptions) { return listEqual(triggerCharacters, other.triggerCharacters, (String a, String b) => a == b) && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, triggerCharacters.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// 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 = const LspJsonHandler( SignatureInformation.canParse, SignatureInformation.fromJson); SignatureInformation(this.label, this.documentation, this.parameters) { if (label == null) { throw 'label is required but was not provided'; } } static SignatureInformation fromJson(Map json) { final label = json['label']; final documentation = json['documentation'] is String ? new Either2.t1(json['documentation']) : (MarkupContent.canParse(json['documentation'], nullLspJsonReporter) ? new Either2.t2( json['documentation'] != null ? MarkupContent.fromJson(json['documentation']) : null) : (json['documentation'] == null ? null : (throw '''${json['documentation']} was not one of (String, MarkupContent)'''))); final parameters = json['parameters'] ?.map( (item) => item != null ? ParameterInformation.fromJson(item) : null) ?.cast() ?.toList(); return new SignatureInformation(label, documentation, parameters); } /// 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() { Map __result = {}; __result['label'] = label ?? (throw 'label is required but was not set'); if (documentation != null) { __result['documentation'] = documentation; } if (parameters != null) { __result['parameters'] = parameters; } 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; } if (obj['label'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['label'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } reporter.push('documentation'); try { if (obj['documentation'] != null && !((obj['documentation'] is String || MarkupContent.canParse(obj['documentation'], reporter)))) { reporter .reportError("must be of type Either2"); return false; } } finally { reporter.pop(); } reporter.push('parameters'); try { if (obj['parameters'] != null && !((obj['parameters'] is List && (obj['parameters'].every((item) => ParameterInformation.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type SignatureInformation"); return false; } } @override bool operator ==(other) { if (other is SignatureInformation) { return label == other.label && documentation == other.documentation && listEqual(parameters, other.parameters, (ParameterInformation a, ParameterInformation b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, label.hashCode); hash = JenkinsSmiHash.combine(hash, documentation.hashCode); hash = JenkinsSmiHash.combine(hash, parameters.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Static registration options to be returned in the initialize request. class StaticRegistrationOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( StaticRegistrationOptions.canParse, StaticRegistrationOptions.fromJson); StaticRegistrationOptions(this.id); static StaticRegistrationOptions fromJson(Map json) { final id = json['id']; return new StaticRegistrationOptions(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() { Map __result = {}; if (id != null) { __result['id'] = id; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('id'); try { if (obj['id'] != null && !(obj['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 ==(other) { if (other is StaticRegistrationOptions) { return id == other.id && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, id.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Represents information about programming constructs like variables, classes, /// interfaces etc. class SymbolInformation implements ToJsonable { static const jsonHandler = const LspJsonHandler( SymbolInformation.canParse, SymbolInformation.fromJson); SymbolInformation(this.name, this.kind, this.deprecated, this.location, this.containerName) { if (name == null) { throw 'name is required but was not provided'; } if (kind == null) { throw 'kind is required but was not provided'; } if (location == null) { throw 'location is required but was not provided'; } } static SymbolInformation fromJson(Map json) { final name = json['name']; final kind = json['kind'] != null ? SymbolKind.fromJson(json['kind']) : null; final deprecated = json['deprecated']; final location = json['location'] != null ? Location.fromJson(json['location']) : null; final containerName = json['containerName']; return new SymbolInformation( name, kind, deprecated, location, 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. 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; Map toJson() { Map __result = {}; __result['name'] = name ?? (throw 'name is required but was not set'); __result['kind'] = kind ?? (throw 'kind is required but was not set'); if (deprecated != null) { __result['deprecated'] = deprecated; } __result['location'] = location ?? (throw 'location is required but was not set'); 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; } if (obj['name'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['kind'] == null) { reporter.reportError("must not be null"); return false; } if (!(SymbolKind.canParse(obj['kind'], reporter))) { reporter.reportError("must be of type SymbolKind"); return false; } } finally { reporter.pop(); } reporter.push('deprecated'); try { if (obj['deprecated'] != null && !(obj['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; } if (obj['location'] == null) { reporter.reportError("must not be null"); return false; } if (!(Location.canParse(obj['location'], reporter))) { reporter.reportError("must be of type Location"); return false; } } finally { reporter.pop(); } reporter.push('containerName'); try { if (obj['containerName'] != null && !(obj['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 ==(other) { if (other is SymbolInformation) { return name == other.name && kind == other.kind && deprecated == other.deprecated && location == other.location && containerName == other.containerName && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, name.hashCode); hash = JenkinsSmiHash.combine(hash, kind.hashCode); hash = JenkinsSmiHash.combine(hash, deprecated.hashCode); hash = JenkinsSmiHash.combine(hash, location.hashCode); hash = JenkinsSmiHash.combine(hash, containerName.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// A symbol kind. class SymbolKind { const SymbolKind(this._value); const SymbolKind.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } static const File = const SymbolKind(1); static const Module = const SymbolKind(2); static const Namespace = const SymbolKind(3); static const Package = const SymbolKind(4); static const Class = const SymbolKind(5); static const Method = const SymbolKind(6); static const Property = const SymbolKind(7); static const Field = const SymbolKind(8); static const Constructor = const SymbolKind(9); static const Enum = const SymbolKind(10); static const Interface = const SymbolKind(11); static const Function = const SymbolKind(12); static const Variable = const SymbolKind(13); static const Constant = const SymbolKind(14); static const Str = const SymbolKind(15); static const Number = const SymbolKind(16); static const Boolean = const SymbolKind(17); static const Array = const SymbolKind(18); static const Obj = const SymbolKind(19); static const Key = const SymbolKind(20); static const Null = const SymbolKind(21); static const EnumMember = const SymbolKind(22); static const Struct = const SymbolKind(23); static const Event = const SymbolKind(24); static const Operator = const SymbolKind(25); static const TypeParameter = const SymbolKind(26); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is SymbolKind && o._value == _value; } /// Describe options to be used when registering for text document change /// events. class TextDocumentChangeRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentChangeRegistrationOptions.canParse, TextDocumentChangeRegistrationOptions.fromJson); TextDocumentChangeRegistrationOptions(this.syncKind, this.documentSelector) { if (syncKind == null) { throw 'syncKind is required but was not provided'; } } static TextDocumentChangeRegistrationOptions fromJson( Map json) { final syncKind = json['syncKind'] != null ? TextDocumentSyncKind.fromJson(json['syncKind']) : null; final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentChangeRegistrationOptions( syncKind, 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() { Map __result = {}; __result['syncKind'] = syncKind ?? (throw 'syncKind is required but was not set'); __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; } if (obj['syncKind'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentSyncKind.canParse(obj['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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 ==(other) { if (other is TextDocumentChangeRegistrationOptions) { return syncKind == other.syncKind && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, syncKind.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Text document specific client capabilities. class TextDocumentClientCapabilities implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilities.canParse, TextDocumentClientCapabilities.fromJson); TextDocumentClientCapabilities( this.synchronization, this.completion, this.hover, this.signatureHelp, this.references, this.documentHighlight, this.documentSymbol, this.formatting, this.rangeFormatting, this.onTypeFormatting, this.declaration, this.definition, this.typeDefinition, this.implementation, this.codeAction, this.codeLens, this.documentLink, this.colorProvider, this.rename, this.publishDiagnostics, this.foldingRange); static TextDocumentClientCapabilities fromJson(Map json) { final synchronization = json['synchronization'] != null ? TextDocumentClientCapabilitiesSynchronization.fromJson( json['synchronization']) : null; final completion = json['completion'] != null ? TextDocumentClientCapabilitiesCompletion.fromJson(json['completion']) : null; final hover = json['hover'] != null ? TextDocumentClientCapabilitiesHover.fromJson(json['hover']) : null; final signatureHelp = json['signatureHelp'] != null ? TextDocumentClientCapabilitiesSignatureHelp.fromJson( json['signatureHelp']) : null; final references = json['references'] != null ? TextDocumentClientCapabilitiesReferences.fromJson(json['references']) : null; final documentHighlight = json['documentHighlight'] != null ? TextDocumentClientCapabilitiesDocumentHighlight.fromJson( json['documentHighlight']) : null; final documentSymbol = json['documentSymbol'] != null ? TextDocumentClientCapabilitiesDocumentSymbol.fromJson( json['documentSymbol']) : null; final formatting = json['formatting'] != null ? TextDocumentClientCapabilitiesFormatting.fromJson(json['formatting']) : null; final rangeFormatting = json['rangeFormatting'] != null ? TextDocumentClientCapabilitiesRangeFormatting.fromJson( json['rangeFormatting']) : null; final onTypeFormatting = json['onTypeFormatting'] != null ? TextDocumentClientCapabilitiesOnTypeFormatting.fromJson( json['onTypeFormatting']) : null; final declaration = json['declaration'] != null ? TextDocumentClientCapabilitiesDeclaration.fromJson( json['declaration']) : null; final definition = json['definition'] != null ? TextDocumentClientCapabilitiesDefinition.fromJson(json['definition']) : null; final typeDefinition = json['typeDefinition'] != null ? TextDocumentClientCapabilitiesTypeDefinition.fromJson( json['typeDefinition']) : null; final implementation = json['implementation'] != null ? TextDocumentClientCapabilitiesImplementation.fromJson( json['implementation']) : null; final codeAction = json['codeAction'] != null ? TextDocumentClientCapabilitiesCodeAction.fromJson(json['codeAction']) : null; final codeLens = json['codeLens'] != null ? TextDocumentClientCapabilitiesCodeLens.fromJson(json['codeLens']) : null; final documentLink = json['documentLink'] != null ? TextDocumentClientCapabilitiesDocumentLink.fromJson( json['documentLink']) : null; final colorProvider = json['colorProvider'] != null ? TextDocumentClientCapabilitiesColorProvider.fromJson( json['colorProvider']) : null; final rename = json['rename'] != null ? TextDocumentClientCapabilitiesRename.fromJson(json['rename']) : null; final publishDiagnostics = json['publishDiagnostics'] != null ? TextDocumentClientCapabilitiesPublishDiagnostics.fromJson( json['publishDiagnostics']) : null; final foldingRange = json['foldingRange'] != null ? TextDocumentClientCapabilitiesFoldingRange.fromJson( json['foldingRange']) : null; return new TextDocumentClientCapabilities( synchronization, completion, hover, signatureHelp, references, documentHighlight, documentSymbol, formatting, rangeFormatting, onTypeFormatting, declaration, definition, typeDefinition, implementation, codeAction, codeLens, documentLink, colorProvider, rename, publishDiagnostics, foldingRange); } /// Capabilities specific to the `textDocument/codeAction` final TextDocumentClientCapabilitiesCodeAction codeAction; /// Capabilities specific to the `textDocument/codeLens` final TextDocumentClientCapabilitiesCodeLens codeLens; /// Capabilities specific to the `textDocument/documentColor` and the /// `textDocument/colorPresentation` request. /// /// Since 3.6.0 final TextDocumentClientCapabilitiesColorProvider colorProvider; /// Capabilities specific to the `textDocument/completion` final TextDocumentClientCapabilitiesCompletion completion; /// Capabilities specific to the `textDocument/declaration` final TextDocumentClientCapabilitiesDeclaration declaration; /// Capabilities specific to the `textDocument/definition`. /// /// Since 3.14.0 final TextDocumentClientCapabilitiesDefinition definition; /// Capabilities specific to the `textDocument/documentHighlight` final TextDocumentClientCapabilitiesDocumentHighlight documentHighlight; /// Capabilities specific to the `textDocument/documentLink` final TextDocumentClientCapabilitiesDocumentLink documentLink; /// Capabilities specific to the `textDocument/documentSymbol` final TextDocumentClientCapabilitiesDocumentSymbol documentSymbol; /// Capabilities specific to `textDocument/foldingRange` requests. /// /// Since 3.10.0 final TextDocumentClientCapabilitiesFoldingRange foldingRange; /// Capabilities specific to the `textDocument/formatting` final TextDocumentClientCapabilitiesFormatting formatting; /// Capabilities specific to the `textDocument/hover` final TextDocumentClientCapabilitiesHover hover; /// Capabilities specific to the `textDocument/implementation`. /// /// Since 3.6.0 final TextDocumentClientCapabilitiesImplementation implementation; /// Capabilities specific to the `textDocument/onTypeFormatting` final TextDocumentClientCapabilitiesOnTypeFormatting onTypeFormatting; /// Capabilities specific to `textDocument/publishDiagnostics`. final TextDocumentClientCapabilitiesPublishDiagnostics publishDiagnostics; /// Capabilities specific to the `textDocument/rangeFormatting` final TextDocumentClientCapabilitiesRangeFormatting rangeFormatting; /// Capabilities specific to the `textDocument/references` final TextDocumentClientCapabilitiesReferences references; /// Capabilities specific to the `textDocument/rename` final TextDocumentClientCapabilitiesRename rename; /// Capabilities specific to the `textDocument/signatureHelp` final TextDocumentClientCapabilitiesSignatureHelp signatureHelp; final TextDocumentClientCapabilitiesSynchronization synchronization; /// Capabilities specific to the `textDocument/typeDefinition` /// /// Since 3.6.0 final TextDocumentClientCapabilitiesTypeDefinition typeDefinition; Map toJson() { Map __result = {}; if (synchronization != null) { __result['synchronization'] = synchronization; } if (completion != null) { __result['completion'] = completion; } if (hover != null) { __result['hover'] = hover; } if (signatureHelp != null) { __result['signatureHelp'] = signatureHelp; } if (references != null) { __result['references'] = references; } if (documentHighlight != null) { __result['documentHighlight'] = documentHighlight; } if (documentSymbol != null) { __result['documentSymbol'] = documentSymbol; } if (formatting != null) { __result['formatting'] = formatting; } if (rangeFormatting != null) { __result['rangeFormatting'] = rangeFormatting; } if (onTypeFormatting != null) { __result['onTypeFormatting'] = onTypeFormatting; } if (declaration != null) { __result['declaration'] = declaration; } if (definition != null) { __result['definition'] = definition; } if (typeDefinition != null) { __result['typeDefinition'] = typeDefinition; } if (implementation != null) { __result['implementation'] = implementation; } if (codeAction != null) { __result['codeAction'] = codeAction; } if (codeLens != null) { __result['codeLens'] = codeLens; } if (documentLink != null) { __result['documentLink'] = documentLink; } if (colorProvider != null) { __result['colorProvider'] = colorProvider; } if (rename != null) { __result['rename'] = rename; } if (publishDiagnostics != null) { __result['publishDiagnostics'] = publishDiagnostics; } if (foldingRange != null) { __result['foldingRange'] = foldingRange; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('synchronization'); try { if (obj['synchronization'] != null && !(TextDocumentClientCapabilitiesSynchronization.canParse( obj['synchronization'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSynchronization"); return false; } } finally { reporter.pop(); } reporter.push('completion'); try { if (obj['completion'] != null && !(TextDocumentClientCapabilitiesCompletion.canParse( obj['completion'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCompletion"); return false; } } finally { reporter.pop(); } reporter.push('hover'); try { if (obj['hover'] != null && !(TextDocumentClientCapabilitiesHover.canParse( obj['hover'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesHover"); return false; } } finally { reporter.pop(); } reporter.push('signatureHelp'); try { if (obj['signatureHelp'] != null && !(TextDocumentClientCapabilitiesSignatureHelp.canParse( obj['signatureHelp'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSignatureHelp"); return false; } } finally { reporter.pop(); } reporter.push('references'); try { if (obj['references'] != null && !(TextDocumentClientCapabilitiesReferences.canParse( obj['references'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesReferences"); return false; } } finally { reporter.pop(); } reporter.push('documentHighlight'); try { if (obj['documentHighlight'] != null && !(TextDocumentClientCapabilitiesDocumentHighlight.canParse( obj['documentHighlight'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDocumentHighlight"); return false; } } finally { reporter.pop(); } reporter.push('documentSymbol'); try { if (obj['documentSymbol'] != null && !(TextDocumentClientCapabilitiesDocumentSymbol.canParse( obj['documentSymbol'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDocumentSymbol"); return false; } } finally { reporter.pop(); } reporter.push('formatting'); try { if (obj['formatting'] != null && !(TextDocumentClientCapabilitiesFormatting.canParse( obj['formatting'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesFormatting"); return false; } } finally { reporter.pop(); } reporter.push('rangeFormatting'); try { if (obj['rangeFormatting'] != null && !(TextDocumentClientCapabilitiesRangeFormatting.canParse( obj['rangeFormatting'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesRangeFormatting"); return false; } } finally { reporter.pop(); } reporter.push('onTypeFormatting'); try { if (obj['onTypeFormatting'] != null && !(TextDocumentClientCapabilitiesOnTypeFormatting.canParse( obj['onTypeFormatting'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesOnTypeFormatting"); return false; } } finally { reporter.pop(); } reporter.push('declaration'); try { if (obj['declaration'] != null && !(TextDocumentClientCapabilitiesDeclaration.canParse( obj['declaration'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDeclaration"); return false; } } finally { reporter.pop(); } reporter.push('definition'); try { if (obj['definition'] != null && !(TextDocumentClientCapabilitiesDefinition.canParse( obj['definition'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDefinition"); return false; } } finally { reporter.pop(); } reporter.push('typeDefinition'); try { if (obj['typeDefinition'] != null && !(TextDocumentClientCapabilitiesTypeDefinition.canParse( obj['typeDefinition'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesTypeDefinition"); return false; } } finally { reporter.pop(); } reporter.push('implementation'); try { if (obj['implementation'] != null && !(TextDocumentClientCapabilitiesImplementation.canParse( obj['implementation'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesImplementation"); return false; } } finally { reporter.pop(); } reporter.push('codeAction'); try { if (obj['codeAction'] != null && !(TextDocumentClientCapabilitiesCodeAction.canParse( obj['codeAction'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeAction"); return false; } } finally { reporter.pop(); } reporter.push('codeLens'); try { if (obj['codeLens'] != null && !(TextDocumentClientCapabilitiesCodeLens.canParse( obj['codeLens'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeLens"); return false; } } finally { reporter.pop(); } reporter.push('documentLink'); try { if (obj['documentLink'] != null && !(TextDocumentClientCapabilitiesDocumentLink.canParse( obj['documentLink'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDocumentLink"); return false; } } finally { reporter.pop(); } reporter.push('colorProvider'); try { if (obj['colorProvider'] != null && !(TextDocumentClientCapabilitiesColorProvider.canParse( obj['colorProvider'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesColorProvider"); return false; } } finally { reporter.pop(); } reporter.push('rename'); try { if (obj['rename'] != null && !(TextDocumentClientCapabilitiesRename.canParse( obj['rename'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesRename"); return false; } } finally { reporter.pop(); } reporter.push('publishDiagnostics'); try { if (obj['publishDiagnostics'] != null && !(TextDocumentClientCapabilitiesPublishDiagnostics.canParse( obj['publishDiagnostics'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesPublishDiagnostics"); return false; } } finally { reporter.pop(); } reporter.push('foldingRange'); try { if (obj['foldingRange'] != null && !(TextDocumentClientCapabilitiesFoldingRange.canParse( obj['foldingRange'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesFoldingRange"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type TextDocumentClientCapabilities"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilities) { return synchronization == other.synchronization && completion == other.completion && hover == other.hover && signatureHelp == other.signatureHelp && references == other.references && documentHighlight == other.documentHighlight && documentSymbol == other.documentSymbol && formatting == other.formatting && rangeFormatting == other.rangeFormatting && onTypeFormatting == other.onTypeFormatting && declaration == other.declaration && definition == other.definition && typeDefinition == other.typeDefinition && implementation == other.implementation && codeAction == other.codeAction && codeLens == other.codeLens && documentLink == other.documentLink && colorProvider == other.colorProvider && rename == other.rename && publishDiagnostics == other.publishDiagnostics && foldingRange == other.foldingRange && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, synchronization.hashCode); hash = JenkinsSmiHash.combine(hash, completion.hashCode); hash = JenkinsSmiHash.combine(hash, hover.hashCode); hash = JenkinsSmiHash.combine(hash, signatureHelp.hashCode); hash = JenkinsSmiHash.combine(hash, references.hashCode); hash = JenkinsSmiHash.combine(hash, documentHighlight.hashCode); hash = JenkinsSmiHash.combine(hash, documentSymbol.hashCode); hash = JenkinsSmiHash.combine(hash, formatting.hashCode); hash = JenkinsSmiHash.combine(hash, rangeFormatting.hashCode); hash = JenkinsSmiHash.combine(hash, onTypeFormatting.hashCode); hash = JenkinsSmiHash.combine(hash, declaration.hashCode); hash = JenkinsSmiHash.combine(hash, definition.hashCode); hash = JenkinsSmiHash.combine(hash, typeDefinition.hashCode); hash = JenkinsSmiHash.combine(hash, implementation.hashCode); hash = JenkinsSmiHash.combine(hash, codeAction.hashCode); hash = JenkinsSmiHash.combine(hash, codeLens.hashCode); hash = JenkinsSmiHash.combine(hash, documentLink.hashCode); hash = JenkinsSmiHash.combine(hash, colorProvider.hashCode); hash = JenkinsSmiHash.combine(hash, rename.hashCode); hash = JenkinsSmiHash.combine(hash, publishDiagnostics.hashCode); hash = JenkinsSmiHash.combine(hash, foldingRange.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCodeAction implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCodeAction.canParse, TextDocumentClientCapabilitiesCodeAction.fromJson); TextDocumentClientCapabilitiesCodeAction( this.dynamicRegistration, this.codeActionLiteralSupport); static TextDocumentClientCapabilitiesCodeAction fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final codeActionLiteralSupport = json['codeActionLiteralSupport'] != null ? TextDocumentClientCapabilitiesCodeActionLiteralSupport.fromJson( json['codeActionLiteralSupport']) : null; return new TextDocumentClientCapabilitiesCodeAction( dynamicRegistration, codeActionLiteralSupport); } /// The client support code action literals as a valid response of the /// `textDocument/codeAction` request. /// /// Since 3.8.0 final TextDocumentClientCapabilitiesCodeActionLiteralSupport codeActionLiteralSupport; /// Whether code action supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (codeActionLiteralSupport != null) { __result['codeActionLiteralSupport'] = codeActionLiteralSupport; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('codeActionLiteralSupport'); try { if (obj['codeActionLiteralSupport'] != null && !(TextDocumentClientCapabilitiesCodeActionLiteralSupport.canParse( obj['codeActionLiteralSupport'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeActionLiteralSupport"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeAction"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCodeAction) { return dynamicRegistration == other.dynamicRegistration && codeActionLiteralSupport == other.codeActionLiteralSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, codeActionLiteralSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCodeActionKind implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCodeActionKind.canParse, TextDocumentClientCapabilitiesCodeActionKind.fromJson); TextDocumentClientCapabilitiesCodeActionKind(this.valueSet) { if (valueSet == null) { throw 'valueSet is required but was not provided'; } } static TextDocumentClientCapabilitiesCodeActionKind fromJson( Map json) { final valueSet = json['valueSet'] ?.map((item) => item != null ? CodeActionKind.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentClientCapabilitiesCodeActionKind(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() { Map __result = {}; __result['valueSet'] = valueSet ?? (throw 'valueSet is required but was not set'); 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; } if (obj['valueSet'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['valueSet'] is List && (obj['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 TextDocumentClientCapabilitiesCodeActionKind"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCodeActionKind) { return listEqual(valueSet, other.valueSet, (CodeActionKind a, CodeActionKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, valueSet.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCodeActionLiteralSupport implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCodeActionLiteralSupport.canParse, TextDocumentClientCapabilitiesCodeActionLiteralSupport.fromJson); TextDocumentClientCapabilitiesCodeActionLiteralSupport(this.codeActionKind) { if (codeActionKind == null) { throw 'codeActionKind is required but was not provided'; } } static TextDocumentClientCapabilitiesCodeActionLiteralSupport fromJson( Map json) { final codeActionKind = json['codeActionKind'] != null ? TextDocumentClientCapabilitiesCodeActionKind.fromJson( json['codeActionKind']) : null; return new TextDocumentClientCapabilitiesCodeActionLiteralSupport( codeActionKind); } /// The code action kind is support with the following value set. final TextDocumentClientCapabilitiesCodeActionKind codeActionKind; Map toJson() { Map __result = {}; __result['codeActionKind'] = codeActionKind ?? (throw 'codeActionKind is required but was not set'); 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; } if (obj['codeActionKind'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentClientCapabilitiesCodeActionKind.canParse( obj['codeActionKind'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeActionKind"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeActionLiteralSupport"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCodeActionLiteralSupport) { return codeActionKind == other.codeActionKind && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, codeActionKind.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCodeLens implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCodeLens.canParse, TextDocumentClientCapabilitiesCodeLens.fromJson); TextDocumentClientCapabilitiesCodeLens(this.dynamicRegistration); static TextDocumentClientCapabilitiesCodeLens fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesCodeLens(dynamicRegistration); } /// Whether code lens supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCodeLens"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCodeLens) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesColorProvider implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesColorProvider.canParse, TextDocumentClientCapabilitiesColorProvider.fromJson); TextDocumentClientCapabilitiesColorProvider(this.dynamicRegistration); static TextDocumentClientCapabilitiesColorProvider fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesColorProvider(dynamicRegistration); } /// Whether colorProvider supports dynamic registration. If this is set to /// `true` the client supports the new `(ColorProviderOptions & /// TextDocumentRegistrationOptions & StaticRegistrationOptions)` return value /// for the corresponding server capability as well. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesColorProvider"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesColorProvider) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCompletion implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCompletion.canParse, TextDocumentClientCapabilitiesCompletion.fromJson); TextDocumentClientCapabilitiesCompletion(this.dynamicRegistration, this.completionItem, this.completionItemKind, this.contextSupport); static TextDocumentClientCapabilitiesCompletion fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final completionItem = json['completionItem'] != null ? TextDocumentClientCapabilitiesCompletionItem.fromJson( json['completionItem']) : null; final completionItemKind = json['completionItemKind'] != null ? TextDocumentClientCapabilitiesCompletionItemKind.fromJson( json['completionItemKind']) : null; final contextSupport = json['contextSupport']; return new TextDocumentClientCapabilitiesCompletion(dynamicRegistration, completionItem, completionItemKind, contextSupport); } /// The client supports the following `CompletionItem` specific capabilities. final TextDocumentClientCapabilitiesCompletionItem completionItem; final TextDocumentClientCapabilitiesCompletionItemKind 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() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (completionItem != null) { __result['completionItem'] = completionItem; } if (completionItemKind != null) { __result['completionItemKind'] = completionItemKind; } if (contextSupport != null) { __result['contextSupport'] = contextSupport; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('completionItem'); try { if (obj['completionItem'] != null && !(TextDocumentClientCapabilitiesCompletionItem.canParse( obj['completionItem'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCompletionItem"); return false; } } finally { reporter.pop(); } reporter.push('completionItemKind'); try { if (obj['completionItemKind'] != null && !(TextDocumentClientCapabilitiesCompletionItemKind.canParse( obj['completionItemKind'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCompletionItemKind"); return false; } } finally { reporter.pop(); } reporter.push('contextSupport'); try { if (obj['contextSupport'] != null && !(obj['contextSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCompletion"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCompletion) { return dynamicRegistration == other.dynamicRegistration && completionItem == other.completionItem && completionItemKind == other.completionItemKind && contextSupport == other.contextSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, completionItem.hashCode); hash = JenkinsSmiHash.combine(hash, completionItemKind.hashCode); hash = JenkinsSmiHash.combine(hash, contextSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCompletionItem implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCompletionItem.canParse, TextDocumentClientCapabilitiesCompletionItem.fromJson); TextDocumentClientCapabilitiesCompletionItem( this.snippetSupport, this.commitCharactersSupport, this.documentationFormat, this.deprecatedSupport, this.preselectSupport); static TextDocumentClientCapabilitiesCompletionItem fromJson( Map json) { final snippetSupport = json['snippetSupport']; final commitCharactersSupport = json['commitCharactersSupport']; final documentationFormat = json['documentationFormat'] ?.map((item) => item != null ? MarkupKind.fromJson(item) : null) ?.cast() ?.toList(); final deprecatedSupport = json['deprecatedSupport']; final preselectSupport = json['preselectSupport']; return new TextDocumentClientCapabilitiesCompletionItem( snippetSupport, commitCharactersSupport, documentationFormat, deprecatedSupport, preselectSupport); } /// The client supports commit characters on a completion item. final bool commitCharactersSupport; /// The client supports the deprecated property on a completion item. final bool deprecatedSupport; /// The client supports the following content formats for the documentation /// property. The order describes the preferred format of the client. final List documentationFormat; /// The client supports the preselect property on a completion item. final bool preselectSupport; /// The 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; Map toJson() { Map __result = {}; if (snippetSupport != null) { __result['snippetSupport'] = snippetSupport; } if (commitCharactersSupport != null) { __result['commitCharactersSupport'] = commitCharactersSupport; } if (documentationFormat != null) { __result['documentationFormat'] = documentationFormat; } if (deprecatedSupport != null) { __result['deprecatedSupport'] = deprecatedSupport; } if (preselectSupport != null) { __result['preselectSupport'] = preselectSupport; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('snippetSupport'); try { if (obj['snippetSupport'] != null && !(obj['snippetSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('commitCharactersSupport'); try { if (obj['commitCharactersSupport'] != null && !(obj['commitCharactersSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('documentationFormat'); try { if (obj['documentationFormat'] != null && !((obj['documentationFormat'] is List && (obj['documentationFormat'] .every((item) => MarkupKind.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('deprecatedSupport'); try { if (obj['deprecatedSupport'] != null && !(obj['deprecatedSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('preselectSupport'); try { if (obj['preselectSupport'] != null && !(obj['preselectSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesCompletionItem"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCompletionItem) { return snippetSupport == other.snippetSupport && commitCharactersSupport == other.commitCharactersSupport && listEqual(documentationFormat, other.documentationFormat, (MarkupKind a, MarkupKind b) => a == b) && deprecatedSupport == other.deprecatedSupport && preselectSupport == other.preselectSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, snippetSupport.hashCode); hash = JenkinsSmiHash.combine(hash, commitCharactersSupport.hashCode); hash = JenkinsSmiHash.combine(hash, documentationFormat.hashCode); hash = JenkinsSmiHash.combine(hash, deprecatedSupport.hashCode); hash = JenkinsSmiHash.combine(hash, preselectSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesCompletionItemKind implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesCompletionItemKind.canParse, TextDocumentClientCapabilitiesCompletionItemKind.fromJson); TextDocumentClientCapabilitiesCompletionItemKind(this.valueSet); static TextDocumentClientCapabilitiesCompletionItemKind fromJson( Map json) { final valueSet = json['valueSet'] ?.map((item) => item != null ? CompletionItemKind.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentClientCapabilitiesCompletionItemKind(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() { Map __result = {}; if (valueSet != null) { __result['valueSet'] = valueSet; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('valueSet'); try { if (obj['valueSet'] != null && !((obj['valueSet'] is List && (obj['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 TextDocumentClientCapabilitiesCompletionItemKind"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesCompletionItemKind) { return listEqual(valueSet, other.valueSet, (CompletionItemKind a, CompletionItemKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, valueSet.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesDeclaration implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesDeclaration.canParse, TextDocumentClientCapabilitiesDeclaration.fromJson); TextDocumentClientCapabilitiesDeclaration( this.dynamicRegistration, this.linkSupport); static TextDocumentClientCapabilitiesDeclaration fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final linkSupport = json['linkSupport']; return new TextDocumentClientCapabilitiesDeclaration( dynamicRegistration, linkSupport); } /// Whether declaration 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 client supports additional metadata in the form of declaration links. /// /// Since 3.14.0 final bool linkSupport; Map toJson() { Map __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 { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('linkSupport'); try { if (obj['linkSupport'] != null && !(obj['linkSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDeclaration"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesDeclaration) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, linkSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesDefinition implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesDefinition.canParse, TextDocumentClientCapabilitiesDefinition.fromJson); TextDocumentClientCapabilitiesDefinition( this.dynamicRegistration, this.linkSupport); static TextDocumentClientCapabilitiesDefinition fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final linkSupport = json['linkSupport']; return new TextDocumentClientCapabilitiesDefinition( dynamicRegistration, linkSupport); } /// Whether definition supports dynamic registration. final bool dynamicRegistration; /// The client supports additional metadata in the form of definition links. final bool linkSupport; Map toJson() { Map __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 { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('linkSupport'); try { if (obj['linkSupport'] != null && !(obj['linkSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDefinition"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesDefinition) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, linkSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesDocumentHighlight implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesDocumentHighlight.canParse, TextDocumentClientCapabilitiesDocumentHighlight.fromJson); TextDocumentClientCapabilitiesDocumentHighlight(this.dynamicRegistration); static TextDocumentClientCapabilitiesDocumentHighlight fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesDocumentHighlight( dynamicRegistration); } /// Whether document highlight supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDocumentHighlight"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesDocumentHighlight) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesDocumentLink implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesDocumentLink.canParse, TextDocumentClientCapabilitiesDocumentLink.fromJson); TextDocumentClientCapabilitiesDocumentLink(this.dynamicRegistration); static TextDocumentClientCapabilitiesDocumentLink fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesDocumentLink(dynamicRegistration); } /// Whether document link supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDocumentLink"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesDocumentLink) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesDocumentSymbol implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesDocumentSymbol.canParse, TextDocumentClientCapabilitiesDocumentSymbol.fromJson); TextDocumentClientCapabilitiesDocumentSymbol(this.dynamicRegistration, this.symbolKind, this.hierarchicalDocumentSymbolSupport); static TextDocumentClientCapabilitiesDocumentSymbol fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final symbolKind = json['symbolKind'] != null ? TextDocumentClientCapabilitiesSymbolKind.fromJson(json['symbolKind']) : null; final hierarchicalDocumentSymbolSupport = json['hierarchicalDocumentSymbolSupport']; return new TextDocumentClientCapabilitiesDocumentSymbol( dynamicRegistration, symbolKind, hierarchicalDocumentSymbolSupport); } /// Whether document symbol supports dynamic registration. final bool dynamicRegistration; /// The client supports hierarchical document symbols. final bool hierarchicalDocumentSymbolSupport; /// Specific capabilities for the `SymbolKind`. final TextDocumentClientCapabilitiesSymbolKind symbolKind; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (symbolKind != null) { __result['symbolKind'] = symbolKind; } if (hierarchicalDocumentSymbolSupport != null) { __result['hierarchicalDocumentSymbolSupport'] = hierarchicalDocumentSymbolSupport; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('symbolKind'); try { if (obj['symbolKind'] != null && !(TextDocumentClientCapabilitiesSymbolKind.canParse( obj['symbolKind'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSymbolKind"); return false; } } finally { reporter.pop(); } reporter.push('hierarchicalDocumentSymbolSupport'); try { if (obj['hierarchicalDocumentSymbolSupport'] != null && !(obj['hierarchicalDocumentSymbolSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesDocumentSymbol"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesDocumentSymbol) { return dynamicRegistration == other.dynamicRegistration && symbolKind == other.symbolKind && hierarchicalDocumentSymbolSupport == other.hierarchicalDocumentSymbolSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, symbolKind.hashCode); hash = JenkinsSmiHash.combine( hash, hierarchicalDocumentSymbolSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesFoldingRange implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesFoldingRange.canParse, TextDocumentClientCapabilitiesFoldingRange.fromJson); TextDocumentClientCapabilitiesFoldingRange( this.dynamicRegistration, this.rangeLimit, this.lineFoldingOnly); static TextDocumentClientCapabilitiesFoldingRange fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final rangeLimit = json['rangeLimit']; final lineFoldingOnly = json['lineFoldingOnly']; return new TextDocumentClientCapabilitiesFoldingRange( dynamicRegistration, rangeLimit, lineFoldingOnly); } /// Whether implementation supports dynamic registration for folding range /// providers. If this is set to `true` the client supports the new /// `(FoldingRangeProviderOptions & TextDocumentRegistrationOptions & /// StaticRegistrationOptions)` 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 num rangeLimit; Map toJson() { Map __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 { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('rangeLimit'); try { if (obj['rangeLimit'] != null && !(obj['rangeLimit'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('lineFoldingOnly'); try { if (obj['lineFoldingOnly'] != null && !(obj['lineFoldingOnly'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesFoldingRange"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesFoldingRange) { return dynamicRegistration == other.dynamicRegistration && rangeLimit == other.rangeLimit && lineFoldingOnly == other.lineFoldingOnly && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, rangeLimit.hashCode); hash = JenkinsSmiHash.combine(hash, lineFoldingOnly.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesFormatting implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesFormatting.canParse, TextDocumentClientCapabilitiesFormatting.fromJson); TextDocumentClientCapabilitiesFormatting(this.dynamicRegistration); static TextDocumentClientCapabilitiesFormatting fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesFormatting(dynamicRegistration); } /// Whether formatting supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesFormatting"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesFormatting) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesHover implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesHover.canParse, TextDocumentClientCapabilitiesHover.fromJson); TextDocumentClientCapabilitiesHover( this.dynamicRegistration, this.contentFormat); static TextDocumentClientCapabilitiesHover fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final contentFormat = json['contentFormat'] ?.map((item) => item != null ? MarkupKind.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentClientCapabilitiesHover( dynamicRegistration, contentFormat); } /// The client supports the follow content formats for the content property. /// The order describes the preferred format of the client. final List contentFormat; /// Whether hover supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (contentFormat != null) { __result['contentFormat'] = contentFormat; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('contentFormat'); try { if (obj['contentFormat'] != null && !((obj['contentFormat'] is List && (obj['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 TextDocumentClientCapabilitiesHover"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesHover) { return dynamicRegistration == other.dynamicRegistration && listEqual(contentFormat, other.contentFormat, (MarkupKind a, MarkupKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, contentFormat.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesImplementation implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesImplementation.canParse, TextDocumentClientCapabilitiesImplementation.fromJson); TextDocumentClientCapabilitiesImplementation( this.dynamicRegistration, this.linkSupport); static TextDocumentClientCapabilitiesImplementation fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final linkSupport = json['linkSupport']; return new TextDocumentClientCapabilitiesImplementation( dynamicRegistration, linkSupport); } /// 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 client supports additional metadata in the form of definition links. /// /// Since 3.14.0 final bool linkSupport; Map toJson() { Map __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 { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('linkSupport'); try { if (obj['linkSupport'] != null && !(obj['linkSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesImplementation"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesImplementation) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, linkSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesOnTypeFormatting implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesOnTypeFormatting.canParse, TextDocumentClientCapabilitiesOnTypeFormatting.fromJson); TextDocumentClientCapabilitiesOnTypeFormatting(this.dynamicRegistration); static TextDocumentClientCapabilitiesOnTypeFormatting fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesOnTypeFormatting( dynamicRegistration); } /// Whether on type formatting supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesOnTypeFormatting"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesOnTypeFormatting) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesParameterInformation implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesParameterInformation.canParse, TextDocumentClientCapabilitiesParameterInformation.fromJson); TextDocumentClientCapabilitiesParameterInformation(this.labelOffsetSupport); static TextDocumentClientCapabilitiesParameterInformation fromJson( Map json) { final labelOffsetSupport = json['labelOffsetSupport']; return new TextDocumentClientCapabilitiesParameterInformation( labelOffsetSupport); } /// The client supports processing label offsets instead of a simple label /// string. /// /// Since 3.14.0 final bool labelOffsetSupport; Map toJson() { Map __result = {}; if (labelOffsetSupport != null) { __result['labelOffsetSupport'] = labelOffsetSupport; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('labelOffsetSupport'); try { if (obj['labelOffsetSupport'] != null && !(obj['labelOffsetSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesParameterInformation"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesParameterInformation) { return labelOffsetSupport == other.labelOffsetSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, labelOffsetSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesPublishDiagnostics implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesPublishDiagnostics.canParse, TextDocumentClientCapabilitiesPublishDiagnostics.fromJson); TextDocumentClientCapabilitiesPublishDiagnostics(this.relatedInformation); static TextDocumentClientCapabilitiesPublishDiagnostics fromJson( Map json) { final relatedInformation = json['relatedInformation']; return new TextDocumentClientCapabilitiesPublishDiagnostics( relatedInformation); } /// Whether the clients accepts diagnostics with related information. final bool relatedInformation; Map toJson() { Map __result = {}; if (relatedInformation != null) { __result['relatedInformation'] = relatedInformation; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('relatedInformation'); try { if (obj['relatedInformation'] != null && !(obj['relatedInformation'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesPublishDiagnostics"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesPublishDiagnostics) { return relatedInformation == other.relatedInformation && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, relatedInformation.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesRangeFormatting implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesRangeFormatting.canParse, TextDocumentClientCapabilitiesRangeFormatting.fromJson); TextDocumentClientCapabilitiesRangeFormatting(this.dynamicRegistration); static TextDocumentClientCapabilitiesRangeFormatting fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesRangeFormatting( dynamicRegistration); } /// Whether range formatting supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesRangeFormatting"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesRangeFormatting) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesReferences implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesReferences.canParse, TextDocumentClientCapabilitiesReferences.fromJson); TextDocumentClientCapabilitiesReferences(this.dynamicRegistration); static TextDocumentClientCapabilitiesReferences fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new TextDocumentClientCapabilitiesReferences(dynamicRegistration); } /// Whether references supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesReferences"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesReferences) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesRename implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesRename.canParse, TextDocumentClientCapabilitiesRename.fromJson); TextDocumentClientCapabilitiesRename( this.dynamicRegistration, this.prepareSupport); static TextDocumentClientCapabilitiesRename fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final prepareSupport = json['prepareSupport']; return new TextDocumentClientCapabilitiesRename( dynamicRegistration, prepareSupport); } /// Whether rename supports dynamic registration. final bool dynamicRegistration; /// The client supports testing for validity of rename operations before /// execution. final bool prepareSupport; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (prepareSupport != null) { __result['prepareSupport'] = prepareSupport; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('prepareSupport'); try { if (obj['prepareSupport'] != null && !(obj['prepareSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter .reportError("must be of type TextDocumentClientCapabilitiesRename"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesRename) { return dynamicRegistration == other.dynamicRegistration && prepareSupport == other.prepareSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, prepareSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesSignatureHelp implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesSignatureHelp.canParse, TextDocumentClientCapabilitiesSignatureHelp.fromJson); TextDocumentClientCapabilitiesSignatureHelp( this.dynamicRegistration, this.signatureInformation); static TextDocumentClientCapabilitiesSignatureHelp fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final signatureInformation = json['signatureInformation'] != null ? TextDocumentClientCapabilitiesSignatureInformation.fromJson( json['signatureInformation']) : null; return new TextDocumentClientCapabilitiesSignatureHelp( dynamicRegistration, signatureInformation); } /// Whether signature help supports dynamic registration. final bool dynamicRegistration; /// The client supports the following `SignatureInformation` specific /// properties. final TextDocumentClientCapabilitiesSignatureInformation signatureInformation; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (signatureInformation != null) { __result['signatureInformation'] = signatureInformation; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('signatureInformation'); try { if (obj['signatureInformation'] != null && !(TextDocumentClientCapabilitiesSignatureInformation.canParse( obj['signatureInformation'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSignatureInformation"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSignatureHelp"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesSignatureHelp) { return dynamicRegistration == other.dynamicRegistration && signatureInformation == other.signatureInformation && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, signatureInformation.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesSignatureInformation implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesSignatureInformation.canParse, TextDocumentClientCapabilitiesSignatureInformation.fromJson); TextDocumentClientCapabilitiesSignatureInformation( this.documentationFormat, this.parameterInformation); static TextDocumentClientCapabilitiesSignatureInformation fromJson( Map json) { final documentationFormat = json['documentationFormat'] ?.map((item) => item != null ? MarkupKind.fromJson(item) : null) ?.cast() ?.toList(); final parameterInformation = json['parameterInformation'] != null ? TextDocumentClientCapabilitiesParameterInformation.fromJson( json['parameterInformation']) : null; return new TextDocumentClientCapabilitiesSignatureInformation( documentationFormat, parameterInformation); } /// The 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 TextDocumentClientCapabilitiesParameterInformation parameterInformation; Map toJson() { Map __result = {}; if (documentationFormat != null) { __result['documentationFormat'] = documentationFormat; } if (parameterInformation != null) { __result['parameterInformation'] = parameterInformation; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentationFormat'); try { if (obj['documentationFormat'] != null && !((obj['documentationFormat'] is List && (obj['documentationFormat'] .every((item) => MarkupKind.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('parameterInformation'); try { if (obj['parameterInformation'] != null && !(TextDocumentClientCapabilitiesParameterInformation.canParse( obj['parameterInformation'], reporter))) { reporter.reportError( "must be of type TextDocumentClientCapabilitiesParameterInformation"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSignatureInformation"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesSignatureInformation) { return listEqual(documentationFormat, other.documentationFormat, (MarkupKind a, MarkupKind b) => a == b) && parameterInformation == other.parameterInformation && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, documentationFormat.hashCode); hash = JenkinsSmiHash.combine(hash, parameterInformation.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesSymbolKind implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesSymbolKind.canParse, TextDocumentClientCapabilitiesSymbolKind.fromJson); TextDocumentClientCapabilitiesSymbolKind(this.valueSet); static TextDocumentClientCapabilitiesSymbolKind fromJson( Map json) { final valueSet = json['valueSet'] ?.map((item) => item != null ? SymbolKind.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentClientCapabilitiesSymbolKind(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() { Map __result = {}; if (valueSet != null) { __result['valueSet'] = valueSet; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('valueSet'); try { if (obj['valueSet'] != null && !((obj['valueSet'] is List && (obj['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 TextDocumentClientCapabilitiesSymbolKind"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesSymbolKind) { return listEqual(valueSet, other.valueSet, (SymbolKind a, SymbolKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, valueSet.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesSynchronization implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesSynchronization.canParse, TextDocumentClientCapabilitiesSynchronization.fromJson); TextDocumentClientCapabilitiesSynchronization(this.dynamicRegistration, this.willSave, this.willSaveWaitUntil, this.didSave); static TextDocumentClientCapabilitiesSynchronization fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final willSave = json['willSave']; final willSaveWaitUntil = json['willSaveWaitUntil']; final didSave = json['didSave']; return new TextDocumentClientCapabilitiesSynchronization( dynamicRegistration, willSave, willSaveWaitUntil, 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() { Map __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 { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('willSave'); try { if (obj['willSave'] != null && !(obj['willSave'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('willSaveWaitUntil'); try { if (obj['willSaveWaitUntil'] != null && !(obj['willSaveWaitUntil'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('didSave'); try { if (obj['didSave'] != null && !(obj['didSave'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesSynchronization"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesSynchronization) { return dynamicRegistration == other.dynamicRegistration && willSave == other.willSave && willSaveWaitUntil == other.willSaveWaitUntil && didSave == other.didSave && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, willSave.hashCode); hash = JenkinsSmiHash.combine(hash, willSaveWaitUntil.hashCode); hash = JenkinsSmiHash.combine(hash, didSave.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentClientCapabilitiesTypeDefinition implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentClientCapabilitiesTypeDefinition.canParse, TextDocumentClientCapabilitiesTypeDefinition.fromJson); TextDocumentClientCapabilitiesTypeDefinition( this.dynamicRegistration, this.linkSupport); static TextDocumentClientCapabilitiesTypeDefinition fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; final linkSupport = json['linkSupport']; return new TextDocumentClientCapabilitiesTypeDefinition( dynamicRegistration, linkSupport); } /// Whether typeDefinition 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 client supports additional metadata in the form of definition links. /// /// Since 3.14.0 final bool linkSupport; Map toJson() { Map __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 { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('linkSupport'); try { if (obj['linkSupport'] != null && !(obj['linkSupport'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type TextDocumentClientCapabilitiesTypeDefinition"); return false; } } @override bool operator ==(other) { if (other is TextDocumentClientCapabilitiesTypeDefinition) { return dynamicRegistration == other.dynamicRegistration && linkSupport == other.linkSupport && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, linkSupport.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// An event describing a change to a text document. If range and rangeLength /// are omitted the new text is considered to be the full content of the /// document. class TextDocumentContentChangeEvent implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentContentChangeEvent.canParse, TextDocumentContentChangeEvent.fromJson); TextDocumentContentChangeEvent(this.range, this.rangeLength, this.text) { if (text == null) { throw 'text is required but was not provided'; } } static TextDocumentContentChangeEvent fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final rangeLength = json['rangeLength']; final text = json['text']; return new TextDocumentContentChangeEvent(range, rangeLength, text); } /// The range of the document that changed. final Range range; /// The length of the range that got replaced. final num rangeLength; /// The new text of the range/document. final String text; Map toJson() { Map __result = {}; if (range != null) { __result['range'] = range; } if (rangeLength != null) { __result['rangeLength'] = rangeLength; } __result['text'] = text ?? (throw 'text is required but was not set'); return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('range'); try { if (obj['range'] != null && !(Range.canParse(obj['range'], reporter))) { reporter.reportError("must be of type Range"); return false; } } finally { reporter.pop(); } reporter.push('rangeLength'); try { if (obj['rangeLength'] != null && !(obj['rangeLength'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('text'); try { if (!obj.containsKey('text')) { reporter.reportError("must not be undefined"); return false; } if (obj['text'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['text'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type TextDocumentContentChangeEvent"); return false; } } @override bool operator ==(other) { if (other is TextDocumentContentChangeEvent) { return range == other.range && rangeLength == other.rangeLength && text == other.text && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, rangeLength.hashCode); hash = JenkinsSmiHash.combine(hash, text.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentEdit implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentEdit.canParse, TextDocumentEdit.fromJson); TextDocumentEdit(this.textDocument, this.edits) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (edits == null) { throw 'edits is required but was not provided'; } } static TextDocumentEdit fromJson(Map json) { final textDocument = json['textDocument'] != null ? VersionedTextDocumentIdentifier.fromJson(json['textDocument']) : null; final edits = json['edits'] ?.map((item) => item != null ? TextEdit.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentEdit(textDocument, edits); } /// The edits to be applied. final List edits; /// The text document to change. final VersionedTextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['edits'] = edits ?? (throw 'edits is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(VersionedTextDocumentIdentifier.canParse( obj['textDocument'], reporter))) { reporter .reportError("must be of type VersionedTextDocumentIdentifier"); return false; } } finally { reporter.pop(); } reporter.push('edits'); try { if (!obj.containsKey('edits')) { reporter.reportError("must not be undefined"); return false; } if (obj['edits'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['edits'] is List && (obj['edits'] .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 TextDocumentEdit"); return false; } } @override bool operator ==(other) { if (other is TextDocumentEdit) { return textDocument == other.textDocument && listEqual(edits, other.edits, (TextEdit a, TextEdit b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, edits.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentIdentifier implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentIdentifier.canParse, TextDocumentIdentifier.fromJson); TextDocumentIdentifier(this.uri) { if (uri == null) { throw 'uri is required but was not provided'; } } static TextDocumentIdentifier fromJson(Map json) { if (VersionedTextDocumentIdentifier.canParse(json, nullLspJsonReporter)) { return VersionedTextDocumentIdentifier.fromJson(json); } final uri = json['uri']; return new TextDocumentIdentifier(uri); } /// The text document's URI. final String uri; Map toJson() { Map __result = {}; __result['uri'] = uri ?? (throw 'uri is required but was not set'); 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is TextDocumentIdentifier) { return uri == other.uri && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, uri.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentItem implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentItem.canParse, TextDocumentItem.fromJson); TextDocumentItem(this.uri, this.languageId, this.version, this.text) { if (uri == null) { throw 'uri is required but was not provided'; } if (languageId == null) { throw 'languageId is required but was not provided'; } if (version == null) { throw 'version is required but was not provided'; } if (text == null) { throw 'text is required but was not provided'; } } static TextDocumentItem fromJson(Map json) { final uri = json['uri']; final languageId = json['languageId']; final version = json['version']; final text = json['text']; return new TextDocumentItem(uri, languageId, version, 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 num version; Map toJson() { Map __result = {}; __result['uri'] = uri ?? (throw 'uri is required but was not set'); __result['languageId'] = languageId ?? (throw 'languageId is required but was not set'); __result['version'] = version ?? (throw 'version is required but was not set'); __result['text'] = text ?? (throw 'text is required but was not set'); 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['languageId'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['version'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['version'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('text'); try { if (!obj.containsKey('text')) { reporter.reportError("must not be undefined"); return false; } if (obj['text'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is TextDocumentItem) { return uri == other.uri && languageId == other.languageId && version == other.version && text == other.text && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, languageId.hashCode); hash = JenkinsSmiHash.combine(hash, version.hashCode); hash = JenkinsSmiHash.combine(hash, text.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentPositionParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentPositionParams.canParse, TextDocumentPositionParams.fromJson); TextDocumentPositionParams(this.textDocument, this.position) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (position == null) { throw 'position is required but was not provided'; } } static TextDocumentPositionParams fromJson(Map json) { if (CompletionParams.canParse(json, nullLspJsonReporter)) { return CompletionParams.fromJson(json); } if (ReferenceParams.canParse(json, nullLspJsonReporter)) { return ReferenceParams.fromJson(json); } final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final position = json['position'] != null ? Position.fromJson(json['position']) : null; return new TextDocumentPositionParams(textDocument, position); } /// The position inside the text document. final Position position; /// The text document. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['position'] = position ?? (throw 'position is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['position'] == null) { reporter.reportError("must not be null"); return false; } if (!(Position.canParse(obj['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 ==(other) { if (other is TextDocumentPositionParams) { return textDocument == other.textDocument && position == other.position && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, position.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextDocumentRegistrationOptions implements ToJsonable { static const jsonHandler = const 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 (SignatureHelpRegistrationOptions.canParse(json, nullLspJsonReporter)) { return SignatureHelpRegistrationOptions.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 (DocumentOnTypeFormattingRegistrationOptions.canParse( json, nullLspJsonReporter)) { return DocumentOnTypeFormattingRegistrationOptions.fromJson(json); } if (RenameRegistrationOptions.canParse(json, nullLspJsonReporter)) { return RenameRegistrationOptions.fromJson(json); } final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentRegistrationOptions(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() { Map __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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 ==(other) { if (other is TextDocumentRegistrationOptions) { return documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @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 num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// Manually triggered, e.g. by the user pressing save, by starting debugging, /// or by an API call. static const Manual = const TextDocumentSaveReason(1); /// Automatic after a delay. static const AfterDelay = const TextDocumentSaveReason(2); /// When the editor lost focus. static const FocusOut = const TextDocumentSaveReason(3); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is TextDocumentSaveReason && o._value == _value; } class TextDocumentSaveRegistrationOptions implements TextDocumentRegistrationOptions, ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentSaveRegistrationOptions.canParse, TextDocumentSaveRegistrationOptions.fromJson); TextDocumentSaveRegistrationOptions(this.includeText, this.documentSelector); static TextDocumentSaveRegistrationOptions fromJson( Map json) { final includeText = json['includeText']; final documentSelector = json['documentSelector'] ?.map((item) => item != null ? DocumentFilter.fromJson(item) : null) ?.cast() ?.toList(); return new TextDocumentSaveRegistrationOptions( includeText, 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() { Map __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 { if (obj['includeText'] != null && !(obj['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; } if (obj['documentSelector'] != null && !((obj['documentSelector'] is List && (obj['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 ==(other) { if (other is TextDocumentSaveRegistrationOptions) { return includeText == other.includeText && documentSelector == other.documentSelector && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, includeText.hashCode); hash = JenkinsSmiHash.combine(hash, documentSelector.hashCode); return JenkinsSmiHash.finish(hash); } @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 num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// Documents should not be synced at all. static const None = const TextDocumentSyncKind(0); /// Documents are synced by always sending the full content of the document. static const Full = const 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 = const TextDocumentSyncKind(2); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is TextDocumentSyncKind && o._value == _value; } class TextDocumentSyncOptions implements ToJsonable { static const jsonHandler = const LspJsonHandler( TextDocumentSyncOptions.canParse, TextDocumentSyncOptions.fromJson); TextDocumentSyncOptions(this.openClose, this.change, this.willSave, this.willSaveWaitUntil, this.save); static TextDocumentSyncOptions fromJson(Map json) { final openClose = json['openClose']; final change = json['change'] != null ? TextDocumentSyncKind.fromJson(json['change']) : null; final willSave = json['willSave']; final willSaveWaitUntil = json['willSaveWaitUntil']; final save = json['save'] != null ? SaveOptions.fromJson(json['save']) : null; return new TextDocumentSyncOptions( openClose, change, willSave, willSaveWaitUntil, 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 SaveOptions 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() { Map __result = {}; if (openClose != null) { __result['openClose'] = openClose; } if (change != null) { __result['change'] = change; } 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 { if (obj['openClose'] != null && !(obj['openClose'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('change'); try { if (obj['change'] != null && !(TextDocumentSyncKind.canParse(obj['change'], reporter))) { reporter.reportError("must be of type TextDocumentSyncKind"); return false; } } finally { reporter.pop(); } reporter.push('willSave'); try { if (obj['willSave'] != null && !(obj['willSave'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('willSaveWaitUntil'); try { if (obj['willSaveWaitUntil'] != null && !(obj['willSaveWaitUntil'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('save'); try { if (obj['save'] != null && !(SaveOptions.canParse(obj['save'], reporter))) { reporter.reportError("must be of type SaveOptions"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type TextDocumentSyncOptions"); return false; } } @override bool operator ==(other) { if (other is TextDocumentSyncOptions) { return openClose == other.openClose && change == other.change && willSave == other.willSave && willSaveWaitUntil == other.willSaveWaitUntil && save == other.save && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, openClose.hashCode); hash = JenkinsSmiHash.combine(hash, change.hashCode); hash = JenkinsSmiHash.combine(hash, willSave.hashCode); hash = JenkinsSmiHash.combine(hash, willSaveWaitUntil.hashCode); hash = JenkinsSmiHash.combine(hash, save.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class TextEdit implements ToJsonable { static const jsonHandler = const LspJsonHandler(TextEdit.canParse, TextEdit.fromJson); TextEdit(this.range, this.newText) { if (range == null) { throw 'range is required but was not provided'; } if (newText == null) { throw 'newText is required but was not provided'; } } static TextEdit fromJson(Map json) { final range = json['range'] != null ? Range.fromJson(json['range']) : null; final newText = json['newText']; return new TextEdit(range, 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() { Map __result = {}; __result['range'] = range ?? (throw 'range is required but was not set'); __result['newText'] = newText ?? (throw 'newText is required but was not set'); 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; } if (obj['range'] == null) { reporter.reportError("must not be null"); return false; } if (!(Range.canParse(obj['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; } if (obj['newText'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is TextEdit) { return range == other.range && newText == other.newText && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, range.hashCode); hash = JenkinsSmiHash.combine(hash, newText.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// General parameters to unregister a capability. class Unregistration implements ToJsonable { static const jsonHandler = const LspJsonHandler(Unregistration.canParse, Unregistration.fromJson); Unregistration(this.id, this.method) { if (id == null) { throw 'id is required but was not provided'; } if (method == null) { throw 'method is required but was not provided'; } } static Unregistration fromJson(Map json) { final id = json['id']; final method = json['method']; return new Unregistration(id, 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() { Map __result = {}; __result['id'] = id ?? (throw 'id is required but was not set'); __result['method'] = method ?? (throw 'method is required but was not set'); 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; } if (obj['id'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['method'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is Unregistration) { return id == other.id && method == other.method && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, id.hashCode); hash = JenkinsSmiHash.combine(hash, method.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class UnregistrationParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( UnregistrationParams.canParse, UnregistrationParams.fromJson); UnregistrationParams(this.unregisterations) { if (unregisterations == null) { throw 'unregisterations is required but was not provided'; } } static UnregistrationParams fromJson(Map json) { final unregisterations = json['unregisterations'] ?.map((item) => item != null ? Unregistration.fromJson(item) : null) ?.cast() ?.toList(); return new UnregistrationParams(unregisterations); } final List unregisterations; Map toJson() { Map __result = {}; __result['unregisterations'] = unregisterations ?? (throw 'unregisterations is required but was not set'); 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; } if (obj['unregisterations'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['unregisterations'] is List && (obj['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 ==(other) { if (other is UnregistrationParams) { return listEqual(unregisterations, other.unregisterations, (Unregistration a, Unregistration b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, unregisterations.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class VersionedTextDocumentIdentifier implements TextDocumentIdentifier, ToJsonable { static const jsonHandler = const LspJsonHandler( VersionedTextDocumentIdentifier.canParse, VersionedTextDocumentIdentifier.fromJson); VersionedTextDocumentIdentifier(this.version, this.uri) { if (uri == null) { throw 'uri is required but was not provided'; } } static VersionedTextDocumentIdentifier fromJson(Map json) { final version = json['version']; final uri = json['uri']; return new VersionedTextDocumentIdentifier(version, uri); } /// The text document's URI. final String uri; /// The version number of this document. If a 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 truth (as speced 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 num version; Map toJson() { Map __result = {}; __result['version'] = version; __result['uri'] = uri ?? (throw 'uri is required but was not set'); 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; } if (obj['version'] != null && !(obj['version'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } reporter.push('uri'); try { if (!obj.containsKey('uri')) { reporter.reportError("must not be undefined"); return false; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is VersionedTextDocumentIdentifier) { return version == other.version && uri == other.uri && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, version.hashCode); hash = JenkinsSmiHash.combine(hash, uri.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WatchKind { const WatchKind(this._value); const WatchKind.fromJson(this._value); final num _value; static bool canParse(Object obj, LspJsonReporter reporter) { return obj is num; } /// Interested in create events. static const Create = const WatchKind(1); /// Interested in change events static const Change = const WatchKind(2); /// Interested in delete events static const Delete = const WatchKind(4); Object toJson() => _value; @override String toString() => _value.toString(); @override get hashCode => _value.hashCode; bool operator ==(o) => o is WatchKind && o._value == _value; } /// The parameters send in a will save text document notification. class WillSaveTextDocumentParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( WillSaveTextDocumentParams.canParse, WillSaveTextDocumentParams.fromJson); WillSaveTextDocumentParams(this.textDocument, this.reason) { if (textDocument == null) { throw 'textDocument is required but was not provided'; } if (reason == null) { throw 'reason is required but was not provided'; } } static WillSaveTextDocumentParams fromJson(Map json) { final textDocument = json['textDocument'] != null ? TextDocumentIdentifier.fromJson(json['textDocument']) : null; final reason = json['reason']; return new WillSaveTextDocumentParams(textDocument, reason); } /// The 'TextDocumentSaveReason'. final num reason; /// The document that will be saved. final TextDocumentIdentifier textDocument; Map toJson() { Map __result = {}; __result['textDocument'] = textDocument ?? (throw 'textDocument is required but was not set'); __result['reason'] = reason ?? (throw 'reason is required but was not set'); 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; } if (obj['textDocument'] == null) { reporter.reportError("must not be null"); return false; } if (!(TextDocumentIdentifier.canParse(obj['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; } if (obj['reason'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['reason'] is num)) { reporter.reportError("must be of type num"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type WillSaveTextDocumentParams"); return false; } } @override bool operator ==(other) { if (other is WillSaveTextDocumentParams) { return textDocument == other.textDocument && reason == other.reason && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, textDocument.hashCode); hash = JenkinsSmiHash.combine(hash, reason.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// Workspace specific client capabilities. class WorkspaceClientCapabilities implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilities.canParse, WorkspaceClientCapabilities.fromJson); WorkspaceClientCapabilities( this.applyEdit, this.workspaceEdit, this.didChangeConfiguration, this.didChangeWatchedFiles, this.symbol, this.executeCommand, this.workspaceFolders, this.configuration); static WorkspaceClientCapabilities fromJson(Map json) { final applyEdit = json['applyEdit']; final workspaceEdit = json['workspaceEdit'] != null ? WorkspaceClientCapabilitiesWorkspaceEdit.fromJson( json['workspaceEdit']) : null; final didChangeConfiguration = json['didChangeConfiguration'] != null ? WorkspaceClientCapabilitiesDidChangeConfiguration.fromJson( json['didChangeConfiguration']) : null; final didChangeWatchedFiles = json['didChangeWatchedFiles'] != null ? WorkspaceClientCapabilitiesDidChangeWatchedFiles.fromJson( json['didChangeWatchedFiles']) : null; final symbol = json['symbol'] != null ? WorkspaceClientCapabilitiesSymbol.fromJson(json['symbol']) : null; final executeCommand = json['executeCommand'] != null ? WorkspaceClientCapabilitiesExecuteCommand.fromJson( json['executeCommand']) : null; final workspaceFolders = json['workspaceFolders']; final configuration = json['configuration']; return new WorkspaceClientCapabilities( applyEdit, workspaceEdit, didChangeConfiguration, didChangeWatchedFiles, symbol, executeCommand, workspaceFolders, configuration); } /// The client supports applying batch edits to the workspace by supporting /// the request 'workspace/applyEdit' final bool applyEdit; /// The client supports `workspace/configuration` requests. /// /// Since 3.6.0 final bool configuration; /// Capabilities specific to the `workspace/didChangeConfiguration` /// notification. final WorkspaceClientCapabilitiesDidChangeConfiguration didChangeConfiguration; /// Capabilities specific to the `workspace/didChangeWatchedFiles` /// notification. final WorkspaceClientCapabilitiesDidChangeWatchedFiles didChangeWatchedFiles; /// Capabilities specific to the `workspace/executeCommand` request. final WorkspaceClientCapabilitiesExecuteCommand executeCommand; /// Capabilities specific to the `workspace/symbol` request. final WorkspaceClientCapabilitiesSymbol symbol; /// Capabilities specific to `WorkspaceEdit`s final WorkspaceClientCapabilitiesWorkspaceEdit workspaceEdit; /// The client has support for workspace folders. /// /// Since 3.6.0 final bool workspaceFolders; Map toJson() { Map __result = {}; if (applyEdit != null) { __result['applyEdit'] = applyEdit; } if (workspaceEdit != null) { __result['workspaceEdit'] = workspaceEdit; } if (didChangeConfiguration != null) { __result['didChangeConfiguration'] = didChangeConfiguration; } if (didChangeWatchedFiles != null) { __result['didChangeWatchedFiles'] = didChangeWatchedFiles; } if (symbol != null) { __result['symbol'] = symbol; } if (executeCommand != null) { __result['executeCommand'] = executeCommand; } if (workspaceFolders != null) { __result['workspaceFolders'] = workspaceFolders; } if (configuration != null) { __result['configuration'] = configuration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('applyEdit'); try { if (obj['applyEdit'] != null && !(obj['applyEdit'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('workspaceEdit'); try { if (obj['workspaceEdit'] != null && !(WorkspaceClientCapabilitiesWorkspaceEdit.canParse( obj['workspaceEdit'], reporter))) { reporter.reportError( "must be of type WorkspaceClientCapabilitiesWorkspaceEdit"); return false; } } finally { reporter.pop(); } reporter.push('didChangeConfiguration'); try { if (obj['didChangeConfiguration'] != null && !(WorkspaceClientCapabilitiesDidChangeConfiguration.canParse( obj['didChangeConfiguration'], reporter))) { reporter.reportError( "must be of type WorkspaceClientCapabilitiesDidChangeConfiguration"); return false; } } finally { reporter.pop(); } reporter.push('didChangeWatchedFiles'); try { if (obj['didChangeWatchedFiles'] != null && !(WorkspaceClientCapabilitiesDidChangeWatchedFiles.canParse( obj['didChangeWatchedFiles'], reporter))) { reporter.reportError( "must be of type WorkspaceClientCapabilitiesDidChangeWatchedFiles"); return false; } } finally { reporter.pop(); } reporter.push('symbol'); try { if (obj['symbol'] != null && !(WorkspaceClientCapabilitiesSymbol.canParse( obj['symbol'], reporter))) { reporter .reportError("must be of type WorkspaceClientCapabilitiesSymbol"); return false; } } finally { reporter.pop(); } reporter.push('executeCommand'); try { if (obj['executeCommand'] != null && !(WorkspaceClientCapabilitiesExecuteCommand.canParse( obj['executeCommand'], reporter))) { reporter.reportError( "must be of type WorkspaceClientCapabilitiesExecuteCommand"); return false; } } finally { reporter.pop(); } reporter.push('workspaceFolders'); try { if (obj['workspaceFolders'] != null && !(obj['workspaceFolders'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('configuration'); try { if (obj['configuration'] != null && !(obj['configuration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type WorkspaceClientCapabilities"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilities) { 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 && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, applyEdit.hashCode); hash = JenkinsSmiHash.combine(hash, workspaceEdit.hashCode); hash = JenkinsSmiHash.combine(hash, didChangeConfiguration.hashCode); hash = JenkinsSmiHash.combine(hash, didChangeWatchedFiles.hashCode); hash = JenkinsSmiHash.combine(hash, symbol.hashCode); hash = JenkinsSmiHash.combine(hash, executeCommand.hashCode); hash = JenkinsSmiHash.combine(hash, workspaceFolders.hashCode); hash = JenkinsSmiHash.combine(hash, configuration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceClientCapabilitiesDidChangeConfiguration implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilitiesDidChangeConfiguration.canParse, WorkspaceClientCapabilitiesDidChangeConfiguration.fromJson); WorkspaceClientCapabilitiesDidChangeConfiguration(this.dynamicRegistration); static WorkspaceClientCapabilitiesDidChangeConfiguration fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new WorkspaceClientCapabilitiesDidChangeConfiguration( dynamicRegistration); } /// Did change configuration notification supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type WorkspaceClientCapabilitiesDidChangeConfiguration"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilitiesDidChangeConfiguration) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceClientCapabilitiesDidChangeWatchedFiles implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilitiesDidChangeWatchedFiles.canParse, WorkspaceClientCapabilitiesDidChangeWatchedFiles.fromJson); WorkspaceClientCapabilitiesDidChangeWatchedFiles(this.dynamicRegistration); static WorkspaceClientCapabilitiesDidChangeWatchedFiles fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new WorkspaceClientCapabilitiesDidChangeWatchedFiles( 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() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type WorkspaceClientCapabilitiesDidChangeWatchedFiles"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilitiesDidChangeWatchedFiles) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceClientCapabilitiesExecuteCommand implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilitiesExecuteCommand.canParse, WorkspaceClientCapabilitiesExecuteCommand.fromJson); WorkspaceClientCapabilitiesExecuteCommand(this.dynamicRegistration); static WorkspaceClientCapabilitiesExecuteCommand fromJson( Map json) { final dynamicRegistration = json['dynamicRegistration']; return new WorkspaceClientCapabilitiesExecuteCommand(dynamicRegistration); } /// Execute command supports dynamic registration. final bool dynamicRegistration; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type WorkspaceClientCapabilitiesExecuteCommand"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilitiesExecuteCommand) { return dynamicRegistration == other.dynamicRegistration && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceClientCapabilitiesSymbol implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilitiesSymbol.canParse, WorkspaceClientCapabilitiesSymbol.fromJson); WorkspaceClientCapabilitiesSymbol(this.dynamicRegistration, this.symbolKind); static WorkspaceClientCapabilitiesSymbol fromJson(Map json) { final dynamicRegistration = json['dynamicRegistration']; final symbolKind = json['symbolKind'] != null ? WorkspaceClientCapabilitiesSymbolKind.fromJson(json['symbolKind']) : null; return new WorkspaceClientCapabilitiesSymbol( dynamicRegistration, symbolKind); } /// Symbol request supports dynamic registration. final bool dynamicRegistration; /// Specific capabilities for the `SymbolKind` in the `workspace/symbol` /// request. final WorkspaceClientCapabilitiesSymbolKind symbolKind; Map toJson() { Map __result = {}; if (dynamicRegistration != null) { __result['dynamicRegistration'] = dynamicRegistration; } if (symbolKind != null) { __result['symbolKind'] = symbolKind; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('dynamicRegistration'); try { if (obj['dynamicRegistration'] != null && !(obj['dynamicRegistration'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('symbolKind'); try { if (obj['symbolKind'] != null && !(WorkspaceClientCapabilitiesSymbolKind.canParse( obj['symbolKind'], reporter))) { reporter.reportError( "must be of type WorkspaceClientCapabilitiesSymbolKind"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type WorkspaceClientCapabilitiesSymbol"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilitiesSymbol) { return dynamicRegistration == other.dynamicRegistration && symbolKind == other.symbolKind && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, dynamicRegistration.hashCode); hash = JenkinsSmiHash.combine(hash, symbolKind.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceClientCapabilitiesSymbolKind implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilitiesSymbolKind.canParse, WorkspaceClientCapabilitiesSymbolKind.fromJson); WorkspaceClientCapabilitiesSymbolKind(this.valueSet); static WorkspaceClientCapabilitiesSymbolKind fromJson( Map json) { final valueSet = json['valueSet'] ?.map((item) => item != null ? SymbolKind.fromJson(item) : null) ?.cast() ?.toList(); return new WorkspaceClientCapabilitiesSymbolKind(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() { Map __result = {}; if (valueSet != null) { __result['valueSet'] = valueSet; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('valueSet'); try { if (obj['valueSet'] != null && !((obj['valueSet'] is List && (obj['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 WorkspaceClientCapabilitiesSymbolKind"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilitiesSymbolKind) { return listEqual(valueSet, other.valueSet, (SymbolKind a, SymbolKind b) => a == b) && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, valueSet.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceClientCapabilitiesWorkspaceEdit implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceClientCapabilitiesWorkspaceEdit.canParse, WorkspaceClientCapabilitiesWorkspaceEdit.fromJson); WorkspaceClientCapabilitiesWorkspaceEdit( this.documentChanges, this.resourceOperations, this.failureHandling); static WorkspaceClientCapabilitiesWorkspaceEdit fromJson( Map json) { final documentChanges = json['documentChanges']; final resourceOperations = json['resourceOperations'] ?.map((item) => item != null ? ResourceOperationKind.fromJson(item) : null) ?.cast() ?.toList(); final failureHandling = json['failureHandling'] != null ? FailureHandlingKind.fromJson(json['failureHandling']) : null; return new WorkspaceClientCapabilitiesWorkspaceEdit( documentChanges, resourceOperations, failureHandling); } /// 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. final FailureHandlingKind failureHandling; /// The resource operations the client supports. Clients should at least /// support 'create', 'rename' and 'delete' files and folders. final List resourceOperations; Map toJson() { Map __result = {}; if (documentChanges != null) { __result['documentChanges'] = documentChanges; } if (resourceOperations != null) { __result['resourceOperations'] = resourceOperations; } if (failureHandling != null) { __result['failureHandling'] = failureHandling; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('documentChanges'); try { if (obj['documentChanges'] != null && !(obj['documentChanges'] is bool)) { reporter.reportError("must be of type bool"); return false; } } finally { reporter.pop(); } reporter.push('resourceOperations'); try { if (obj['resourceOperations'] != null && !((obj['resourceOperations'] is List && (obj['resourceOperations'].every((item) => ResourceOperationKind.canParse(item, reporter)))))) { reporter.reportError("must be of type List"); return false; } } finally { reporter.pop(); } reporter.push('failureHandling'); try { if (obj['failureHandling'] != null && !(FailureHandlingKind.canParse(obj['failureHandling'], reporter))) { reporter.reportError("must be of type FailureHandlingKind"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError( "must be of type WorkspaceClientCapabilitiesWorkspaceEdit"); return false; } } @override bool operator ==(other) { if (other is WorkspaceClientCapabilitiesWorkspaceEdit) { return documentChanges == other.documentChanges && listEqual(resourceOperations, other.resourceOperations, (ResourceOperationKind a, ResourceOperationKind b) => a == b) && failureHandling == other.failureHandling && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, documentChanges.hashCode); hash = JenkinsSmiHash.combine(hash, resourceOperations.hashCode); hash = JenkinsSmiHash.combine(hash, failureHandling.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceEdit implements ToJsonable { static const jsonHandler = const LspJsonHandler(WorkspaceEdit.canParse, WorkspaceEdit.fromJson); WorkspaceEdit(this.changes, this.documentChanges); static WorkspaceEdit fromJson(Map json) { final changes = json['changes'] ?.map((key, value) => new MapEntry( key, value ?.map((item) => item != null ? TextEdit.fromJson(item) : null) ?.cast() ?.toList())) ?.cast>(); final documentChanges = (json['documentChanges'] is List && (json['documentChanges'].every((item) => TextDocumentEdit.canParse(item, nullLspJsonReporter)))) ? new Either2, List>>.t1( json['documentChanges'] ?.map((item) => item != null ? TextDocumentEdit.fromJson(item) : null) ?.cast() ?.toList()) : ((json['documentChanges'] is List && (json['documentChanges'].every((item) => (TextDocumentEdit.canParse(item, nullLspJsonReporter) || CreateFile.canParse(item, nullLspJsonReporter) || RenameFile.canParse(item, nullLspJsonReporter) || DeleteFile.canParse(item, nullLspJsonReporter))))) ? new Either2, List>>.t2(json['documentChanges'] ?.map((item) => TextDocumentEdit.canParse(item, nullLspJsonReporter) ? new Either4.t1( item != null ? TextDocumentEdit.fromJson(item) : null) : (CreateFile.canParse(item, nullLspJsonReporter) ? new Either4.t2(item != null ? CreateFile.fromJson(item) : null) : (RenameFile.canParse(item, nullLspJsonReporter) ? new Either4.t3(item != null ? RenameFile.fromJson(item) : null) : (DeleteFile.canParse(item, nullLspJsonReporter) ? new Either4.t4(item != null ? DeleteFile.fromJson(item) : null) : (item == null ? null : (throw '''${item} was not one of (TextDocumentEdit, CreateFile, RenameFile, DeleteFile)''')))))) ?.cast>() ?.toList()) : (json['documentChanges'] == null ? null : (throw '''${json['documentChanges']} was not one of (List, List>)'''))); return new WorkspaceEdit(changes, documentChanges); } /// 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() { Map __result = {}; if (changes != null) { __result['changes'] = changes; } if (documentChanges != null) { __result['documentChanges'] = documentChanges; } return __result; } static bool canParse(Object obj, LspJsonReporter reporter) { if (obj is Map) { reporter.push('changes'); try { if (obj['changes'] != null && !((obj['changes'] is Map && (obj['changes'].keys.every((item) => item is String && obj['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 { if (obj['documentChanges'] != null && !(((obj['documentChanges'] is List && (obj['documentChanges'].every((item) => TextDocumentEdit.canParse(item, reporter)))) || (obj['documentChanges'] is List && (obj['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(); } return true; } else { reporter.reportError("must be of type WorkspaceEdit"); return false; } } @override bool operator ==(other) { if (other is WorkspaceEdit) { return mapEqual(changes, other.changes, (List a, List b) => a == b) && documentChanges == other.documentChanges && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, changes.hashCode); hash = JenkinsSmiHash.combine(hash, documentChanges.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } class WorkspaceFolder implements ToJsonable { static const jsonHandler = const LspJsonHandler(WorkspaceFolder.canParse, WorkspaceFolder.fromJson); WorkspaceFolder(this.uri, this.name) { if (uri == null) { throw 'uri is required but was not provided'; } if (name == null) { throw 'name is required but was not provided'; } } static WorkspaceFolder fromJson(Map json) { final uri = json['uri']; final name = json['name']; return new WorkspaceFolder(uri, 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() { Map __result = {}; __result['uri'] = uri ?? (throw 'uri is required but was not set'); __result['name'] = name ?? (throw 'name is required but was not set'); 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; } if (obj['uri'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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; } if (obj['name'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['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 ==(other) { if (other is WorkspaceFolder) { return uri == other.uri && name == other.name && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, uri.hashCode); hash = JenkinsSmiHash.combine(hash, name.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// The workspace folder change event. class WorkspaceFoldersChangeEvent implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceFoldersChangeEvent.canParse, WorkspaceFoldersChangeEvent.fromJson); WorkspaceFoldersChangeEvent(this.added, this.removed) { if (added == null) { throw 'added is required but was not provided'; } if (removed == null) { throw 'removed is required but was not provided'; } } static WorkspaceFoldersChangeEvent fromJson(Map json) { final added = json['added'] ?.map((item) => item != null ? WorkspaceFolder.fromJson(item) : null) ?.cast() ?.toList(); final removed = json['removed'] ?.map((item) => item != null ? WorkspaceFolder.fromJson(item) : null) ?.cast() ?.toList(); return new WorkspaceFoldersChangeEvent(added, removed); } /// The array of added workspace folders final List added; /// The array of the removed workspace folders final List removed; Map toJson() { Map __result = {}; __result['added'] = added ?? (throw 'added is required but was not set'); __result['removed'] = removed ?? (throw 'removed is required but was not set'); 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; } if (obj['added'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['added'] is List && (obj['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; } if (obj['removed'] == null) { reporter.reportError("must not be null"); return false; } if (!((obj['removed'] is List && (obj['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 ==(other) { if (other is 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 { int hash = 0; hash = JenkinsSmiHash.combine(hash, added.hashCode); hash = JenkinsSmiHash.combine(hash, removed.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); } /// The parameters of a Workspace Symbol Request. class WorkspaceSymbolParams implements ToJsonable { static const jsonHandler = const LspJsonHandler( WorkspaceSymbolParams.canParse, WorkspaceSymbolParams.fromJson); WorkspaceSymbolParams(this.query) { if (query == null) { throw 'query is required but was not provided'; } } static WorkspaceSymbolParams fromJson(Map json) { final query = json['query']; return new WorkspaceSymbolParams(query); } /// A non-empty query string final String query; Map toJson() { Map __result = {}; __result['query'] = query ?? (throw 'query is required but was not set'); 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; } if (obj['query'] == null) { reporter.reportError("must not be null"); return false; } if (!(obj['query'] is String)) { reporter.reportError("must be of type String"); return false; } } finally { reporter.pop(); } return true; } else { reporter.reportError("must be of type WorkspaceSymbolParams"); return false; } } @override bool operator ==(other) { if (other is WorkspaceSymbolParams) { return query == other.query && true; } return false; } @override int get hashCode { int hash = 0; hash = JenkinsSmiHash.combine(hash, query.hashCode); return JenkinsSmiHash.finish(hash); } @override String toString() => jsonEncoder.convert(toJson()); }