summaryrefslogtreecommitdiff
path: root/graphics/asymptote/LspCpp/include
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/LspCpp/include')
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Cancellation.h17
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h76
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Context.h297
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Endpoint.h65
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/GCThreadContext.h3
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageIssue.h185
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageJsonHandler.h93
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageProducer.h26
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/NotificationInMessage.h110
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RemoteEndPoint.h580
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h110
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/ScopeExit.h64
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/StreamMessageProducer.h62
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/TcpServer.h56
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/WebSocketServer.h115
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/future.h250
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/json.h251
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsRequestId.h85
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsResponseMessage.h112
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/macro_map.h521
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/message.h33
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/serializer.h475
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/stream.h380
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/threaded_queue.h493
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/traits.h278
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/AbsolutePath.h35
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/ClientPreferences.h564
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/CodeActionParams.h94
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/Directory.h11
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/ExecuteCommandParams.h15
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/IProgressMonitor.h83
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/Markup.h157
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/string_ref.h1392
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/ParentProcessWatcher.h9
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/ProcessIoService.h62
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/ProtocolJsonHandler.h15
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/ResourceOperation.h104
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/SimpleTimer.h30
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/client/registerCapability.h22
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/client/unregisterCapability.h21
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/Move.h4
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/OverridableMethod.h38
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/WorkspaceSymbolParams.h8
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/addOverridableMethods.h15
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/buildWorkspace.h12
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkConstructorsStatus.h31
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkDelegateMethodsStatus.h24
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkHashCodeEqualsStatus.h43
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkToStringStatus.h30
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/classFileContents.h3
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/codeActionResult.h7
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/executeCommand.h16
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/findLinks.h18
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateAccessors.h15
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateConstructors.h17
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateDelegateMethods.h24
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateHashCodeEquals.h27
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateToString.h11
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getMoveDestinations.h77
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getRefactorEdit.h88
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/listOverridableMethods.h12
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/organizeImports.h4
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/projectConfigurationUpdate.h2
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/resolveUnimplementedAccessors.h32
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/searchSymbols.h20
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/sonarlint/protocol.h186
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/InitializeParams.h144
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialize.h13
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialized.h2
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsClientCapabilities.h38
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsServerCapabilities.h946
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsTextDocumentClientCapabilities.h1041
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsWorkspaceClientCapabilites.h222
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/progress.h8
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/general/shutdown.h2
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/language/language.h123
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/location_type.h47
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lru_cache.h272
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsAny.h227
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCodeAction.h30
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCommand.h55
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsDocumentUri.h35
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsFormattingOptions.h46
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsMarkedString.h23
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsPosition.h31
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsRange.h25
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsResponseError.h91
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentEdit.h16
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentIdentifier.h7
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentItem.h23
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentPositionParams.h18
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextEdit.h49
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsVersionedTextDocumentIdentifier.h12
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsWorkspaceEdit.h40
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_code_action.h99
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_completion.h301
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_diagnostic.h114
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/method_type.h5
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/out_list.h12
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/symbol.h176
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/SemanticTokens.h306
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/callHierarchy.h133
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_action.h50
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_lens.h36
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/colorPresentation.h44
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/completion.h73
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/declaration_definition.h12
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/didRenameFiles.h49
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_change.h49
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_close.h24
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_open.h23
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_save.h18
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/documentColor.h57
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_link.h44
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_symbol.h28
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/foldingRange.h45
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/formatting.h23
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/highlight.h6
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/hover.h28
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/implementation.h6
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/inlayHint.h169
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/linkedEditingRange.h38
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/onTypeFormatting.h28
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/prepareRename.h28
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/publishDiagnostics.h22
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/range_formatting.h29
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/references.h42
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/rename.h22
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCodeLens.h2
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCompletionItem.h6
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveTypeHierarchy.h25
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/selectionRange.h37
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/semanticHighlighting.h27
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/signature_help.h106
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/typeHierarchy.h84
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/type_definition.h6
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/willSave.h44
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/utils.h136
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/windows/MessageNotify.h62
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/working_files.h75
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/applyEdit.h27
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/configuration.h22
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/didChangeWorkspaceFolders.h33
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_configuration.h17
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_watched_files.h34
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/execute_command.h5
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/symbol.h1
-rw-r--r--graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/workspaceFolders.h20
148 files changed, 7675 insertions, 6934 deletions
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Cancellation.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Cancellation.h
index 496be29844..1fcd0a0097 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Cancellation.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Cancellation.h
@@ -6,18 +6,17 @@ using CancelMonitor = std::function<int()>;
namespace Cancellation
{
- struct Params {
- /**
+struct Params
+{
+ /**
* The request id to cancel.
*/
- lsRequestId id;
-
- MAKE_SWAP_METHOD(Cancellation::Params, id);
- };
+ lsRequestId id;
+ MAKE_SWAP_METHOD(Cancellation::Params, id);
};
-MAKE_REFLECT_STRUCT(Cancellation::Params, id);
-
-DEFINE_NOTIFICATION_TYPE(Notify_Cancellation, Cancellation::Params,"$/cancelRequest");
+}; // namespace Cancellation
+MAKE_REFLECT_STRUCT(Cancellation::Params, id);
+DEFINE_NOTIFICATION_TYPE(Notify_Cancellation, Cancellation::Params, "$/cancelRequest");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h
index 6a8cf7a2a6..074f78296c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h
@@ -1,48 +1,56 @@
#pragma once
#include <condition_variable>
-template <class T>
+template<class T>
class Condition
{
public:
-
- std::mutex m_mutex;
- std::condition_variable m_condition;
- ~Condition() {
- m_condition.notify_all();
+ std::mutex m_mutex;
+ std::condition_variable m_condition;
+ ~Condition()
+ {
+ m_condition.notify_all();
+ }
+ void notify(std::unique_ptr<T> data) noexcept
+ {
+ {
+ std::lock_guard<std::mutex> eventLock(m_mutex);
+ any.swap(data);
}
- void notify(std::unique_ptr<T> data) noexcept
+ // wake up one waiter
+ m_condition.notify_one();
+ };
+
+ std::unique_ptr<T> wait(unsigned timeout = 0)
+ {
+ std::unique_lock<std::mutex> ul(m_mutex);
+ if (!timeout)
{
+ m_condition.wait(
+ ul,
+ [&]()
{
- std::lock_guard<std::mutex> eventLock(m_mutex);
- any.swap(data);
+ if (!any)
+ {
+ return false;
+ }
+ return true;
}
- // wake up one waiter
- m_condition.notify_one();
- };
-
-
- std::unique_ptr<T> wait(unsigned timeout=0)
+ );
+ }
+ else
{
- std::unique_lock<std::mutex> ul(m_mutex);
- if (!timeout) {
- m_condition.wait(ul,[&]() {
- if (!any)
- return false;
- return true;
- });
- }
- else{
- if(!any){
- std::cv_status status = m_condition.wait_for(ul, std::chrono::milliseconds(timeout));
- if (status == std::cv_status::timeout)
- {
- return {};
- }
- }
+ if (!any)
+ {
+ std::cv_status status = m_condition.wait_for(ul, std::chrono::milliseconds(timeout));
+ if (status == std::cv_status::timeout)
+ {
+ return {};
}
- return std::unique_ptr<T>(any.release());
-
+ }
}
+ return std::unique_ptr<T>(any.release());
+ }
+
private:
- std::unique_ptr<T> any;
+ std::unique_ptr<T> any;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Context.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Context.h
index 20edf71b1c..a562327b06 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Context.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Context.h
@@ -16,8 +16,8 @@
#include <memory>
#include <type_traits>
-namespace lsp {
-
+namespace lsp
+{
/// Values in a Context are indexed by typed keys.
/// Key<T> serves two purposes:
@@ -34,17 +34,18 @@ namespace lsp {
///
/// Keys are typically used across multiple functions, so most of the time you
/// would want to make them static class members or global variables.
-template <class Type> class Key {
+template<class Type>
+class Key
+{
public:
- static_assert(!std::is_reference<Type>::value,
- "Reference arguments to Key<> are not allowed");
+ static_assert(!std::is_reference<Type>::value, "Reference arguments to Key<> are not allowed");
- constexpr Key() = default;
+ constexpr Key() = default;
- Key(Key const &) = delete;
- Key &operator=(Key const &) = delete;
- Key(Key &&) = delete;
- Key &operator=(Key &&) = delete;
+ Key(Key const&) = delete;
+ Key& operator=(Key const&) = delete;
+ Key(Key&&) = delete;
+ Key& operator=(Key&&) = delete;
};
/// A context is an immutable container for per-request data that must be
@@ -63,154 +64,182 @@ public:
/// You can't add data to an existing context, instead you create a new
/// immutable context derived from it with extra data added. When you retrieve
/// data, the context will walk up the parent chain until the key is found.
-class Context {
+class Context
+{
public:
- /// Returns an empty root context that contains no data.
- static Context empty();
- /// Returns the context for the current thread, creating it if needed.
- static const Context &current();
- // Sets the current() context to Replacement, and returns the old context.
- // Prefer to use WithContext or WithContextValue to do this safely.
- static Context swapCurrent(Context Replacement);
+ /// Returns an empty root context that contains no data.
+ static Context empty();
+ /// Returns the context for the current thread, creating it if needed.
+ static Context const& current();
+ // Sets the current() context to Replacement, and returns the old context.
+ // Prefer to use WithContext or WithContextValue to do this safely.
+ static Context swapCurrent(Context Replacement);
private:
- struct Data;
- Context(std::shared_ptr<const Data> DataPtr);
+ struct Data;
+ Context(std::shared_ptr<Data const> DataPtr);
public:
- /// Same as Context::empty(), please use Context::empty() instead.
- Context() = default;
-
- /// Copy operations for this class are deleted, use an explicit clone() method
- /// when you need a copy of the context instead.
- Context(Context const &) = delete;
- Context &operator=(const Context &) = delete;
-
- Context(Context &&) = default;
- Context &operator=(Context &&) = default;
-
- /// Get data stored for a typed \p Key. If values are not found
- /// \returns Pointer to the data associated with \p Key. If no data is
- /// specified for \p Key, return null.
- template <class Type> const Type *get(const Key<Type> &Key) const {
- for (const Data *DataPtr = this->dataPtr.get(); DataPtr != nullptr;
- DataPtr = DataPtr->parent.get()) {
- if (DataPtr->KeyPtr == &Key)
- return static_cast<const Type *>(DataPtr->value->getValuePtr());
+ /// Same as Context::empty(), please use Context::empty() instead.
+ Context() = default;
+
+ /// Copy operations for this class are deleted, use an explicit clone() method
+ /// when you need a copy of the context instead.
+ Context(Context const&) = delete;
+ Context& operator=(Context const&) = delete;
+
+ Context(Context&&) = default;
+ Context& operator=(Context&&) = default;
+
+ /// Get data stored for a typed \p Key. If values are not found
+ /// \returns Pointer to the data associated with \p Key. If no data is
+ /// specified for \p Key, return null.
+ template<class Type>
+ Type const* get(Key<Type> const& Key) const
+ {
+ for (Data const* DataPtr = this->dataPtr.get(); DataPtr != nullptr; DataPtr = DataPtr->parent.get())
+ {
+ if (DataPtr->KeyPtr == &Key)
+ {
+ return static_cast<Type const*>(DataPtr->value->getValuePtr());
+ }
+ }
+ return nullptr;
+ }
+
+ /// A helper to get a reference to a \p Key that must exist in the map.
+ /// Must not be called for keys that are not in the map.
+ template<class Type>
+ Type const& getExisting(Key<Type> const& Key) const
+ {
+ auto Val = get(Key);
+ assert(Val && "Key does not exist");
+ return *Val;
+ }
+
+ /// Derives a child context
+ /// It is safe to move or destroy a parent context after calling derive().
+ /// The child will keep its parent alive, and its data remains accessible.
+ template<class Type>
+ Context derive(Key<Type> const& Key, typename std::decay<Type>::type Value) const&
+ {
+ return Context(std::make_shared<Data>(Data {
+ /*parent=*/dataPtr, &Key,
+ std::make_unique<TypedAnyStorage<typename std::decay<Type>::type>>(std::move(Value))
+ }));
+ }
+
+ template<class Type>
+ Context derive(Key<Type> const& Key, typename std::decay<Type>::type Value) && /* takes ownership */
+ {
+ return Context(std::make_shared<Data>(Data {
+ /*parent=*/std::move(dataPtr), &Key,
+ std::make_unique<TypedAnyStorage<typename std::decay<Type>::type>>(std::move(Value))
+ }));
+ }
+
+ /// Derives a child context, using an anonymous key.
+ /// Intended for objects stored only for their destructor's side-effect.
+ template<class Type>
+ Context derive(Type&& Value) const&
+ {
+ static Key<typename std::decay<Type>::type> Private;
+ return derive(Private, std::forward<Type>(Value));
}
- return nullptr;
- }
-
- /// A helper to get a reference to a \p Key that must exist in the map.
- /// Must not be called for keys that are not in the map.
- template <class Type> const Type &getExisting(const Key<Type> &Key) const {
- auto Val = get(Key);
- assert(Val && "Key does not exist");
- return *Val;
- }
-
- /// Derives a child context
- /// It is safe to move or destroy a parent context after calling derive().
- /// The child will keep its parent alive, and its data remains accessible.
- template <class Type>
- Context derive(const Key<Type> &Key,
- typename std::decay<Type>::type Value) const & {
- return Context(std::make_shared<Data>(
- Data{/*parent=*/dataPtr, &Key,
- std::make_unique<TypedAnyStorage<typename std::decay<Type>::type>>(
- std::move(Value))}));
- }
-
- template <class Type>
- Context
- derive(const Key<Type> &Key,
- typename std::decay<Type>::type Value) && /* takes ownership */ {
- return Context(std::make_shared<Data>(
- Data{/*parent=*/std::move(dataPtr), &Key,
- std::make_unique<TypedAnyStorage<typename std::decay<Type>::type>>(
- std::move(Value))}));
- }
-
- /// Derives a child context, using an anonymous key.
- /// Intended for objects stored only for their destructor's side-effect.
- template <class Type> Context derive(Type &&Value) const & {
- static Key<typename std::decay<Type>::type> Private;
- return derive(Private, std::forward<Type>(Value));
- }
-
- template <class Type> Context derive(Type &&Value) && {
- static Key<typename std::decay<Type>::type> Private;
- return std::move(*this).derive(Private, std::forward<Type>(Value));
- }
-
- /// Clone this context object.
- Context clone() const;
+
+ template<class Type>
+ Context derive(Type&& Value) &&
+ {
+ static Key<typename std::decay<Type>::type> Private;
+ return std::move(*this).derive(Private, std::forward<Type>(Value));
+ }
+
+ /// Clone this context object.
+ Context clone() const;
private:
- class AnyStorage {
- public:
- virtual ~AnyStorage() = default;
- virtual void *getValuePtr() = 0;
- };
-
- template <class T> class TypedAnyStorage : public Context::AnyStorage {
- static_assert(std::is_same<typename std::decay<T>::type, T>::value,
- "Argument to TypedAnyStorage must be decayed");
-
- public:
- TypedAnyStorage(T &&Value) : value(std::move(Value)) {}
-
- void *getValuePtr() override { return &value; }
-
- private:
- T value;
- };
-
- struct Data {
- // We need to make sure parent outlives the value, so the order of members
- // is important. We do that to allow classes stored in Context's child
- // layers to store references to the data in the parent layers.
- std::shared_ptr<const Data> parent;
- const void *KeyPtr;
- std::unique_ptr<AnyStorage> value;
- };
-
- std::shared_ptr<const Data> dataPtr;
+ class AnyStorage
+ {
+ public:
+ virtual ~AnyStorage() = default;
+ virtual void* getValuePtr() = 0;
+ };
+
+ template<class T>
+ class TypedAnyStorage : public Context::AnyStorage
+ {
+ static_assert(
+ std::is_same<typename std::decay<T>::type, T>::value, "Argument to TypedAnyStorage must be decayed"
+ );
+
+ public:
+ TypedAnyStorage(T&& Value) : value(std::move(Value))
+ {
+ }
+
+ void* getValuePtr() override
+ {
+ return &value;
+ }
+
+ private:
+ T value;
+ };
+
+ struct Data
+ {
+ // We need to make sure parent outlives the value, so the order of members
+ // is important. We do that to allow classes stored in Context's child
+ // layers to store references to the data in the parent layers.
+ std::shared_ptr<Data const> parent;
+ void const* KeyPtr;
+ std::unique_ptr<AnyStorage> value;
+ };
+
+ std::shared_ptr<Data const> dataPtr;
};
/// WithContext replaces Context::current() with a provided scope.
/// When the WithContext is destroyed, the original scope is restored.
/// For extending the current context with new value, prefer WithContextValue.
-class WithContext {
+class WithContext
+{
public:
- WithContext(Context C) : restore(Context::swapCurrent(std::move(C))) {}
- ~WithContext() { Context::swapCurrent(std::move(restore)); }
- WithContext(const WithContext &) = delete;
- WithContext &operator=(const WithContext &) = delete;
- WithContext(WithContext &&) = delete;
- WithContext &operator=(WithContext &&) = delete;
+ WithContext(Context C) : restore(Context::swapCurrent(std::move(C)))
+ {
+ }
+ ~WithContext()
+ {
+ Context::swapCurrent(std::move(restore));
+ }
+ WithContext(WithContext const&) = delete;
+ WithContext& operator=(WithContext const&) = delete;
+ WithContext(WithContext&&) = delete;
+ WithContext& operator=(WithContext&&) = delete;
private:
- Context restore;
+ Context restore;
};
/// WithContextValue extends Context::current() with a single value.
/// When the WithContextValue is destroyed, the original scope is restored.
-class WithContextValue {
+class WithContextValue
+{
public:
- template <typename T>
- WithContextValue(const Key<T> &K, typename std::decay<T>::type V)
- : restore(Context::current().derive(K, std::move(V))) {}
+ template<typename T>
+ WithContextValue(Key<T> const& K, typename std::decay<T>::type V)
+ : restore(Context::current().derive(K, std::move(V)))
+ {
+ }
- // Anonymous values can be used for the destructor side-effect.
- template <typename T>
- WithContextValue(T &&V)
- : restore(Context::current().derive(std::forward<T>(V))) {}
+ // Anonymous values can be used for the destructor side-effect.
+ template<typename T>
+ WithContextValue(T&& V) : restore(Context::current().derive(std::forward<T>(V)))
+ {
+ }
private:
- WithContext restore;
+ WithContext restore;
};
-
} // namespace lsp
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Endpoint.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Endpoint.h
index d752711a3a..6b3eadcf55 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Endpoint.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Endpoint.h
@@ -6,48 +6,47 @@
struct LspMessage;
struct NotificationInMessage;
struct lsBaseOutMessage;
-struct RequestInMessage;
+struct RequestInMessage;
-using GenericResponseHandler = std::function< bool(std::unique_ptr<LspMessage>) >;
-using GenericRequestHandler = std::function< bool(std::unique_ptr<LspMessage>) >;
-using GenericNotificationHandler = std::function< bool(std::unique_ptr<LspMessage>) >;
+using GenericResponseHandler = std::function<bool(std::unique_ptr<LspMessage>)>;
+using GenericRequestHandler = std::function<bool(std::unique_ptr<LspMessage>)>;
+using GenericNotificationHandler = std::function<bool(std::unique_ptr<LspMessage>)>;
class Endpoint
{
public:
- virtual ~Endpoint() = default;
- virtual bool onRequest(std::unique_ptr<LspMessage>) = 0;
- virtual bool notify(std::unique_ptr<LspMessage>) = 0;
+ virtual ~Endpoint() = default;
+ virtual bool onRequest(std::unique_ptr<LspMessage>) = 0;
+ virtual bool notify(std::unique_ptr<LspMessage>) = 0;
- virtual bool onResponse(const std::string&, std::unique_ptr<LspMessage>) = 0;
- virtual void registerRequestHandler(const std::string&, GenericResponseHandler ) = 0;
- virtual void registerNotifyHandler(const std::string&, GenericNotificationHandler ) = 0;
+ virtual bool onResponse(std::string const&, std::unique_ptr<LspMessage>) = 0;
+ virtual void registerRequestHandler(std::string const&, GenericResponseHandler) = 0;
+ virtual void registerNotifyHandler(std::string const&, GenericNotificationHandler) = 0;
};
-class GenericEndpoint :public Endpoint
+class GenericEndpoint : public Endpoint
{
public:
- GenericEndpoint(lsp::Log& l):log(l){}
- bool notify(std::unique_ptr<LspMessage>) override;
- bool onResponse(const std::string&, std::unique_ptr<LspMessage>) override;
-
- bool onRequest(std::unique_ptr<LspMessage>) override;
- std::map< std::string, GenericRequestHandler > method2request;
- std::map< std::string, GenericResponseHandler > method2response;
- std::map< std::string, GenericNotificationHandler > method2notification;
-
- void registerRequestHandler(const std::string& method, GenericResponseHandler cb) override
- {
- method2request[method] = cb;
- }
-
- void registerNotifyHandler(const std::string& method, GenericNotificationHandler cb) override
- {
- method2notification[method] = cb;
- }
- lsp::Log& log;
-
-
-
+ GenericEndpoint(lsp::Log& l) : log(l)
+ {
+ }
+ bool notify(std::unique_ptr<LspMessage>) override;
+ bool onResponse(std::string const&, std::unique_ptr<LspMessage>) override;
+
+ bool onRequest(std::unique_ptr<LspMessage>) override;
+ std::map<std::string, GenericRequestHandler> method2request;
+ std::map<std::string, GenericResponseHandler> method2response;
+ std::map<std::string, GenericNotificationHandler> method2notification;
+
+ void registerRequestHandler(std::string const& method, GenericResponseHandler cb) override
+ {
+ method2request[method] = cb;
+ }
+
+ void registerNotifyHandler(std::string const& method, GenericNotificationHandler cb) override
+ {
+ method2notification[method] = cb;
+ }
+ lsp::Log& log;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/GCThreadContext.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/GCThreadContext.h
index 6c9f9c1cbb..a7cf469592 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/GCThreadContext.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/GCThreadContext.h
@@ -15,5 +15,4 @@ private:
#if defined(LSPCPP_USEGC)
GC_stack_base gsb;
#endif
-
-}; \ No newline at end of file
+};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageIssue.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageIssue.h
index 6c29ee8f0e..8bf5c0a0f3 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageIssue.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageIssue.h
@@ -4,20 +4,20 @@
#include <vector>
namespace lsp
{
- class Log
- {
- public:
- virtual ~Log() = default;
-
- enum class Level
- {
- /**
+class Log
+{
+public:
+ virtual ~Log() = default;
+
+ enum class Level
+ {
+ /**
* OFF is a special level that can be used to turn off logging.
*/
- OFF = 1,
+ OFF = 0,
- /**
+ /**
* SEVERE is a message level indicating a serious failure.
* <p>
* In general SEVERE messages should describe events that are
@@ -26,9 +26,9 @@ namespace lsp
* to end users and to system administrators.
*/
- SEVERE = 2,
+ SEVERE = 1,
- /**
+ /**
* WARNING is a message level indicating a potential problem.
* <p>
* In general WARNING messages should describe events that will
@@ -37,8 +37,8 @@ namespace lsp
*
*/
- WARNING = 3,
- /**
+ WARNING = 2,
+ /**
* INFO is a message level for informational messages.
* <p>
* Typically INFO messages will be written to the console
@@ -47,8 +47,8 @@ namespace lsp
* make sense to end users and system administrators.
*/
- INFO = 3,
- /**
+ INFO = 3,
+ /**
* CONFIG is a message level for static configuration messages.
* <p>
* CONFIG messages are intended to provide a variety of static
@@ -59,11 +59,9 @@ namespace lsp
* This level is initialized to <CODE>4</CODE>.
*/
- CONFIG = 4,
+ CONFIG = 4,
-
-
- /**
+ /**
* FINE is a message level providing tracing information.
* <p>
* All of FINE, FINER, and FINEST are intended for relatively
@@ -82,101 +80,98 @@ namespace lsp
* are also worth logging as FINE.
* This level is initialized to <CODE>5</CODE>.
*/
- FINE = 5,
+ FINE = 5,
- /**
+ /**
* FINER indicates a fairly detailed tracing message.
* By default logging calls for entering, returning, or throwing
* an exception are traced at this level.
* This level is initialized to <CODE>400</CODE>.
*/
- FINER = 6,
+ FINER = 6,
- /**
+ /**
* FINEST indicates a highly detailed tracing message.
* This level is initialized to <CODE>300</CODE>.
*/
- FINEST = 7,
+ FINEST = 7,
- /**
+ /**
* ALL indicates that all messages should be logged.
* This level is initialized to <CODE>Integer.MIN_VALUE</CODE>.
*/
- ALL,
- };
- virtual void log(Level level, std::wstring&& msg) = 0;
- virtual void log(Level level, const std::wstring& msg) = 0;
- virtual void log(Level level, std::string&& msg) = 0;
- virtual void log(Level level, const std::string& msg) = 0;
-
- void info(const std::string& msg)
- {
- log(Level::INFO, msg);
- }
- void info(const std::wstring& msg)
- {
- log(Level::INFO, msg);
- }
- void error(const std::string& msg)
- {
- log(Level::SEVERE, msg);
- }
- void error(const std::wstring& msg)
- {
- log(Level::SEVERE, msg);
- }
- void warning(const std::string& msg)
- {
- log(Level::WARNING, msg);
- }
- void warning(const std::wstring& msg)
- {
- log(Level::WARNING, msg);
- }
- };
-}
-
-class MessageIssue {
-
-public:
- std::string text;
-
- lsp::Log::Level code;
-
- MessageIssue(const std::string& text, lsp::Log::Level code) :text(text), code(code)
- {
-
-
- }
- MessageIssue(std::string&& text, lsp::Log::Level code) :text(text), code(code)
- {
-
-
- }
-
-
- std::string getText() {
- return text;
- }
-
- lsp::Log::Level getIssueCode() {
- return code;
- }
-
+ ALL,
+ };
+ virtual void log(Level level, std::wstring&& msg) = 0;
+ virtual void log(Level level, std::wstring const& msg) = 0;
+ virtual void log(Level level, std::string&& msg) = 0;
+ virtual void log(Level level, std::string const& msg) = 0;
+
+ void info(std::string const& msg)
+ {
+ log(Level::INFO, msg);
+ }
+ void info(std::wstring const& msg)
+ {
+ log(Level::INFO, msg);
+ }
+ void error(std::string const& msg)
+ {
+ log(Level::SEVERE, msg);
+ }
+ void error(std::wstring const& msg)
+ {
+ log(Level::SEVERE, msg);
+ }
+ void warning(std::string const& msg)
+ {
+ log(Level::WARNING, msg);
+ }
+ void warning(std::wstring const& msg)
+ {
+ log(Level::WARNING, msg);
+ }
+};
+} // namespace lsp
- std::string toString() {
- return getText();
- }
+class MessageIssue
+{
+public:
+ std::string text;
+
+ lsp::Log::Level code;
+
+ MessageIssue(std::string const& text, lsp::Log::Level code) : text(text), code(code)
+ {
+ }
+ MessageIssue(std::string&& text, lsp::Log::Level code) : text(text), code(code)
+ {
+ }
+
+ std::string getText()
+ {
+ return text;
+ }
+
+ lsp::Log::Level getIssueCode()
+ {
+ return code;
+ }
+
+ std::string toString()
+ {
+ return getText();
+ }
};
-class MessageIssueHandler
+class MessageIssueHandler
{
public:
- /**
+ /**
* Handle issues found while parsing or validating a message. The list of issues must not be empty.
*/
- virtual ~MessageIssueHandler() = default;
+ virtual ~MessageIssueHandler() = default;
- virtual void handle(std::vector<MessageIssue>&&) = 0;
- virtual void handle( MessageIssue&&) = 0;
+ virtual void handle(std::vector<MessageIssue>&&) = 0;
+ virtual void handle(MessageIssue&&) = 0;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageJsonHandler.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageJsonHandler.h
index f019fbf121..2c039a4313 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageJsonHandler.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageJsonHandler.h
@@ -5,57 +5,52 @@
#include <LibLsp/JsonRpc/message.h>
class Reader;
-
-using GenericRequestJsonHandler = std::function< std::unique_ptr<LspMessage>(Reader&) >;
-using GenericResponseJsonHandler = std::function< std::unique_ptr<LspMessage>(Reader&) >;
-using GenericNotificationJsonHandler = std::function< std::unique_ptr<LspMessage>(Reader&) >;
+using GenericRequestJsonHandler = std::function<std::unique_ptr<LspMessage>(Reader&)>;
+using GenericResponseJsonHandler = std::function<std::unique_ptr<LspMessage>(Reader&)>;
+using GenericNotificationJsonHandler = std::function<std::unique_ptr<LspMessage>(Reader&)>;
class MessageJsonHandler
{
public:
- std::map< std::string, GenericRequestJsonHandler > method2request;
- std::map< std::string, GenericResponseJsonHandler > method2response;
- std::map< std::string, GenericNotificationJsonHandler > method2notification;
-
-
- const GenericRequestJsonHandler* GetRequestJsonHandler(const char* methodInfo) const
- {
- const auto findIt = method2request.find(methodInfo);
- return findIt == method2request.end() ? nullptr : &findIt->second;
- }
-
- void SetRequestJsonHandler(const std::string& methodInfo, GenericRequestJsonHandler handler)
- {
- method2request[methodInfo] = handler;
- }
-
- const GenericResponseJsonHandler* GetResponseJsonHandler(const char* methodInfo) const
- {
- const auto findIt = method2response.find(methodInfo);
- return findIt == method2response.end() ? nullptr : &findIt->second;
- }
-
- void SetResponseJsonHandler(const std::string& methodInfo,GenericResponseJsonHandler handler)
- {
- method2response[methodInfo] = handler;
- }
-
- const GenericNotificationJsonHandler* GetNotificationJsonHandler(const char* methodInfo) const
- {
- const auto findIt = method2notification.find(methodInfo);
- return findIt == method2notification.end() ? nullptr : &findIt->second;
- }
-
- void SetNotificationJsonHandler(const std::string& methodInfo, GenericNotificationJsonHandler handler)
- {
- method2notification[methodInfo] = handler;
- }
-
-
-
- std::unique_ptr<LspMessage> parseResponseMessage(const std::string&, Reader&);
- std::unique_ptr<LspMessage> parseRequstMessage(const std::string&, Reader&);
- bool resovleResponseMessage(Reader&, std::pair<std::string, std::unique_ptr<LspMessage>>& result);
- std::unique_ptr<LspMessage> parseNotificationMessage(const std::string&, Reader&);
+ std::map<std::string, GenericRequestJsonHandler> method2request;
+ std::map<std::string, GenericResponseJsonHandler> method2response;
+ std::map<std::string, GenericNotificationJsonHandler> method2notification;
+
+ GenericRequestJsonHandler const* GetRequestJsonHandler(char const* methodInfo) const
+ {
+ auto const findIt = method2request.find(methodInfo);
+ return findIt == method2request.end() ? nullptr : &findIt->second;
+ }
+
+ void SetRequestJsonHandler(std::string const& methodInfo, GenericRequestJsonHandler handler)
+ {
+ method2request[methodInfo] = handler;
+ }
+
+ GenericResponseJsonHandler const* GetResponseJsonHandler(char const* methodInfo) const
+ {
+ auto const findIt = method2response.find(methodInfo);
+ return findIt == method2response.end() ? nullptr : &findIt->second;
+ }
+
+ void SetResponseJsonHandler(std::string const& methodInfo, GenericResponseJsonHandler handler)
+ {
+ method2response[methodInfo] = handler;
+ }
+
+ GenericNotificationJsonHandler const* GetNotificationJsonHandler(char const* methodInfo) const
+ {
+ auto const findIt = method2notification.find(methodInfo);
+ return findIt == method2notification.end() ? nullptr : &findIt->second;
+ }
+
+ void SetNotificationJsonHandler(std::string const& methodInfo, GenericNotificationJsonHandler handler)
+ {
+ method2notification[methodInfo] = handler;
+ }
+
+ std::unique_ptr<LspMessage> parseResponseMessage(std::string const&, Reader&);
+ std::unique_ptr<LspMessage> parseRequstMessage(std::string const&, Reader&);
+ bool resovleResponseMessage(Reader&, std::pair<std::string, std::unique_ptr<LspMessage>>& result);
+ std::unique_ptr<LspMessage> parseNotificationMessage(std::string const&, Reader&);
};
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageProducer.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageProducer.h
index 4f3799555a..211761abba 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageProducer.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageProducer.h
@@ -2,19 +2,21 @@
#include <string>
#include <functional>
-namespace lsp {
- /// The encoding style of the JSON-RPC messages (both input and output).
- enum JSONStreamStyle {
- /// Encoding per the LSP specification, with mandatory Content-Length header.
- Standard,
- /// Messages are delimited by a '// -----' line. Comment lines start with //.
- Delimited
- };
-}
+namespace lsp
+{
+/// The encoding style of the JSON-RPC messages (both input and output).
+enum JSONStreamStyle
+{
+ /// Encoding per the LSP specification, with mandatory Content-Length header.
+ Standard,
+ /// Messages are delimited by a '// -----' line. Comment lines start with //.
+ Delimited
+};
+} // namespace lsp
class MessageProducer
{
public:
- typedef std::function< void(std::string&&) > MessageConsumer;
- virtual ~MessageProducer() = default;
- virtual void listen(MessageConsumer) = 0;
+ typedef std::function<void(std::string&&)> MessageConsumer;
+ virtual ~MessageProducer() = default;
+ virtual void listen(MessageConsumer) = 0;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/NotificationInMessage.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/NotificationInMessage.h
index cdee9e572e..4b1a017c24 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/NotificationInMessage.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/NotificationInMessage.h
@@ -1,62 +1,66 @@
#pragma once
-
#include "lsRequestId.h"
#include "LibLsp/JsonRpc/message.h"
-
-
// NotificationInMessage does not have |id|.
-struct NotificationInMessage : public LspMessage {
-
- Kind GetKid() override
- {
- return NOTIFICATION_MESSAGE;
- }
- MethodType GetMethodType() const override
- {
- return method.c_str();
- }
- void SetMethodType(MethodType _t) override
- {
- method = _t;
- }
- std::string method;
+struct NotificationInMessage : public LspMessage
+{
+
+ Kind GetKid() override
+ {
+ return NOTIFICATION_MESSAGE;
+ }
+ MethodType GetMethodType() const override
+ {
+ return method.c_str();
+ }
+ void SetMethodType(MethodType _t) override
+ {
+ method = _t;
+ }
+ std::string method;
};
-template <class T, class TDerived >
-struct lsNotificationInMessage : NotificationInMessage {
-
- void ReflectWriter(Writer& writer) override {
- Reflect(writer, static_cast<TDerived&>(*this));
- }
- lsNotificationInMessage(MethodType _method)
- {
- method = _method;
- }
-
- static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor) {
-
- TDerived* temp = new TDerived();
-
- std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
- // Reflect may throw and *message will be partially deserialized.
- Reflect(visitor, static_cast<TDerived&>(*temp));
- return message;
-
- }
- void swap(lsNotificationInMessage& arg) noexcept
- {
- method.swap(method);
- std::swap(params, arg.params);
- }
- T params;
+template<class T, class TDerived>
+struct lsNotificationInMessage : NotificationInMessage
+{
+
+ void ReflectWriter(Writer& writer) override
+ {
+ Reflect(writer, static_cast<TDerived&>(*this));
+ }
+ lsNotificationInMessage(MethodType _method)
+ {
+ method = _method;
+ }
+
+ static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor)
+ {
+
+ TDerived* temp = new TDerived();
+
+ std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
+ // Reflect may throw and *message will be partially deserialized.
+ Reflect(visitor, static_cast<TDerived&>(*temp));
+ return message;
+ }
+ void swap(lsNotificationInMessage& arg) noexcept
+ {
+ method.swap(method);
+ std::swap(params, arg.params);
+ }
+ T params;
};
-#define DEFINE_NOTIFICATION_TYPE(MSG,paramType,methodInfo)\
-namespace MSG {\
- struct notify : public lsNotificationInMessage< paramType , notify >{\
- static constexpr MethodType kMethodInfo = methodInfo;\
- notify():lsNotificationInMessage(kMethodInfo){} \
- };\
-};\
-MAKE_REFLECT_STRUCT(MSG::notify, jsonrpc,method, params)
+#define DEFINE_NOTIFICATION_TYPE(MSG, paramType, methodInfo) \
+ namespace MSG \
+ { \
+ struct notify : public lsNotificationInMessage<paramType, notify> \
+ { \
+ static constexpr MethodType kMethodInfo = methodInfo; \
+ notify() : lsNotificationInMessage(kMethodInfo) \
+ { \
+ } \
+ }; \
+ }; \
+ MAKE_REFLECT_STRUCT(MSG::notify, jsonrpc, method, params)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RemoteEndPoint.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RemoteEndPoint.h
index 8d013bd889..3e57fa0bb5 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RemoteEndPoint.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RemoteEndPoint.h
@@ -15,274 +15,307 @@
#include "future.h"
#include "MessageProducer.h"
-
class MessageJsonHandler;
-class Endpoint;
+class Endpoint;
struct LspMessage;
class RemoteEndPoint;
-namespace lsp {
- class ostream;
- class istream;
-
- ////////////////////////////////////////////////////////////////////////////////
- // ResponseOrError<T>
- ////////////////////////////////////////////////////////////////////////////////
-
- // ResponseOrError holds either the response to a request or an error
- // message.
- template <typename T>
- struct ResponseOrError {
- using Request = T;
- ResponseOrError();
- ResponseOrError(const T& response);
- ResponseOrError(T&& response);
- ResponseOrError(const Rsp_Error& error);
- ResponseOrError(Rsp_Error&& error);
- ResponseOrError(const ResponseOrError& other);
- ResponseOrError(ResponseOrError&& other) noexcept;
-
- ResponseOrError& operator=(const ResponseOrError& other);
- ResponseOrError& operator=(ResponseOrError&& other) noexcept;
- bool IsError() const { return is_error; }
- std::string ToJson()
- {
- if (is_error) return error.ToJson();
- return response.ToJson();
- }
- T response;
- Rsp_Error error; // empty represents success.
- bool is_error;
- };
+namespace lsp
+{
+class ostream;
+class istream;
- template <typename T>
- ResponseOrError<T>::ResponseOrError(): is_error(false)
- {
- }
+////////////////////////////////////////////////////////////////////////////////
+// ResponseOrError<T>
+////////////////////////////////////////////////////////////////////////////////
- template <typename T>
- ResponseOrError<T>::ResponseOrError(const T& resp) : response(resp), is_error(false) {}
- template <typename T>
- ResponseOrError<T>::ResponseOrError(T&& resp) : response(std::move(resp)), is_error(false) {}
- template <typename T>
- ResponseOrError<T>::ResponseOrError(const Rsp_Error& err) : error(err), is_error(true) {}
- template <typename T>
- ResponseOrError<T>::ResponseOrError(Rsp_Error&& err) : error(std::move(err)), is_error(true) {}
- template <typename T>
- ResponseOrError<T>::ResponseOrError(const ResponseOrError& other)
- : response(other.response), error(other.error), is_error(other.is_error) {}
- template <typename T>
- ResponseOrError<T>::ResponseOrError(ResponseOrError&& other) noexcept
- : response(std::move(other.response)), error(std::move(other.error)), is_error(other.is_error) {}
- template <typename T>
- ResponseOrError<T>& ResponseOrError<T>::operator=(
- const ResponseOrError& other) {
- response = other.response;
- error = other.error;
- is_error = other.is_error;
- return *this;
- }
- template <typename T>
- ResponseOrError<T>& ResponseOrError<T>::operator=(ResponseOrError&& other) noexcept
+// ResponseOrError holds either the response to a request or an error
+// message.
+template<typename T>
+struct ResponseOrError
+{
+ using Request = T;
+ ResponseOrError();
+ ResponseOrError(T const& response);
+ ResponseOrError(T&& response);
+ ResponseOrError(Rsp_Error const& error);
+ ResponseOrError(Rsp_Error&& error);
+ ResponseOrError(ResponseOrError const& other);
+ ResponseOrError(ResponseOrError&& other) noexcept;
+
+ ResponseOrError& operator=(ResponseOrError const& other);
+ ResponseOrError& operator=(ResponseOrError&& other) noexcept;
+ bool IsError() const
+ {
+ return is_error;
+ }
+ std::string ToJson()
+ {
+ if (is_error)
{
- response = std::move(other.response);
- error = std::move(other.error);
- is_error = other.is_error;
- return *this;
+ return error.ToJson();
}
+ return response.ToJson();
+ }
+ T response;
+ Rsp_Error error; // empty represents success.
+ bool is_error;
+};
+template<typename T>
+ResponseOrError<T>::ResponseOrError() : is_error(false)
+{
}
-
-class RemoteEndPoint :MessageIssueHandler
+template<typename T>
+ResponseOrError<T>::ResponseOrError(T const& resp) : response(resp), is_error(false)
{
+}
+template<typename T>
+ResponseOrError<T>::ResponseOrError(T&& resp) : response(std::move(resp)), is_error(false)
+{
+}
+template<typename T>
+ResponseOrError<T>::ResponseOrError(Rsp_Error const& err) : error(err), is_error(true)
+{
+}
+template<typename T>
+ResponseOrError<T>::ResponseOrError(Rsp_Error&& err) : error(std::move(err)), is_error(true)
+{
+}
+template<typename T>
+ResponseOrError<T>::ResponseOrError(ResponseOrError const& other)
+ : response(other.response), error(other.error), is_error(other.is_error)
+{
+}
+template<typename T>
+ResponseOrError<T>::ResponseOrError(ResponseOrError&& other) noexcept
+ : response(std::move(other.response)), error(std::move(other.error)), is_error(other.is_error)
+{
+}
+template<typename T>
+ResponseOrError<T>& ResponseOrError<T>::operator=(ResponseOrError const& other)
+{
+ response = other.response;
+ error = other.error;
+ is_error = other.is_error;
+ return *this;
+}
+template<typename T>
+ResponseOrError<T>& ResponseOrError<T>::operator=(ResponseOrError&& other) noexcept
+{
+ response = std::move(other.response);
+ error = std::move(other.error);
+ is_error = other.is_error;
+ return *this;
+}
- template <typename F, int N>
- using ParamType = lsp::traits::ParameterType<F, N>;
-
- template <typename T>
- using IsRequest = lsp::traits::EnableIfIsType<RequestInMessage, T>;
-
- template <typename T>
- using IsResponse = lsp::traits::EnableIfIsType<ResponseInMessage, T>;
-
- template <typename T>
- using IsNotify = lsp::traits::EnableIfIsType<NotificationInMessage, T>;
+} // namespace lsp
+class RemoteEndPoint : MessageIssueHandler
+{
- template <typename F, typename ReturnType>
- using IsRequestHandler = lsp::traits::EnableIf<lsp::traits::CompatibleWith<
- F,
- std::function<ReturnType(const RequestInMessage&)>>::
- value>;
+ template<typename F, int N>
+ using ParamType = lsp::traits::ParameterType<F, N>;
- template <typename F, typename ReturnType>
- using IsRequestHandlerWithMonitor = lsp::traits::EnableIf<lsp::traits::CompatibleWith<
- F,
- std::function<ReturnType(const RequestInMessage&,const CancelMonitor&)>>::
- value>;
+ template<typename T>
+ using IsRequest = lsp::traits::EnableIfIsType<RequestInMessage, T>;
-public:
+ template<typename T>
+ using IsResponse = lsp::traits::EnableIfIsType<ResponseInMessage, T>;
+ template<typename T>
+ using IsNotify = lsp::traits::EnableIfIsType<NotificationInMessage, T>;
- RemoteEndPoint(const std::shared_ptr <MessageJsonHandler>& json_handler,
- const std::shared_ptr < Endpoint >& localEndPoint,
- lsp::Log& _log,
- lsp::JSONStreamStyle style = lsp::JSONStreamStyle::Standard,
- uint8_t max_workers = 2);
+ template<typename F, typename ReturnType>
+ using IsRequestHandler = lsp::traits::EnableIf<
+ lsp::traits::CompatibleWith<F, std::function<ReturnType(RequestInMessage const&)>>::value>;
- ~RemoteEndPoint() override;
- template <typename F, typename RequestType = ParamType<F, 0>, typename ResponseType = typename RequestType::Response>
- IsRequestHandler< F, lsp::ResponseOrError<ResponseType> > registerHandler(F&& handler)
- {
- processRequestJsonHandler(handler);
- local_endpoint->registerRequestHandler(RequestType::kMethodInfo, [=](std::unique_ptr<LspMessage> msg) {
- auto req = reinterpret_cast<const RequestType*>(msg.get());
- lsp::ResponseOrError<ResponseType> res(handler(*req));
- if (res.is_error) {
- res.error.id = req->id;
- send(res.error);
- }
- else
- {
- res.response.id = req->id;
- send(res.response);
- }
- return true;
- });
- }
- template <typename F, typename RequestType = ParamType<F, 0>, typename ResponseType = typename RequestType::Response>
- IsRequestHandlerWithMonitor< F, lsp::ResponseOrError<ResponseType> > registerHandler(F&& handler) {
- processRequestJsonHandler(handler);
- local_endpoint->registerRequestHandler(RequestType::kMethodInfo, [=](std::unique_ptr<LspMessage> msg) {
- auto req = static_cast<const RequestType*>(msg.get());
- lsp::ResponseOrError<ResponseType> res(handler(*req , getCancelMonitor(req->id)));
- if (res.is_error) {
- res.error.id = req->id;
- send(res.error);
- }
- else
- {
- res.response.id = req->id;
- send(res.response);
- }
- return true;
- });
- }
- using RequestErrorCallback = std::function<void(const Rsp_Error&)>;
+ template<typename F, typename ReturnType>
+ using IsRequestHandlerWithMonitor = lsp::traits::EnableIf<lsp::traits::CompatibleWith<
+ F, std::function<ReturnType(RequestInMessage const&, CancelMonitor const&)>>::value>;
- template <typename T, typename F, typename ResponseType = ParamType<F, 0> >
- void send(T& request, F&& handler, RequestErrorCallback onError)
- {
- processRequestJsonHandler(handler);
- auto cb = [=](std::unique_ptr<LspMessage> msg) {
- if (!msg)
- return true;
- const auto result = msg.get();
-
- if (static_cast<ResponseInMessage*>(result)->IsErrorType()) {
- const auto rsp_error = static_cast<const Rsp_Error*>(result);
- onError(*rsp_error);
- }
- else {
- handler(*static_cast<ResponseType*>(result));
- }
-
- return true;
- };
- internalSendRequest(request, cb);
- }
-
-
- template <typename F, typename NotifyType = ParamType<F, 0> >
- IsNotify<NotifyType> registerHandler(F&& handler) {
+public:
+ RemoteEndPoint(
+ std::shared_ptr<MessageJsonHandler> const& json_handler, std::shared_ptr<Endpoint> const& localEndPoint,
+ lsp::Log& _log, lsp::JSONStreamStyle style = lsp::JSONStreamStyle::Standard, uint8_t max_workers = 2
+ );
+
+ ~RemoteEndPoint() override;
+ template<typename F, typename RequestType = ParamType<F, 0>, typename ResponseType = typename RequestType::Response>
+ IsRequestHandler<F, lsp::ResponseOrError<ResponseType>> registerHandler(F&& handler)
+ {
+ processRequestJsonHandler(handler);
+ local_endpoint->registerRequestHandler(
+ RequestType::kMethodInfo,
+ [=](std::unique_ptr<LspMessage> msg)
+ {
+ auto req = reinterpret_cast<RequestType const*>(msg.get());
+ lsp::ResponseOrError<ResponseType> res(handler(*req));
+ if (res.is_error)
{
- std::lock_guard<std::mutex> lock(m_sendMutex);
- if (!jsonHandler->GetNotificationJsonHandler(NotifyType::kMethodInfo))
- {
- jsonHandler->SetNotificationJsonHandler(NotifyType::kMethodInfo,
- [](Reader& visitor)
- {
- return NotifyType::ReflectReader(visitor);
- });
- }
+ res.error.id = req->id;
+ send(res.error);
}
- local_endpoint->registerNotifyHandler(NotifyType::kMethodInfo, [=](std::unique_ptr<LspMessage> msg) {
- handler(*static_cast<NotifyType*>(msg.get()));
- return true;
- });
- }
-
- template <typename T, typename = IsRequest<T>>
- lsp::future< lsp::ResponseOrError<typename T::Response> > send(T& request) {
-
- processResponseJsonHandler(request);
- using Response = typename T::Response;
- auto promise = std::make_shared< lsp::promise<lsp::ResponseOrError<Response>>>();
- auto cb = [=](std::unique_ptr<LspMessage> msg) {
- if (!msg)
- return true;
- auto result = msg.get();
-
- if (reinterpret_cast<ResponseInMessage*>(result)->IsErrorType())
- {
- Rsp_Error* rsp_error = static_cast<Rsp_Error*>(result);
- Rsp_Error temp;
- std::swap(temp, *rsp_error);
- promise->set_value(std::move(lsp::ResponseOrError<Response>(std::move(temp))));
- }
- else
- {
- Response temp;
- std::swap(temp, *static_cast<Response*>(result));
- promise->set_value(std::move(lsp::ResponseOrError<Response>(std::move(temp))));
- }
- return true;
- };
- internalSendRequest(request, cb);
- return promise->get_future();
- }
-
- template <typename T, typename = IsRequest<T>>
- std::unique_ptr<lsp::ResponseOrError<typename T::Response>> waitResponse(T& request, const unsigned time_out = 0)
- {
- auto future_rsp = send(request);
- if (time_out == 0)
+ else
{
- future_rsp.wait();
+ res.response.id = req->id;
+ send(res.response);
+ }
+ return true;
+ }
+ );
+ }
+ template<typename F, typename RequestType = ParamType<F, 0>, typename ResponseType = typename RequestType::Response>
+ IsRequestHandlerWithMonitor<F, lsp::ResponseOrError<ResponseType>> registerHandler(F&& handler)
+ {
+ processRequestJsonHandler(handler);
+ local_endpoint->registerRequestHandler(
+ RequestType::kMethodInfo,
+ [=](std::unique_ptr<LspMessage> msg)
+ {
+ auto req = static_cast<RequestType const*>(msg.get());
+ lsp::ResponseOrError<ResponseType> res(handler(*req, getCancelMonitor(req->id)));
+ if (res.is_error)
+ {
+ res.error.id = req->id;
+ send(res.error);
}
else
{
- auto state = future_rsp.wait_for(std::chrono::milliseconds(time_out));
- if (lsp::future_status::timeout == state)
- {
- return {};
- }
+ res.response.id = req->id;
+ send(res.response);
}
+ return true;
+ }
+ );
+ }
+ using RequestErrorCallback = std::function<void(Rsp_Error const&)>;
- using Response = typename T::Response;
- return std::make_unique<lsp::ResponseOrError<Response>>(std::move(future_rsp.get()));
- }
+ template<typename T, typename F, typename ResponseType = ParamType<F, 0>>
+ void send(T& request, F&& handler, RequestErrorCallback onError)
+ {
+ processRequestJsonHandler(handler);
+ auto cb = [=](std::unique_ptr<LspMessage> msg)
+ {
+ if (!msg)
+ {
+ return true;
+ }
+ auto const result = msg.get();
+
+ if (static_cast<ResponseInMessage*>(result)->IsErrorType())
+ {
+ auto const rsp_error = static_cast<Rsp_Error const*>(result);
+ onError(*rsp_error);
+ }
+ else
+ {
+ handler(*static_cast<ResponseType*>(result));
+ }
+
+ return true;
+ };
+ internalSendRequest(request, cb);
+ }
- void send(NotificationInMessage& msg)
+ template<typename F, typename NotifyType = ParamType<F, 0>>
+ IsNotify<NotifyType> registerHandler(F&& handler)
+ {
{
- sendMsg(msg);
+ std::lock_guard<std::mutex> lock(m_sendMutex);
+ if (!jsonHandler->GetNotificationJsonHandler(NotifyType::kMethodInfo))
+ {
+ jsonHandler->SetNotificationJsonHandler(
+ NotifyType::kMethodInfo, [](Reader& visitor) { return NotifyType::ReflectReader(visitor); }
+ );
+ }
}
+ local_endpoint->registerNotifyHandler(
+ NotifyType::kMethodInfo,
+ [=](std::unique_ptr<LspMessage> msg)
+ {
+ handler(*static_cast<NotifyType*>(msg.get()));
+ return true;
+ }
+ );
+ }
+
+ template<typename T, typename = IsRequest<T>>
+ lsp::future<lsp::ResponseOrError<typename T::Response>> send(T& request)
+ {
- void send(ResponseInMessage& msg)
+ processResponseJsonHandler(request);
+ using Response = typename T::Response;
+ auto promise = std::make_shared<lsp::promise<lsp::ResponseOrError<Response>>>();
+ auto cb = [=](std::unique_ptr<LspMessage> msg)
{
- sendMsg(msg);
- }
+ if (!msg)
+ {
+ return true;
+ }
+ auto result = msg.get();
+
+ if (reinterpret_cast<ResponseInMessage*>(result)->IsErrorType())
+ {
+ Rsp_Error* rsp_error = static_cast<Rsp_Error*>(result);
+ Rsp_Error temp;
+ std::swap(temp, *rsp_error);
+ promise->set_value(std::move(lsp::ResponseOrError<Response>(std::move(temp))));
+ }
+ else
+ {
+ Response temp;
+ std::swap(temp, *static_cast<Response*>(result));
+ promise->set_value(std::move(lsp::ResponseOrError<Response>(std::move(temp))));
+ }
+ return true;
+ };
+ internalSendRequest(request, cb);
+ return promise->get_future();
+ }
- void sendNotification(NotificationInMessage& msg)
+ template<typename T, typename = IsRequest<T>>
+ std::unique_ptr<lsp::ResponseOrError<typename T::Response>> waitResponse(T& request, unsigned const time_out = 0)
+ {
+ auto future_rsp = send(request);
+ if (time_out == 0)
{
- send(msg);
+ future_rsp.wait();
}
- void sendResponse(ResponseInMessage& msg)
+ else
{
- send(msg);
+ auto state = future_rsp.wait_for(std::chrono::milliseconds(time_out));
+ if (lsp::future_status::timeout == state)
+ {
+ return {};
+ }
}
- template <typename T>
- T createRequest() {
+
+ using Response = typename T::Response;
+ return std::make_unique<lsp::ResponseOrError<Response>>(std::move(future_rsp.get()));
+ }
+
+ void send(NotificationInMessage& msg)
+ {
+ sendMsg(msg);
+ }
+
+ void send(ResponseInMessage& msg)
+ {
+ sendMsg(msg);
+ }
+
+ void sendNotification(NotificationInMessage& msg)
+ {
+ send(msg);
+ }
+ void sendResponse(ResponseInMessage& msg)
+ {
+ send(msg);
+ }
+ template<typename T>
+ T createRequest()
+ {
auto req = T();
req.id.set(getNextRequestId());
return req;
@@ -290,61 +323,66 @@ public:
int getNextRequestId();
- bool cancelRequest(const lsRequestId&);
+ bool cancelRequest(lsRequestId const&);
+
+ void startProcessingMessages(std::shared_ptr<lsp::istream> r, std::shared_ptr<lsp::ostream> w);
- void startProcessingMessages(std::shared_ptr<lsp::istream> r,
- std::shared_ptr<lsp::ostream> w);
+ bool isWorking() const;
+ void stop();
- bool isWorking() const;
- void stop();
+ std::unique_ptr<LspMessage> internalWaitResponse(RequestInMessage&, unsigned time_out = 0);
- std::unique_ptr<LspMessage> internalWaitResponse(RequestInMessage&, unsigned time_out = 0);
+ bool internalSendRequest(RequestInMessage& info, GenericResponseHandler handler);
- bool internalSendRequest(RequestInMessage &info, GenericResponseHandler handler);
+ void handle(std::vector<MessageIssue>&&) override;
+ void handle(MessageIssue&&) override;
- void handle(std::vector<MessageIssue>&&) override;
- void handle(MessageIssue&&) override;
private:
- CancelMonitor getCancelMonitor(const lsRequestId&);
- void sendMsg(LspMessage& msg);
- void mainLoop(std::unique_ptr<LspMessage>);
- bool dispatch(const std::string&);
- template <typename F, typename RequestType = ParamType<F, 0>>
- IsRequest<RequestType> processRequestJsonHandler(const F& handler) {
- std::lock_guard<std::mutex> lock(m_sendMutex);
- if (!jsonHandler->GetRequestJsonHandler(RequestType::kMethodInfo))
- {
- jsonHandler->SetRequestJsonHandler(RequestType::kMethodInfo,
- [](Reader& visitor)
- {
- return RequestType::ReflectReader(visitor);
- });
- }
+ CancelMonitor getCancelMonitor(lsRequestId const&);
+ void sendMsg(LspMessage& msg);
+ void mainLoop(std::unique_ptr<LspMessage>);
+ bool dispatch(std::string const&);
+ template<typename F, typename RequestType = ParamType<F, 0>>
+ IsRequest<RequestType> processRequestJsonHandler(F const& handler)
+ {
+ std::lock_guard<std::mutex> lock(m_sendMutex);
+ if (!jsonHandler->GetRequestJsonHandler(RequestType::kMethodInfo))
+ {
+ jsonHandler->SetRequestJsonHandler(
+ RequestType::kMethodInfo, [](Reader& visitor) { return RequestType::ReflectReader(visitor); }
+ );
}
- template <typename T, typename = IsRequest<T>>
- void processResponseJsonHandler(T& request)
+ }
+ template<typename T, typename = IsRequest<T>>
+ void processResponseJsonHandler(T& request)
+ {
+ using Response = typename T::Response;
+ std::lock_guard<std::mutex> lock(m_sendMutex);
+ if (!jsonHandler->GetResponseJsonHandler(T::kMethodInfo))
{
- using Response = typename T::Response;
- std::lock_guard<std::mutex> lock(m_sendMutex);
- if (!jsonHandler->GetResponseJsonHandler(T::kMethodInfo))
+ jsonHandler->SetResponseJsonHandler(
+ T::kMethodInfo,
+ [](Reader& visitor)
{
- jsonHandler->SetResponseJsonHandler(T::kMethodInfo, [](Reader& visitor)
- {
- if (visitor.HasMember("error"))
- return Rsp_Error::ReflectReader(visitor);
- return Response::ReflectReader(visitor);
- });
+ if (visitor.HasMember("error"))
+ {
+ return Rsp_Error::ReflectReader(visitor);
+ }
+ return Response::ReflectReader(visitor);
}
+ );
}
+ }
+
+ struct Data;
- struct Data;
+ Data* d_ptr;
- Data* d_ptr;
+ std::shared_ptr<MessageJsonHandler> jsonHandler;
+ std::mutex m_sendMutex;
- std::shared_ptr < MessageJsonHandler> jsonHandler;
- std::mutex m_sendMutex;
+ std::shared_ptr<Endpoint> local_endpoint;
- std::shared_ptr < Endpoint > local_endpoint;
public:
- std::shared_ptr < std::thread > message_producer_thread_;
+ std::shared_ptr<std::thread> message_producer_thread_;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
index 0775b36dba..b445173cf0 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "serializer.h"
#include <atomic>
#include <mutex>
@@ -9,62 +8,69 @@
#include "LibLsp/lsp/method_type.h"
#include "lsResponseMessage.h"
-struct RequestInMessage : public LspMessage {
- // number or string, actually no null
- lsRequestId id;
- std::string method;
- Kind GetKid() override
- {
- return REQUEST_MESSAGE;
- }
-
+struct RequestInMessage : public LspMessage
+{
+ // number or string, actually no null
+ lsRequestId id;
+ std::string method;
+ Kind GetKid() override
+ {
+ return REQUEST_MESSAGE;
+ }
};
-
-
-template <class T, class TDerived >
+template<class T, class TDerived>
struct lsRequest : public RequestInMessage
{
- lsRequest(MethodType _method)
- {
- method = _method;
- }
- MethodType GetMethodType() const override { return method.c_str(); }
- void SetMethodType(MethodType _method) override
- {
- method = _method;
- } \
- void ReflectWriter(Writer& writer) override {
- Reflect(writer, static_cast<TDerived&>(*this));
- }
+ lsRequest(MethodType _method)
+ {
+ method = _method;
+ }
+ MethodType GetMethodType() const override
+ {
+ return method.c_str();
+ }
+ void SetMethodType(MethodType _method) override
+ {
+ method = _method;
+ }
+ void ReflectWriter(Writer& writer) override
+ {
+ Reflect(writer, static_cast<TDerived&>(*this));
+ }
- static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor) {
+ static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor)
+ {
- TDerived* temp = new TDerived();
- std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
- // Reflect may throw and *message will be partially deserialized.
- Reflect(visitor, static_cast<TDerived&>(*temp));
- return message;
- }
- void swap(lsRequest& arg) noexcept
- {
- id.swap(arg.id);
- method.swap(method);
- std::swap(params, arg.params);
- }
- T params;
+ TDerived* temp = new TDerived();
+ std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
+ // Reflect may throw and *message will be partially deserialized.
+ Reflect(visitor, static_cast<TDerived&>(*temp));
+ return message;
+ }
+ void swap(lsRequest& arg) noexcept
+ {
+ id.swap(arg.id);
+ method.swap(method);
+ std::swap(params, arg.params);
+ }
+ T params;
};
-
-#define DEFINE_REQUEST_RESPONSE_TYPE(MSG,request_param,response_result,methodInfo)\
-namespace MSG {\
- struct response :public ResponseMessage< response_result, response> {}; \
- struct request : public lsRequest< request_param , request >{\
- static constexpr MethodType kMethodInfo = methodInfo;\
- request():lsRequest(kMethodInfo){} \
- using Response = response;\
- };\
-};\
-MAKE_REFLECT_STRUCT(MSG::request, jsonrpc, id, method, params);\
-MAKE_REFLECT_STRUCT(MSG::response, jsonrpc, id, result);
-
+#define DEFINE_REQUEST_RESPONSE_TYPE(MSG, request_param, response_result, methodInfo) \
+ namespace MSG \
+ { \
+ struct response : public ResponseMessage<response_result, response> \
+ { \
+ }; \
+ struct request : public lsRequest<request_param, request> \
+ { \
+ static constexpr MethodType kMethodInfo = methodInfo; \
+ request() : lsRequest(kMethodInfo) \
+ { \
+ } \
+ using Response = response; \
+ }; \
+ }; \
+ MAKE_REFLECT_STRUCT(MSG::request, jsonrpc, id, method, params); \
+ MAKE_REFLECT_STRUCT(MSG::response, jsonrpc, id, result);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/ScopeExit.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/ScopeExit.h
index 024b700b4a..9af5e17107 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/ScopeExit.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/ScopeExit.h
@@ -14,32 +14,44 @@
#include <type_traits>
#include <utility>
-namespace lsp {
-namespace detail {
+namespace lsp
+{
+namespace detail
+{
-template <typename Callable> class scope_exit {
- Callable ExitFunction;
- bool Engaged = true; // False once moved-from or release()d.
+ template<typename Callable>
+ class scope_exit
+ {
+ Callable ExitFunction;
+ bool Engaged = true; // False once moved-from or release()d.
-public:
- template <typename Fp>
- explicit scope_exit(Fp &&F) : ExitFunction(std::forward<Fp>(F)) {}
+ public:
+ template<typename Fp>
+ explicit scope_exit(Fp&& F) : ExitFunction(std::forward<Fp>(F))
+ {
+ }
- scope_exit(scope_exit &&Rhs)
- : ExitFunction(std::move(Rhs.ExitFunction)), Engaged(Rhs.Engaged) {
- Rhs.release();
- }
- scope_exit(const scope_exit &) = delete;
- scope_exit &operator=(scope_exit &&) = delete;
- scope_exit &operator=(const scope_exit &) = delete;
+ scope_exit(scope_exit&& Rhs) : ExitFunction(std::move(Rhs.ExitFunction)), Engaged(Rhs.Engaged)
+ {
+ Rhs.release();
+ }
+ scope_exit(scope_exit const&) = delete;
+ scope_exit& operator=(scope_exit&&) = delete;
+ scope_exit& operator=(scope_exit const&) = delete;
- void release() { Engaged = false; }
+ void release()
+ {
+ Engaged = false;
+ }
- ~scope_exit() {
- if (Engaged)
- ExitFunction();
- }
-};
+ ~scope_exit()
+ {
+ if (Engaged)
+ {
+ ExitFunction();
+ }
+ }
+ };
} // end namespace detail
@@ -48,12 +60,10 @@ public:
// returned object is kept).
//
// Interface is specified by p0052r2.
-template <typename Callable>
- detail::scope_exit<typename std::decay<Callable>::type>
-make_scope_exit(Callable &&F) {
- return detail::scope_exit<typename std::decay<Callable>::type>(
- std::forward<Callable>(F));
+template<typename Callable>
+detail::scope_exit<typename std::decay<Callable>::type> make_scope_exit(Callable&& F)
+{
+ return detail::scope_exit<typename std::decay<Callable>::type>(std::forward<Callable>(F));
}
} // end namespace lsp
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/StreamMessageProducer.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/StreamMessageProducer.h
index 9cd6aef37f..a16f58762e 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/StreamMessageProducer.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/StreamMessageProducer.h
@@ -6,34 +6,29 @@
#include <memory>
#include "MessageIssue.h"
-namespace lsp {
- class istream;
+namespace lsp
+{
+class istream;
}
class StreamMessageProducer : public MessageProducer
{
public:
+ StreamMessageProducer(MessageIssueHandler& message_issue_handler, std::shared_ptr<lsp::istream> _input)
+ : issueHandler(message_issue_handler), input(_input)
+ {
+ }
+ StreamMessageProducer(MessageIssueHandler& message_issue_handler) : issueHandler(message_issue_handler)
+ {
+ }
- StreamMessageProducer(
- MessageIssueHandler& message_issue_handler, std::shared_ptr < lsp::istream> _input)
- : issueHandler(message_issue_handler),
- input(_input)
- {
- }
- StreamMessageProducer(
- MessageIssueHandler& message_issue_handler)
- : issueHandler(message_issue_handler)
- {
- }
-
- bool keepRunning = false;
+ bool keepRunning = false;
- virtual void bind(std::shared_ptr<lsp::istream>) = 0 ;
+ virtual void bind(std::shared_ptr<lsp::istream>) = 0;
protected:
- MessageIssueHandler& issueHandler;
- std::shared_ptr < lsp::istream> input;
-
+ MessageIssueHandler& issueHandler;
+ std::shared_ptr<lsp::istream> input;
};
class LSPStreamMessageProducer : public StreamMessageProducer
@@ -51,41 +46,30 @@ public:
};
bool handleMessage(Headers& headers, MessageConsumer callBack);
- LSPStreamMessageProducer(
- MessageIssueHandler& message_issue_handler, std::shared_ptr < lsp::istream> _input)
- : StreamMessageProducer(message_issue_handler,_input)
+ LSPStreamMessageProducer(MessageIssueHandler& message_issue_handler, std::shared_ptr<lsp::istream> _input)
+ : StreamMessageProducer(message_issue_handler, _input)
{
}
- LSPStreamMessageProducer(
- MessageIssueHandler& message_issue_handler)
- : StreamMessageProducer(message_issue_handler)
+ LSPStreamMessageProducer(MessageIssueHandler& message_issue_handler) : StreamMessageProducer(message_issue_handler)
{
}
-
void listen(MessageConsumer) override;
void bind(std::shared_ptr<lsp::istream>) override;
void parseHeader(std::string& line, Headers& headers);
-
-
};
class DelimitedStreamMessageProducer : public StreamMessageProducer
{
public:
-
- DelimitedStreamMessageProducer(
- MessageIssueHandler& message_issue_handler, std::shared_ptr <lsp::istream> _input)
- : StreamMessageProducer(message_issue_handler,_input)
+ DelimitedStreamMessageProducer(MessageIssueHandler& message_issue_handler, std::shared_ptr<lsp::istream> _input)
+ : StreamMessageProducer(message_issue_handler, _input)
{
}
- DelimitedStreamMessageProducer(
- MessageIssueHandler& message_issue_handler)
- : StreamMessageProducer(message_issue_handler)
+ DelimitedStreamMessageProducer(MessageIssueHandler& message_issue_handler)
+ : StreamMessageProducer(message_issue_handler)
{
}
-
void listen(MessageConsumer) override;
- void bind(std::shared_ptr < lsp::istream>) override;
-
-}; \ No newline at end of file
+ void bind(std::shared_ptr<lsp::istream>) override;
+};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/TcpServer.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/TcpServer.h
index a377be8c3e..9601eecd80 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/TcpServer.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/TcpServer.h
@@ -4,37 +4,39 @@
#include <string>
#include "RemoteEndPoint.h"
-namespace lsp {
- class Log;
+namespace lsp
+{
+class Log;
}
namespace lsp
{
- /// The top-level class of the HTTP server.
- class TcpServer
- {
- public:
- TcpServer(const TcpServer&) = delete;
- TcpServer& operator=(const TcpServer&) = delete;
- ~TcpServer();
- /// Construct the server to listen on the specified TCP address and port, and
- /// serve up files from the given directory.
- explicit TcpServer(const std::string& address, const std::string& port,
- std::shared_ptr < MessageJsonHandler> json_handler,
- std::shared_ptr < Endpoint> localEndPoint, lsp::Log& ,uint32_t _max_workers = 2);
+/// The top-level class of the HTTP server.
+class TcpServer
+{
+public:
+ TcpServer(TcpServer const&) = delete;
+ TcpServer& operator=(TcpServer const&) = delete;
+ ~TcpServer();
+ /// Construct the server to listen on the specified TCP address and port, and
+ /// serve up files from the given directory.
+ explicit TcpServer(
+ std::string const& address, std::string const& port, std::shared_ptr<MessageJsonHandler> json_handler,
+ std::shared_ptr<Endpoint> localEndPoint, lsp::Log&, uint32_t _max_workers = 2
+ );
- /// Run the server's io_context loop.
- void run();
- void stop();
+ /// Run the server's io_context loop.
+ void run();
+ void stop();
- RemoteEndPoint point;
- private:
- struct Data;
- /// Perform an asynchronous accept operation.
- void do_accept();
+ RemoteEndPoint point;
- /// Wait for a request to stop the server.
- void do_stop();
- Data* d_ptr = nullptr;
- };
-} // namespace
+private:
+ struct Data;
+ /// Perform an asynchronous accept operation.
+ void do_accept();
+ /// Wait for a request to stop the server.
+ void do_stop();
+ Data* d_ptr = nullptr;
+};
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/WebSocketServer.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/WebSocketServer.h
index 5206525ceb..63a48125bb 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/WebSocketServer.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/WebSocketServer.h
@@ -5,83 +5,80 @@
#include <boost/beast/core/tcp_stream.hpp>
#include <boost/beast/websocket/stream.hpp>
-
#include "RemoteEndPoint.h"
#include "stream.h"
#include "threaded_queue.h"
-namespace lsp {
- class Log;
+namespace lsp
+{
+class Log;
}
-
namespace lsp
{
+class websocket_stream_wrapper : public istream, public ostream
+{
+public:
+ websocket_stream_wrapper(boost::beast::websocket::stream<boost::beast::tcp_stream>& _w);
+ boost::beast::websocket::stream<boost::beast::tcp_stream>& ws_;
+ std::atomic<bool> quit {};
+ std::shared_ptr<MultiQueueWaiter> request_waiter;
+ ThreadedQueue<char> on_request;
+ std::string error_message;
+ bool fail() override;
- class websocket_stream_wrapper :public istream, public ostream
- {
- public:
-
- websocket_stream_wrapper(boost::beast::websocket::stream<boost::beast::tcp_stream>& _w);
-
- boost::beast::websocket::stream<boost::beast::tcp_stream>& ws_;
- std::atomic<bool> quit{};
- std::shared_ptr < MultiQueueWaiter> request_waiter;
- ThreadedQueue< char > on_request;
- std::string error_message;
- bool fail() override;
-
- bool eof() override;
-
- bool good() override;
-
- websocket_stream_wrapper& read(char* str, std::streamsize count) override;
-
- int get() override;
-
- bool bad() override;
-
- websocket_stream_wrapper& write(const std::string& c) override;
-
- websocket_stream_wrapper& write(std::streamsize _s) override;
+ bool eof() override;
- websocket_stream_wrapper& flush() override;
+ bool good() override;
- void clear() override;
+ websocket_stream_wrapper& read(char* str, std::streamsize count) override;
- std::string what() override;
- };
+ int get() override;
- /// The top-level class of the HTTP server.
- class WebSocketServer
- {
- public:
- WebSocketServer(const WebSocketServer&) = delete;
- WebSocketServer& operator=(const WebSocketServer&) = delete;
- ~WebSocketServer();
- /// Construct the server to listen on the specified TCP address and port, and
- /// serve up files from the given directory.
- explicit WebSocketServer(const std::string& user_agent, const std::string& address, const std::string& port,
- std::shared_ptr < MessageJsonHandler> json_handler,
- std::shared_ptr < Endpoint> localEndPoint, lsp::Log& ,uint32_t _max_workers = 2);
+ bool bad() override;
- /// Run the server's io_context loop.
- void run();
- void stop();
+ websocket_stream_wrapper& write(std::string const& c) override;
- RemoteEndPoint point;
- private:
- struct Data;
- /// Perform an asynchronous accept operation.
- void do_accept();
+ websocket_stream_wrapper& write(std::streamsize _s) override;
- /// Wait for a request to stop the server.
- void do_stop();
- Data* d_ptr = nullptr;
+ websocket_stream_wrapper& flush() override;
+ void clear() override;
- };
+ std::string what() override;
+};
- } // namespace
+/// The top-level class of the HTTP server.
+class WebSocketServer
+{
+public:
+ WebSocketServer(WebSocketServer const&) = delete;
+ WebSocketServer& operator=(WebSocketServer const&) = delete;
+ ~WebSocketServer();
+ /// Construct the server to listen on the specified TCP address and port, and
+ /// serve up files from the given directory.
+ explicit WebSocketServer(
+ std::string const& user_agent, std::string const& address, std::string const& port,
+ std::shared_ptr<MessageJsonHandler> json_handler, std::shared_ptr<Endpoint> localEndPoint, lsp::Log&,
+ uint32_t _max_workers = 2
+ );
+
+ /// Run the server's io_context loop.
+ void run();
+ void stop();
+
+ RemoteEndPoint point;
+
+private:
+ struct Data;
+ /// Perform an asynchronous accept operation.
+ void do_accept();
+
+ /// Wait for a request to stop the server.
+ void do_stop();
+ Data* d_ptr = nullptr;
+};
+
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/future.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/future.h
index 8e241d96e9..863c597ac3 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/future.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/future.h
@@ -18,161 +18,169 @@
#include <memory>
#include <mutex>
-namespace lsp {
+namespace lsp
+{
// internal functionality
-namespace detail {
-template <typename T>
-struct promise_state {
- T val;
- std::mutex mutex;
- std::condition_variable cv;
- bool hasVal = false;
-};
-} // namespace detail
+namespace detail
+{
+ template<typename T>
+ struct promise_state
+ {
+ T val;
+ std::mutex mutex;
+ std::condition_variable cv;
+ bool hasVal = false;
+ };
+} // namespace detail
// forward declaration
-template <typename T>
+template<typename T>
class promise;
// future_status is the enumeration returned by future::wait_for and
// future::wait_until.
-enum class future_status {
- ready,
- timeout,
+enum class future_status
+{
+ ready,
+ timeout,
};
// future is a minimal reimplementation of std::future, that does not suffer
// from TSAN false positives. See:
// https://gcc.gnu.org/bugzilla//show_bug.cgi?id=69204
-template <typename T>
-class future {
- public:
- using State = detail::promise_state<T>;
-
- // constructors
- inline future() = default;
- inline future(future&&) = default;
-
- // valid() returns true if the future has an internal state.
- bool valid() const;
-
- // get() blocks until the future has a valid result, and returns it.
- // The future must have a valid internal state to call this method.
- inline T get();
-
- // wait() blocks until the future has a valid result.
- // The future must have a valid internal state to call this method.
- void wait() const;
-
- // wait_for() blocks until the future has a valid result, or the timeout is
- // reached.
- // The future must have a valid internal state to call this method.
- template <class Rep, class Period>
- future_status wait_for(
- const std::chrono::duration<Rep, Period>& timeout) const;
-
- // wait_until() blocks until the future has a valid result, or the timeout is
- // reached.
- // The future must have a valid internal state to call this method.
- template <class Clock, class Duration>
- future_status wait_until(
- const std::chrono::time_point<Clock, Duration>& timeout) const;
-
- private:
- friend promise<T>;
- future(const future&) = delete;
- inline future(const std::shared_ptr<State>& state);
-
- std::shared_ptr<State> state = std::make_shared<State>();
+template<typename T>
+class future
+{
+public:
+ using State = detail::promise_state<T>;
+
+ // constructors
+ inline future() = default;
+ inline future(future&&) = default;
+
+ // valid() returns true if the future has an internal state.
+ bool valid() const;
+
+ // get() blocks until the future has a valid result, and returns it.
+ // The future must have a valid internal state to call this method.
+ inline T get();
+
+ // wait() blocks until the future has a valid result.
+ // The future must have a valid internal state to call this method.
+ void wait() const;
+
+ // wait_for() blocks until the future has a valid result, or the timeout is
+ // reached.
+ // The future must have a valid internal state to call this method.
+ template<class Rep, class Period>
+ future_status wait_for(std::chrono::duration<Rep, Period> const& timeout) const;
+
+ // wait_until() blocks until the future has a valid result, or the timeout is
+ // reached.
+ // The future must have a valid internal state to call this method.
+ template<class Clock, class Duration>
+ future_status wait_until(std::chrono::time_point<Clock, Duration> const& timeout) const;
+
+private:
+ friend promise<T>;
+ future(future const&) = delete;
+ inline future(std::shared_ptr<State> const& state);
+
+ std::shared_ptr<State> state = std::make_shared<State>();
};
-template <typename T>
-future<T>::future(const std::shared_ptr<State>& s) : state(s) {}
+template<typename T>
+future<T>::future(std::shared_ptr<State> const& s) : state(s)
+{
+}
-template <typename T>
-bool future<T>::valid() const {
- return static_cast<bool>(state);
+template<typename T>
+bool future<T>::valid() const
+{
+ return static_cast<bool>(state);
}
-template <typename T>
-T future<T>::get() {
- std::unique_lock<std::mutex> lock(state->mutex);
- state->cv.wait(lock, [&] { return state->hasVal; });
- return state->val;
+template<typename T>
+T future<T>::get()
+{
+ std::unique_lock<std::mutex> lock(state->mutex);
+ state->cv.wait(lock, [&] { return state->hasVal; });
+ return state->val;
}
-template <typename T>
-void future<T>::wait() const {
- std::unique_lock<std::mutex> lock(state->mutex);
- state->cv.wait(lock, [&] { return state->hasVal; });
+template<typename T>
+void future<T>::wait() const
+{
+ std::unique_lock<std::mutex> lock(state->mutex);
+ state->cv.wait(lock, [&] { return state->hasVal; });
}
-template <typename T>
-template <class Rep, class Period>
-future_status future<T>::wait_for(
- const std::chrono::duration<Rep, Period>& timeout) const {
- std::unique_lock<std::mutex> lock(state->mutex);
- return state->cv.wait_for(lock, timeout, [&] { return state->hasVal; })
- ? future_status::ready
- : future_status::timeout;
+template<typename T>
+template<class Rep, class Period>
+future_status future<T>::wait_for(std::chrono::duration<Rep, Period> const& timeout) const
+{
+ std::unique_lock<std::mutex> lock(state->mutex);
+ return state->cv.wait_for(lock, timeout, [&] { return state->hasVal; }) ? future_status::ready
+ : future_status::timeout;
}
-template <typename T>
-template <class Clock, class Duration>
-future_status future<T>::wait_until(
- const std::chrono::time_point<Clock, Duration>& timeout) const {
- std::unique_lock<std::mutex> lock(state->mutex);
- return state->cv.wait_until(lock, timeout, [&] { return state->hasVal; })
- ? future_status::ready
- : future_status::timeout;
+template<typename T>
+template<class Clock, class Duration>
+future_status future<T>::wait_until(std::chrono::time_point<Clock, Duration> const& timeout) const
+{
+ std::unique_lock<std::mutex> lock(state->mutex);
+ return state->cv.wait_until(lock, timeout, [&] { return state->hasVal; }) ? future_status::ready
+ : future_status::timeout;
}
// promise is a minimal reimplementation of std::promise, that does not suffer
// from TSAN false positives. See:
// https://gcc.gnu.org/bugzilla//show_bug.cgi?id=69204
-template <typename T>
-class promise {
- public:
- // constructors
- inline promise() = default;
- inline promise(promise&& other) = default;
- inline promise(const promise& other) = default;
-
- // set_value() stores value to the shared state.
- // set_value() must only be called once.
- inline void set_value(const T& value) const;
- inline void set_value(T&& value) const;
-
- // get_future() returns a future sharing this promise's state.
- future<T> get_future();
-
- private:
- using State = detail::promise_state<T>;
- std::shared_ptr<State> state = std::make_shared<State>();
+template<typename T>
+class promise
+{
+public:
+ // constructors
+ inline promise() = default;
+ inline promise(promise&& other) = default;
+ inline promise(promise const& other) = default;
+
+ // set_value() stores value to the shared state.
+ // set_value() must only be called once.
+ inline void set_value(T const& value) const;
+ inline void set_value(T&& value) const;
+
+ // get_future() returns a future sharing this promise's state.
+ future<T> get_future();
+
+private:
+ using State = detail::promise_state<T>;
+ std::shared_ptr<State> state = std::make_shared<State>();
};
-template <typename T>
-future<T> promise<T>::get_future() {
- return future<T>(state);
+template<typename T>
+future<T> promise<T>::get_future()
+{
+ return future<T>(state);
}
-template <typename T>
-void promise<T>::set_value(const T& value) const {
- std::unique_lock<std::mutex> lock(state->mutex);
- state->val = value;
- state->hasVal = true;
- state->cv.notify_all();
+template<typename T>
+void promise<T>::set_value(T const& value) const
+{
+ std::unique_lock<std::mutex> lock(state->mutex);
+ state->val = value;
+ state->hasVal = true;
+ state->cv.notify_all();
}
-template <typename T>
-void promise<T>::set_value(T&& value) const {
- std::unique_lock<std::mutex> lock(state->mutex);
- state->val = std::move(value);
- state->hasVal = true;
- state->cv.notify_all();
+template<typename T>
+void promise<T>::set_value(T&& value) const
+{
+ std::unique_lock<std::mutex> lock(state->mutex);
+ state->val = std::move(value);
+ state->hasVal = true;
+ state->cv.notify_all();
}
-} // namespace lsp
-
-
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/json.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/json.h
index 34e6232917..ff28200e59 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/json.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/json.h
@@ -5,77 +5,186 @@
#include <rapidjson/document.h>
#include <rapidjson/prettywriter.h>
-class JsonReader : public Reader {
-
- std::vector<const char*> path_;
-
- public:
- rapidjson::GenericValue<rapidjson::UTF8<>>* m_;
- JsonReader(rapidjson::GenericValue<rapidjson::UTF8<>>* m) : m_(m) {}
- SerializeFormat Format() const override { return SerializeFormat::Json; }
-
- bool IsBool() override { return m_->IsBool(); }
- bool IsNull() override { return m_->IsNull(); }
- bool IsArray() override { return m_->IsArray(); }
- bool IsInt() override { return m_->IsInt(); }
- bool IsInt64() override { return m_->IsInt64(); }
- bool IsUint64() override { return m_->IsUint64(); }
- bool IsDouble() override { return m_->IsDouble(); }
- bool IsNumber() override { return m_->IsNumber(); }
- bool IsString() override { return m_->IsString(); }
-
- void GetNull() override {}
- bool GetBool() override { return m_->GetBool(); }
- int GetInt() override { return m_->GetInt(); }
- uint32_t GetUint32() override { return uint32_t(m_->GetUint64()); }
- int64_t GetInt64() override { return m_->GetInt64(); }
- uint64_t GetUint64() override { return m_->GetUint64(); }
- double GetDouble() override { return m_->GetDouble(); }
- std::string GetString() override { return m_->GetString(); }
-
- bool HasMember(const char* x) override
- {
- if (m_->IsObject())
- return m_->HasMember(x);
- else
- return false;
- }
- std::unique_ptr<Reader> operator[](const char* x) override {
- auto& sub = (*m_)[x];
- return std::unique_ptr<JsonReader>(new JsonReader(&sub));
- }
-
- std::string ToString() const override;
-
- void IterMap(std::function<void(const char*, Reader&)> fn) override;
-
- void IterArray(std::function<void(Reader&)> fn) override;
-
- void DoMember(const char* name, std::function<void(Reader&)> fn) override;
-
- std::string GetPath() const;
+class JsonReader : public Reader
+{
+
+ std::vector<char const*> path_;
+
+public:
+ rapidjson::GenericValue<rapidjson::UTF8<>>* m_;
+ JsonReader(rapidjson::GenericValue<rapidjson::UTF8<>>* m) : m_(m)
+ {
+ }
+ SerializeFormat Format() const override
+ {
+ return SerializeFormat::Json;
+ }
+
+ bool IsBool() override
+ {
+ return m_->IsBool();
+ }
+ bool IsNull() override
+ {
+ return m_->IsNull();
+ }
+ bool IsArray() override
+ {
+ return m_->IsArray();
+ }
+ bool IsInt() override
+ {
+ return m_->IsInt();
+ }
+ bool IsInt64() override
+ {
+ return m_->IsInt64();
+ }
+ bool IsUint64() override
+ {
+ return m_->IsUint64();
+ }
+ bool IsDouble() override
+ {
+ return m_->IsDouble();
+ }
+ bool IsNumber() override
+ {
+ return m_->IsNumber();
+ }
+ bool IsString() override
+ {
+ return m_->IsString();
+ }
+
+ void GetNull() override
+ {
+ }
+ bool GetBool() override
+ {
+ return m_->GetBool();
+ }
+ int GetInt() override
+ {
+ return m_->GetInt();
+ }
+ uint32_t GetUint32() override
+ {
+ return uint32_t(m_->GetUint64());
+ }
+ int64_t GetInt64() override
+ {
+ return m_->GetInt64();
+ }
+ uint64_t GetUint64() override
+ {
+ return m_->GetUint64();
+ }
+ double GetDouble() override
+ {
+ return m_->GetDouble();
+ }
+ std::string GetString() override
+ {
+ return m_->GetString();
+ }
+
+ bool HasMember(char const* x) override
+ {
+ if (m_->IsObject())
+ {
+ return m_->HasMember(x);
+ }
+ else
+ {
+ return false;
+ }
+ }
+ std::unique_ptr<Reader> operator[](char const* x) override
+ {
+ auto& sub = (*m_)[x];
+ return std::unique_ptr<JsonReader>(new JsonReader(&sub));
+ }
+
+ std::string ToString() const override;
+
+ void IterMap(std::function<void(char const*, Reader&)> fn) override;
+
+ void IterArray(std::function<void(Reader&)> fn) override;
+
+ void DoMember(char const* name, std::function<void(Reader&)> fn) override;
+
+ std::string GetPath() const;
};
-class JsonWriter : public Writer {
-
- public:
- rapidjson::Writer<rapidjson::StringBuffer>* m_;
-
- JsonWriter(rapidjson::Writer<rapidjson::StringBuffer>* m) : m_(m) {}
- SerializeFormat Format() const override { return SerializeFormat::Json; }
-
- void Null() override { m_->Null(); }
- void Bool(bool x) override { m_->Bool(x); }
- void Int(int x) override { m_->Int(x); }
- void Uint32(uint32_t x) override { m_->Uint64(x); }
- void Int64(int64_t x) override { m_->Int64(x); }
- void Uint64(uint64_t x) override { m_->Uint64(x); }
- void Double(double x) override { m_->Double(x); }
- void String(const char* x) override { m_->String(x); }
- void String(const char* x, size_t len) override { m_->String(x, len); }
- void StartArray(size_t) override { m_->StartArray(); }
- void EndArray() override { m_->EndArray(); }
- void StartObject() override { m_->StartObject(); }
- void EndObject() override { m_->EndObject(); }
- void Key(const char* name) override { m_->Key(name); }
+class JsonWriter : public Writer
+{
+
+public:
+ rapidjson::Writer<rapidjson::StringBuffer>* m_;
+
+ JsonWriter(rapidjson::Writer<rapidjson::StringBuffer>* m) : m_(m)
+ {
+ }
+ SerializeFormat Format() const override
+ {
+ return SerializeFormat::Json;
+ }
+
+ void Null() override
+ {
+ m_->Null();
+ }
+ void Bool(bool x) override
+ {
+ m_->Bool(x);
+ }
+ void Int(int x) override
+ {
+ m_->Int(x);
+ }
+ void Uint32(uint32_t x) override
+ {
+ m_->Uint64(x);
+ }
+ void Int64(int64_t x) override
+ {
+ m_->Int64(x);
+ }
+ void Uint64(uint64_t x) override
+ {
+ m_->Uint64(x);
+ }
+ void Double(double x) override
+ {
+ m_->Double(x);
+ }
+ void String(char const* x) override
+ {
+ m_->String(x);
+ }
+ void String(char const* x, size_t len) override
+ {
+ m_->String(x, len);
+ }
+ void StartArray(size_t) override
+ {
+ m_->StartArray();
+ }
+ void EndArray() override
+ {
+ m_->EndArray();
+ }
+ void StartObject() override
+ {
+ m_->StartObject();
+ }
+ void EndObject() override
+ {
+ m_->EndObject();
+ }
+ void Key(char const* name) override
+ {
+ m_->Key(name);
+ }
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsRequestId.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsRequestId.h
index 2efc80b19a..0af5abc0c1 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsRequestId.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsRequestId.h
@@ -2,50 +2,69 @@
#include "LibLsp/JsonRpc/serializer.h"
-struct lsRequestId {
- // The client can send the request id as an int or a string. We should output
- // the same format we received.
- enum Type { kNone, kInt, kString };
- Type type = kNone;
+struct lsRequestId
+{
+ // The client can send the request id as an int or a string. We should output
+ // the same format we received.
+ enum Type
+ {
+ kNone,
+ kInt,
+ kString
+ };
+ Type type = kNone;
- int value = -1;
- std::string k_string;
- bool has_value() const { return type != kNone; }
- void swap(lsRequestId& arg) noexcept
+ int value = -1;
+ std::string k_string;
+ bool has_value() const
+ {
+ return type != kNone;
+ }
+ void swap(lsRequestId& arg) noexcept
+ {
+ std::swap(arg, *this);
+ }
+ void set(int v)
+ {
+ value = v;
+ type = kInt;
+ }
+ void set(std::string const& v)
+ {
+ k_string = v;
+ type = kString;
+ }
+ bool operator==(lsRequestId const& rhs) const
+ {
+ if (type != rhs.type)
{
- std::swap(arg, *this);
+ return false;
}
- void set(int v)
+ if (type == kInt)
{
- value = v;
- type = kInt;
+ return value == rhs.value;
}
- void set(const std::string& v)
+ return k_string == rhs.k_string;
+ }
+ bool operator!=(lsRequestId const& rhs) const
+ {
+ return !operator==(rhs);
+ }
+ bool operator<(lsRequestId const& rhs) const
+ {
+ if (type != rhs.type)
{
- k_string = v;
- type = kString;
+ return false;
}
- bool operator==(const lsRequestId& rhs) const
+ if (type == kInt)
{
- if (type != rhs.type) return false;
- if (type == kInt)
- return value == rhs.value;
- return k_string == rhs.k_string;
- }
- bool operator!=(const lsRequestId& rhs) const
- {
- return !operator==(rhs);
- }
- bool operator<(const lsRequestId& rhs) const
- {
- if (type != rhs.type) return false;
- if (type == kInt)
- return value < rhs.value;
- return k_string < rhs.k_string;
+ return value < rhs.value;
}
+ return k_string < rhs.k_string;
+ }
};
void Reflect(Reader& visitor, lsRequestId& value);
void Reflect(Writer& visitor, lsRequestId& value);
// Debug method to convert an id to a string.
-std::string ToString(const lsRequestId& id);
+std::string ToString(lsRequestId const& id);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsResponseMessage.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsResponseMessage.h
index 68ad502b0c..06d173c518 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsResponseMessage.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsResponseMessage.h
@@ -4,68 +4,74 @@
#include "LibLsp/JsonRpc/message.h"
#include "LibLsp/lsp/method_type.h"
+struct ResponseInMessage : public LspMessage
+{
-struct ResponseInMessage :public LspMessage {
+ lsRequestId id;
+ std::string m_methodType;
- lsRequestId id;
- std::string m_methodType;
+ virtual MethodType GetMethodType() const override
+ {
+ return m_methodType.data();
+ };
+ virtual void SetMethodType(MethodType _type) override
+ {
+ m_methodType = _type;
+ };
- virtual MethodType GetMethodType() const override
- {
- return m_methodType.data();
- };
- virtual void SetMethodType(MethodType _type) override
- {
- m_methodType = _type;
- };
-
- Kind GetKid() override
- {
- return RESPONCE_MESSAGE;
- }
- virtual bool IsErrorType()
- {
- return false;
- }
+ Kind GetKid() override
+ {
+ return RESPONCE_MESSAGE;
+ }
+ virtual bool IsErrorType()
+ {
+ return false;
+ }
};
-template <class TDerived >
-struct BaseResponseMessage : ResponseInMessage {
-
- void ReflectWriter(Writer& writer) override {
- Reflect(writer, static_cast<TDerived&>(*this));
- }
- static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor) {
+template<class TDerived>
+struct BaseResponseMessage : ResponseInMessage
+{
- TDerived* temp = new TDerived();
- std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
- // Reflect may throw and *message will be partially deserialized.
- Reflect(visitor, static_cast<TDerived&>(*temp));
- return message;
- }
+ void ReflectWriter(Writer& writer) override
+ {
+ Reflect(writer, static_cast<TDerived&>(*this));
+ }
+ static std::unique_ptr<LspMessage> ReflectReader(Reader& visitor)
+ {
+ TDerived* temp = new TDerived();
+ std::unique_ptr<TDerived> message = std::unique_ptr<TDerived>(temp);
+ // Reflect may throw and *message will be partially deserialized.
+ Reflect(visitor, static_cast<TDerived&>(*temp));
+ return message;
+ }
};
-
-template <class T, class TDerived >
-struct ResponseMessage : BaseResponseMessage<TDerived> {
- T result;
- void swap(ResponseMessage<T, TDerived>& arg) noexcept
- {
- std::swap(result, arg.result);
- this->id.swap(arg.id);
- this->m_methodType.swap(arg.m_methodType);
- }
+template<class T, class TDerived>
+struct ResponseMessage : BaseResponseMessage<TDerived>
+{
+ T result;
+ void swap(ResponseMessage<T, TDerived>& arg) noexcept
+ {
+ std::swap(result, arg.result);
+ this->id.swap(arg.id);
+ this->m_methodType.swap(arg.m_methodType);
+ }
};
-template <class T, class TDerived >
-struct ResponseError : BaseResponseMessage<TDerived> {
- T error;
- bool IsErrorType() override { return true; }
- void swap(ResponseError<T, TDerived>& arg) noexcept
- {
+template<class T, class TDerived>
+struct ResponseError : BaseResponseMessage<TDerived>
+{
+ T error;
+ bool IsErrorType() override
+ {
+ return true;
+ }
+ void swap(ResponseError<T, TDerived>& arg) noexcept
+ {
- this->id.swap(arg.id);
- this->m_methodType.swap(arg.m_methodType);
- std::swap(error, arg.error);
- }
+ this->id.swap(arg.id);
+ this->m_methodType.swap(arg.m_methodType);
+ std::swap(error, arg.error);
+ }
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/macro_map.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/macro_map.h
index 19a9634286..7ce6d14875 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/macro_map.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/macro_map.h
@@ -35,100 +35,445 @@ DEALINGS IN THE SOFTWARE.
#pragma once
-static constexpr const int max_visitable_members = 69;
+static constexpr int const max_visitable_members = 69;
#define VISIT_STRUCT_EXPAND(x) x
#define VISIT_STRUCT_PP_ARG_N( \
- _1, _2, _3, _4, _5, _6, _7, _8, _9, _10,\
- _11, _12, _13, _14, _15, _16, _17, _18, _19, _20,\
- _21, _22, _23, _24, _25, _26, _27, _28, _29, _30,\
- _31, _32, _33, _34, _35, _36, _37, _38, _39, _40,\
- _41, _42, _43, _44, _45, _46, _47, _48, _49, _50,\
- _51, _52, _53, _54, _55, _56, _57, _58, _59, _60,\
- _61, _62, _63, _64, _65, _66, _67, _68, _69, N, ...) N
-#define VISIT_STRUCT_PP_NARG(...) VISIT_STRUCT_EXPAND(VISIT_STRUCT_PP_ARG_N(__VA_ARGS__, \
- 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, \
- 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
- 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
- 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
- 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \
- 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
- 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
+ _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, N, \
+ ... \
+) \
+ N
+#define VISIT_STRUCT_PP_NARG(...) \
+ VISIT_STRUCT_EXPAND(VISIT_STRUCT_PP_ARG_N( \
+ __VA_ARGS__, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, \
+ 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, \
+ 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 \
+ ))
/* need extra level to force extra eval */
-#define VISIT_STRUCT_CONCAT_(a,b) a ## b
-#define VISIT_STRUCT_CONCAT(a,b) VISIT_STRUCT_CONCAT_(a,b)
+#define VISIT_STRUCT_CONCAT_(a, b) a##b
+#define VISIT_STRUCT_CONCAT(a, b) VISIT_STRUCT_CONCAT_(a, b)
#define VISIT_STRUCT_APPLYF0(f)
-#define VISIT_STRUCT_APPLYF1(f,_1) f(_1)
-#define VISIT_STRUCT_APPLYF2(f,_1,_2) f(_1) f(_2)
-#define VISIT_STRUCT_APPLYF3(f,_1,_2,_3) f(_1) f(_2) f(_3)
-#define VISIT_STRUCT_APPLYF4(f,_1,_2,_3,_4) f(_1) f(_2) f(_3) f(_4)
-#define VISIT_STRUCT_APPLYF5(f,_1,_2,_3,_4,_5) f(_1) f(_2) f(_3) f(_4) f(_5)
-#define VISIT_STRUCT_APPLYF6(f,_1,_2,_3,_4,_5,_6) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6)
-#define VISIT_STRUCT_APPLYF7(f,_1,_2,_3,_4,_5,_6,_7) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7)
-#define VISIT_STRUCT_APPLYF8(f,_1,_2,_3,_4,_5,_6,_7,_8) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8)
-#define VISIT_STRUCT_APPLYF9(f,_1,_2,_3,_4,_5,_6,_7,_8,_9) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9)
-#define VISIT_STRUCT_APPLYF10(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10)
-#define VISIT_STRUCT_APPLYF11(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11)
-#define VISIT_STRUCT_APPLYF12(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12)
-#define VISIT_STRUCT_APPLYF13(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13)
-#define VISIT_STRUCT_APPLYF14(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14)
-#define VISIT_STRUCT_APPLYF15(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15)
-#define VISIT_STRUCT_APPLYF16(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16)
-#define VISIT_STRUCT_APPLYF17(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17)
-#define VISIT_STRUCT_APPLYF18(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18)
-#define VISIT_STRUCT_APPLYF19(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19)
-#define VISIT_STRUCT_APPLYF20(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20)
-#define VISIT_STRUCT_APPLYF21(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21)
-#define VISIT_STRUCT_APPLYF22(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22)
-#define VISIT_STRUCT_APPLYF23(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23)
-#define VISIT_STRUCT_APPLYF24(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24)
-#define VISIT_STRUCT_APPLYF25(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25)
-#define VISIT_STRUCT_APPLYF26(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26)
-#define VISIT_STRUCT_APPLYF27(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27)
-#define VISIT_STRUCT_APPLYF28(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28)
-#define VISIT_STRUCT_APPLYF29(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29)
-#define VISIT_STRUCT_APPLYF30(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30)
-#define VISIT_STRUCT_APPLYF31(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31)
-#define VISIT_STRUCT_APPLYF32(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32)
-#define VISIT_STRUCT_APPLYF33(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33)
-#define VISIT_STRUCT_APPLYF34(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34)
-#define VISIT_STRUCT_APPLYF35(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35)
-#define VISIT_STRUCT_APPLYF36(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36)
-#define VISIT_STRUCT_APPLYF37(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37)
-#define VISIT_STRUCT_APPLYF38(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38)
-#define VISIT_STRUCT_APPLYF39(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39)
-#define VISIT_STRUCT_APPLYF40(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40)
-#define VISIT_STRUCT_APPLYF41(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41)
-#define VISIT_STRUCT_APPLYF42(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42)
-#define VISIT_STRUCT_APPLYF43(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43)
-#define VISIT_STRUCT_APPLYF44(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44)
-#define VISIT_STRUCT_APPLYF45(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45)
-#define VISIT_STRUCT_APPLYF46(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46)
-#define VISIT_STRUCT_APPLYF47(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47)
-#define VISIT_STRUCT_APPLYF48(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48)
-#define VISIT_STRUCT_APPLYF49(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49)
-#define VISIT_STRUCT_APPLYF50(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50)
-#define VISIT_STRUCT_APPLYF51(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51)
-#define VISIT_STRUCT_APPLYF52(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52)
-#define VISIT_STRUCT_APPLYF53(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53)
-#define VISIT_STRUCT_APPLYF54(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54)
-#define VISIT_STRUCT_APPLYF55(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55)
-#define VISIT_STRUCT_APPLYF56(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56)
-#define VISIT_STRUCT_APPLYF57(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57)
-#define VISIT_STRUCT_APPLYF58(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58)
-#define VISIT_STRUCT_APPLYF59(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59)
-#define VISIT_STRUCT_APPLYF60(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60)
-#define VISIT_STRUCT_APPLYF61(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61)
-#define VISIT_STRUCT_APPLYF62(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62)
-#define VISIT_STRUCT_APPLYF63(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63)
-#define VISIT_STRUCT_APPLYF64(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64)
-#define VISIT_STRUCT_APPLYF65(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65)
-#define VISIT_STRUCT_APPLYF66(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66)
-#define VISIT_STRUCT_APPLYF67(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66,_67) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66) f(_67)
-#define VISIT_STRUCT_APPLYF68(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66,_67,_68) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66) f(_67) f(_68)
-#define VISIT_STRUCT_APPLYF69(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66,_67,_68,_69) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66) f(_67) f(_68) f(_69)
+#define VISIT_STRUCT_APPLYF1(f, _1) f(_1)
+#define VISIT_STRUCT_APPLYF2(f, _1, _2) f(_1) f(_2)
+#define VISIT_STRUCT_APPLYF3(f, _1, _2, _3) f(_1) f(_2) f(_3)
+#define VISIT_STRUCT_APPLYF4(f, _1, _2, _3, _4) f(_1) f(_2) f(_3) f(_4)
+#define VISIT_STRUCT_APPLYF5(f, _1, _2, _3, _4, _5) f(_1) f(_2) f(_3) f(_4) f(_5)
+#define VISIT_STRUCT_APPLYF6(f, _1, _2, _3, _4, _5, _6) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6)
+#define VISIT_STRUCT_APPLYF7(f, _1, _2, _3, _4, _5, _6, _7) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7)
+#define VISIT_STRUCT_APPLYF8(f, _1, _2, _3, _4, _5, _6, _7, _8) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8)
+#define VISIT_STRUCT_APPLYF9(f, _1, _2, _3, _4, _5, _6, _7, _8, _9) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9)
+#define VISIT_STRUCT_APPLYF10(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10)
+#define VISIT_STRUCT_APPLYF11(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11)
+#define VISIT_STRUCT_APPLYF12(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12)
+#define VISIT_STRUCT_APPLYF13(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13)
+#define VISIT_STRUCT_APPLYF14(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14)
+#define VISIT_STRUCT_APPLYF15(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15)
+#define VISIT_STRUCT_APPLYF16(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16)
+#define VISIT_STRUCT_APPLYF17(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17)
+#define VISIT_STRUCT_APPLYF18(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18)
+#define VISIT_STRUCT_APPLYF19(f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19)
+#define VISIT_STRUCT_APPLYF20( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20)
+#define VISIT_STRUCT_APPLYF21( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21)
+#define VISIT_STRUCT_APPLYF22( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22)
+#define VISIT_STRUCT_APPLYF23( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23)
+#define VISIT_STRUCT_APPLYF24( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24)
+#define VISIT_STRUCT_APPLYF25( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25)
+#define VISIT_STRUCT_APPLYF26( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26)
+#define VISIT_STRUCT_APPLYF27( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27)
+#define VISIT_STRUCT_APPLYF28( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28)
+#define VISIT_STRUCT_APPLYF29( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29)
+#define VISIT_STRUCT_APPLYF30( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30)
+#define VISIT_STRUCT_APPLYF31( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31)
+#define VISIT_STRUCT_APPLYF32( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32)
+#define VISIT_STRUCT_APPLYF33( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17 \
+ ) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33)
+#define VISIT_STRUCT_APPLYF34( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34)
+#define VISIT_STRUCT_APPLYF35( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35)
+#define VISIT_STRUCT_APPLYF36( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36)
+#define VISIT_STRUCT_APPLYF37( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37)
+#define VISIT_STRUCT_APPLYF38( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38)
+#define VISIT_STRUCT_APPLYF39( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39)
+#define VISIT_STRUCT_APPLYF40( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40)
+#define VISIT_STRUCT_APPLYF41( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41)
+#define VISIT_STRUCT_APPLYF42( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42)
+#define VISIT_STRUCT_APPLYF43( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43)
+#define VISIT_STRUCT_APPLYF44( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44)
+#define VISIT_STRUCT_APPLYF45( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45)
+#define VISIT_STRUCT_APPLYF46( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46)
+#define VISIT_STRUCT_APPLYF47( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47)
+#define VISIT_STRUCT_APPLYF48( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48)
+#define VISIT_STRUCT_APPLYF49( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49)
+#define VISIT_STRUCT_APPLYF50( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50)
+#define VISIT_STRUCT_APPLYF51( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51)
+#define VISIT_STRUCT_APPLYF52( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52)
+#define VISIT_STRUCT_APPLYF53( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53)
+#define VISIT_STRUCT_APPLYF54( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54)
+#define VISIT_STRUCT_APPLYF55( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55)
+#define VISIT_STRUCT_APPLYF56( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56)
+#define VISIT_STRUCT_APPLYF57( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57)
+#define VISIT_STRUCT_APPLYF58( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58)
+#define VISIT_STRUCT_APPLYF59( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59)
+#define VISIT_STRUCT_APPLYF60( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60)
+#define VISIT_STRUCT_APPLYF61( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61)
+#define VISIT_STRUCT_APPLYF62( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62)
+#define VISIT_STRUCT_APPLYF63( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63)
+#define VISIT_STRUCT_APPLYF64( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63) f(_64)
+#define VISIT_STRUCT_APPLYF65( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63) f(_64) f(_65)
+#define VISIT_STRUCT_APPLYF66( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63) f(_64) f(_65) f(_66)
+#define VISIT_STRUCT_APPLYF67( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63) f(_64) f(_65) f(_66) f(_67)
+#define VISIT_STRUCT_APPLYF68( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63) f(_64) f(_65) f(_66) f(_67) f(_68)
+#define VISIT_STRUCT_APPLYF69( \
+ f, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, \
+ _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, \
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69 \
+) \
+ f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) \
+ f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) \
+ f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) \
+ f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) \
+ f(_62) f(_63) f(_64) f(_65) f(_66) f(_67) f(_68) f(_69)
#define VISIT_STRUCT_APPLY_F_(M, ...) VISIT_STRUCT_EXPAND(M(__VA_ARGS__))
-#define MACRO_MAP(f, ...) VISIT_STRUCT_EXPAND(VISIT_STRUCT_APPLY_F_(VISIT_STRUCT_CONCAT(VISIT_STRUCT_APPLYF, VISIT_STRUCT_PP_NARG(__VA_ARGS__)), f, __VA_ARGS__))
+#define MACRO_MAP(f, ...) \
+ VISIT_STRUCT_EXPAND(VISIT_STRUCT_APPLY_F_( \
+ VISIT_STRUCT_CONCAT(VISIT_STRUCT_APPLYF, VISIT_STRUCT_PP_NARG(__VA_ARGS__)), f, __VA_ARGS__ \
+ ))
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/message.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/message.h
index 57f4932520..4a0c79922c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/message.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/message.h
@@ -9,26 +9,23 @@
struct LspMessage
{
public:
- std::string jsonrpc = "2.0";
- virtual void ReflectWriter(Writer&) = 0;
+ std::string jsonrpc = "2.0";
+ virtual void ReflectWriter(Writer&) = 0;
- // Send the message to the language client by writing it to stdout.
- void Write(std::ostream& out);
+ // Send the message to the language client by writing it to stdout.
+ void Write(std::ostream& out);
+ virtual MethodType GetMethodType() const = 0;
+ virtual void SetMethodType(MethodType) = 0;
- virtual MethodType GetMethodType() const = 0;
- virtual void SetMethodType(MethodType) = 0;
-
- virtual ~LspMessage()=default;
- enum Kind
- {
- REQUEST_MESSAGE,
- RESPONCE_MESSAGE,
- NOTIFICATION_MESSAGE
- };
-
- virtual Kind GetKid() = 0;
- virtual std::string ToJson() ;
+ virtual ~LspMessage() = default;
+ enum Kind
+ {
+ REQUEST_MESSAGE,
+ RESPONCE_MESSAGE,
+ NOTIFICATION_MESSAGE
+ };
+ virtual Kind GetKid() = 0;
+ virtual std::string ToJson();
};
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/serializer.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/serializer.h
index 1763c84f5f..31d0b27640 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/serializer.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/serializer.h
@@ -15,129 +15,138 @@
struct AbsolutePath;
-enum class SerializeFormat { Json, MessagePack };
+enum class SerializeFormat
+{
+ Json,
+ MessagePack
+};
// A tag type that can be used to write `null` to json.
struct JsonNull
{
- void swap(JsonNull& arg) noexcept;
+ void swap(JsonNull& arg) noexcept;
};
-
-
-class Reader {
+class Reader
+{
public:
- virtual ~Reader() {}
- virtual SerializeFormat Format() const = 0;
-
- virtual bool IsBool() = 0;
- virtual bool IsNull() = 0;
- virtual bool IsArray() = 0;
- virtual bool IsInt() = 0;
- virtual bool IsInt64() = 0;
- virtual bool IsUint64() = 0;
- virtual bool IsDouble() = 0;
+ virtual ~Reader()
+ {
+ }
+ virtual SerializeFormat Format() const = 0;
+
+ virtual bool IsBool() = 0;
+ virtual bool IsNull() = 0;
+ virtual bool IsArray() = 0;
+ virtual bool IsInt() = 0;
+ virtual bool IsInt64() = 0;
+ virtual bool IsUint64() = 0;
+ virtual bool IsDouble() = 0;
virtual bool IsNumber() = 0;
virtual bool IsString() = 0;
- virtual void GetNull() = 0;
- virtual bool GetBool() = 0;
- virtual int GetInt() = 0;
- virtual uint32_t GetUint32() = 0;
- virtual int64_t GetInt64() = 0;
- virtual uint64_t GetUint64() = 0;
- virtual double GetDouble() = 0;
- virtual std::string GetString() = 0;
-
- virtual bool HasMember(const char* x) = 0;
- virtual std::unique_ptr<Reader> operator[](const char* x) = 0;
- virtual void IterMap( std::function<void(const char*, Reader&)> fn) = 0;
- virtual void IterArray(std::function<void(Reader&)> fn) = 0;
- virtual void DoMember(const char* name, std::function<void(Reader&)> fn) = 0;
- virtual std::string ToString() const = 0;
+ virtual void GetNull() = 0;
+ virtual bool GetBool() = 0;
+ virtual int GetInt() = 0;
+ virtual uint32_t GetUint32() = 0;
+ virtual int64_t GetInt64() = 0;
+ virtual uint64_t GetUint64() = 0;
+ virtual double GetDouble() = 0;
+ virtual std::string GetString() = 0;
+
+ virtual bool HasMember(char const* x) = 0;
+ virtual std::unique_ptr<Reader> operator[](char const* x) = 0;
+ virtual void IterMap(std::function<void(char const*, Reader&)> fn) = 0;
+ virtual void IterArray(std::function<void(Reader&)> fn) = 0;
+ virtual void DoMember(char const* name, std::function<void(Reader&)> fn) = 0;
+ virtual std::string ToString() const = 0;
};
-
-
-class Writer {
+class Writer
+{
public:
- virtual ~Writer() {}
- virtual SerializeFormat Format() const = 0;
-
- virtual void Null() = 0;
- virtual void Bool(bool x) = 0;
- virtual void Int(int x) = 0;
- virtual void Uint32(uint32_t x) = 0;
- virtual void Int64(int64_t x) = 0;
- virtual void Uint64(uint64_t x) = 0;
- virtual void Double(double x) = 0;
- virtual void String(const char* x) = 0;
- virtual void String(const char* x, size_t len) = 0;
- virtual void StartArray(size_t) = 0;
- virtual void EndArray() = 0;
- virtual void StartObject() = 0;
- virtual void EndObject() = 0;
- virtual void Key(const char* name) = 0;
+ virtual ~Writer()
+ {
+ }
+ virtual SerializeFormat Format() const = 0;
+
+ virtual void Null() = 0;
+ virtual void Bool(bool x) = 0;
+ virtual void Int(int x) = 0;
+ virtual void Uint32(uint32_t x) = 0;
+ virtual void Int64(int64_t x) = 0;
+ virtual void Uint64(uint64_t x) = 0;
+ virtual void Double(double x) = 0;
+ virtual void String(char const* x) = 0;
+ virtual void String(char const* x, size_t len) = 0;
+ virtual void StartArray(size_t) = 0;
+ virtual void EndArray() = 0;
+ virtual void StartObject() = 0;
+ virtual void EndObject() = 0;
+ virtual void Key(char const* name) = 0;
};
-
-
-struct optionals_mandatory_tag {};
+struct optionals_mandatory_tag
+{
+};
#define REFLECT_MEMBER_START() ReflectMemberStart(visitor, value)
#define REFLECT_MEMBER_END() ReflectMemberEnd(visitor, value);
#define REFLECT_MEMBER_END1(value) ReflectMemberEnd(visitor, value);
#define REFLECT_MEMBER(name) ReflectMember(visitor, #name, value.name)
-#define REFLECT_MEMBER_OPTIONALS(name) \
- ReflectMember(visitor, #name, value.name, optionals_mandatory_tag{})
+#define REFLECT_MEMBER_OPTIONALS(name) ReflectMember(visitor, #name, value.name, optionals_mandatory_tag {})
#define REFLECT_MEMBER2(name, value) ReflectMember(visitor, name, value)
-#define MAKE_REFLECT_TYPE_PROXY(type_name) \
- MAKE_REFLECT_TYPE_PROXY2(type_name, std::underlying_type<type_name>::type)
-#define MAKE_REFLECT_TYPE_PROXY2(type, as_type) \
- inline void Reflect(Reader& visitor, type& value) { \
- as_type value0; \
- ::Reflect(visitor, value0); \
- value = static_cast<type>(value0); \
- } \
- inline void Reflect(Writer& visitor, type& value) { \
- auto value0 = static_cast<as_type>(value); \
- ::Reflect(visitor, value0); \
- }
+#define MAKE_REFLECT_TYPE_PROXY(type_name) MAKE_REFLECT_TYPE_PROXY2(type_name, std::underlying_type<type_name>::type)
+#define MAKE_REFLECT_TYPE_PROXY2(type, as_type) \
+ inline void Reflect(Reader& visitor, type& value) \
+ { \
+ as_type value0; \
+ ::Reflect(visitor, value0); \
+ value = static_cast<type>(value0); \
+ } \
+ inline void Reflect(Writer& visitor, type& value) \
+ { \
+ auto value0 = static_cast<as_type>(value); \
+ ::Reflect(visitor, value0); \
+ }
#define _MAPPABLE_REFLECT_MEMBER(name) REFLECT_MEMBER(name);
#define _MAPPABLE_REFLECT_MEMBER_OPTIONALS(name) REFLECT_MEMBER_OPTIONALS(name);
-#define MAKE_REFLECT_EMPTY_STRUCT(type, ...) \
- template <typename TVisitor> \
- void Reflect(TVisitor& visitor, type& value) { \
- REFLECT_MEMBER_START(); \
- REFLECT_MEMBER_END(); \
- }
-
-#define MAKE_REFLECT_STRUCT(type, ...) \
- template <typename TVisitor> \
- void Reflect(TVisitor& visitor, type& value) { \
- REFLECT_MEMBER_START(); \
- MACRO_MAP(_MAPPABLE_REFLECT_MEMBER, __VA_ARGS__) \
- REFLECT_MEMBER_END(); \
- }
-
-
-#define _MAPPABLE_SWAP_MEMBER(name) std::swap(name,arg.name);
-
-#define MAKE_SWAP_METHOD(type, ...) \
-void swap(type& arg) noexcept{ \
+#define MAKE_REFLECT_EMPTY_STRUCT(type, ...) \
+ template<typename TVisitor> \
+ void Reflect(TVisitor& visitor, type& value) \
+ { \
+ REFLECT_MEMBER_START(); \
+ REFLECT_MEMBER_END(); \
+ }
+
+#define MAKE_REFLECT_STRUCT(type, ...) \
+ template<typename TVisitor> \
+ void Reflect(TVisitor& visitor, type& value) \
+ { \
+ REFLECT_MEMBER_START(); \
+ MACRO_MAP(_MAPPABLE_REFLECT_MEMBER, __VA_ARGS__) \
+ REFLECT_MEMBER_END(); \
+ }
+
+#define _MAPPABLE_SWAP_MEMBER(name) std::swap(name, arg.name);
+
+#define MAKE_SWAP_METHOD(type, ...) \
+ void swap(type& arg) noexcept \
+ { \
MACRO_MAP(_MAPPABLE_SWAP_MEMBER, __VA_ARGS__) \
-}
+ }
-#define MAKE_REFLECT_STRUCT_OPTIONALS_MANDATORY(type, ...) \
- template <typename TVisitor> \
- void Reflect(TVisitor& visitor, type& value) { \
- REFLECT_MEMBER_START(); \
- MACRO_MAP(_MAPPABLE_REFLECT_MEMBER_OPTIONALS, __VA_ARGS__) \
- REFLECT_MEMBER_END(); \
- }
+#define MAKE_REFLECT_STRUCT_OPTIONALS_MANDATORY(type, ...) \
+ template<typename TVisitor> \
+ void Reflect(TVisitor& visitor, type& value) \
+ { \
+ REFLECT_MEMBER_START(); \
+ MACRO_MAP(_MAPPABLE_REFLECT_MEMBER_OPTIONALS, __VA_ARGS__) \
+ REFLECT_MEMBER_END(); \
+ }
// clang-format off
// Config has many fields, we need to support at least its number of fields.
@@ -150,11 +159,12 @@ void swap(type& arg) noexcept{ \
// Reflects the struct so it is serialized as an array instead of an object.
// This currently only supports writers.
#define MAKE_REFLECT_STRUCT_WRITER_AS_ARRAY(type, ...) \
- inline void Reflect(Writer& visitor, type& value) { \
- visitor.StartArray(NUM_VA_ARGS(__VA_ARGS__)); \
- MACRO_MAP(_MAPPABLE_REFLECT_ARRAY, __VA_ARGS__) \
- visitor.EndArray(); \
- }
+ inline void Reflect(Writer& visitor, type& value) \
+ { \
+ visitor.StartArray(NUM_VA_ARGS(__VA_ARGS__)); \
+ MACRO_MAP(_MAPPABLE_REFLECT_ARRAY, __VA_ARGS__) \
+ visitor.EndArray(); \
+ }
//// Elementary types
@@ -201,172 +211,193 @@ void Reflect(Reader& visitor, SerializeFormat& value);
void Reflect(Writer& visitor, SerializeFormat& value);
//// Type constructors
-template <typename T>
-void Reflect(Reader& visitor, optional<T>& value) {
- if (visitor.IsNull()) {
- visitor.GetNull();
- return;
- }
- T real_value;
- Reflect(visitor, real_value);
- value = std::move(real_value);
-}
-template <typename T>
-void Reflect(Writer& visitor, optional<T>& value) {
- if (value)
- Reflect(visitor, *value);
- else
- visitor.Null();
+template<typename T>
+void Reflect(Reader& visitor, optional<T>& value)
+{
+ if (visitor.IsNull())
+ {
+ visitor.GetNull();
+ return;
+ }
+ T real_value;
+ Reflect(visitor, real_value);
+ value = std::move(real_value);
}
-
-
-template <typename T>
-void ReflectMember(Writer& visitor, const char* name, optional<T>& value) {
- // For TypeScript optional property key?: value in the spec,
- // We omit both key and value if value is std::nullopt (null) for JsonWriter
- // to reduce output. But keep it for other serialization formats.
- if (value || visitor.Format() != SerializeFormat::Json) {
- visitor.Key(name);
- Reflect(visitor, value);
- }
+template<typename T>
+void Reflect(Writer& visitor, optional<T>& value)
+{
+ if (value)
+ {
+ Reflect(visitor, *value);
+ }
+ else
+ {
+ visitor.Null();
+ }
}
-
-template <typename T>
-void ReflectMember(Writer& visitor,
- const char* name,
- T& value,
- optionals_mandatory_tag) {
+template<typename T>
+void ReflectMember(Writer& visitor, char const* name, optional<T>& value)
+{
+ // For TypeScript optional property key?: value in the spec,
+ // We omit both key and value if value is std::nullopt (null) for JsonWriter
+ // to reduce output. But keep it for other serialization formats.
+ if (value || visitor.Format() != SerializeFormat::Json)
+ {
visitor.Key(name);
Reflect(visitor, value);
+ }
}
-template <typename T>
-void ReflectMember(Reader& visitor,
- const char* name,
- T& value,
- optionals_mandatory_tag) {
- Reflect(visitor, value);
+
+template<typename T>
+void ReflectMember(Writer& visitor, char const* name, T& value, optionals_mandatory_tag)
+{
+ visitor.Key(name);
+ Reflect(visitor, value);
+}
+template<typename T>
+void ReflectMember(Reader& visitor, char const* name, T& value, optionals_mandatory_tag)
+{
+ Reflect(visitor, value);
}
-template<class T >
+template<class T>
void Reflect(Reader& visitor, std::map<std::string, T>& value)
{
- visitor.IterMap([&](const char* name,Reader& entry) {
- T entry_value;
- Reflect(entry, entry_value);
- value[name]=(std::move(entry_value));
- });
+ visitor.IterMap(
+ [&](char const* name, Reader& entry)
+ {
+ T entry_value;
+ Reflect(entry, entry_value);
+ value[name] = (std::move(entry_value));
+ }
+ );
}
-template<class _Ty >
+template<class _Ty>
void Reflect(Writer& visitor, std::map<std::string, _Ty>& value)
{
- REFLECT_MEMBER_START();
- for (auto& it : value)
- {
- visitor.Key(it.first.c_str());
- Reflect(visitor, it.second);
- }
- REFLECT_MEMBER_END();
+ REFLECT_MEMBER_START();
+ for (auto& it : value)
+ {
+ visitor.Key(it.first.c_str());
+ Reflect(visitor, it.second);
+ }
+ REFLECT_MEMBER_END();
}
// std::vector
-template <typename T>
-void Reflect(Reader& visitor, std::vector<T>& values) {
- visitor.IterArray([&](Reader& entry) {
- T entry_value;
- Reflect(entry, entry_value);
- values.push_back(std::move(entry_value));
- });
+template<typename T>
+void Reflect(Reader& visitor, std::vector<T>& values)
+{
+ visitor.IterArray(
+ [&](Reader& entry)
+ {
+ T entry_value;
+ Reflect(entry, entry_value);
+ values.push_back(std::move(entry_value));
+ }
+ );
}
-
-template <typename T>
-void Reflect(Writer& visitor, std::vector<T>& values) {
- visitor.StartArray(values.size());
- for (auto& value : values)
- Reflect(visitor, value);
- visitor.EndArray();
+template<typename T>
+void Reflect(Writer& visitor, std::vector<T>& values)
+{
+ visitor.StartArray(values.size());
+ for (auto& value : values)
+ {
+ Reflect(visitor, value);
+ }
+ visitor.EndArray();
}
// ReflectMember
-inline void DefaultReflectMemberStart(Writer& visitor) {
- visitor.StartObject();
+inline void DefaultReflectMemberStart(Writer& visitor)
+{
+ visitor.StartObject();
+}
+inline void DefaultReflectMemberStart(Reader&)
+{
}
-inline void DefaultReflectMemberStart(Reader& visitor) {}
-template <typename T>
-bool ReflectMemberStart(Reader& visitor, T& value) {
- return false;
+template<typename T>
+bool ReflectMemberStart(Reader&, T&)
+{
+ return false;
}
-template <typename T>
-bool ReflectMemberStart(Writer& visitor, T& value) {
- visitor.StartObject();
- return true;
+template<typename T>
+bool ReflectMemberStart(Writer& visitor, T&)
+{
+ visitor.StartObject();
+ return true;
}
-template <typename T>
-void ReflectMemberEnd(Reader& visitor, T& value) {}
-template <typename T>
-void ReflectMemberEnd(Writer& visitor, T& value) {
- visitor.EndObject();
+template<typename T>
+void ReflectMemberEnd(Reader&, T&)
+{
+}
+template<typename T>
+void ReflectMemberEnd(Writer& visitor, T&)
+{
+ visitor.EndObject();
}
-template <typename T>
-void ReflectMember(Reader& visitor, const char* name, T& value) {
- visitor.DoMember(name, [&](Reader& child) { Reflect(child, value); });
+template<typename T>
+void ReflectMember(Reader& visitor, char const* name, T& value)
+{
+ visitor.DoMember(name, [&](Reader& child) { Reflect(child, value); });
}
-template <typename T>
-void ReflectMember(Writer& visitor, const char* name, T& value) {
- visitor.Key(name);
- Reflect(visitor, value);
+template<typename T>
+void ReflectMember(Writer& visitor, char const* name, T& value)
+{
+ visitor.Key(name);
+ Reflect(visitor, value);
}
template<class _Ty1, class _Ty2>
-void Reflect(Writer& visitor, std::pair< optional<_Ty1>, optional<_Ty2> >& value)
+void Reflect(Writer& visitor, std::pair<optional<_Ty1>, optional<_Ty2>>& value)
{
- if (value.first)
- {
- Reflect(visitor, value.first);
- }
- else
- {
- Reflect(visitor, value.second);
- }
+ if (value.first)
+ {
+ Reflect(visitor, value.first);
+ }
+ else
+ {
+ Reflect(visitor, value.second);
+ }
}
template<class _Ty2>
-void Reflect(Reader& visitor, std::pair< optional<bool>, optional<_Ty2> >& value)
+void Reflect(Reader& visitor, std::pair<optional<bool>, optional<_Ty2>>& value)
{
- if(visitor.IsBool())
- {
- Reflect(visitor, value.first);
- return;
- }
+ if (visitor.IsBool())
+ {
+ Reflect(visitor, value.first);
+ return;
+ }
- Reflect(visitor, value.second);
+ Reflect(visitor, value.second);
}
template<class _Ty2>
-void Reflect(Reader& visitor, std::pair< optional<std::string>, optional<_Ty2> >& value)
+void Reflect(Reader& visitor, std::pair<optional<std::string>, optional<_Ty2>>& value)
{
- if (visitor.IsString())
- {
- Reflect(visitor, value.first);
- return;
- }
+ if (visitor.IsString())
+ {
+ Reflect(visitor, value.first);
+ return;
+ }
- Reflect(visitor, value.second);
+ Reflect(visitor, value.second);
}
-
template<class _Ty1, class _Ty2>
-void Reflect(Reader& visitor, std::pair< optional<_Ty1>, optional<_Ty2> >& value)
+void Reflect(Reader& visitor, std::pair<optional<_Ty1>, optional<_Ty2>>& value)
{
- try
- {
- Reflect(visitor, value.second);
- }
- catch (...)
- {
- Reflect(visitor, value.first);
- }
+ try
+ {
+ Reflect(visitor, value.second);
+ }
+ catch (...)
+ {
+ Reflect(visitor, value.first);
+ }
}
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/stream.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/stream.h
index 3dd3def993..e702ea8547 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/stream.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/stream.h
@@ -3,194 +3,192 @@
#include <string>
namespace lsp
{
- class stream
- {
- public:
- virtual ~stream() = default;
- virtual bool fail() = 0;
- virtual bool bad() = 0;
- virtual bool eof() = 0;
- virtual bool good() = 0;
- virtual void clear() = 0;
- virtual std::string what() = 0;
- virtual bool need_to_clear_the_state()
- {
- return false;
- }
-
- bool operator!()
- {
- return bad();
- }
- };
- class istream : public stream
- {
- public:
- virtual int get() = 0;
- virtual ~istream() = default;
- virtual istream& read(char* str, std::streamsize count) = 0;
- };
- template <class T >
- class base_istream : public istream
- {
- public:
- explicit base_istream(T& _t) :_impl(_t)
- {
-
- }
-
- int get() override
- {
- return _impl.get();
- }
- bool fail() override
- {
- return _impl.fail();
- }
- bool bad() override
- {
- return _impl.bad();
- }
- bool eof() override
- {
- return _impl.eof();
- }
- bool good() override
- {
- return _impl.good();
- }
- istream& read(char* str, std::streamsize count) override
- {
- _impl.read(str, count);
- return *this;
- }
-
- void clear() override
- {
- _impl.clear();
- }
- T& _impl;
- };
- class ostream : public stream
- {
- public:
- virtual ~ostream() = default;
-
- virtual ostream& write(const std::string&) = 0;
- virtual ostream& write(std::streamsize) = 0;
- virtual ostream& flush() = 0;
-
- };
- template <class T >
- class base_ostream : public ostream
- {
- public:
- explicit base_ostream(T& _t) :_impl(_t)
- {
-
- }
-
- bool fail() override
- {
- return _impl.fail();
- }
- bool good() override
- {
- return _impl.good();
- }
- bool bad() override
- {
- return _impl.bad();
- }
- bool eof() override
- {
- return _impl.eof();
- }
-
- ostream& write(const std::string& c) override
- {
- _impl << c;
- return *this;
- }
-
- ostream& write(std::streamsize _s) override
- {
-
- _impl << std::to_string(_s);
- return *this;
- }
-
- ostream& flush() override
- {
- _impl.flush();
- return *this;
- }
-
- void clear() override
- {
- _impl.clear();
- }
- protected:
- T& _impl;
- };
-
- template <class T >
- class base_iostream : public istream, public ostream
- {
- public:
- explicit base_iostream(T& _t) :_impl(_t)
- {
-
- }
-
- int get() override
- {
- return _impl.get();
- }
- bool fail() override
- {
- return _impl.fail();
- }
- bool bad() override
- {
- return _impl.bad();
- }
- bool eof() override
- {
- return _impl.eof();
- }
- bool good() override
- {
- return _impl.good();
- }
- istream& read(char* str, std::streamsize count) override
- {
- _impl.read(str, count);
- return *this;
- }
- ostream& write(const std::string& c) override
- {
- _impl << c;
- return *this;
- }
-
- ostream& write(std::streamsize _s) override
- {
- _impl << std::to_string(_s);
- return *this;
- }
-
- ostream& flush() override
- {
- _impl.flush();
- return *this;
- }
-
- void clear() override
- {
- _impl.clear();
- }
- protected:
- T& _impl;
- };
-}
+class stream
+{
+public:
+ virtual ~stream() = default;
+ virtual bool fail() = 0;
+ virtual bool bad() = 0;
+ virtual bool eof() = 0;
+ virtual bool good() = 0;
+ virtual void clear() = 0;
+ virtual std::string what() = 0;
+ virtual bool need_to_clear_the_state()
+ {
+ return false;
+ }
+
+ bool operator!()
+ {
+ return bad();
+ }
+};
+class istream : public stream
+{
+public:
+ virtual int get() = 0;
+ virtual ~istream() = default;
+ virtual istream& read(char* str, std::streamsize count) = 0;
+};
+template<class T>
+class base_istream : public istream
+{
+public:
+ explicit base_istream(T& _t) : _impl(_t)
+ {
+ }
+
+ int get() override
+ {
+ return _impl.get();
+ }
+ bool fail() override
+ {
+ return _impl.fail();
+ }
+ bool bad() override
+ {
+ return _impl.bad();
+ }
+ bool eof() override
+ {
+ return _impl.eof();
+ }
+ bool good() override
+ {
+ return _impl.good();
+ }
+ istream& read(char* str, std::streamsize count) override
+ {
+ _impl.read(str, count);
+ return *this;
+ }
+
+ void clear() override
+ {
+ _impl.clear();
+ }
+ T& _impl;
+};
+class ostream : public stream
+{
+public:
+ virtual ~ostream() = default;
+
+ virtual ostream& write(std::string const&) = 0;
+ virtual ostream& write(std::streamsize) = 0;
+ virtual ostream& flush() = 0;
+};
+template<class T>
+class base_ostream : public ostream
+{
+public:
+ explicit base_ostream(T& _t) : _impl(_t)
+ {
+ }
+
+ bool fail() override
+ {
+ return _impl.fail();
+ }
+ bool good() override
+ {
+ return _impl.good();
+ }
+ bool bad() override
+ {
+ return _impl.bad();
+ }
+ bool eof() override
+ {
+ return _impl.eof();
+ }
+
+ ostream& write(std::string const& c) override
+ {
+ _impl << c;
+ return *this;
+ }
+
+ ostream& write(std::streamsize _s) override
+ {
+
+ _impl << std::to_string(_s);
+ return *this;
+ }
+
+ ostream& flush() override
+ {
+ _impl.flush();
+ return *this;
+ }
+
+ void clear() override
+ {
+ _impl.clear();
+ }
+
+protected:
+ T& _impl;
+};
+
+template<class T>
+class base_iostream : public istream, public ostream
+{
+public:
+ explicit base_iostream(T& _t) : _impl(_t)
+ {
+ }
+
+ int get() override
+ {
+ return _impl.get();
+ }
+ bool fail() override
+ {
+ return _impl.fail();
+ }
+ bool bad() override
+ {
+ return _impl.bad();
+ }
+ bool eof() override
+ {
+ return _impl.eof();
+ }
+ bool good() override
+ {
+ return _impl.good();
+ }
+ istream& read(char* str, std::streamsize count) override
+ {
+ _impl.read(str, count);
+ return *this;
+ }
+ ostream& write(std::string const& c) override
+ {
+ _impl << c;
+ return *this;
+ }
+
+ ostream& write(std::streamsize _s) override
+ {
+ _impl << std::to_string(_s);
+ return *this;
+ }
+
+ ostream& flush() override
+ {
+ _impl.flush();
+ return *this;
+ }
+
+ void clear() override
+ {
+ _impl.clear();
+ }
+
+protected:
+ T& _impl;
+};
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/threaded_queue.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/threaded_queue.h
index e8fc6d13ea..9680058370 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/threaded_queue.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/threaded_queue.h
@@ -15,236 +15,307 @@
struct MultiQueueWaiter;
-struct BaseThreadQueue {
- virtual ~BaseThreadQueue() = default;
+struct BaseThreadQueue
+{
+ virtual ~BaseThreadQueue() = default;
- virtual bool IsEmpty() = 0;
+ virtual bool IsEmpty() = 0;
- std::shared_ptr<MultiQueueWaiter> waiter;
+ std::shared_ptr<MultiQueueWaiter> waiter;
};
// std::lock accepts two or more arguments. We define an overload for one
// argument.
-namespace std {
-template <typename Lockable>
-void lock(Lockable& l) {
- l.lock();
+namespace std
+{
+template<typename Lockable>
+void lock(Lockable& l)
+{
+ l.lock();
}
-} // namespace std
-
-template <typename... Queue>
-struct MultiQueueLock {
- MultiQueueLock(Queue... lockable) : tuple_{lockable...} { lock(); }
- ~MultiQueueLock() { unlock(); }
- void lock() { lock_impl(typename std::index_sequence_for<Queue...>{}); }
- void unlock() { unlock_impl(typename std::index_sequence_for<Queue...>{}); }
-
- private:
- template <size_t... Is>
- void lock_impl(std::index_sequence<Is...>) {
- std::lock(std::get<Is>(tuple_)->mutex...);
- }
-
- template <size_t... Is>
- void unlock_impl(std::index_sequence<Is...>) {
- (void)std::initializer_list<int>{
- (std::get<Is>(tuple_)->mutex.unlock(), 0)...};
- }
-
- std::tuple<Queue...> tuple_;
+} // namespace std
+
+template<typename... Queue>
+struct MultiQueueLock
+{
+ MultiQueueLock(Queue... lockable) : tuple_ {lockable...}
+ {
+ lock();
+ }
+ ~MultiQueueLock()
+ {
+ unlock();
+ }
+ void lock()
+ {
+ lock_impl(typename std::index_sequence_for<Queue...> {});
+ }
+ void unlock()
+ {
+ unlock_impl(typename std::index_sequence_for<Queue...> {});
+ }
+
+private:
+ template<size_t... Is>
+ void lock_impl(std::index_sequence<Is...>)
+ {
+ std::lock(std::get<Is>(tuple_)->mutex...);
+ }
+
+ template<size_t... Is>
+ void unlock_impl(std::index_sequence<Is...>)
+ {
+ (void)std::initializer_list<int> {(std::get<Is>(tuple_)->mutex.unlock(), 0)...};
+ }
+
+ std::tuple<Queue...> tuple_;
};
-struct MultiQueueWaiter {
- static bool HasState(std::initializer_list<BaseThreadQueue*> queues);
-
- bool ValidateWaiter(std::initializer_list<BaseThreadQueue*> queues);
-
- template <typename... BaseThreadQueue>
- bool Wait(std::atomic<bool>& quit, BaseThreadQueue... queues) {
- MultiQueueLock<BaseThreadQueue...> l(queues...);
- while (!quit.load(std::memory_order_relaxed)) {
- if (HasState({ queues... }))
- return false;
- cv.wait(l);
- }
- return true;
- }
- template <typename... BaseThreadQueue>
- void WaitUntil(std::chrono::steady_clock::time_point t,
- BaseThreadQueue... queues) {
- MultiQueueLock<BaseThreadQueue...> l(queues...);
- if (!HasState({ queues... }))
- cv.wait_until(l, t);
- }
- template <typename... BaseThreadQueue>
- void Wait(BaseThreadQueue... queues) {
- assert(ValidateWaiter({queues...}));
-
- MultiQueueLock<BaseThreadQueue...> l(queues...);
- while (!HasState({queues...}))
- cv.wait(l);
- }
-
- std::condition_variable_any cv;
+struct MultiQueueWaiter
+{
+ static bool HasState(std::initializer_list<BaseThreadQueue*> queues);
+
+ bool ValidateWaiter(std::initializer_list<BaseThreadQueue*> queues);
+
+ template<typename... BaseThreadQueue>
+ bool Wait(std::atomic<bool>& quit, BaseThreadQueue... queues)
+ {
+ MultiQueueLock<BaseThreadQueue...> l(queues...);
+ while (!quit.load(std::memory_order_relaxed))
+ {
+ if (HasState({queues...}))
+ {
+ return false;
+ }
+ cv.wait(l);
+ }
+ return true;
+ }
+ template<typename... BaseThreadQueue>
+ void WaitUntil(std::chrono::steady_clock::time_point t, BaseThreadQueue... queues)
+ {
+ MultiQueueLock<BaseThreadQueue...> l(queues...);
+ if (!HasState({queues...}))
+ {
+ cv.wait_until(l, t);
+ }
+ }
+ template<typename... BaseThreadQueue>
+ void Wait(BaseThreadQueue... queues)
+ {
+ assert(ValidateWaiter({queues...}));
+
+ MultiQueueLock<BaseThreadQueue...> l(queues...);
+ while (!HasState({queues...}))
+ {
+ cv.wait(l);
+ }
+ }
+
+ std::condition_variable_any cv;
};
// A threadsafe-queue. http://stackoverflow.com/a/16075550
-template <class T>
-struct ThreadedQueue : public BaseThreadQueue {
- public:
- ThreadedQueue() : ThreadedQueue(std::make_shared<MultiQueueWaiter>()) {}
+template<class T>
+struct ThreadedQueue : public BaseThreadQueue
+{
+public:
+ ThreadedQueue() : ThreadedQueue(std::make_shared<MultiQueueWaiter>())
+ {
+ }
- explicit ThreadedQueue(std::shared_ptr<MultiQueueWaiter> waiter)
- : total_count_(0) {
- this->waiter = waiter;
- }
+ explicit ThreadedQueue(std::shared_ptr<MultiQueueWaiter> waiter) : total_count_(0)
+ {
+ this->waiter = waiter;
+ }
- // Returns the number of elements in the queue. This is lock-free.
- size_t Size() const { return total_count_; }
+ // Returns the number of elements in the queue. This is lock-free.
+ size_t Size() const
+ {
+ return total_count_;
+ }
- // Add an element to the queue.
- void Enqueue(T&& t, bool priority) {
+ // Add an element to the queue.
+ void Enqueue(T&& t, bool priority)
{
- std::lock_guard<std::mutex> lock(mutex);
- if (priority)
- priority_.push_back(std::move(t));
- else
- queue_.push_back(std::move(t));
- ++total_count_;
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+ if (priority)
+ {
+ priority_.push_back(std::move(t));
+ }
+ else
+ {
+ queue_.push_back(std::move(t));
+ }
+ ++total_count_;
+ }
+ waiter->cv.notify_one();
}
- waiter->cv.notify_one();
- }
- // Add a set of elements to the queue.
- void EnqueueAll(std::vector<T>&& elements, bool priority) {
- if (elements.empty())
- return;
+ // Add a set of elements to the queue.
+ void EnqueueAll(std::vector<T>&& elements, bool priority)
+ {
+ if (elements.empty())
+ {
+ return;
+ }
+
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+ total_count_ += elements.size();
+ for (T& element : elements)
+ {
+ if (priority)
+ {
+ priority_.push_back(std::move(element));
+ }
+ else
+ {
+ queue_.push_back(std::move(element));
+ }
+ }
+ elements.clear();
+ }
+
+ waiter->cv.notify_all();
+ }
+
+ // Returns true if the queue is empty. This is lock-free.
+ bool IsEmpty()
+ {
+ return total_count_ == 0;
+ }
+ // Get the first element from the queue. Blocks until one is available.
+ T Dequeue()
{
- std::lock_guard<std::mutex> lock(mutex);
- total_count_ += elements.size();
- for (T& element : elements) {
+ std::unique_lock<std::mutex> lock(mutex);
+ waiter->cv.wait(lock, [&]() { return !priority_.empty() || !queue_.empty(); });
+
+ auto execute = [&](std::deque<T>* q)
+ {
+ auto val = std::move(q->front());
+ q->pop_front();
+ --total_count_;
+ return std::move(val);
+ };
+ if (!priority_.empty())
+ {
+ return execute(&priority_);
+ }
+ return execute(&queue_);
+ }
+
+ // Get the first element from the queue without blocking. Returns a null
+ // value if the queue is empty.
+ optional<T> TryDequeue(bool priority)
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+
+ auto pop = [&](std::deque<T>* q)
+ {
+ auto val = std::move(q->front());
+ q->pop_front();
+ --total_count_;
+ return std::move(val);
+ };
+
+ auto get_result = [&](std::deque<T>* first, std::deque<T>* second) -> optional<T>
+ {
+ if (!first->empty())
+ {
+ return pop(first);
+ }
+ if (!second->empty())
+ {
+ return pop(second);
+ }
+ return {};
+ };
+
if (priority)
- priority_.push_back(std::move(element));
- else
- queue_.push_back(std::move(element));
- }
- elements.clear();
- }
-
- waiter->cv.notify_all();
- }
-
- // Returns true if the queue is empty. This is lock-free.
- bool IsEmpty() { return total_count_ == 0; }
-
- // Get the first element from the queue. Blocks until one is available.
- T Dequeue() {
- std::unique_lock<std::mutex> lock(mutex);
- waiter->cv.wait(lock,
- [&]() { return !priority_.empty() || !queue_.empty(); });
-
- auto execute = [&](std::deque<T>* q) {
- auto val = std::move(q->front());
- q->pop_front();
- --total_count_;
- return std::move(val);
- };
- if (!priority_.empty())
- return execute(&priority_);
- return execute(&queue_);
- }
-
- // Get the first element from the queue without blocking. Returns a null
- // value if the queue is empty.
- optional<T> TryDequeue(bool priority) {
- std::lock_guard<std::mutex> lock(mutex);
-
- auto pop = [&](std::deque<T>* q) {
- auto val = std::move(q->front());
- q->pop_front();
- --total_count_;
- return std::move(val);
- };
-
- auto get_result = [&](std::deque<T>* first,
- std::deque<T>* second) -> optional<T> {
- if (!first->empty())
- return pop(first);
- if (!second->empty())
- return pop(second);
- return {};
- };
-
- if (priority)
- return get_result(&priority_, &queue_);
- return get_result(&queue_, &priority_);
- }
- // Return all elements in the queue.
- std::vector<T> DequeueAll() {
- std::lock_guard<std::mutex> lock(mutex);
-
- total_count_ = 0;
-
- std::vector<T> result;
- result.reserve(priority_.size() + queue_.size());
- while (!priority_.empty()) {
- result.emplace_back(std::move(priority_.front()));
- priority_.pop_front();
- }
- while (!queue_.empty()) {
- result.emplace_back(std::move(queue_.front()));
- queue_.pop_front();
- }
-
- return result;
- }
- std::vector<T> TryDequeueSome(size_t num) {
- std::lock_guard<std::mutex> lock(mutex);
-
- std::vector<T> result;
- num = std::min(num, priority_.size() + queue_.size());
- total_count_ -= num;
- result.reserve(num);
- while (num)
- {
- if(!priority_.empty()) {
- result.emplace_back(std::move(priority_.front()));
- priority_.pop_front();
- }
- else
- {
- break;
- }
- num -= 1;
- }
- while (num)
- {
- if (!queue_.empty()) {
- result.emplace_back(std::move(queue_.front()));
- queue_.pop_front();
- }
- else
- {
- break;
- }
- num -= 1;
- }
- return result;
- }
- template <typename Fn>
- void Iterate(Fn fn) {
- std::lock_guard<std::mutex> lock(mutex);
- for (auto& entry : priority_)
- fn(entry);
- for (auto& entry : queue_)
- fn(entry);
- }
-
- mutable std::mutex mutex;
-
- private:
- std::atomic<int> total_count_;
- std::deque<T> priority_;
- std::deque<T> queue_;
+ {
+ return get_result(&priority_, &queue_);
+ }
+ return get_result(&queue_, &priority_);
+ }
+ // Return all elements in the queue.
+ std::vector<T> DequeueAll()
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+
+ total_count_ = 0;
+
+ std::vector<T> result;
+ result.reserve(priority_.size() + queue_.size());
+ while (!priority_.empty())
+ {
+ result.emplace_back(std::move(priority_.front()));
+ priority_.pop_front();
+ }
+ while (!queue_.empty())
+ {
+ result.emplace_back(std::move(queue_.front()));
+ queue_.pop_front();
+ }
+
+ return result;
+ }
+ std::vector<T> TryDequeueSome(size_t num)
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+
+ std::vector<T> result;
+ num = std::min(num, priority_.size() + queue_.size());
+ total_count_ -= num;
+ result.reserve(num);
+ while (num)
+ {
+ if (!priority_.empty())
+ {
+ result.emplace_back(std::move(priority_.front()));
+ priority_.pop_front();
+ }
+ else
+ {
+ break;
+ }
+ num -= 1;
+ }
+ while (num)
+ {
+ if (!queue_.empty())
+ {
+ result.emplace_back(std::move(queue_.front()));
+ queue_.pop_front();
+ }
+ else
+ {
+ break;
+ }
+ num -= 1;
+ }
+ return result;
+ }
+ template<typename Fn>
+ void Iterate(Fn fn)
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+ for (auto& entry : priority_)
+ {
+ fn(entry);
+ }
+ for (auto& entry : queue_)
+ {
+ fn(entry);
+ }
+ }
+
+ mutable std::mutex mutex;
+
+private:
+ std::atomic<int> total_count_;
+ std::deque<T> priority_;
+ std::deque<T> queue_;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/traits.h b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/traits.h
index ce8905a840..32249af8c9 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/traits.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/traits.h
@@ -14,145 +14,145 @@
#pragma once
-
#include <tuple>
#include <type_traits>
-namespace lsp {
-namespace traits {
-
-// NthTypeOf returns the `N`th type in `Types`
-template <int N, typename... Types>
-using NthTypeOf = typename std::tuple_element<N, std::tuple<Types...>>::type;
-
-// `IsTypeOrDerived<BASE, T>::value` is true iff `T` is of type `BASE`, or
-// derives from `BASE`.
-template <typename BASE, typename T>
-using IsTypeOrDerived = std::integral_constant<
- bool,
- std::is_base_of<BASE, typename std::decay<T>::type>::value ||
- std::is_same<BASE, typename std::decay<T>::type>::value>;
-
-// `EachIsTypeOrDerived<N, BASES, TYPES>::value` is true iff all of the types in
-// the std::tuple `TYPES` is of, or derives from the corresponding indexed type
-// in the std::tuple `BASES`.
-// `N` must be equal to the number of types in both the std::tuple `BASES` and
-// `TYPES`.
-template <int N, typename BASES, typename TYPES>
-struct EachIsTypeOrDerived {
- using base = typename std::tuple_element<N - 1, BASES>::type;
- using type = typename std::tuple_element<N - 1, TYPES>::type;
- using last_matches = IsTypeOrDerived<base, type>;
- using others_match = EachIsTypeOrDerived<N - 1, BASES, TYPES>;
- static constexpr bool value = last_matches::value && others_match::value;
-};
-
-// EachIsTypeOrDerived specialization for N = 1
-template <typename BASES, typename TYPES>
-struct EachIsTypeOrDerived<1, BASES, TYPES> {
- using base = typename std::tuple_element<0, BASES>::type;
- using type = typename std::tuple_element<0, TYPES>::type;
- static constexpr bool value = IsTypeOrDerived<base, type>::value;
-};
-
-// EachIsTypeOrDerived specialization for N = 0
-template <typename BASES, typename TYPES>
-struct EachIsTypeOrDerived<0, BASES, TYPES> {
- static constexpr bool value = true;
-};
-
-// Signature describes the signature of a function.
-template <typename RETURN, typename... PARAMETERS>
-struct Signature {
- // The return type of the function signature
- using ret = RETURN;
- // The parameters of the function signature held in a std::tuple
- using parameters = std::tuple<PARAMETERS...>;
- // The type of the Nth parameter of function signature
- template <std::size_t N>
- using parameter = NthTypeOf<N, PARAMETERS...>;
- // The total number of parameters
- static constexpr std::size_t parameter_count = sizeof...(PARAMETERS);
-};
-
-// SignatureOf is a traits helper that infers the signature of the function,
-// method, static method, lambda, or function-like object `F`.
-template <typename F>
-struct SignatureOf {
- // The signature of the function-like object `F`
- using type = typename SignatureOf<decltype(&F::operator())>::type;
-};
-
-// SignatureOf specialization for a regular function or static method.
-template <typename R, typename... ARGS>
-struct SignatureOf<R (*)(ARGS...)> {
- // The signature of the function-like object `F`
- using type = Signature<typename std::decay<R>::type,
- typename std::decay<ARGS>::type...>;
-};
-
-// SignatureOf specialization for a non-static method.
-template <typename R, typename C, typename... ARGS>
-struct SignatureOf<R (C::*)(ARGS...)> {
- // The signature of the function-like object `F`
- using type = Signature<typename std::decay<R>::type,
- typename std::decay<ARGS>::type...>;
-};
-
-// SignatureOf specialization for a non-static, const method.
-template <typename R, typename C, typename... ARGS>
-struct SignatureOf<R (C::*)(ARGS...) const> {
- // The signature of the function-like object `F`
- using type = Signature<typename std::decay<R>::type,
- typename std::decay<ARGS>::type...>;
-};
-
-// SignatureOfT is an alias to `typename SignatureOf<F>::type`.
-template <typename F>
-using SignatureOfT = typename SignatureOf<F>::type;
-
-// ParameterType is an alias to `typename SignatureOf<F>::type::parameter<N>`.
-template <typename F, std::size_t N>
-using ParameterType = typename SignatureOfT<F>::template parameter<N>;
-
-// `HasSignature<F, S>::value` is true iff the function-like `F` has a matching
-// signature to the function-like `S`.
-template <typename F, typename S>
-using HasSignature = std::integral_constant<
- bool,
- std::is_same<SignatureOfT<F>, SignatureOfT<S>>::value>;
-
-// `Min<A, B>::value` resolves to the smaller value of A and B.
-template <std::size_t A, std::size_t B>
-using Min = std::integral_constant<std::size_t, (A < B ? A : B)>;
-
-// `CompatibleWith<F, S>::value` is true iff the function-like `F`
-// can be called with the argument types of the function-like `S`. Return type
-// of the two functions are not considered.
-template <typename F, typename S>
-using CompatibleWith = std::integral_constant<
- bool,
- (SignatureOfT<S>::parameter_count == SignatureOfT<F>::parameter_count) &&
- EachIsTypeOrDerived<Min<SignatureOfT<S>::parameter_count,
- SignatureOfT<F>::parameter_count>::value,
- typename SignatureOfT<S>::parameters,
- typename SignatureOfT<F>::parameters>::value>;
-
-// If `CONDITION` is true then EnableIf resolves to type T, otherwise an
-// invalid type.
-template <bool CONDITION, typename T = void>
-using EnableIf = typename std::enable_if<CONDITION, T>::type;
-
-// If `BASE` is a base of `T` then EnableIfIsType resolves to type `TRUE`,
-// otherwise an invalid type.
-template <typename BASE, typename T, typename TRUE_ = void>
-using EnableIfIsType = EnableIf<IsTypeOrDerived<BASE, T>::value, TRUE_>;
-
-// If the function-like `F` has a matching signature to the function-like `S`
-// then EnableIfHasSignature resolves to type `TRUE`, otherwise an invalid type.
-template <typename F, typename S, typename TRUE_ = void>
-using EnableIfHasSignature = EnableIf<HasSignature<F, S>::value, TRUE_>;
-
-} // namespace traits
-} // namespace lsp
-
+namespace lsp
+{
+namespace traits
+{
+
+ // NthTypeOf returns the `N`th type in `Types`
+ template<int N, typename... Types>
+ using NthTypeOf = typename std::tuple_element<N, std::tuple<Types...>>::type;
+
+ // `IsTypeOrDerived<BASE, T>::value` is true iff `T` is of type `BASE`, or
+ // derives from `BASE`.
+ template<typename BASE, typename T>
+ using IsTypeOrDerived = std::integral_constant<
+ bool, std::is_base_of<BASE, typename std::decay<T>::type>::value
+ || std::is_same<BASE, typename std::decay<T>::type>::value>;
+
+ // `EachIsTypeOrDerived<N, BASES, TYPES>::value` is true iff all of the types in
+ // the std::tuple `TYPES` is of, or derives from the corresponding indexed type
+ // in the std::tuple `BASES`.
+ // `N` must be equal to the number of types in both the std::tuple `BASES` and
+ // `TYPES`.
+ template<int N, typename BASES, typename TYPES>
+ struct EachIsTypeOrDerived
+ {
+ using base = typename std::tuple_element<N - 1, BASES>::type;
+ using type = typename std::tuple_element<N - 1, TYPES>::type;
+ using last_matches = IsTypeOrDerived<base, type>;
+ using others_match = EachIsTypeOrDerived<N - 1, BASES, TYPES>;
+ static constexpr bool value = last_matches::value && others_match::value;
+ };
+
+ // EachIsTypeOrDerived specialization for N = 1
+ template<typename BASES, typename TYPES>
+ struct EachIsTypeOrDerived<1, BASES, TYPES>
+ {
+ using base = typename std::tuple_element<0, BASES>::type;
+ using type = typename std::tuple_element<0, TYPES>::type;
+ static constexpr bool value = IsTypeOrDerived<base, type>::value;
+ };
+
+ // EachIsTypeOrDerived specialization for N = 0
+ template<typename BASES, typename TYPES>
+ struct EachIsTypeOrDerived<0, BASES, TYPES>
+ {
+ static constexpr bool value = true;
+ };
+
+ // Signature describes the signature of a function.
+ template<typename RETURN, typename... PARAMETERS>
+ struct Signature
+ {
+ // The return type of the function signature
+ using ret = RETURN;
+ // The parameters of the function signature held in a std::tuple
+ using parameters = std::tuple<PARAMETERS...>;
+ // The type of the Nth parameter of function signature
+ template<std::size_t N>
+ using parameter = NthTypeOf<N, PARAMETERS...>;
+ // The total number of parameters
+ static constexpr std::size_t parameter_count = sizeof...(PARAMETERS);
+ };
+
+ // SignatureOf is a traits helper that infers the signature of the function,
+ // method, static method, lambda, or function-like object `F`.
+ template<typename F>
+ struct SignatureOf
+ {
+ // The signature of the function-like object `F`
+ using type = typename SignatureOf<decltype(&F::operator())>::type;
+ };
+
+ // SignatureOf specialization for a regular function or static method.
+ template<typename R, typename... ARGS>
+ struct SignatureOf<R (*)(ARGS...)>
+ {
+ // The signature of the function-like object `F`
+ using type = Signature<typename std::decay<R>::type, typename std::decay<ARGS>::type...>;
+ };
+
+ // SignatureOf specialization for a non-static method.
+ template<typename R, typename C, typename... ARGS>
+ struct SignatureOf<R (C::*)(ARGS...)>
+ {
+ // The signature of the function-like object `F`
+ using type = Signature<typename std::decay<R>::type, typename std::decay<ARGS>::type...>;
+ };
+
+ // SignatureOf specialization for a non-static, const method.
+ template<typename R, typename C, typename... ARGS>
+ struct SignatureOf<R (C::*)(ARGS...) const>
+ {
+ // The signature of the function-like object `F`
+ using type = Signature<typename std::decay<R>::type, typename std::decay<ARGS>::type...>;
+ };
+
+ // SignatureOfT is an alias to `typename SignatureOf<F>::type`.
+ template<typename F>
+ using SignatureOfT = typename SignatureOf<F>::type;
+
+ // ParameterType is an alias to `typename SignatureOf<F>::type::parameter<N>`.
+ template<typename F, std::size_t N>
+ using ParameterType = typename SignatureOfT<F>::template parameter<N>;
+
+ // `HasSignature<F, S>::value` is true iff the function-like `F` has a matching
+ // signature to the function-like `S`.
+ template<typename F, typename S>
+ using HasSignature = std::integral_constant<bool, std::is_same<SignatureOfT<F>, SignatureOfT<S>>::value>;
+
+ // `Min<A, B>::value` resolves to the smaller value of A and B.
+ template<std::size_t A, std::size_t B>
+ using Min = std::integral_constant<std::size_t, (A < B ? A : B)>;
+
+ // `CompatibleWith<F, S>::value` is true iff the function-like `F`
+ // can be called with the argument types of the function-like `S`. Return type
+ // of the two functions are not considered.
+ template<typename F, typename S>
+ using CompatibleWith = std::integral_constant<
+ bool, (SignatureOfT<S>::parameter_count == SignatureOfT<F>::parameter_count)
+ && EachIsTypeOrDerived<
+ Min<SignatureOfT<S>::parameter_count, SignatureOfT<F>::parameter_count>::value,
+ typename SignatureOfT<S>::parameters, typename SignatureOfT<F>::parameters>::value>;
+
+ // If `CONDITION` is true then EnableIf resolves to type T, otherwise an
+ // invalid type.
+ template<bool CONDITION, typename T = void>
+ using EnableIf = typename std::enable_if<CONDITION, T>::type;
+
+ // If `BASE` is a base of `T` then EnableIfIsType resolves to type `TRUE`,
+ // otherwise an invalid type.
+ template<typename BASE, typename T, typename TRUE_ = void>
+ using EnableIfIsType = EnableIf<IsTypeOrDerived<BASE, T>::value, TRUE_>;
+
+ // If the function-like `F` has a matching signature to the function-like `S`
+ // then EnableIfHasSignature resolves to type `TRUE`, otherwise an invalid type.
+ template<typename F, typename S, typename TRUE_ = void>
+ using EnableIfHasSignature = EnableIf<HasSignature<F, S>::value, TRUE_>;
+
+} // namespace traits
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/AbsolutePath.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/AbsolutePath.h
index 4f9aae0851..e4a2842386 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/AbsolutePath.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/AbsolutePath.h
@@ -3,25 +3,24 @@
#include <LibLsp/JsonRpc/serializer.h>
#include <string>
-struct AbsolutePath {
- static AbsolutePath BuildDoNotUse(const std::string& path);
-
- // Try not to use this.
- AbsolutePath();
-
- // Provide implicit conversions to std::string for the time being.
- AbsolutePath(const std::string& path, bool validate = true);
- operator std::string() const;
-
- bool operator==(const AbsolutePath& rhs) const;
- bool operator!=(const AbsolutePath& rhs) const;
- bool operator<(const AbsolutePath& rhs) const;
- bool operator>(const AbsolutePath& rhs) const;
- std::string path;
- bool qualify = true;
+struct AbsolutePath
+{
+ static AbsolutePath BuildDoNotUse(std::string const& path);
+
+ // Try not to use this.
+ AbsolutePath();
+
+ // Provide implicit conversions to std::string for the time being.
+ AbsolutePath(std::string const& path, bool validate = true);
+ operator std::string() const;
+
+ bool operator==(AbsolutePath const& rhs) const;
+ bool operator!=(AbsolutePath const& rhs) const;
+ bool operator<(AbsolutePath const& rhs) const;
+ bool operator>(AbsolutePath const& rhs) const;
+ std::string path;
+ bool qualify = true;
};
-
void Reflect(Reader& visitor, AbsolutePath& value);
void Reflect(Writer& visitor, AbsolutePath& value);
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ClientPreferences.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ClientPreferences.h
index c8920e4492..4785c39173 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ClientPreferences.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ClientPreferences.h
@@ -8,303 +8,373 @@
class ClientPreferences
{
public:
+ std::shared_ptr<lsWorkspaceClientCapabilites> workspace;
+ lsTextDocumentClientCapabilities textDocument;
- std::shared_ptr<lsWorkspaceClientCapabilites> workspace;
- lsTextDocumentClientCapabilities textDocument ;
-
- ClientPreferences(const lsClientCapabilities& capabilities)
+ ClientPreferences(lsClientCapabilities const& capabilities)
+ {
+ v3supported = capabilities.textDocument.has_value();
+ if (v3supported)
{
- v3supported = capabilities.textDocument.has_value();
- if (v3supported)
- textDocument = capabilities.textDocument.value();
- if(capabilities.workspace)
- {
- workspace = std::make_shared<lsWorkspaceClientCapabilites>(capabilities.workspace.value());
- }
- }
-
- bool v3supported=false;
-
- bool isSignatureHelpSupported() {
-
- return v3supported && (textDocument.signatureHelp);
+ textDocument = capabilities.textDocument.value();
}
- bool isWorkspaceDidChangeConfigurationSupported() const
+ if (capabilities.workspace)
{
- return workspace && isDynamicRegistrationSupported(workspace->didChangeConfiguration);
+ workspace = std::make_shared<lsWorkspaceClientCapabilites>(capabilities.workspace.value());
+ }
+ }
+
+ bool v3supported = false;
+
+ bool isSignatureHelpSupported()
+ {
+
+ return v3supported && (textDocument.signatureHelp);
+ }
+ bool isWorkspaceDidChangeConfigurationSupported() const
+ {
+ return workspace && isDynamicRegistrationSupported(workspace->didChangeConfiguration);
+ }
+ bool isWorkspaceFoldersSupported()
+ {
+ return workspace != nullptr && isTrue(workspace->workspaceFolders);
+ }
+
+ bool isCompletionDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.completion);
+ }
+
+ bool isCompletionSnippetsSupported()
+ {
+ //@formatter:off
+ if (!v3supported || !textDocument.completion)
+ {
+ return false;
}
- bool isWorkspaceFoldersSupported() {
- return workspace != nullptr && isTrue(workspace->workspaceFolders);
+ auto const& completion = textDocument.completion.value();
+ if (completion.completionItem)
+ {
+ return isTrue(completion.completionItem.value().snippetSupport);
+ }
+ return false;
+ }
+
+ bool isV3Supported()
+ {
+ return v3supported;
+ }
+
+ bool isFormattingDynamicRegistrationSupported()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.formatting);
+ }
+
+ bool isRangeFormattingDynamicRegistrationSupported()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.rangeFormatting);
+ }
+
+ bool isOnTypeFormattingDynamicRegistrationSupported()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.onTypeFormatting);
+ }
+
+ bool isCodeLensDynamicRegistrationSupported()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.codeLens);
+ }
+
+ bool isSignatureHelpDynamicRegistrationSupported()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.signatureHelp);
+ }
+ template<typename T>
+ static bool isDynamicRegistrationSupported(optional<T>& capability)
+ {
+ if (capability)
+ {
+ return (capability.value().dynamicRegistration.value());
}
+ return false;
+ }
- bool isCompletionDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.completion);
+ bool isTrue(optional<bool> const& value)
+ {
+ if (value)
+ {
+ return *value;
}
-
- bool isCompletionSnippetsSupported() {
- //@formatter:off
- if(!v3supported || !textDocument.completion)
- {
- return false;
- }
- const auto& completion = textDocument.completion.value();
- if(completion.completionItem)
+ else
+ {
+ return false;
+ }
+ }
+
+ bool isRenameDynamicRegistrationSupported()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.rename);
+ }
+
+ bool isExecuteCommandDynamicRegistrationSupported()
+ {
+ return v3supported && workspace != nullptr && isDynamicRegistrationSupported(workspace->executeCommand);
+ }
+
+ bool isWorkspaceSymbolDynamicRegistered()
+ {
+ return v3supported && workspace != nullptr && isDynamicRegistrationSupported(workspace->symbol);
+ }
+
+ bool isWorkspaceChangeWatchedFilesDynamicRegistered()
+ {
+ return v3supported && workspace != nullptr && isDynamicRegistrationSupported(workspace->didChangeWatchedFiles);
+ }
+
+ bool isDocumentSymbolDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.documentSymbol);
+ }
+
+ bool isCodeActionDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.codeAction);
+ }
+
+ bool isDefinitionDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.definition);
+ }
+
+ bool isTypeDefinitionDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.typeDefinition);
+ }
+
+ bool isHoverDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.hover);
+ }
+
+ bool isReferencesDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.references);
+ }
+
+ bool isDocumentHighlightDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.documentHighlight);
+ }
+
+ bool isDocumentLinkDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.documentLink);
+ }
+
+ bool isFoldgingRangeDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.foldingRange);
+ }
+
+ bool isInlayHintDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.inlayHint);
+ }
+
+ bool isImplementationDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.implementation);
+ }
+
+ bool isSelectionRangeDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.selectionRange);
+ }
+
+ bool isWillSaveRegistered()
+ {
+ return v3supported && isTrue(textDocument.synchronization.willSave);
+ }
+
+ bool isWillSaveWaitUntilRegistered()
+ {
+ return v3supported && isTrue(textDocument.synchronization.willSaveWaitUntil);
+ }
+
+ bool isWorkspaceApplyEditSupported()
+ {
+ return workspace != nullptr && isTrue(workspace->applyEdit);
+ }
+
+ bool isSupportsCompletionDocumentationMarkdown()
+ {
+
+ if (!v3supported || !textDocument.completion)
+ {
+ return false;
+ }
+ auto const& completion = textDocument.completion.value();
+ if (completion.completionItem)
+ {
+ auto& documentationFormat = completion.completionItem.value().documentationFormat;
+ if (documentationFormat)
+ {
+ auto& data = documentationFormat.value();
+ for (auto& it : data)
{
- return isTrue(completion.completionItem.value().snippetSupport);
+ if (it == "markdown")
+ {
+ return true;
+ }
}
- return false;
- }
-
- bool isV3Supported() {
- return v3supported;
- }
-
- bool isFormattingDynamicRegistrationSupported() {
- return v3supported && isDynamicRegistrationSupported(textDocument.formatting);
- }
-
- bool isRangeFormattingDynamicRegistrationSupported() {
- return v3supported && isDynamicRegistrationSupported(textDocument.rangeFormatting);
- }
-
- bool isOnTypeFormattingDynamicRegistrationSupported() {
- return v3supported && isDynamicRegistrationSupported(textDocument.onTypeFormatting);
+ }
}
+ return false;
+ }
- bool isCodeLensDynamicRegistrationSupported() {
- return v3supported && isDynamicRegistrationSupported(textDocument.codeLens);
+ bool isWorkspaceEditResourceChangesSupported()
+ {
+ if (!workspace)
+ {
+ return false;
}
- bool isSignatureHelpDynamicRegistrationSupported() {
- return v3supported && isDynamicRegistrationSupported(textDocument.signatureHelp);
- }
- template<typename T>
- static bool isDynamicRegistrationSupported(optional<T>& capability)
+ if (workspace->workspaceEdit)
{
- if(capability)
- return (capability.value().dynamicRegistration.value());
- return false;
+ return isTrue(workspace->workspaceEdit.value().resourceChanges);
}
-
- bool isTrue(const optional<bool>& value)
+ return false;
+ }
+ static bool contains(std::vector<std::string> const& v, std::string const& target)
+ {
+ for (auto& it : v)
{
- if (value) {
- return *value;
- } else {
- return false;
+ if (it == target)
+ {
+ return true;
}
}
-
- bool isRenameDynamicRegistrationSupported() {
- return v3supported && isDynamicRegistrationSupported(textDocument.rename);
- }
-
- bool isExecuteCommandDynamicRegistrationSupported() {
- return v3supported && workspace != nullptr && isDynamicRegistrationSupported(workspace->executeCommand);
- }
-
- bool isWorkspaceSymbolDynamicRegistered() {
- return v3supported && workspace != nullptr && isDynamicRegistrationSupported(workspace->symbol);
- }
-
- bool isWorkspaceChangeWatchedFilesDynamicRegistered() {
- return v3supported && workspace != nullptr && isDynamicRegistrationSupported(workspace->didChangeWatchedFiles);
- }
-
- bool isDocumentSymbolDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.documentSymbol);
- }
-
- bool isCodeActionDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.codeAction);
- }
-
- bool isDefinitionDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.definition);
- }
-
- bool isTypeDefinitionDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.typeDefinition);
- }
-
- bool isHoverDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.hover);
- }
-
- bool isReferencesDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.references);
- }
-
- bool isDocumentHighlightDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.documentHighlight);
- }
-
- bool isFoldgingRangeDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.foldingRange);
- }
-
- bool isImplementationDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.implementation);
- }
-
- bool isSelectionRangeDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.selectionRange);
- }
-
- bool isWillSaveRegistered() {
- return v3supported && isTrue(textDocument.synchronization.willSave);
- }
-
- bool isWillSaveWaitUntilRegistered() {
- return v3supported && isTrue(textDocument.synchronization.willSaveWaitUntil);
- }
-
- bool isWorkspaceApplyEditSupported() {
- return workspace != nullptr && isTrue(workspace->applyEdit);
- }
-
- bool isSupportsCompletionDocumentationMarkdown() {
-
- if (!v3supported || !textDocument.completion)
- {
- return false;
- }
- const auto& completion = textDocument.completion.value();
- if (completion.completionItem)
- {
- auto& documentationFormat = completion.completionItem.value().documentationFormat;
- if(documentationFormat)
- {
- auto& data = documentationFormat.value();
- for(auto& it : data)
- {
- if(it == "markdown")
- {
- return true;
- }
- }
- }
- }
- return false;
-
- }
-
-
- bool isWorkspaceEditResourceChangesSupported() {
- if(!workspace) return false;
-
- if(workspace->workspaceEdit)
- {
- return isTrue(workspace->workspaceEdit.value().resourceChanges);
- }
- return false;
+ return false;
+ }
+ bool isResourceOperationSupported() const
+ {
+ if (!workspace)
+ {
+ return false;
}
- static bool contains(const std::vector<std::string>& v, const std::string& target)
+ if (!workspace->workspaceEdit)
{
- for(auto& it : v)
- {
- if(it == target) return true;
- }
- return false;
+ return false;
}
- bool isResourceOperationSupported() const
+ auto& it = (workspace->workspaceEdit.value());
+ if (!it.resourceOperations)
{
- if (!workspace) return false;
- if (!workspace->workspaceEdit)
- {
- return false;
- }
- auto& it = (workspace->workspaceEdit.value());
- if(!it.resourceOperations) return false;
- const auto& resourceOperations = it.resourceOperations.value();
- return contains(resourceOperations, "create") && contains(resourceOperations, "rename") && contains(resourceOperations, "delete");
-
+ return false;
}
+ auto const& resourceOperations = it.resourceOperations.value();
+ return contains(resourceOperations, "create") && contains(resourceOperations, "rename")
+ && contains(resourceOperations, "delete");
+ }
- /**
+ /**
* {@code true} if the client has explicitly set the
* {@code textDocument.documentSymbol.hierarchicalDocumentSymbolSupport} to
* {@code true} when initializing the LS. Otherwise, {@code false}.
*/
- bool isHierarchicalDocumentSymbolSupported() {
- if(!v3supported || !textDocument.documentSymbol) return false;
- return isTrue(textDocument.documentSymbol.value().hierarchicalDocumentSymbolSupport);
-
+ bool isHierarchicalDocumentSymbolSupported()
+ {
+ if (!v3supported || !textDocument.documentSymbol)
+ {
+ return false;
}
+ return isTrue(textDocument.documentSymbol.value().hierarchicalDocumentSymbolSupport);
+ }
- bool isSemanticHighlightingSupported() {
- //@formatter:off
- if (!v3supported || !textDocument.semanticHighlightingCapabilities) return false;
- return isTrue(textDocument.semanticHighlightingCapabilities.value().semanticHighlighting);
- //@formatter:on
+ bool isSemanticHighlightingSupported()
+ {
+ //@formatter:off
+ if (!v3supported || !textDocument.semanticHighlightingCapabilities)
+ {
+ return false;
}
+ return isTrue(textDocument.semanticHighlightingCapabilities.value().semanticHighlighting);
+ //@formatter:on
+ }
- /**
+ /**
* {@code true} if the client has explicitly set the
* {@code textDocument.codeAction.codeActionLiteralSupport.codeActionKind.valueSet}
* value. Otherwise, {@code false}.
*/
- bool isSupportedCodeActionKind(const std::string& kind) {
- if (!v3supported || !textDocument.codeAction) return false;
- //@formatter:off
- const auto& codeAction = textDocument.codeAction.value();
- if(codeAction.codeActionLiteralSupport)
+ bool isSupportedCodeActionKind(std::string const& kind)
+ {
+ if (!v3supported || !textDocument.codeAction)
+ {
+ return false;
+ }
+ //@formatter:off
+ auto const& codeAction = textDocument.codeAction.value();
+ if (codeAction.codeActionLiteralSupport)
+ {
+ auto const& codeActionKind = codeAction.codeActionLiteralSupport.value().codeActionKind;
+ if (codeActionKind)
+ {
+ auto const& valueSet = codeActionKind.value().valueSet;
+ if (valueSet)
{
- const auto& codeActionKind = codeAction.codeActionLiteralSupport.value().codeActionKind;
- if(codeActionKind)
+ for (auto& k : valueSet.value())
+ {
+ if (lsp::StartsWith(kind, k))
{
- const auto& valueSet = codeActionKind.value().valueSet;
- if(valueSet)
- {
- for(auto& k : valueSet.value())
- {
- if(lsp::StartsWith(kind,k))
- {
- return true;
- }
- }
- }
+ return true;
}
+ }
}
- return false;
-
- //@formatter:on
+ }
}
+ return false;
+
+ //@formatter:on
+ }
- /**
+ /**
* {@code true} if the client has explicitly set the
* {@code textDocument.publishDiagnostics.tagSupport} to
* {@code true} when initializing the LS. Otherwise, {@code false}.
*/
- bool isDiagnosticTagSupported() {
- if (!v3supported || !textDocument.publishDiagnostics) return false;
- const auto& publishDiagnostics = textDocument.publishDiagnostics.value();
- if(publishDiagnostics.tagSupport)
- {
- isTagSupported(publishDiagnostics.tagSupport);
- }
- return false;
+ bool isDiagnosticTagSupported()
+ {
+ if (!v3supported || !textDocument.publishDiagnostics)
+ {
+ return false;
}
-
- bool isTagSupported(const optional < std::pair<optional<bool>,
- optional<DiagnosticsTagSupport> > >& tagSupport) {
- if(tagSupport)
- {
- auto &v = tagSupport.value();
- if (v.first)
- {
- return v.first.value();
- }
- if (v.second) {
- return !v.second.value().valueSet.empty();
- }
- }
- return false;
+ auto const& publishDiagnostics = textDocument.publishDiagnostics.value();
+ if (publishDiagnostics.tagSupport)
+ {
+ isTagSupported(publishDiagnostics.tagSupport);
}
+ return false;
+ }
- bool isCallHierarchyDynamicRegistered() {
- return v3supported && isDynamicRegistrationSupported(textDocument.callHierarchy);
+ bool isTagSupported(optional<std::pair<optional<bool>, optional<DiagnosticsTagSupport>>> const& tagSupport)
+ {
+ if (tagSupport)
+ {
+ auto& v = tagSupport.value();
+ if (v.first)
+ {
+ return v.first.value();
+ }
+ if (v.second)
+ {
+ return !v.second.value().valueSet.empty();
+ }
}
+ return false;
+ }
+ bool isCallHierarchyDynamicRegistered()
+ {
+ return v3supported && isDynamicRegistrationSupported(textDocument.callHierarchy);
+ }
};
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/CodeActionParams.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/CodeActionParams.h
index 6c30ce82da..931747e4d3 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/CodeActionParams.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/CodeActionParams.h
@@ -5,22 +5,22 @@
#include "LibLsp/lsp/workspace/execute_command.h"
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
#include "LibLsp/lsp/lsCodeAction.h"
-namespace JDT
+namespace JDT
+{
+namespace CodeActionKind
{
- namespace CodeActionKind {
-
- /**
+ /**
* Base kind for quickfix actions: 'quickfix'
*/
- extern const char* QuickFix;
+ extern char const* QuickFix;
- /**
+ /**
* Base kind for refactoring actions: 'refactor'
*/
- extern const char* Refactor;
+ extern char const* Refactor;
- /**
+ /**
* Base kind for refactoring extraction actions: 'refactor.extract'
*
* Example extract actions:
@@ -28,18 +28,18 @@ namespace JDT
* - Extract method - Extract function - Extract variable - Extract interface
* from class - ...
*/
- extern const char* RefactorExtract;
+ extern char const* RefactorExtract;
- /**
+ /**
* Base kind for refactoring inline actions: 'refactor.inline'
*
* Example inline actions:
*
* - Inline function - Inline variable - Inline constant - ...
*/
- extern const char* RefactorInline;
+ extern char const* RefactorInline;
- /**
+ /**
* Base kind for refactoring rewrite actions: 'refactor.rewrite'
*
* Example rewrite actions:
@@ -47,29 +47,29 @@ namespace JDT
* - Convert JavaScript function to class - Add or remove parameter -
* Encapsulate field - Make method static - Move method to base class - ...
*/
- extern const char* RefactorRewrite;
+ extern char const* RefactorRewrite;
- /**
+ /**
* Base kind for source actions: `source`
*
* Source code actions apply to the entire file.
*/
- extern const char* Source ;
+ extern char const* Source;
- /**
+ /**
* Base kind for an organize imports source action: `source.organizeImports`
*/
- extern const char* SourceOrganizeImports;
+ extern char const* SourceOrganizeImports;
- extern const char* COMMAND_ID_APPLY_EDIT;
- };
+ extern char const* COMMAND_ID_APPLY_EDIT;
+}; // namespace CodeActionKind
-
-}
-struct lsCodeActionContext {
- // An array of diagnostics.
- std::vector<lsDiagnostic> diagnostics;
- /**
+} // namespace JDT
+struct lsCodeActionContext
+{
+ // An array of diagnostics.
+ std::vector<lsDiagnostic> diagnostics;
+ /**
* Requested kind of actions to return.
*
* Actions not of this kind are filtered out by the client before being shown. So servers
@@ -77,38 +77,22 @@ struct lsCodeActionContext {
*
* See {@link CodeActionKind} for allowed values.
*/
- optional<std::vector<std::string>> only;
+ optional<std::vector<std::string>> only;
- MAKE_SWAP_METHOD(lsCodeActionContext,
- diagnostics, only);
+ MAKE_SWAP_METHOD(lsCodeActionContext, diagnostics, only);
};
-MAKE_REFLECT_STRUCT(lsCodeActionContext,
- diagnostics, only);
-
+MAKE_REFLECT_STRUCT(lsCodeActionContext, diagnostics, only);
// Params for the CodeActionRequest
-struct lsCodeActionParams {
- // The document in which the command was invoked.
- lsTextDocumentIdentifier textDocument;
- // The range for which the command was invoked.
- lsRange range;
- // Context carrying additional information.
- lsCodeActionContext context;
-
- MAKE_SWAP_METHOD(lsCodeActionParams,
- textDocument,
- range,
- context);
+struct lsCodeActionParams
+{
+ // The document in which the command was invoked.
+ lsTextDocumentIdentifier textDocument;
+ // The range for which the command was invoked.
+ lsRange range;
+ // Context carrying additional information.
+ lsCodeActionContext context;
+
+ MAKE_SWAP_METHOD(lsCodeActionParams, textDocument, range, context);
};
-MAKE_REFLECT_STRUCT(lsCodeActionParams,
- textDocument,
- range,
- context);
-
-
-
-
-
-
-
-
+MAKE_REFLECT_STRUCT(lsCodeActionParams, textDocument, range, context);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/Directory.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/Directory.h
index 77b6cbb3e7..c1ab3fed03 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/Directory.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/Directory.h
@@ -3,11 +3,12 @@
struct AbsolutePath;
-struct Directory {
- explicit Directory(const AbsolutePath& path);
+struct Directory
+{
+ explicit Directory(AbsolutePath const& path);
- bool operator==(const Directory& rhs) const;
- bool operator!=(const Directory& rhs) const;
+ bool operator==(Directory const& rhs) const;
+ bool operator!=(Directory const& rhs) const;
- std::string path;
+ std::string path;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ExecuteCommandParams.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ExecuteCommandParams.h
index bb73d8a46f..c2a4404278 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ExecuteCommandParams.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ExecuteCommandParams.h
@@ -1,20 +1,21 @@
#pragma once
#include "lsAny.h"
-struct ExecuteCommandParams {
- /**
+struct ExecuteCommandParams
+{
+ /**
* The identifier of the actual command handler.
*/
- std::string command;
+ std::string command;
- /**
+ /**
* Arguments that the command should be invoked with.
* The arguments are typically specified when a command is returned from the server to the client.
* Example requests that return a command are textDocument/codeAction or textDocument/codeLens.
*/
- optional<std::vector<lsp::Any>> arguments;
+ optional<std::vector<lsp::Any>> arguments;
- MAKE_SWAP_METHOD(ExecuteCommandParams, command, arguments);
+ MAKE_SWAP_METHOD(ExecuteCommandParams, command, arguments);
};
-MAKE_REFLECT_STRUCT(ExecuteCommandParams,command,arguments)
+MAKE_REFLECT_STRUCT(ExecuteCommandParams, command, arguments)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/IProgressMonitor.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/IProgressMonitor.h
index 369ebb2a6d..35ec7e46b8 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/IProgressMonitor.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/IProgressMonitor.h
@@ -1,8 +1,8 @@
#pragma once
-
#include <string>
-namespace lsp {
+namespace lsp
+{
/**
* The <code>IProgressMonitor</code> interface is implemented
* by objects that monitor the progress of an activity; the methods
@@ -36,18 +36,19 @@ namespace lsp {
* Clients may implement this interface.
* </p>
*/
- class IProgressMonitor {
- public:
- virtual ~IProgressMonitor()
- {
- }
+class IProgressMonitor
+{
+public:
+ virtual ~IProgressMonitor()
+ {
+ }
- /** Constant indicating an unknown amount of work.
+ /** Constant indicating an unknown amount of work.
*/
- const static int UNKNOWN = -1;
+ static int const UNKNOWN = -1;
- /**
+ /**
* Notifies that the main task is beginning. This must only be called once
* on a given progress monitor instance.
*
@@ -57,33 +58,30 @@ namespace lsp {
* the implemenation is free to indicate progress in a way which
* doesn't require the total number of work units in advance.
*/
- virtual void beginTask(void* , int totalWork)
- {
+ virtual void beginTask(void*, int totalWork) {
- };
- /**
+ };
+ /**
* Notifies that the work is done; that is, either the main task is completed
* or the user canceled it. This method may be called more than once
* (implementations should be prepared to handle this case).
*/
- virtual void endTask(void*, int totalWork)
- {
-
- }
+ virtual void endTask(void*, int totalWork)
+ {
+ }
- virtual void done(void*) = 0;
+ virtual void done(void*) = 0;
- /**
+ /**
* Internal method to handle scaling correctly. This method
* must not be called by a client. Clients should
* always use the method <code>worked(int)</code>.
*/
- virtual void internalWorked(double work)
- {
-
- }
- /**
+ virtual void internalWorked(double work)
+ {
+ }
+ /**
* Returns whether cancelation of current operation has been requested.
* Long-running operations should poll to see if cancelation
* has been requested.
@@ -92,8 +90,8 @@ namespace lsp {
* and <code>false</code> otherwise
* @see #setCanceled
*/
- virtual bool isCanceled() = 0;
- /**
+ virtual bool isCanceled() = 0;
+ /**
* Sets the cancel state to the given value.
*
* @param value <code>true</code> indicates that cancelation has
@@ -102,8 +100,8 @@ namespace lsp {
*
* @see #isCanceled
*/
- virtual void setCanceled(bool value) = 0;
- /**
+ virtual void setCanceled(bool value) = 0;
+ /**
* Sets the task name to the given value. This method is used to
* restore the task label after a nested operation was executed.
* Normally there is no need for clients to call this method.
@@ -111,21 +109,19 @@ namespace lsp {
* @param name the name (or description) of the main task
* @see #beginTask(java.lang.const wstring&, int)
*/
- virtual void setTaskName(void*)
- {
+ virtual void setTaskName(void*) {
- };
- /**
+ };
+ /**
* Notifies that a subtask of the main task is beginning.
* Subtasks are optional; the main task might not have subtasks.
*
* @param name the name (or description) of the subtask
*/
- virtual void subTask(void* )
- {
-
- }
- /**
+ virtual void subTask(void*)
+ {
+ }
+ /**
* Notifies that a given number of work unit of the main task
* has been completed. Note that this amount represents an
* installment, as opposed to a cumulative amount of work done
@@ -133,11 +129,10 @@ namespace lsp {
*
* @param work the number of work units just completed
*/
- virtual void worked(int work)
- {
+ virtual void worked(int work) {
- };
+ };
- virtual void catch_exception(void*) = 0;
- };
-}
+ virtual void catch_exception(void*) = 0;
+};
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/Markup.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/Markup.h
index 1618939c69..07fef15897 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/Markup.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/Markup.h
@@ -15,105 +15,116 @@ namespace lsp
/// Holds text and knows how to lay it out. Multiple blocks can be grouped to
/// form a document. Blocks include their own trailing newlines, std::string_ref
/// should trim them if need be.
-class Block {
+class Block
+{
public:
- virtual void renderMarkdown(std::ostringstream &OS) const = 0;
- virtual void renderPlainText(std::ostringstream &OS) const = 0;
- virtual std::unique_ptr<Block> clone() const = 0;
- std::string_ref asMarkdown() const;
- std::string_ref asPlainText() const;
-
- virtual bool isRuler() const { return false; }
- virtual ~Block() = default;
+ virtual void renderMarkdown(std::ostringstream& OS) const = 0;
+ virtual void renderPlainText(std::ostringstream& OS) const = 0;
+ virtual std::unique_ptr<Block> clone() const = 0;
+ std::string_ref asMarkdown() const;
+ std::string_ref asPlainText() const;
+
+ virtual bool isRuler() const
+ {
+ return false;
+ }
+ virtual ~Block() = default;
};
/// Represents parts of the markup that can contain strings, like inline code,
/// code block or plain text.
/// One must introduce different paragraphs to create separate blocks.
-class Paragraph : public Block {
+class Paragraph : public Block
+{
public:
- void renderMarkdown(std::ostringstream &OS) const override;
- void renderPlainText(std::ostringstream &OS) const override;
- std::unique_ptr<Block> clone() const override;
+ void renderMarkdown(std::ostringstream& OS) const override;
+ void renderPlainText(std::ostringstream& OS) const override;
+ std::unique_ptr<Block> clone() const override;
- /// Append plain text to the end of the string.
- Paragraph &appendText(const std::string_ref& Text);
+ /// Append plain text to the end of the string.
+ Paragraph& appendText(std::string_ref const& Text);
- /// Append inline code, this translates to the ` block in markdown.
- /// \p Preserve indicates the code span must be apparent even in plaintext.
- Paragraph &appendCode(const std::string_ref& Code, bool Preserve = false);
+ /// Append inline code, this translates to the ` block in markdown.
+ /// \p Preserve indicates the code span must be apparent even in plaintext.
+ Paragraph& appendCode(std::string_ref const& Code, bool Preserve = false);
- /// Ensure there is space between the surrounding chunks.
- /// Has no effect at the beginning or end of a paragraph.
- Paragraph &appendSpace();
+ /// Ensure there is space between the surrounding chunks.
+ /// Has no effect at the beginning or end of a paragraph.
+ Paragraph& appendSpace();
private:
- struct Chunk {
- enum {
- PlainText,
- InlineCode,
- } Kind = PlainText;
- // Preserve chunk markers in plaintext.
- bool Preserve = false;
- std::string_ref Contents;
- // Whether this chunk should be surrounded by whitespace.
- // Consecutive SpaceAfter and SpaceBefore will be collapsed into one space.
- // Code spans don't usually set this: their spaces belong "inside" the span.
- bool SpaceBefore = false;
- bool SpaceAfter = false;
- };
- std::vector<Chunk> Chunks;
+ struct Chunk
+ {
+ enum
+ {
+ PlainText,
+ InlineCode,
+ } Kind = PlainText;
+ // Preserve chunk markers in plaintext.
+ bool Preserve = false;
+ std::string_ref Contents;
+ // Whether this chunk should be surrounded by whitespace.
+ // Consecutive SpaceAfter and SpaceBefore will be collapsed into one space.
+ // Code spans don't usually set this: their spaces belong "inside" the span.
+ bool SpaceBefore = false;
+ bool SpaceAfter = false;
+ };
+ std::vector<Chunk> Chunks;
};
/// Represents a sequence of one or more documents. Knows how to print them in a
/// list like format, e.g. by prepending with "- " and indentation.
-class BulletList : public Block {
+class BulletList : public Block
+{
public:
- void renderMarkdown(std::ostringstream &OS) const override;
- void renderPlainText(std::ostringstream &OS) const override;
- std::unique_ptr<Block> clone() const override;
+ void renderMarkdown(std::ostringstream& OS) const override;
+ void renderPlainText(std::ostringstream& OS) const override;
+ std::unique_ptr<Block> clone() const override;
- class Document &addItem();
+ class Document& addItem();
private:
- std::vector<class Document> Items;
+ std::vector<class Document> Items;
};
/// A format-agnostic representation for structured text. Allows rendering into
/// markdown and plaintext.
-class Document {
+class Document
+{
public:
- Document() = default;
- Document(const Document &Other) { *this = Other; }
- Document &operator=(const Document &);
- Document(Document &&) = default;
- Document &operator=(Document &&) = default;
-
- void append(Document Other);
-
- /// Adds a semantical block that will be separate from others.
- Paragraph &addParagraph();
- /// Inserts a horizontal separator to the document.
- void addRuler();
- /// Adds a block of code. This translates to a ``` block in markdown. In plain
- /// text representation, the code block will be surrounded by newlines.
- void addCodeBlock( std::string_ref Code, std::string_ref Language = "cpp");
- /// Heading is a special type of paragraph that will be prepended with \p
- /// Level many '#'s in markdown.
- Paragraph &addHeading(size_t Level);
-
- BulletList &addBulletList();
-
- /// Doesn't contain any trailing newlines.
- /// We try to make the markdown human-readable, e.g. avoid extra escaping.
- /// At least one client (coc.nvim) displays the markdown verbatim!
- std::string_ref asMarkdown() const;
- /// Doesn't contain any trailing newlines.
- std::string_ref asPlainText() const;
+ Document() = default;
+ Document(Document const& Other)
+ {
+ *this = Other;
+ }
+ Document& operator=(Document const&);
+ Document(Document&&) = default;
+ Document& operator=(Document&&) = default;
+
+ void append(Document Other);
+
+ /// Adds a semantical block that will be separate from others.
+ Paragraph& addParagraph();
+ /// Inserts a horizontal separator to the document.
+ void addRuler();
+ /// Adds a block of code. This translates to a ``` block in markdown. In plain
+ /// text representation, the code block will be surrounded by newlines.
+ void addCodeBlock(std::string_ref Code, std::string_ref Language = "cpp");
+ /// Heading is a special type of paragraph that will be prepended with \p
+ /// Level many '#'s in markdown.
+ Paragraph& addHeading(size_t Level);
+
+ BulletList& addBulletList();
+
+ /// Doesn't contain any trailing newlines.
+ /// We try to make the markdown human-readable, e.g. avoid extra escaping.
+ /// At least one client (coc.nvim) displays the markdown verbatim!
+ std::string_ref asMarkdown() const;
+ /// Doesn't contain any trailing newlines.
+ std::string_ref asPlainText() const;
private:
- std::vector<std::unique_ptr<Block>> Children;
+ std::vector<std::unique_ptr<Block>> Children;
};
-
-}
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/string_ref.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/string_ref.h
index bac8fbbaf5..391cf7c290 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/string_ref.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/string_ref.h
@@ -4,7 +4,7 @@
#include <string>
#include <vector>
#include <stdarg.h>
-#include<functional>
+#include <functional>
#ifndef _WIN32
#include <cstring>
@@ -12,262 +12,274 @@
namespace std
{
- /**
+/**
* An extension of STL's string providing additional functionality that is often availiable in
* higher-level languages such as Python.
*/
- class string_ref : public string
- {
- public:
-
- //static unsigned GetAutoSenseRadix(string_ref& Str) {
- // if (Str.empty())
- // return 10;
-
- // if (Str.start_with("0x") || Str.start_with("0X")) {
- // Str = Str.substr(2);
- // return 16;
- // }
-
- // if (Str.start_with("0b") || Str.start_with("0B")) {
- // Str = Str.substr(2);
- // return 2;
- // }
-
- // if (Str.start_with("0o")) {
- // Str = Str.substr(2);
- // return 8;
- // }
-
- // if (Str[0] == '0' && Str.size() > 1 && std::isdigit(Str[1])) {
- // Str = Str.substr(1);
- // return 8;
- // }
-
- // return 10;
- //}
-
- //static bool consumeUnsignedInteger(string_ref& Str, unsigned Radix,
- // unsigned long long& Result) {
- // // Autosense radix if not specified.
- // if (Radix == 0)
- // Radix = GetAutoSenseRadix(Str);
-
- // // Empty strings (after the radix autosense) are invalid.
- // if (Str.empty()) return true;
-
- // // Parse all the bytes of the string given this radix. Watch for overflow.
- // string_ref Str2 = Str;
- // Result = 0;
- // while (!Str2.empty()) {
- // unsigned CharVal;
- // if (Str2[0] >= '0' && Str2[0] <= '9')
- // CharVal = Str2[0] - '0';
- // else if (Str2[0] >= 'a' && Str2[0] <= 'z')
- // CharVal = Str2[0] - 'a' + 10;
- // else if (Str2[0] >= 'A' && Str2[0] <= 'Z')
- // CharVal = Str2[0] - 'A' + 10;
- // else
- // break;
-
- // // If the parsed value is larger than the integer radix, we cannot
- // // consume any more characters.
- // if (CharVal >= Radix)
- // break;
-
- // // Add in this character.
- // unsigned long long PrevResult = Result;
- // Result = Result * Radix + CharVal;
-
- // // Check for overflow by shifting back and seeing if bits were lost.
- // if (Result / Radix < PrevResult)
- // return true;
-
- // Str2 = Str2.substr(1);
- // }
-
- // // We consider the operation a failure if no characters were consumed
- // // successfully.
- // if (Str.size() == Str2.size())
- // return true;
-
- // Str = Str2;
- // return false;
- //}
-
- //static bool consumeSignedInteger(string_ref& Str, unsigned Radix,
- // long long& Result) {
- // unsigned long long ULLVal;
-
- // // Handle positive strings first.
- // if (Str.empty() || Str.front() != '-') {
- // if (consumeUnsignedInteger(Str, Radix, ULLVal) ||
- // // Check for value so large it overflows a signed value.
- // (long long)ULLVal < 0)
- // return true;
- // Result = ULLVal;
- // return false;
- // }
-
- // // Get the positive part of the value.
- // string_ref Str2 = Str.drop_front(1);
- // if (consumeUnsignedInteger(Str2, Radix, ULLVal) ||
- // // Reject values so large they'd overflow as negative signed, but allow
- // // "-0". This negates the unsigned so that the negative isn't undefined
- // // on signed overflow.
- // (long long)-ULLVal > 0)
- // return true;
-
- // Str = Str2;
- // Result = -ULLVal;
- // return false;
- //}
-
- ///// GetAsUnsignedInteger - Workhorse method that converts a integer character
- ///// sequence of radix up to 36 to an unsigned long long value.
- //static bool getAsUnsignedInteger(string_ref Str, unsigned Radix,
- // unsigned long long& Result) {
- // if (consumeUnsignedInteger(Str, Radix, Result))
- // return true;
-
- // // For getAsUnsignedInteger, we require the whole string to be consumed or
- // // else we consider it a failure.
- // return !Str.empty();
- //}
-
- //static bool getAsSignedInteger(string_ref Str, unsigned Radix,
- // long long& Result) {
- // if (consumeSignedInteger(Str, Radix, Result))
- // return true;
-
- // // For getAsSignedInteger, we require the whole string to be consumed or else
- // // we consider it a failure.
- // return !Str.empty();
- //}
-
-
- ///// Parse the current string as an integer of the specified radix. If
- ///// \p Radix is specified as zero, this does radix autosensing using
- ///// extended C rules: 0 is octal, 0x is hex, 0b is binary.
- /////
- ///// If the string is invalid or if only a subset of the string is valid,
- ///// this returns true to signify the error. The string is considered
- ///// erroneous if empty or if it overflows T.
- //template <typename T>
- //std::enable_if_t<std::numeric_limits<T>::is_signed, bool>
- // getAsInteger(unsigned Radix, T& Result) const {
- // long long LLVal;
- // if (getAsSignedInteger(*this, Radix, LLVal) ||
- // static_cast<T>(LLVal) != LLVal)
- // return true;
- // Result = LLVal;
- // return false;
- //}
-
- //template <typename T>
- //std::enable_if_t<!std::numeric_limits<T>::is_signed, bool>
- // getAsInteger(unsigned Radix, T& Result) const {
- // unsigned long long ULLVal;
- // // The additional cast to unsigned long long is required to avoid the
- // // Visual C++ warning C4805: '!=' : unsafe mix of type 'bool' and type
- // // 'unsigned __int64' when instantiating getAsInteger with T = bool.
- // if (getAsUnsignedInteger(*this, Radix, ULLVal) ||
- // static_cast<unsigned long long>(static_cast<T>(ULLVal)) != ULLVal)
- // return true;
- // Result = ULLVal;
- // return false;
- //}
-
-
-
- /**`
+class string_ref : public string
+{
+public:
+ //static unsigned GetAutoSenseRadix(string_ref& Str) {
+ // if (Str.empty())
+ // return 10;
+
+ // if (Str.start_with("0x") || Str.start_with("0X")) {
+ // Str = Str.substr(2);
+ // return 16;
+ // }
+
+ // if (Str.start_with("0b") || Str.start_with("0B")) {
+ // Str = Str.substr(2);
+ // return 2;
+ // }
+
+ // if (Str.start_with("0o")) {
+ // Str = Str.substr(2);
+ // return 8;
+ // }
+
+ // if (Str[0] == '0' && Str.size() > 1 && std::isdigit(Str[1])) {
+ // Str = Str.substr(1);
+ // return 8;
+ // }
+
+ // return 10;
+ //}
+
+ //static bool consumeUnsignedInteger(string_ref& Str, unsigned Radix,
+ // unsigned long long& Result) {
+ // // Autosense radix if not specified.
+ // if (Radix == 0)
+ // Radix = GetAutoSenseRadix(Str);
+
+ // // Empty strings (after the radix autosense) are invalid.
+ // if (Str.empty()) return true;
+
+ // // Parse all the bytes of the string given this radix. Watch for overflow.
+ // string_ref Str2 = Str;
+ // Result = 0;
+ // while (!Str2.empty()) {
+ // unsigned CharVal;
+ // if (Str2[0] >= '0' && Str2[0] <= '9')
+ // CharVal = Str2[0] - '0';
+ // else if (Str2[0] >= 'a' && Str2[0] <= 'z')
+ // CharVal = Str2[0] - 'a' + 10;
+ // else if (Str2[0] >= 'A' && Str2[0] <= 'Z')
+ // CharVal = Str2[0] - 'A' + 10;
+ // else
+ // break;
+
+ // // If the parsed value is larger than the integer radix, we cannot
+ // // consume any more characters.
+ // if (CharVal >= Radix)
+ // break;
+
+ // // Add in this character.
+ // unsigned long long PrevResult = Result;
+ // Result = Result * Radix + CharVal;
+
+ // // Check for overflow by shifting back and seeing if bits were lost.
+ // if (Result / Radix < PrevResult)
+ // return true;
+
+ // Str2 = Str2.substr(1);
+ // }
+
+ // // We consider the operation a failure if no characters were consumed
+ // // successfully.
+ // if (Str.size() == Str2.size())
+ // return true;
+
+ // Str = Str2;
+ // return false;
+ //}
+
+ //static bool consumeSignedInteger(string_ref& Str, unsigned Radix,
+ // long long& Result) {
+ // unsigned long long ULLVal;
+
+ // // Handle positive strings first.
+ // if (Str.empty() || Str.front() != '-') {
+ // if (consumeUnsignedInteger(Str, Radix, ULLVal) ||
+ // // Check for value so large it overflows a signed value.
+ // (long long)ULLVal < 0)
+ // return true;
+ // Result = ULLVal;
+ // return false;
+ // }
+
+ // // Get the positive part of the value.
+ // string_ref Str2 = Str.drop_front(1);
+ // if (consumeUnsignedInteger(Str2, Radix, ULLVal) ||
+ // // Reject values so large they'd overflow as negative signed, but allow
+ // // "-0". This negates the unsigned so that the negative isn't undefined
+ // // on signed overflow.
+ // (long long)-ULLVal > 0)
+ // return true;
+
+ // Str = Str2;
+ // Result = -ULLVal;
+ // return false;
+ //}
+
+ ///// GetAsUnsignedInteger - Workhorse method that converts a integer character
+ ///// sequence of radix up to 36 to an unsigned long long value.
+ //static bool getAsUnsignedInteger(string_ref Str, unsigned Radix,
+ // unsigned long long& Result) {
+ // if (consumeUnsignedInteger(Str, Radix, Result))
+ // return true;
+
+ // // For getAsUnsignedInteger, we require the whole string to be consumed or
+ // // else we consider it a failure.
+ // return !Str.empty();
+ //}
+
+ //static bool getAsSignedInteger(string_ref Str, unsigned Radix,
+ // long long& Result) {
+ // if (consumeSignedInteger(Str, Radix, Result))
+ // return true;
+
+ // // For getAsSignedInteger, we require the whole string to be consumed or else
+ // // we consider it a failure.
+ // return !Str.empty();
+ //}
+
+ ///// Parse the current string as an integer of the specified radix. If
+ ///// \p Radix is specified as zero, this does radix autosensing using
+ ///// extended C rules: 0 is octal, 0x is hex, 0b is binary.
+ /////
+ ///// If the string is invalid or if only a subset of the string is valid,
+ ///// this returns true to signify the error. The string is considered
+ ///// erroneous if empty or if it overflows T.
+ //template <typename T>
+ //std::enable_if_t<std::numeric_limits<T>::is_signed, bool>
+ // getAsInteger(unsigned Radix, T& Result) const {
+ // long long LLVal;
+ // if (getAsSignedInteger(*this, Radix, LLVal) ||
+ // static_cast<T>(LLVal) != LLVal)
+ // return true;
+ // Result = LLVal;
+ // return false;
+ //}
+
+ //template <typename T>
+ //std::enable_if_t<!std::numeric_limits<T>::is_signed, bool>
+ // getAsInteger(unsigned Radix, T& Result) const {
+ // unsigned long long ULLVal;
+ // // The additional cast to unsigned long long is required to avoid the
+ // // Visual C++ warning C4805: '!=' : unsafe mix of type 'bool' and type
+ // // 'unsigned __int64' when instantiating getAsInteger with T = bool.
+ // if (getAsUnsignedInteger(*this, Radix, ULLVal) ||
+ // static_cast<unsigned long long>(static_cast<T>(ULLVal)) != ULLVal)
+ // return true;
+ // Result = ULLVal;
+ // return false;
+ //}
+
+ /**`
* Default constructor
*
* Constructs an empty string_ref ("")
*/
- string_ref() : string() { }
+ string_ref() : string()
+ {
+ }
- /**
+ /**
* Duplicate the STL string copy constructor
*
* @param[in] s The string to copy
* @param[in] pos The starting position in the string to copy from
* @param[in] n The number of characters to copy
*/
- string_ref(const string &s, size_type pos = 0, size_type n = npos) : string(s, pos, npos) { }
+ string_ref(string const& s, size_type pos = 0, size_type n = npos) : string(s, pos, n)
+ {
+ }
- /**
+ /**
* Construct an string_ref from a null-terminated character array
*
* @param[in] s The character array to copy into the new string
*/
- string_ref(const value_type *s) : string(s) { }
+ string_ref(value_type const* s) : string(s)
+ {
+ }
- /**
+ /**
* Construct an string_ref from a character array and a length
*
* @param[in] s The character array to copy into the new string
* @param[in] n The number of characters to copy
*/
- string_ref(const value_type *s, size_type n) : string(s, n) { }
+ string_ref(value_type const* s, size_type n) : string(s, n)
+ {
+ }
- /**
+ /**
* Create an string_ref with @p n copies of @p c
*
* @param[in] n The number of copies
* @param[in] c The character to copy @p n times
*/
- string_ref(size_type n, value_type c) : string(n, c) { }
+ string_ref(size_type n, value_type c) : string(n, c)
+ {
+ }
- /**
+ /**
* Create a string from a range
*
* @param[in] first The first element to copy in
* @param[in] last The last element to copy in
*/
- template <class InputIterator>
- string_ref(InputIterator first, InputIterator last) : string(first, last) { }
+ template<class InputIterator>
+ string_ref(InputIterator first, InputIterator last) : string(first, last)
+ {
+ }
- /**
+ /**
* The destructor
*/
- ~string_ref() { }
+ ~string_ref()
+ {
+ }
- /**
+ /**
* Split a string by whitespace
*
* @return A vector of strings, each of which is a substring of the string
*/
- vector<string_ref> split(size_type limit = npos) const
+ vector<string_ref> split(size_type limit = npos) const
+ {
+ vector<string_ref> v;
+
+ const_iterator i = begin(), last = i;
+ for (; i != end(); i++)
+ {
+ if (*i == ' ' || *i == '\n' || *i == '\t' || *i == '\r')
+ {
+ if (i + 1 != end() && (i[1] == ' ' || i[1] == '\n' || i[1] == '\t' || i[1] == '\r'))
+ {
+ continue;
+ }
+ v.push_back(string_ref(last, i));
+ last = i + 1;
+ if (v.size() >= limit - 1)
{
- vector<string_ref> v;
-
- const_iterator
- i = begin(),
- last = i;
- for (; i != end(); i++)
- {
- if (*i == ' ' || *i == '\n' || *i == '\t' || *i == '\r')
- {
- if (i + 1 != end() && (i[1] == ' ' || i[1] == '\n' || i[1] == '\t' || i[1] == '\r'))
- continue;
- v.push_back(string_ref(last, i));
- last = i + 1;
- if (v.size() >= limit - 1)
- {
- v.push_back(string_ref(last, end()));
- return v;
- }
- }
- }
-
- if (last != i)
- v.push_back(string_ref(last, i));
-
- return v;
+ v.push_back(string_ref(last, end()));
+ return v;
}
+ }
+ }
+
+ if (last != i)
+ {
+ v.push_back(string_ref(last, i));
+ }
+
+ return v;
+ }
- /**
+ /**
* Split a string by a character
*
* Returns a vector of ext_strings, each of which is a substring of the string formed by splitting
@@ -296,34 +308,34 @@ namespace std
* test.
* @endcode
*/
- vector<string_ref> split(value_type separator, size_type limit = npos) const
+ vector<string_ref> split(value_type separator, size_type limit = npos) const
+ {
+ vector<string_ref> v;
+
+ const_iterator i = begin(), last = i;
+ for (; i != end(); i++)
+ {
+ if (*i == separator)
+ {
+ v.push_back(string_ref(last, i));
+ last = i + 1;
+ if (v.size() >= limit - 1)
{
- vector<string_ref> v;
-
- const_iterator
- i = begin(),
- last = i;
- for (; i != end(); i++)
- {
- if (*i == separator)
- {
- v.push_back(string_ref(last, i));
- last = i + 1;
- if (v.size() >= limit - 1)
- {
- v.push_back(string_ref(last, end()));
- return v;
- }
- }
- }
-
- if (last != i)
- v.push_back(string_ref(last, i));
-
- return v;
+ v.push_back(string_ref(last, end()));
+ return v;
}
+ }
+ }
+
+ if (last != i)
+ {
+ v.push_back(string_ref(last, i));
+ }
+
+ return v;
+ }
- /**
+ /**
* Split a string by another string
*
* Returns a vector of ext_strings, each of which is a substring of the string formed by
@@ -342,35 +354,35 @@ namespace std
*
* @ref split_ex
*/
- vector<string_ref> split(const string &separator, size_type limit = npos) const
+ vector<string_ref> split(string const& separator, size_type limit = npos) const
+ {
+ vector<string_ref> v;
+
+ const_iterator i = begin(), last = i;
+ for (; i != end(); i++)
+ {
+ if (string(i, i + separator.length()) == separator)
+ {
+ v.push_back(string_ref(last, i));
+ last = i + separator.length();
+
+ if (v.size() >= limit - 1)
{
- vector<string_ref> v;
-
- const_iterator
- i = begin(),
- last = i;
- for (; i != end(); i++)
- {
- if (string(i, i + separator.length()) == separator)
- {
- v.push_back(string_ref(last, i));
- last = i + separator.length();
-
- if (v.size() >= limit - 1)
- {
- v.push_back(string_ref(last, end()));
- return v;
- }
- }
- }
-
- if (last != i)
- v.push_back(string_ref(last, i));
-
- return v;
+ v.push_back(string_ref(last, end()));
+ return v;
}
+ }
+ }
+
+ if (last != i)
+ {
+ v.push_back(string_ref(last, i));
+ }
+
+ return v;
+ }
- /**
+ /**
* Convert a string into an integer
*
* Convert the initial portion of a string into a signed integer. Once a non-numeric
@@ -380,39 +392,45 @@ namespace std
* @param s The string to convert
* @return The integer converted from @p string
*/
- static long int integer(const string &s)
+ static long int integer(string const& s)
+ {
+ long int retval = 0;
+ bool neg = false;
+
+ for (const_iterator i = s.begin(); i != s.end(); i++)
+ {
+ if (i == s.begin())
+ {
+ if (*i == '-')
+ {
+ neg = true;
+ continue;
+ }
+ else if (*i == '+')
{
- long int retval = 0;
- bool neg = false;
-
- for (const_iterator i = s.begin(); i != s.end(); i++)
- {
- if (i == s.begin())
- {
- if (*i == '-')
- {
- neg = true;
- continue;
- }
- else if (*i == '+')
- continue;
- }
- if (*i >= '0' && *i <= '9')
- {
- retval *= 10;
- retval += *i - '0';
- }
- else
- break;
- }
-
- if (neg)
- retval *= -1;
-
- return retval;
+ continue;
}
+ }
+ if (*i >= '0' && *i <= '9')
+ {
+ retval *= 10;
+ retval += *i - '0';
+ }
+ else
+ {
+ break;
+ }
+ }
- /**
+ if (neg)
+ {
+ retval *= -1;
+ }
+
+ return retval;
+ }
+
+ /**
* Convert the string to an integer
*
* Convert the initial portion of the string into a signed integer. Once a non-numeric
@@ -421,12 +439,12 @@ namespace std
*
* @return The integer converted from the string
*/
- long int integer() const
- {
- return integer(*this);
- }
+ long int integer() const
+ {
+ return integer(*this);
+ }
- /**
+ /**
* Split a string into chunks of size @p chunklen. Returns a vector of strings.
*
* Splits a string into chunks of the given size. The final chunk may not fill its
@@ -444,32 +462,32 @@ namespace std
* abc def ghi jk
* @endcode
*/
- vector<string_ref> chunk_split(size_type chunklen) const
- {
- vector<string_ref> retval;
- retval.reserve(size() / chunklen + 1);
-
- size_type count = 0;
- const_iterator
- i = begin(),
- last = i;
- for (; i != end(); i++, count++)
- {
- if (count == chunklen)
- {
- count = 0;
- retval.push_back(string_ref(last, i));
- last = i;
- }
- }
-
- if (last != i)
- retval.push_back(string_ref(last, i));
-
- return retval;
- }
+ vector<string_ref> chunk_split(size_type chunklen) const
+ {
+ vector<string_ref> retval;
+ retval.reserve(size() / chunklen + 1);
+
+ size_type count = 0;
+ const_iterator i = begin(), last = i;
+ for (; i != end(); i++, count++)
+ {
+ if (count == chunklen)
+ {
+ count = 0;
+ retval.push_back(string_ref(last, i));
+ last = i;
+ }
+ }
+
+ if (last != i)
+ {
+ retval.push_back(string_ref(last, i));
+ }
- /**
+ return retval;
+ }
+
+ /**
* Join a sequence of strings by some glue to create a new string
*
* Glue is not added to the end of the string.
@@ -495,43 +513,43 @@ namespace std
* This|is|a|test.
* @endcode
*/
- template <class InputIterator>
- static string_ref join(const string &glue, InputIterator first, InputIterator last)
- {
- string_ref retval;
-
- for (; first != last; ++first)
- {
- retval.append(*first);
- retval.append(glue);
- }
- retval.erase(retval.length() - glue.length());
-
- return retval;
- }
-
- /**
+ template<class InputIterator>
+ static string_ref join(string const& glue, InputIterator first, InputIterator last)
+ {
+ string_ref retval;
+
+ for (; first != last; ++first)
+ {
+ retval.append(*first);
+ retval.append(glue);
+ }
+ retval.erase(retval.length() - glue.length());
+
+ return retval;
+ }
+
+ /**
* Join a sequence of strings by some glue to create a new string
*
* @copydoc join
* @ref join_ex
*/
- template <class InputIterator>
- static string_ref join(value_type glue, InputIterator first, InputIterator last)
- {
- string_ref retval;
-
- for (; first != last; ++first)
- {
- retval.append(*first);
- retval.append(1, glue);
- }
- retval.erase(retval.length() - 1);
-
- return retval;
- }
-
- /**
+ template<class InputIterator>
+ static string_ref join(value_type glue, InputIterator first, InputIterator last)
+ {
+ string_ref retval;
+
+ for (; first != last; ++first)
+ {
+ retval.append(*first);
+ retval.append(1, glue);
+ }
+ retval.erase(retval.length() - 1);
+
+ return retval;
+ }
+
+ /**
* Search for any instances of @p needle and replace them with @p s
*
* @param[in] needle The string to replace
@@ -548,33 +566,29 @@ namespace std
* There ere a test.
* @endcode
*/
- string_ref &replace(const string &needle, const string &s)
- {
- size_type
- lastpos = 0,
- thispos;
-
- while ((thispos = find(needle, lastpos)) != npos)
- {
- string::replace(thispos, needle.length(), s);
- lastpos = thispos + 1;
- }
- return *this;
- }
- string_ref &replace_first(const string &needle, const string &s)
- {
- size_type
- lastpos = 0,
- thispos;
-
- if ((thispos = find(needle, lastpos)) != npos)
- {
- string::replace(thispos, needle.length(), s);
- lastpos = thispos + 1;
- }
- return *this;
- }
- /**
+ string_ref& replace(string const& needle, string const& s)
+ {
+ size_type lastpos = 0, thispos;
+
+ while ((thispos = find(needle, lastpos)) != npos)
+ {
+ string::replace(thispos, needle.length(), s);
+ lastpos = thispos + 1;
+ }
+ return *this;
+ }
+ string_ref& replace_first(string const& needle, string const& s)
+ {
+ size_type lastpos = 0, thispos;
+
+ if ((thispos = find(needle, lastpos)) != npos)
+ {
+ string::replace(thispos, needle.length(), s);
+ lastpos = thispos + 1;
+ }
+ return *this;
+ }
+ /**
* Search of any instances of @p needle and replace them with @p c
*
* @param[in] needle The character to replace
@@ -584,16 +598,20 @@ namespace std
*
* @ref replace-ex
*/
- string_ref &replace(value_type needle, value_type c)
- {
- for (iterator i = begin(); i != end(); i++)
- if (*i == needle)
- *i = c;
+ string_ref& replace(value_type needle, value_type c)
+ {
+ for (iterator i = begin(); i != end(); i++)
+ {
+ if (*i == needle)
+ {
+ *i = c;
+ }
+ }
- return *this;
- }
+ return *this;
+ }
- /**
+ /**
* Repeat a string @p n times
*
* @param[in] n The number of times to repeat the string
@@ -608,176 +626,221 @@ namespace std
* 123123123
* @endcode
*/
- string_ref operator*(size_type n)
- {
- string_ref retval;
- for (size_type i = 0; i < n; i++)
- retval.append(*this);
+ string_ref operator*(size_type n)
+ {
+ string_ref retval;
+ for (size_type i = 0; i < n; i++)
+ {
+ retval.append(*this);
+ }
- return retval;
- }
+ return retval;
+ }
- /**
+ /**
* Convert the string to lowercase
*
* @return *this
* @post The string is converted to lowercase
*/
- string_ref &tolower()
- {
- for (iterator i = begin(); i != end(); i++)
- if (*i >= 'A' && *i <= 'Z')
- *i = (*i) + ('a' - 'A');
- return *this;
- }
+ string_ref& tolower()
+ {
+ for (iterator i = begin(); i != end(); i++)
+ {
+ if (*i >= 'A' && *i <= 'Z')
+ {
+ *i = (*i) + ('a' - 'A');
+ }
+ }
+ return *this;
+ }
- /**
+ /**
* Convert the string to uppercase
*
* @return *this
* @post The string is converted to uppercase
*/
- string_ref &toupper()
- {
- for (iterator i = begin(); i != end(); i++)
- if (*i >= 'a' && *i <= 'z')
- *i = (*i) - ('a' - 'A');
- return *this;
- }
+ string_ref& toupper()
+ {
+ for (iterator i = begin(); i != end(); i++)
+ {
+ if (*i >= 'a' && *i <= 'z')
+ {
+ *i = (*i) - ('a' - 'A');
+ }
+ }
+ return *this;
+ }
- /**
+ /**
* Count the occurances of @p str in the string.
*
* @return The count of substrings @p str in the string
*/
- size_type count(const string &str) const
- {
- size_type
- count = 0,
- last = 0,
- cur = 0;
-
- while ((cur = find(str, last + 1)) != npos)
- {
- count++;
- last = cur;
- }
-
- return count;
- }
+ size_type count(string const& str) const
+ {
+ size_type count = 0, last = 0, cur = 0;
- /**
+ while ((cur = find(str, last + 1)) != npos)
+ {
+ count++;
+ last = cur;
+ }
+
+ return count;
+ }
+
+ /**
* Determine if the string is alphanumeric
*
* @return true if the string contains only characters between a-z, A-Z and 0-9 and
* contains at least one character, else false
*/
- bool is_alnum() const
+ bool is_alnum() const
+ {
+ if (length() == 0)
+ {
+ return false;
+ }
+
+ for (const_iterator i = begin(); i != end(); i++)
+ {
+ if (*i < 'A' || *i > 'Z')
+ {
+ if (*i < '0' || *i > '9')
{
- if (length() == 0)
- return false;
-
- for (const_iterator i = begin(); i != end(); i++)
- {
- if (*i < 'A' || *i > 'Z')
- if (*i < '0' || *i > '9')
- if (*i < 'a' || *i > 'z')
- return false;
- }
-
- return true;
+ if (*i < 'a' || *i > 'z')
+ {
+ return false;
+ }
}
+ }
+ }
+
+ return true;
+ }
- /**
+ /**
* Determine if the string is alphabetic only
*
* @return true of the string contains only characters between a-z and A-Z and contains at
* least one character, else false
*/
- bool is_alpha() const
- {
- if (length() == 0)
- return false;
+ bool is_alpha() const
+ {
+ if (length() == 0)
+ {
+ return false;
+ }
- for (const_iterator i = begin(); i != end(); i++)
- if (*i < 'A' || (*i > 'Z' && (*i < 'a' || *i > 'z')))
- return false;
+ for (const_iterator i = begin(); i != end(); i++)
+ {
+ if (*i < 'A' || (*i > 'Z' && (*i < 'a' || *i > 'z')))
+ {
+ return false;
+ }
+ }
- return true;
- }
+ return true;
+ }
- /**
+ /**
* Determine if the string is numeric only
*
* @return true if the string contains only characters between 0-9 and contains at least
* one character, else false
*/
- bool is_numeric() const
- {
- if (length() == 0)
- return false;
+ bool is_numeric() const
+ {
+ if (length() == 0)
+ {
+ return false;
+ }
- for (const_iterator i = begin(); i != end(); i++)
- if (*i < '0' || *i > '9')
- return false;
+ for (const_iterator i = begin(); i != end(); i++)
+ {
+ if (*i < '0' || *i > '9')
+ {
+ return false;
+ }
+ }
- return true;
- }
+ return true;
+ }
- /**
+ /**
* Determine if a string is all lower case
*
* @return true if there is at least one character, and all characters are lowercase
* letters, else false
*/
- bool is_lower() const
- {
- if (length() == 0)
- return false;
+ bool is_lower() const
+ {
+ if (length() == 0)
+ {
+ return false;
+ }
- for (const_iterator i = begin(); i != end(); i++)
- if (*i < 'a' || *i < 'z')
- return false;
+ for (const_iterator i = begin(); i != end(); i++)
+ {
+ if (*i < 'a' || *i < 'z')
+ {
+ return false;
+ }
+ }
- return true;
- }
+ return true;
+ }
- /**
+ /**
* Determine if a string is all upper case
*
* @return true if there is at least one character, and all characters are uppercase
* letters, else false
*/
- bool is_upper() const
- {
- if (length() == 0)
- return false;
+ bool is_upper() const
+ {
+ if (length() == 0)
+ {
+ return false;
+ }
- for (const_iterator i = begin(); i != end(); i++)
- if (*i < 'A' || *i > 'Z')
- return false;
+ for (const_iterator i = begin(); i != end(); i++)
+ {
+ if (*i < 'A' || *i > 'Z')
+ {
+ return false;
+ }
+ }
- return true;
- }
+ return true;
+ }
- /**
+ /**
* Swap the case of a string
*
* @post Converts all uppercase to lowercase, and all lowercase to uppercase in the string
* @return *this
*/
- string_ref &swapcase()
- {
- for (iterator i = begin(); i != end(); i++)
- if (*i >= 'A' && *i <= 'Z')
- *i += ('a' - 'A');
- else if (*i >= 'a' && *i <= 'z')
- *i -= ('a' - 'A');
+ string_ref& swapcase()
+ {
+ for (iterator i = begin(); i != end(); i++)
+ {
+ if (*i >= 'A' && *i <= 'Z')
+ {
+ *i += ('a' - 'A');
+ }
+ else if (*i >= 'a' && *i <= 'z')
+ {
+ *i -= ('a' - 'A');
+ }
+ }
- return *this;
- }
+ return *this;
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: std::string_ref::start_with
Access: public
Qualifier: const
@@ -786,73 +849,84 @@ namespace std
Purpose: is the string start with str
*******************************************************************************/
- bool start_with(const string& str) const
- {
- return ( this->find(str) == 0 );
- }
-
- /// Return a string_ref equal to 'this' but with only the last \p N
- /// elements remaining. If \p N is greater than the length of the
- /// string, the entire string is returned.
-
- string_ref take_back(size_t N = 1) const {
- if (N >= size())
- return *this;
- return drop_front(size() - N);
- }
- /// Return a string_ref equal to 'this' but with the first \p N elements
- /// dropped.
-
- string_ref drop_front(size_t N = 1) const {
- //assert(size() >= N && "Dropping more elements than exist");
- return substr(N);
- }
-
-
-
- /// Return a string_ref equal to 'this' but with the last \p N elements
- /// dropped.
-
- string_ref drop_back(size_t N = 1) const {
-
- return substr(0, size() - N);
- }
-
- /// Return a string_ref equal to 'this', but with all characters satisfying
- /// the given predicate dropped from the beginning of the string.
-
- string_ref drop_while(std::function<bool(char)> F) const {
- return substr(std::find_if_not(begin(),end(),F)-begin());
- }
-
- /// Return a string_ref equal to 'this', but with all characters not
- /// satisfying the given predicate dropped from the beginning of the string.
-
- string_ref drop_until(std::function<bool(char)> F) const {
- return substr(std::find_if(begin(), end(), F) - begin());
- }
-
- /// Returns true if this string_ref has the given prefix and removes that
- /// prefix.
- bool consume_front(string_ref Prefix) {
- if (!start_with(Prefix))
- return false;
-
- *this = drop_front(Prefix.size());
- return true;
- }
-
- /// Returns true if this string_ref has the given suffix and removes that
- /// suffix.
- bool consume_back(string_ref Suffix) {
- if (!end_with(Suffix))
- return false;
+ bool start_with(string const& str) const
+ {
+ return (this->find(str) == 0);
+ }
+
+ /// Return a string_ref equal to 'this' but with only the last \p N
+ /// elements remaining. If \p N is greater than the length of the
+ /// string, the entire string is returned.
+
+ string_ref take_back(size_t N = 1) const
+ {
+ if (N >= size())
+ {
+ return *this;
+ }
+ return drop_front(size() - N);
+ }
+ /// Return a string_ref equal to 'this' but with the first \p N elements
+ /// dropped.
+
+ string_ref drop_front(size_t N = 1) const
+ {
+ //assert(size() >= N && "Dropping more elements than exist");
+ return substr(N);
+ }
+
+ /// Return a string_ref equal to 'this' but with the last \p N elements
+ /// dropped.
+
+ string_ref drop_back(size_t N = 1) const
+ {
+
+ return substr(0, size() - N);
+ }
+
+ /// Return a string_ref equal to 'this', but with all characters satisfying
+ /// the given predicate dropped from the beginning of the string.
+
+ string_ref drop_while(std::function<bool(char)> F) const
+ {
+ return substr(std::find_if_not(begin(), end(), F) - begin());
+ }
+
+ /// Return a string_ref equal to 'this', but with all characters not
+ /// satisfying the given predicate dropped from the beginning of the string.
+
+ string_ref drop_until(std::function<bool(char)> F) const
+ {
+ return substr(std::find_if(begin(), end(), F) - begin());
+ }
+
+ /// Returns true if this string_ref has the given prefix and removes that
+ /// prefix.
+ bool consume_front(string_ref Prefix)
+ {
+ if (!start_with(Prefix))
+ {
+ return false;
+ }
+
+ *this = drop_front(Prefix.size());
+ return true;
+ }
+
+ /// Returns true if this string_ref has the given suffix and removes that
+ /// suffix.
+ bool consume_back(string_ref Suffix)
+ {
+ if (!end_with(Suffix))
+ {
+ return false;
+ }
- *this = drop_back(Suffix.size());
- return true;
- }
+ *this = drop_back(Suffix.size());
+ return true;
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: std::string_ref::end_with
Access: public
Qualifier: const
@@ -861,17 +935,17 @@ namespace std
Purpose: is the string end with str
*******************************************************************************/
- bool end_with(const string& str) const
- {
- if (str.length() > this->length())
- {
- return false;
- }
- size_type off = this->length() - str.length();
- return ( find(str, off) == off);
- }
+ bool end_with(string const& str) const
+ {
+ if (str.length() > this->length())
+ {
+ return false;
+ }
+ size_type off = this->length() - str.length();
+ return (find(str, off) == off);
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::format
Access: public
Qualifier:
@@ -881,40 +955,40 @@ namespace std
Purpose: format the string
*******************************************************************************/
- string_ref& format(const char* format_string, ...)
- {
- if (format_string == 0)
- {
- return *this;
- }
+ string_ref& format(char const* format_string, ...)
+ {
+ if (format_string == 0)
+ {
+ return *this;
+ }
- va_list argList;
- va_start( argList, format_string );
+ va_list argList;
+ va_start(argList, format_string);
#ifdef _WIN32
- int len = _vscprintf( format_string, argList );
- char* pbuf = new char[len + 1];
- if (pbuf != 0)
- {
- vsprintf_s( pbuf, len + 1, format_string, argList );
- *this = pbuf;
- delete[] pbuf;
- }
+ int len = _vscprintf(format_string, argList);
+ char* pbuf = new char[len + 1];
+ if (pbuf != 0)
+ {
+ vsprintf_s(pbuf, len + 1, format_string, argList);
+ *this = pbuf;
+ delete[] pbuf;
+ }
#else
- const int INLINE_FORMAT_BUFFER_LEN =2048;
- char* buf = new char[INLINE_FORMAT_BUFFER_LEN + 1];
- if (buf != 0)
- {
- int len =vsnprintf(buf,INLINE_FORMAT_BUFFER_LEN, format_string, argList);
- assign(buf,buf+len);
- delete[] buf;
- }
+ int const INLINE_FORMAT_BUFFER_LEN = 2048;
+ char* buf = new char[INLINE_FORMAT_BUFFER_LEN + 1];
+ if (buf != 0)
+ {
+ int len = vsnprintf(buf, INLINE_FORMAT_BUFFER_LEN, format_string, argList);
+ assign(buf, buf + len);
+ delete[] buf;
+ }
#endif
- va_end( argList );
- return *this;
- }
+ va_end(argList);
+ return *this;
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::trim_left
Access: public
Qualifier:
@@ -923,17 +997,17 @@ namespace std
Purpose: delete all char which is ch at the left of the string
*******************************************************************************/
- string_ref& trim_left(value_type ch = ' ')
- {
- size_type off = this->find_first_not_of(ch);
- if (off != string::npos)
- {
- this->erase(0, off);
- }
- return *this;
- }
+ string_ref& trim_left(value_type ch = ' ')
+ {
+ size_type off = this->find_first_not_of(ch);
+ if (off != string::npos)
+ {
+ this->erase(0, off);
+ }
+ return *this;
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::trim_right
Access: public
Qualifier:
@@ -942,22 +1016,22 @@ namespace std
Purpose: delete all char which is ch at the right of the string
*******************************************************************************/
- string_ref& trim_right(value_type ch = ' ')
- {
- size_type off = this->find_last_not_of(ch);
- if (off == string::npos)
- {
- off = 0;
- }
- else
- {
- off++;
- }
- this->erase(off, length() - off);
- return *this;
- }
+ string_ref& trim_right(value_type ch = ' ')
+ {
+ size_type off = this->find_last_not_of(ch);
+ if (off == string::npos)
+ {
+ off = 0;
+ }
+ else
+ {
+ off++;
+ }
+ this->erase(off, length() - off);
+ return *this;
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::trim
Access: public
Qualifier:
@@ -966,14 +1040,14 @@ namespace std
Purpose: delete all char which is ch at the left and right of the string
*******************************************************************************/
- string_ref& trim(value_type ch = ' ')
- {
- trim_left(ch);
- trim_right(ch);
- return *this;
- }
-
- /*******************************************************************************
+ string_ref& trim(value_type ch = ' ')
+ {
+ trim_left(ch);
+ trim_right(ch);
+ return *this;
+ }
+
+ /*******************************************************************************
Function: hl_lib::string_ref::float_num
Access: public static
Qualifier:
@@ -982,12 +1056,12 @@ namespace std
Purpose: parse str to a float number
*******************************************************************************/
- static double float_num(const string& str)
- {
- return atof(str.c_str());
- }
+ static double float_num(string const& str)
+ {
+ return atof(str.c_str());
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::float_num
Access: public static
Qualifier:
@@ -995,12 +1069,12 @@ namespace std
Purpose: parse this to a float number
*******************************************************************************/
- double float_num() const
- {
- return float_num(*this);
- }
+ double float_num() const
+ {
+ return float_num(*this);
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::compare_nocase
Access: public
Qualifier: const
@@ -1009,16 +1083,16 @@ namespace std
Purpose: compare string no case
*******************************************************************************/
- int compare_nocase(const string& str) const
- {
+ int compare_nocase(string const& str) const
+ {
#ifdef _WIN32
- return _stricmp(this->c_str(), str.c_str());
+ return _stricmp(this->c_str(), str.c_str());
#else
- return strcasecmp(this->c_str(), str.c_str());
+ return strcasecmp(this->c_str(), str.c_str());
#endif
- }
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::compare_nocase
Access: public
Qualifier: const
@@ -1029,13 +1103,13 @@ namespace std
Purpose: compare substring no case
*******************************************************************************/
- int compare_nocase( size_type index, size_type length, const string &str ) const
- {
- string_ref temp = this->substr(index, length);
- return temp.compare_nocase(str);
- }
+ int compare_nocase(size_type index, size_type length, string const& str) const
+ {
+ string_ref temp = this->substr(index, length);
+ return temp.compare_nocase(str);
+ }
- /*******************************************************************************
+ /*******************************************************************************
Function: hl_lib::string_ref::compare_nocase
Access: public
Qualifier: const
@@ -1048,14 +1122,12 @@ namespace std
Purpose: compare two substring no case
*******************************************************************************/
- int compare_nocase( size_type index, size_type length, const string &str, size_type index2, size_type length2) const
- {
- string_ref temp1 = this->substr(index, length);
- string_ref temp2 = str.substr(index2, length2);
- return temp1.compare_nocase(temp2);
- }
-
- };
-
-}
-
+ int compare_nocase(size_type index, size_type length, string const& str, size_type index2, size_type length2) const
+ {
+ string_ref temp1 = this->substr(index, length);
+ string_ref temp2 = str.substr(index2, length2);
+ return temp1.compare_nocase(temp2);
+ }
+};
+
+} // namespace std
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ParentProcessWatcher.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ParentProcessWatcher.h
index 6d082d2d2a..96d6f67a3c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ParentProcessWatcher.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ParentProcessWatcher.h
@@ -6,12 +6,11 @@
class ParentProcessWatcher
{
public:
- struct ParentProcessWatcherData;
+ struct ParentProcessWatcherData;
- ParentProcessWatcher(lsp::Log& log, int pid, const std::function<void()>&& callback, uint32_t poll_delay_secs = 10);
+ ParentProcessWatcher(lsp::Log& log, int pid, std::function<void()> const&& callback, uint32_t poll_delay_secs = 10);
- ~ParentProcessWatcher();
+ ~ParentProcessWatcher();
- std::shared_ptr<ParentProcessWatcherData> d_ptr;
+ std::shared_ptr<ParentProcessWatcherData> d_ptr;
};
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProcessIoService.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProcessIoService.h
index 5edecef0b2..0c4b89781b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProcessIoService.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProcessIoService.h
@@ -4,45 +4,41 @@
namespace lsp
{
- class ProcessIoService
- {
- public:
- using IOService = boost::asio::io_service;
- using Work = boost::asio::io_service::work;
- using WorkPtr = std::unique_ptr<Work>;
-
- ProcessIoService() {
-
- work_ = std::unique_ptr<Work>(new Work(ioService_));
- auto temp_thread_ = new std::thread([this]
- {
- ioService_.run();
- });
- thread_ = std::unique_ptr<std::thread>(temp_thread_);
- }
+class ProcessIoService
+{
+public:
+ using IOService = boost::asio::io_context;
+ using Work = boost::asio::io_context::work;
+ using WorkPtr = std::unique_ptr<Work>;
- ProcessIoService(const ProcessIoService&) = delete;
- ProcessIoService& operator=(const ProcessIoService&) = delete;
+ ProcessIoService()
+ {
- boost::asio::io_service& getIOService()
- {
- return ioService_;
- }
+ work_ = std::unique_ptr<Work>(new Work(ioService_));
+ auto temp_thread_ = new std::thread([this] { ioService_.run(); });
+ thread_ = std::unique_ptr<std::thread>(temp_thread_);
+ }
- void stop()
- {
+ ProcessIoService(ProcessIoService const&) = delete;
+ ProcessIoService& operator=(ProcessIoService const&) = delete;
- work_.reset();
+ boost::asio::io_context& getIOService()
+ {
+ return ioService_;
+ }
- thread_->join();
+ void stop()
+ {
- }
+ work_.reset();
- private:
- IOService ioService_;
- WorkPtr work_;
- std::unique_ptr<std::thread> thread_;
+ thread_->join();
+ }
- };
+private:
+ IOService ioService_;
+ WorkPtr work_;
+ std::unique_ptr<std::thread> thread_;
+};
-}
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProtocolJsonHandler.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProtocolJsonHandler.h
index f6097fe172..11483e6c6b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProtocolJsonHandler.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ProtocolJsonHandler.h
@@ -1,11 +1,12 @@
#pragma once
#include "LibLsp/JsonRpc/MessageJsonHandler.h"
-namespace lsp {
- class ProtocolJsonHandler : public MessageJsonHandler
- {
- public:
- ProtocolJsonHandler();
- };
+namespace lsp
+{
+class ProtocolJsonHandler : public MessageJsonHandler
+{
+public:
+ ProtocolJsonHandler();
+};
-}
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ResourceOperation.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ResourceOperation.h
index 3d317a8153..0fe3c9f37b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/ResourceOperation.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/ResourceOperation.h
@@ -5,117 +5,119 @@
#include "lsDocumentUri.h"
#include "LibLsp/lsp/lsAny.h"
#include "LibLsp/lsp/lsTextEdit.h"
-struct ResourceOperation {
- std::string kind;
- virtual ~ResourceOperation() = default;
+struct ResourceOperation
+{
+ std::string kind;
+ virtual ~ResourceOperation() = default;
- MAKE_SWAP_METHOD(ResourceOperation, kind);
+ MAKE_SWAP_METHOD(ResourceOperation, kind);
};
MAKE_REFLECT_STRUCT(ResourceOperation, kind);
extern void Reflect(Writer& visitor, ResourceOperation* value);
-struct CreateFileOptions{
+struct CreateFileOptions
+{
- /**
+ /**
* Overwrite existing file. Overwrite wins over `ignoreIfExists`
*/
- optional<bool> overwrite = false;
+ optional<bool> overwrite = false;
- /**
+ /**
* Ignore if exists.
*/
- optional< bool> ignoreIfExists =false;
+ optional<bool> ignoreIfExists = false;
- MAKE_SWAP_METHOD(CreateFileOptions, overwrite, ignoreIfExists)
+ MAKE_SWAP_METHOD(CreateFileOptions, overwrite, ignoreIfExists)
};
MAKE_REFLECT_STRUCT(CreateFileOptions, overwrite, ignoreIfExists)
-struct lsCreateFile :public ResourceOperation {
+struct lsCreateFile : public ResourceOperation
+{
- /**
+ /**
* The resource to create.
*/
- lsCreateFile();
- lsDocumentUri uri;
+ lsCreateFile();
+ lsDocumentUri uri;
- /**
+ /**
* Additional options
*/
- optional<CreateFileOptions> options;
+ optional<CreateFileOptions> options;
-
- /**
+ /**
* An optional annotation identifer describing the operation.
*
* @since 3.16.0
*/
- optional<lsChangeAnnotationIdentifier> annotationId;
+ optional<lsChangeAnnotationIdentifier> annotationId;
- MAKE_SWAP_METHOD(lsCreateFile, kind, uri, options, annotationId)
+ MAKE_SWAP_METHOD(lsCreateFile, kind, uri, options, annotationId)
};
-MAKE_REFLECT_STRUCT(lsCreateFile, kind, uri,options, annotationId)
-
+MAKE_REFLECT_STRUCT(lsCreateFile, kind, uri, options, annotationId)
-struct DeleteFileOptions {
- /**
+struct DeleteFileOptions
+{
+ /**
* Delete the content recursively if a folder is denoted.
*/
- optional<bool> recursive = false;
+ optional<bool> recursive = false;
- /**
+ /**
* Ignore the operation if the file doesn't exist.
*/
- optional<bool> ignoreIfNotExists = false;
+ optional<bool> ignoreIfNotExists = false;
-
- MAKE_SWAP_METHOD(DeleteFileOptions, recursive, ignoreIfNotExists);
+ MAKE_SWAP_METHOD(DeleteFileOptions, recursive, ignoreIfNotExists);
};
MAKE_REFLECT_STRUCT(DeleteFileOptions, recursive, ignoreIfNotExists)
-struct lsDeleteFile :public ResourceOperation {
- /**
+struct lsDeleteFile : public ResourceOperation
+{
+ /**
* The file to delete.
*/
- lsDeleteFile();
- lsDocumentUri uri;
+ lsDeleteFile();
+ lsDocumentUri uri;
- /**
+ /**
* Delete options.
*/
- optional<DeleteFileOptions> options;
+ optional<DeleteFileOptions> options;
- MAKE_SWAP_METHOD(lsDeleteFile, kind, uri, options);
+ MAKE_SWAP_METHOD(lsDeleteFile, kind, uri, options);
};
-MAKE_REFLECT_STRUCT(lsDeleteFile, kind, uri,options);
+MAKE_REFLECT_STRUCT(lsDeleteFile, kind, uri, options);
-typedef CreateFileOptions RenameFileOptions;
-struct lsRenameFile :public ResourceOperation {
- /**
+typedef CreateFileOptions RenameFileOptions;
+struct lsRenameFile : public ResourceOperation
+{
+ /**
* The old (existing) location.
*/
- lsRenameFile();
- lsDocumentUri oldUri;
+ lsRenameFile();
+ lsDocumentUri oldUri;
- /**
+ /**
* The new location.
*/
- lsDocumentUri newUri;
+ lsDocumentUri newUri;
- /**
+ /**
* Rename options.
*/
- optional<RenameFileOptions> options;
+ optional<RenameFileOptions> options;
- /**
+ /**
* An optional annotation identifer describing the operation.
*
* @since 3.16.0
*/
- optional<lsChangeAnnotationIdentifier> annotationId;
+ optional<lsChangeAnnotationIdentifier> annotationId;
- MAKE_SWAP_METHOD(lsRenameFile, kind, oldUri, newUri, options, annotationId)
+ MAKE_SWAP_METHOD(lsRenameFile, kind, oldUri, newUri, options, annotationId)
};
MAKE_REFLECT_STRUCT(lsRenameFile, kind, oldUri, newUri, options, annotationId);
-
-extern ResourceOperation* GetResourceOperation(lsp::Any& lspAny);
+extern ResourceOperation* GetResourceOperation(lsp::Any& lspAny);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/SimpleTimer.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/SimpleTimer.h
index 3178d25d69..7b8f7f4265 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/SimpleTimer.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/SimpleTimer.h
@@ -8,21 +8,22 @@ template<typename Duration = boost::posix_time::milliseconds>
class SimpleTimer
{
public:
- SimpleTimer(unsigned int duration,const std::function<void()>& _call_back)
- :is_running_(true), call_back(_call_back), _deadline_timer(_ios, Duration(duration))
+ SimpleTimer(unsigned int duration, std::function<void()> const& _call_back)
+ : is_running_(true), call_back(_call_back), _deadline_timer(_ios, Duration(duration))
{
- _deadline_timer.async_wait([&](const boost::system::error_code& e)
- {
- if (e.value() == boost::asio::error::operation_aborted)
- {
- return;
- }
- if(is_running_.load(std::memory_order_relaxed))
+ _deadline_timer.async_wait(
+ [&](boost::system::error_code const& e)
{
- call_back();
+ if (e.value() == boost::asio::error::operation_aborted)
+ {
+ return;
+ }
+ if (is_running_.load(std::memory_order_relaxed))
+ {
+ call_back();
+ }
}
-
- });
+ );
_thread = std::thread([this] { _ios.run(); });
}
~SimpleTimer()
@@ -38,12 +39,11 @@ public:
_thread.join();
}
}
+
private:
std::atomic_bool is_running_;
std::function<void()> call_back;
- boost::asio::io_service _ios;
+ boost::asio::io_context _ios;
boost::asio::deadline_timer _deadline_timer;
std::thread _thread;
-
-
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/registerCapability.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/registerCapability.h
index 60484db56a..f4431f0235 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/registerCapability.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/registerCapability.h
@@ -6,24 +6,24 @@
* General parameters to register for a capability.
*/
-struct Registration {
- static Registration Create(const std::string& method);
- /**
+struct Registration
+{
+ static Registration Create(std::string const& method);
+ /**
* The id used to register the request. The id can be used to deregister
* the request again.
*/
- std::string id;
+ std::string id;
- /**
+ /**
* The method / capability to register for.
*/
- std::string method;
+ std::string method;
- MAKE_SWAP_METHOD(Registration, id, method);
+ MAKE_SWAP_METHOD(Registration, id, method);
};
-
MAKE_REFLECT_STRUCT(Registration, id, method);
/**
@@ -35,8 +35,8 @@ MAKE_REFLECT_STRUCT(Registration, id, method);
*/
struct RegistrationParams
{
- std::vector<Registration> registrations;
- MAKE_SWAP_METHOD(RegistrationParams, registrations);
+ std::vector<Registration> registrations;
+ MAKE_SWAP_METHOD(RegistrationParams, registrations);
};
/**
* The client/registerCapability request is sent from the server to the client
@@ -46,4 +46,4 @@ struct RegistrationParams
*/
MAKE_REFLECT_STRUCT(RegistrationParams, registrations);
-DEFINE_REQUEST_RESPONSE_TYPE(Req_ClientRegisterCapability, RegistrationParams,JsonNull, "client/registerCapability");
+DEFINE_REQUEST_RESPONSE_TYPE(Req_ClientRegisterCapability, RegistrationParams, JsonNull, "client/registerCapability");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/unregisterCapability.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/unregisterCapability.h
index 33bf9d1db6..f70dfd639c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/unregisterCapability.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/client/unregisterCapability.h
@@ -9,21 +9,22 @@
* General parameters to unregister a capability.
*/
-struct Unregistration {
- /**
+struct Unregistration
+{
+ /**
* The id used to unregister the request or notification. Usually an id
* provided during the register request.
*/
- std::string id;
+ std::string id;
- /**
+ /**
* The method / capability to unregister for.
*/
- std::string method;
+ std::string method;
- MAKE_SWAP_METHOD(Unregistration, id, method);
+ MAKE_SWAP_METHOD(Unregistration, id, method);
};
MAKE_REFLECT_STRUCT(Unregistration, id, method);
/**
@@ -32,10 +33,12 @@ MAKE_REFLECT_STRUCT(Unregistration, id, method);
*/
struct UnregistrationParams
{
- std::vector<Unregistration> unregisterations;
- MAKE_SWAP_METHOD(UnregistrationParams, unregisterations);
+ std::vector<Unregistration> unregisterations;
+ MAKE_SWAP_METHOD(UnregistrationParams, unregisterations);
};
MAKE_REFLECT_STRUCT(UnregistrationParams, unregisterations);
-DEFINE_REQUEST_RESPONSE_TYPE(Req_ClientUnregisterCapability, UnregistrationParams,JsonNull, "client/unregisterCapability");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ Req_ClientUnregisterCapability, UnregistrationParams, JsonNull, "client/unregisterCapability"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/Move.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/Move.h
index c0beb625f2..af64f2ba2e 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/Move.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/Move.h
@@ -7,8 +7,4 @@
#include "getMoveDestinations.h"
#include "getRefactorEdit.h"
-
DEFINE_REQUEST_RESPONSE_TYPE(java_move, MoveParams, RefactorWorkspaceEdit, "java/move");
-
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/OverridableMethod.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/OverridableMethod.h
index dd0ada60cc..2e577d3915 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/OverridableMethod.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/OverridableMethod.h
@@ -4,31 +4,31 @@
#include <string>
struct OverridableMethod
{
- std::string bindingKey;
- std::string name;
- std::vector<std::string> parameters;
- bool unimplemented = false;
- std::string declaringClass;
- std::string declaringClassType;
+ std::string bindingKey;
+ std::string name;
+ std::vector<std::string> parameters;
+ bool unimplemented = false;
+ std::string declaringClass;
+ std::string declaringClassType;
- void swap(OverridableMethod& arg) noexcept
- {
- bindingKey.swap(arg.bindingKey);
- name.swap(arg.name);
- parameters.swap(arg.parameters);
- declaringClass.swap(arg.declaringClass);
- declaringClassType.swap(arg.declaringClassType);
- std::swap(unimplemented, arg.unimplemented);
- }
+ void swap(OverridableMethod& arg) noexcept
+ {
+ bindingKey.swap(arg.bindingKey);
+ name.swap(arg.name);
+ parameters.swap(arg.parameters);
+ declaringClass.swap(arg.declaringClass);
+ declaringClassType.swap(arg.declaringClassType);
+ std::swap(unimplemented, arg.unimplemented);
+ }
};
MAKE_REFLECT_STRUCT(OverridableMethod, bindingKey, name, parameters, unimplemented, declaringClass, declaringClassType);
-struct OverridableMethodsResponse
+struct OverridableMethodsResponse
{
- std::string type;
- std::vector<OverridableMethod> methods;
+ std::string type;
+ std::vector<OverridableMethod> methods;
- MAKE_SWAP_METHOD(OverridableMethodsResponse, type, methods)
+ MAKE_SWAP_METHOD(OverridableMethodsResponse, type, methods)
};
MAKE_REFLECT_STRUCT(OverridableMethodsResponse, type, methods)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/WorkspaceSymbolParams.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/WorkspaceSymbolParams.h
index c8ddbe3c01..c49c8c72f6 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/WorkspaceSymbolParams.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/WorkspaceSymbolParams.h
@@ -3,11 +3,9 @@
#include "LibLsp/JsonRpc/serializer.h"
#include <string>
-
-struct WorkspaceSymbolParams
+struct WorkspaceSymbolParams
{
- std::string query;
- MAKE_SWAP_METHOD(WorkspaceSymbolParams, query);
+ std::string query;
+ MAKE_SWAP_METHOD(WorkspaceSymbolParams, query);
};
MAKE_REFLECT_STRUCT(WorkspaceSymbolParams, query);
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/addOverridableMethods.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/addOverridableMethods.h
index 527b3b1827..2d8d90e2e1 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/addOverridableMethods.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/addOverridableMethods.h
@@ -5,15 +5,16 @@
#include "LibLsp/lsp/CodeActionParams.h"
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
-struct AddOverridableMethodParams {
- lsCodeActionParams context;
- std::vector<OverridableMethod> overridableMethods;
+struct AddOverridableMethodParams
+{
+ lsCodeActionParams context;
+ std::vector<OverridableMethod> overridableMethods;
- MAKE_SWAP_METHOD(AddOverridableMethodParams, context, overridableMethods);
+ MAKE_SWAP_METHOD(AddOverridableMethodParams, context, overridableMethods);
};
MAKE_REFLECT_STRUCT(AddOverridableMethodParams, context, overridableMethods);
-DEFINE_REQUEST_RESPONSE_TYPE(java_addOverridableMethods, AddOverridableMethodParams, lsWorkspaceEdit, "java/addOverridableMethods");
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_addOverridableMethods, AddOverridableMethodParams, lsWorkspaceEdit, "java/addOverridableMethods"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/buildWorkspace.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/buildWorkspace.h
index 4809e360bb..72d457e8d7 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/buildWorkspace.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/buildWorkspace.h
@@ -4,13 +4,13 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
+enum class BuildWorkspaceStatus : uint8_t
+{
-
-
-
-enum class BuildWorkspaceStatus : uint8_t{
-
- FAILED, SUCCEED, WITH_ERROR, CANCELLED,
+ FAILED,
+ SUCCEED,
+ WITH_ERROR,
+ CANCELLED,
};
MAKE_REFLECT_TYPE_PROXY(BuildWorkspaceStatus)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkConstructorsStatus.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkConstructorsStatus.h
index acb1e4caa6..aa34302ddd 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkConstructorsStatus.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkConstructorsStatus.h
@@ -5,25 +5,24 @@
#include "LibLsp/lsp/CodeActionParams.h"
#include "checkHashCodeEqualsStatus.h"
-struct LspMethodBinding {
- std::string bindingKey;
- std::string name;
- std::vector< std::string> parameters;
+struct LspMethodBinding
+{
+ std::string bindingKey;
+ std::string name;
+ std::vector<std::string> parameters;
- MAKE_SWAP_METHOD(LspMethodBinding, bindingKey, name, parameters);
+ MAKE_SWAP_METHOD(LspMethodBinding, bindingKey, name, parameters);
};
MAKE_REFLECT_STRUCT(LspMethodBinding, bindingKey, name, parameters);
-
-struct CheckConstructorsResponse {
- std::vector<LspMethodBinding> constructors;
- std::vector<LspVariableBinding> fields;
- MAKE_SWAP_METHOD(CheckConstructorsResponse, constructors, fields)
+struct CheckConstructorsResponse
+{
+ std::vector<LspMethodBinding> constructors;
+ std::vector<LspVariableBinding> fields;
+ MAKE_SWAP_METHOD(CheckConstructorsResponse, constructors, fields)
};
-MAKE_REFLECT_STRUCT(CheckConstructorsResponse, constructors,fields)
-
-DEFINE_REQUEST_RESPONSE_TYPE(java_checkConstructorsStatus, lsCodeActionParams, CheckConstructorsResponse,"java/checkConstructorsStatus")
-
-
-
+MAKE_REFLECT_STRUCT(CheckConstructorsResponse, constructors, fields)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_checkConstructorsStatus, lsCodeActionParams, CheckConstructorsResponse, "java/checkConstructorsStatus"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkDelegateMethodsStatus.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkDelegateMethodsStatus.h
index 68a7ed6606..0d9d3528d1 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkDelegateMethodsStatus.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkDelegateMethodsStatus.h
@@ -7,23 +7,23 @@
#include "checkHashCodeEqualsStatus.h"
#include "checkConstructorsStatus.h"
-struct LspDelegateField {
- LspVariableBinding field;
- std::vector<LspMethodBinding> delegateMethods;
+struct LspDelegateField
+{
+ LspVariableBinding field;
+ std::vector<LspMethodBinding> delegateMethods;
- MAKE_SWAP_METHOD(LspDelegateField, field, delegateMethods);
+ MAKE_SWAP_METHOD(LspDelegateField, field, delegateMethods);
};
MAKE_REFLECT_STRUCT(LspDelegateField, field, delegateMethods);
+struct CheckDelegateMethodsResponse
+{
+ std::vector<LspDelegateField> delegateFields;
-struct CheckDelegateMethodsResponse {
- std::vector<LspDelegateField> delegateFields;
-
- MAKE_SWAP_METHOD(CheckDelegateMethodsResponse, delegateFields)
+ MAKE_SWAP_METHOD(CheckDelegateMethodsResponse, delegateFields)
};
MAKE_REFLECT_STRUCT(CheckDelegateMethodsResponse, delegateFields)
-DEFINE_REQUEST_RESPONSE_TYPE(java_checkDelegateMethodsStatus,
- lsCodeActionParams, CheckDelegateMethodsResponse, "java/checkDelegateMethodsStatus");
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_checkDelegateMethodsStatus, lsCodeActionParams, CheckDelegateMethodsResponse, "java/checkDelegateMethodsStatus"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkHashCodeEqualsStatus.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkHashCodeEqualsStatus.h
index 88731c29b5..43b6cce924 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkHashCodeEqualsStatus.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkHashCodeEqualsStatus.h
@@ -7,30 +7,31 @@
#include "LibLsp/lsp/CodeActionParams.h"
-struct LspVariableBinding {
- std::string bindingKey;
- std::string name;
- std::string type;
- bool isField;
- void swap(LspVariableBinding& arg) noexcept
- {
- bindingKey.swap(arg.bindingKey);
- name.swap(arg.name);
- type.swap(arg.type);
- std::swap(isField, arg.isField);
- }
+struct LspVariableBinding
+{
+ std::string bindingKey;
+ std::string name;
+ std::string type;
+ bool isField;
+ void swap(LspVariableBinding& arg) noexcept
+ {
+ bindingKey.swap(arg.bindingKey);
+ name.swap(arg.name);
+ type.swap(arg.type);
+ std::swap(isField, arg.isField);
+ }
};
MAKE_REFLECT_STRUCT(LspVariableBinding, bindingKey, name, type, isField)
-struct CheckHashCodeEqualsResponse {
- std::string type;
- std::vector<LspVariableBinding> fields;
- std::vector<std::string> existingMethods;
- MAKE_SWAP_METHOD(CheckHashCodeEqualsResponse, type, fields, type, existingMethods)
+struct CheckHashCodeEqualsResponse
+{
+ std::string type;
+ std::vector<LspVariableBinding> fields;
+ std::vector<std::string> existingMethods;
+ MAKE_SWAP_METHOD(CheckHashCodeEqualsResponse, type, fields, type, existingMethods)
};
MAKE_REFLECT_STRUCT(CheckHashCodeEqualsResponse, type, fields, type, existingMethods)
-DEFINE_REQUEST_RESPONSE_TYPE(java_checkHashCodeEqualsStatus,
- lsCodeActionParams, CheckHashCodeEqualsResponse, "java/checkHashCodeEqualsStatus")
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_checkHashCodeEqualsStatus, lsCodeActionParams, CheckHashCodeEqualsResponse, "java/checkHashCodeEqualsStatus"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkToStringStatus.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkToStringStatus.h
index cadb5ba7dd..8af76126b5 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkToStringStatus.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkToStringStatus.h
@@ -5,20 +5,20 @@
#include "LibLsp/lsp/CodeActionParams.h"
#include "checkHashCodeEqualsStatus.h"
-struct CheckToStringResponse {
- std::string type;
- std::vector<LspVariableBinding> fields;
- bool exists;
- void swap(CheckToStringResponse& arg) noexcept
- {
- type.swap(arg.type);
- fields.swap(arg.fields);
- std::swap(exists, arg.exists);
- }
+struct CheckToStringResponse
+{
+ std::string type;
+ std::vector<LspVariableBinding> fields;
+ bool exists;
+ void swap(CheckToStringResponse& arg) noexcept
+ {
+ type.swap(arg.type);
+ fields.swap(arg.fields);
+ std::swap(exists, arg.exists);
+ }
};
-MAKE_REFLECT_STRUCT(CheckToStringResponse,type,fields,exists)
-
-DEFINE_REQUEST_RESPONSE_TYPE(java_checkToStringStatus,
- lsCodeActionParams, CheckToStringResponse ,"java/checkToStringStatus")
-
+MAKE_REFLECT_STRUCT(CheckToStringResponse, type, fields, exists)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_checkToStringStatus, lsCodeActionParams, CheckToStringResponse, "java/checkToStringStatus"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/classFileContents.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/classFileContents.h
index 70eb121b99..9c859433df 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/classFileContents.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/classFileContents.h
@@ -6,5 +6,4 @@
#include <string>
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
-DEFINE_REQUEST_RESPONSE_TYPE(java_classFileContents, lsTextDocumentIdentifier, std::string ,"java/classFileContents");
-
+DEFINE_REQUEST_RESPONSE_TYPE(java_classFileContents, lsTextDocumentIdentifier, std::string, "java/classFileContents");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/codeActionResult.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/codeActionResult.h
index c0195908d0..668d477497 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/codeActionResult.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/codeActionResult.h
@@ -7,9 +7,10 @@
#include <set>
#include "LibLsp/lsp/textDocument/code_action.h"
-namespace SourceAssistProcessor {
+namespace SourceAssistProcessor
+{
- /*std::set<std::string> UNSUPPORTED_RESOURCES = { "module-info.java", "package-info.java"
+/*std::set<std::string> UNSUPPORTED_RESOURCES = { "module-info.java", "package-info.java"
};*/
// static const char* COMMAND_ID_ACTION_OVERRIDEMETHODSPROMPT = "java.action.overrideMethodsPrompt";
@@ -19,4 +20,4 @@ namespace SourceAssistProcessor {
// static const char* COMMAND_ID_ACTION_GENERATEACCESSORSPROMPT = "java.action.generateAccessorsPrompt";
// static const char* COMMAND_ID_ACTION_GENERATECONSTRUCTORSPROMPT = "java.action.generateConstructorsPrompt";
// static const char* COMMAND_ID_ACTION_GENERATEDELEGATEMETHODSPROMPT = "java.action.generateDelegateMethodsPrompt";
-};
+}; // namespace SourceAssistProcessor
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/executeCommand.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/executeCommand.h
index 19479adfaf..8585a1d091 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/executeCommand.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/executeCommand.h
@@ -4,7 +4,7 @@
#include <string>
#include "LibLsp/lsp/lsWorkspaceEdit.h"
#include "LibLsp/lsp/ExecuteCommandParams.h"
-namespace buildpath
+namespace buildpath
{
// static const char* EDIT_ORGNIZEIMPORTS = "java.edit.organizeImports";
// static const char* RESOLVE_SOURCE_ATTACHMENT = "java.project.resolveSourceAttachment";
@@ -16,14 +16,12 @@ namespace buildpath
// static const char* REMOVE_FROM_SOURCEPATH = "java.project.removeFromSourcePath";
// static const char* LIST_SOURCEPATHS = "java.project.listSourcePaths";
- struct Result {
- bool status;
- std::string message;
- };
-
-
-
-}
+struct Result
+{
+ bool status;
+ std::string message;
+};
+} // namespace buildpath
DEFINE_REQUEST_RESPONSE_TYPE(java_executeCommand, ExecuteCommandParams, lsWorkspaceEdit, "java/executeCommand");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/findLinks.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/findLinks.h
index fd470b17c8..413fe1bded 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/findLinks.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/findLinks.h
@@ -7,16 +7,14 @@
#include "getRefactorEdit.h"
#include "LibLsp/lsp/lsTextDocumentPositionParams.h"
-struct FindLinksParams {
- // Supported link types: superImplementation
- std::string type;
- lsTextDocumentPositionParams position;
+struct FindLinksParams
+{
+ // Supported link types: superImplementation
+ std::string type;
+ lsTextDocumentPositionParams position;
- MAKE_SWAP_METHOD(FindLinksParams, type, position)
+ MAKE_SWAP_METHOD(FindLinksParams, type, position)
};
-MAKE_REFLECT_STRUCT(FindLinksParams,type,position)
-
-DEFINE_REQUEST_RESPONSE_TYPE(java_findLinks, FindLinksParams,lsp::Any, "java/findLinks");
-
-
+MAKE_REFLECT_STRUCT(FindLinksParams, type, position)
+DEFINE_REQUEST_RESPONSE_TYPE(java_findLinks, FindLinksParams, lsp::Any, "java/findLinks");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateAccessors.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateAccessors.h
index 82013096c7..e8b7d94c3c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateAccessors.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateAccessors.h
@@ -6,14 +6,15 @@
#include "checkHashCodeEqualsStatus.h"
#include "resolveUnimplementedAccessors.h"
+struct GenerateAccessorsParams
+{
+ lsCodeActionParams context;
+ std::vector<AccessorField> accessors;
-struct GenerateAccessorsParams {
- lsCodeActionParams context;
- std::vector<AccessorField> accessors;
-
-
- MAKE_SWAP_METHOD(GenerateAccessorsParams, context, accessors)
+ MAKE_SWAP_METHOD(GenerateAccessorsParams, context, accessors)
};
MAKE_REFLECT_STRUCT(GenerateAccessorsParams, context, accessors)
-DEFINE_REQUEST_RESPONSE_TYPE(java_generateAccessors, GenerateAccessorsParams, lsWorkspaceEdit, "java/generateAccessors");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_generateAccessors, GenerateAccessorsParams, lsWorkspaceEdit, "java/generateAccessors"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateConstructors.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateConstructors.h
index 157fefed79..fe0266f026 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateConstructors.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateConstructors.h
@@ -6,14 +6,15 @@
#include "checkHashCodeEqualsStatus.h"
#include "checkConstructorsStatus.h"
-
-struct GenerateConstructorsParams {
- lsCodeActionParams context;
- std::vector<LspMethodBinding> constructors;
- std::vector< LspVariableBinding >fields;
- MAKE_SWAP_METHOD(GenerateConstructorsParams, context, fields)
+struct GenerateConstructorsParams
+{
+ lsCodeActionParams context;
+ std::vector<LspMethodBinding> constructors;
+ std::vector<LspVariableBinding> fields;
+ MAKE_SWAP_METHOD(GenerateConstructorsParams, context, fields)
};
MAKE_REFLECT_STRUCT(GenerateConstructorsParams, context, fields)
-DEFINE_REQUEST_RESPONSE_TYPE(java_generateConstructors, GenerateConstructorsParams, lsWorkspaceEdit, "java/generateConstructors");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_generateConstructors, GenerateConstructorsParams, lsWorkspaceEdit, "java/generateConstructors"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateDelegateMethods.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateDelegateMethods.h
index c6b4729378..240dd0cd41 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateDelegateMethods.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateDelegateMethods.h
@@ -6,20 +6,22 @@
#include "checkHashCodeEqualsStatus.h"
#include "checkConstructorsStatus.h"
-struct LspDelegateEntry {
- LspVariableBinding field;
- LspMethodBinding delegateMethod;
- MAKE_SWAP_METHOD(LspDelegateEntry, field, delegateMethod);
+struct LspDelegateEntry
+{
+ LspVariableBinding field;
+ LspMethodBinding delegateMethod;
+ MAKE_SWAP_METHOD(LspDelegateEntry, field, delegateMethod);
};
MAKE_REFLECT_STRUCT(LspDelegateEntry, field, delegateMethod);
-
-struct GenerateDelegateMethodsParams {
- lsCodeActionParams context;
- std::vector<LspDelegateEntry> delegateEntries;
- MAKE_SWAP_METHOD(GenerateDelegateMethodsParams, context, delegateEntries)
+struct GenerateDelegateMethodsParams
+{
+ lsCodeActionParams context;
+ std::vector<LspDelegateEntry> delegateEntries;
+ MAKE_SWAP_METHOD(GenerateDelegateMethodsParams, context, delegateEntries)
};
MAKE_REFLECT_STRUCT(GenerateDelegateMethodsParams, context, delegateEntries)
-DEFINE_REQUEST_RESPONSE_TYPE(java_generateDelegateMethods, GenerateDelegateMethodsParams, lsWorkspaceEdit, "java/generateDelegateMethods");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_generateDelegateMethods, GenerateDelegateMethodsParams, lsWorkspaceEdit, "java/generateDelegateMethods"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateHashCodeEquals.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateHashCodeEquals.h
index 0881d305b1..f6622c5ee4 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateHashCodeEquals.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateHashCodeEquals.h
@@ -7,19 +7,20 @@
#include "LibLsp/lsp/CodeActionParams.h"
#include "checkHashCodeEqualsStatus.h"
-struct GenerateHashCodeEqualsParams {
- lsCodeActionParams context;
- std::vector<LspVariableBinding> fields;
- bool regenerate= false;
- void swap(GenerateHashCodeEqualsParams& arg) noexcept
- {
- context.swap(arg.context);
- fields.swap(arg.fields);
- std::swap(regenerate, arg.regenerate);
- }
+struct GenerateHashCodeEqualsParams
+{
+ lsCodeActionParams context;
+ std::vector<LspVariableBinding> fields;
+ bool regenerate = false;
+ void swap(GenerateHashCodeEqualsParams& arg) noexcept
+ {
+ context.swap(arg.context);
+ fields.swap(arg.fields);
+ std::swap(regenerate, arg.regenerate);
+ }
};
MAKE_REFLECT_STRUCT(GenerateHashCodeEqualsParams, context, fields, regenerate);
-DEFINE_REQUEST_RESPONSE_TYPE(java_generateHashCodeEquals, GenerateHashCodeEqualsParams, lsWorkspaceEdit, "java/generateHashCodeEquals")
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_generateHashCodeEquals, GenerateHashCodeEqualsParams, lsWorkspaceEdit, "java/generateHashCodeEquals"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateToString.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateToString.h
index 5e5324a59b..53747a8ca2 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateToString.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateToString.h
@@ -5,13 +5,12 @@
#include <string>
#include "checkHashCodeEqualsStatus.h"
+struct GenerateToStringParams
+{
+ lsCodeActionParams context;
+ std::vector<LspVariableBinding> fields;
-struct GenerateToStringParams {
- lsCodeActionParams context;
- std::vector< LspVariableBinding >fields;
-
- MAKE_SWAP_METHOD(GenerateToStringParams, context, fields)
-
+ MAKE_SWAP_METHOD(GenerateToStringParams, context, fields)
};
MAKE_REFLECT_STRUCT(GenerateToStringParams, context, fields)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getMoveDestinations.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getMoveDestinations.h
index 8fbe2caa8d..3232d22ba0 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getMoveDestinations.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getMoveDestinations.h
@@ -8,58 +8,59 @@
struct MoveKindInfo
{
- static std::string moveResource()
- {
- return "moveResource";
- }
- static std::string moveInstanceMethod()
- {
- return "moveInstanceMethod";
- }
- static std::string moveStaticMember()
- {
- return "moveStaticMember";
- }
+ static std::string moveResource()
+ {
+ return "moveResource";
+ }
+ static std::string moveInstanceMethod()
+ {
+ return "moveInstanceMethod";
+ }
+ static std::string moveStaticMember()
+ {
+ return "moveStaticMember";
+ }
};
-struct MoveParams {
- /**
+struct MoveParams
+{
+ /**
* The supported move kind: moveResource, moveInstanceMethod, moveStaticMember,
* moveTypeToNewFile.
*/
- std::string moveKind;
- /**
+ std::string moveKind;
+ /**
* The selected resource uris when the move operation is triggered.
*/
- std::vector<std::string> sourceUris;
- /**
+ std::vector<std::string> sourceUris;
+ /**
* The code action params when the move operation is triggered.
*/
- optional<lsCodeActionParams> params;
- /**
+ optional<lsCodeActionParams> params;
+ /**
* The possible destination: a folder/package, class, instanceDeclaration.
*/
- lsp::Any destination;
- bool updateReferences;
- void swap(MoveParams& arg) noexcept
- {
- moveKind.swap(arg.moveKind);
- sourceUris.swap(arg.sourceUris);
- params.swap(arg.params);
- destination.swap(arg.destination);
- std::swap(updateReferences, arg.updateReferences);
- }
+ lsp::Any destination;
+ bool updateReferences;
+ void swap(MoveParams& arg) noexcept
+ {
+ moveKind.swap(arg.moveKind);
+ sourceUris.swap(arg.sourceUris);
+ params.swap(arg.params);
+ destination.swap(arg.destination);
+ std::swap(updateReferences, arg.updateReferences);
+ }
};
MAKE_REFLECT_STRUCT(MoveParams, moveKind, sourceUris, params, destination, updateReferences);
-struct MoveDestinationsResponse {
- std::string errorMessage;
- std::vector<lsp::Any > destinations;
- MAKE_SWAP_METHOD(MoveDestinationsResponse, errorMessage, destinations);
+struct MoveDestinationsResponse
+{
+ std::string errorMessage;
+ std::vector<lsp::Any> destinations;
+ MAKE_SWAP_METHOD(MoveDestinationsResponse, errorMessage, destinations);
};
MAKE_REFLECT_STRUCT(MoveDestinationsResponse, errorMessage, destinations);
-DEFINE_REQUEST_RESPONSE_TYPE(java_getMoveDestinations, MoveParams, MoveDestinationsResponse, "java/getMoveDestinations");
-
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_getMoveDestinations, MoveParams, MoveDestinationsResponse, "java/getMoveDestinations"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getRefactorEdit.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getRefactorEdit.h
index 23549ecbcc..7d0021914f 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getRefactorEdit.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getRefactorEdit.h
@@ -3,8 +3,6 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
-
-
#include <string>
#include <vector>
#include "WorkspaceSymbolParams.h"
@@ -12,66 +10,64 @@
#include "LibLsp/lsp/textDocument/code_action.h"
#include "LibLsp/lsp/lsFormattingOptions.h"
-namespace
-RefactorProposalUtility
+namespace RefactorProposalUtility
{
- extern const char* APPLY_REFACTORING_COMMAND_ID;
- extern const char* EXTRACT_VARIABLE_ALL_OCCURRENCE_COMMAND;
- extern const char* EXTRACT_VARIABLE_COMMAND;
- extern const char* EXTRACT_CONSTANT_COMMAND;
- extern const char* EXTRACT_METHOD_COMMAND;
- extern const char* EXTRACT_FIELD_COMMAND;
- extern const char* CONVERT_VARIABLE_TO_FIELD_COMMAND;
- extern const char* MOVE_FILE_COMMAND;
- extern const char* MOVE_INSTANCE_METHOD_COMMAND;
- extern const char* MOVE_STATIC_MEMBER_COMMAND;
- extern const char* MOVE_TYPE_COMMAND;
-};
-
-
-struct RenamePosition {
- lsDocumentUri uri;
- int offset = 0;
- int length = 0;
- void swap(RenamePosition& arg) noexcept
- {
- uri.swap(arg.uri);
- std::swap(offset, arg.offset);
- std::swap(length, arg.length);
- }
+extern char const* APPLY_REFACTORING_COMMAND_ID;
+extern char const* EXTRACT_VARIABLE_ALL_OCCURRENCE_COMMAND;
+extern char const* EXTRACT_VARIABLE_COMMAND;
+extern char const* EXTRACT_CONSTANT_COMMAND;
+extern char const* EXTRACT_METHOD_COMMAND;
+extern char const* EXTRACT_FIELD_COMMAND;
+extern char const* CONVERT_VARIABLE_TO_FIELD_COMMAND;
+extern char const* MOVE_FILE_COMMAND;
+extern char const* MOVE_INSTANCE_METHOD_COMMAND;
+extern char const* MOVE_STATIC_MEMBER_COMMAND;
+extern char const* MOVE_TYPE_COMMAND;
+}; // namespace RefactorProposalUtility
+
+struct RenamePosition
+{
+ lsDocumentUri uri;
+ int offset = 0;
+ int length = 0;
+ void swap(RenamePosition& arg) noexcept
+ {
+ uri.swap(arg.uri);
+ std::swap(offset, arg.offset);
+ std::swap(length, arg.length);
+ }
};
MAKE_REFLECT_STRUCT(RenamePosition, uri, offset, length);
struct GetRefactorEditParams
{
- std::string command;
- std::vector<lsp::Any> commandArguments;
- lsCodeActionParams context;
- optional<lsFormattingOptions> options;
- MAKE_SWAP_METHOD(GetRefactorEditParams, command, context, options);
+ std::string command;
+ std::vector<lsp::Any> commandArguments;
+ lsCodeActionParams context;
+ optional<lsFormattingOptions> options;
+ MAKE_SWAP_METHOD(GetRefactorEditParams, command, context, options);
};
MAKE_REFLECT_STRUCT(GetRefactorEditParams, command, context, options);
-
-
-
-struct RefactorWorkspaceEdit {
- /**
+struct RefactorWorkspaceEdit
+{
+ /**
* The workspace edit this code action performs.
*/
- lsWorkspaceEdit edit;
- /**
+ lsWorkspaceEdit edit;
+ /**
* A command this code action executes. If a code action provides a edit and a
* command, first the edit is executed and then the command.
*/
- optional<std::string> errorMessage;
+ optional<std::string> errorMessage;
- optional < lsCommandWithAny > command;
+ optional<lsCommandWithAny> command;
- MAKE_SWAP_METHOD(RefactorWorkspaceEdit, edit, command, errorMessage)
+ MAKE_SWAP_METHOD(RefactorWorkspaceEdit, edit, command, errorMessage)
};
-MAKE_REFLECT_STRUCT(RefactorWorkspaceEdit,edit,command,errorMessage)
-
-DEFINE_REQUEST_RESPONSE_TYPE(java_getRefactorEdit, GetRefactorEditParams, RefactorWorkspaceEdit, "java/getRefactorEdit");
+MAKE_REFLECT_STRUCT(RefactorWorkspaceEdit, edit, command, errorMessage)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_getRefactorEdit, GetRefactorEditParams, RefactorWorkspaceEdit, "java/getRefactorEdit"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/listOverridableMethods.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/listOverridableMethods.h
index 13b73ce5c2..9c5205f359 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/listOverridableMethods.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/listOverridableMethods.h
@@ -6,12 +6,6 @@
#include "LibLsp/lsp/CodeActionParams.h"
#include "OverridableMethod.h"
-
-
-
-
-DEFINE_REQUEST_RESPONSE_TYPE(java_listOverridableMethods, lsCodeActionParams, OverridableMethodsResponse, "java/listOverridableMethods");
-
-
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_listOverridableMethods, lsCodeActionParams, OverridableMethodsResponse, "java/listOverridableMethods"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/organizeImports.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/organizeImports.h
index 817d52d32b..01c10f4452 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/organizeImports.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/organizeImports.h
@@ -5,8 +5,4 @@
#include "LibLsp/lsp/CodeActionParams.h"
-
-
DEFINE_REQUEST_RESPONSE_TYPE(java_organizeImports, lsCodeActionParams, lsWorkspaceEdit, "java/organizeImports");
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/projectConfigurationUpdate.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/projectConfigurationUpdate.h
index 342d167093..724ea0f392 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/projectConfigurationUpdate.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/projectConfigurationUpdate.h
@@ -2,7 +2,6 @@
#include "LibLsp/JsonRpc/NotificationInMessage.h"
-
#include <string>
#include <vector>
#include "WorkspaceSymbolParams.h"
@@ -10,4 +9,3 @@
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
DEFINE_NOTIFICATION_TYPE(java_projectConfigurationUpdate, lsTextDocumentIdentifier, "java/projectConfigurationUpdate");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/resolveUnimplementedAccessors.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/resolveUnimplementedAccessors.h
index f8bd8a4f7a..32ca213525 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/resolveUnimplementedAccessors.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/resolveUnimplementedAccessors.h
@@ -5,20 +5,24 @@
#include <string>
#include "checkHashCodeEqualsStatus.h"
-
-struct AccessorField {
- std::string fieldName;
- bool isStatic =false;
- bool generateGetter = false;
- bool generateSetter = false;
- void swap(AccessorField& arg) noexcept{
- fieldName.swap(arg.fieldName);
- std::swap(isStatic, arg.isStatic);
- std::swap(generateGetter, arg.generateGetter);
- std::swap(generateSetter, arg.generateSetter);
- }
+struct AccessorField
+{
+ std::string fieldName;
+ bool isStatic = false;
+ bool generateGetter = false;
+ bool generateSetter = false;
+ void swap(AccessorField& arg) noexcept
+ {
+ fieldName.swap(arg.fieldName);
+ std::swap(isStatic, arg.isStatic);
+ std::swap(generateGetter, arg.generateGetter);
+ std::swap(generateSetter, arg.generateSetter);
+ }
};
-MAKE_REFLECT_STRUCT(AccessorField, fieldName,isStatic,generateGetter,generateSetter)
+MAKE_REFLECT_STRUCT(AccessorField, fieldName, isStatic, generateGetter, generateSetter)
-DEFINE_REQUEST_RESPONSE_TYPE(java_resolveUnimplementedAccessors, lsCodeActionParams, std::vector<AccessorField>, "java/resolveUnimplementedAccessors");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_resolveUnimplementedAccessors, lsCodeActionParams, std::vector<AccessorField>,
+ "java/resolveUnimplementedAccessors"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/searchSymbols.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/searchSymbols.h
index 6639ad2cf4..5f5796ec77 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/searchSymbols.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/searchSymbols.h
@@ -3,25 +3,21 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
-
#include <string>
#include <vector>
#include "WorkspaceSymbolParams.h"
#include "LibLsp/lsp/method_type.h"
#include "LibLsp/lsp/symbol.h"
-
-struct SearchSymbolParams :public WorkspaceSymbolParams
+struct SearchSymbolParams : public WorkspaceSymbolParams
{
- optional<std::string> projectName;
- optional< bool >sourceOnly;
- optional< int> maxResults;
- MAKE_SWAP_METHOD(SearchSymbolParams, query, projectName, sourceOnly, maxResults);
+ optional<std::string> projectName;
+ optional<bool> sourceOnly;
+ optional<int> maxResults;
+ MAKE_SWAP_METHOD(SearchSymbolParams, query, projectName, sourceOnly, maxResults);
};
MAKE_REFLECT_STRUCT(SearchSymbolParams, query, projectName, sourceOnly, maxResults);
-
-DEFINE_REQUEST_RESPONSE_TYPE(java_searchSymbols, SearchSymbolParams, std::vector<lsSymbolInformation>, "java/searchSymbols");
-
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ java_searchSymbols, SearchSymbolParams, std::vector<lsSymbolInformation>, "java/searchSymbols"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/sonarlint/protocol.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/sonarlint/protocol.h
index 6752c40812..98f82608b8 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/sonarlint/protocol.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/sonarlint/protocol.h
@@ -9,168 +9,148 @@
struct LintRule
{
- std::string key;
- std::string name;
-
-
- std::string Display() const
- {
- return name + " (" + key + ")";
- }
- bool activeByDefault = true;
- optional<std::string> severity;
- optional<std::string> type;
- int icon_index = -1;
- MAKE_SWAP_METHOD(LintRule, key, name, activeByDefault, severity, type);
-
+ std::string key;
+ std::string name;
+
+ std::string Display() const
+ {
+ return name + " (" + key + ")";
+ }
+ bool activeByDefault = true;
+ optional<std::string> severity;
+ optional<std::string> type;
+ int icon_index = -1;
+ MAKE_SWAP_METHOD(LintRule, key, name, activeByDefault, severity, type);
};
MAKE_REFLECT_STRUCT(LintRule, key, name, activeByDefault, severity, type);
-
-struct RuleParameter {
- std::string name;
- optional<std::string> description;
- optional<std::string> defaultValue;
-
+struct RuleParameter
+{
+ std::string name;
+ optional<std::string> description;
+ optional<std::string> defaultValue;
};
MAKE_REFLECT_STRUCT(RuleParameter, name, description, defaultValue);
-struct ShowRuleDescriptionParams {
-
- optional<std::string> key;
-
- optional<std::string> name;
+struct ShowRuleDescriptionParams
+{
- optional<std::string> htmlDescription;
+ optional<std::string> key;
- optional<std::string> type;
+ optional<std::string> name;
- optional<std::string> severity;
+ optional<std::string> htmlDescription;
- optional< std::vector<RuleParameter> > parameters;
- MAKE_SWAP_METHOD(ShowRuleDescriptionParams, key, name, htmlDescription, type, severity, parameters)
+ optional<std::string> type;
+ optional<std::string> severity;
+ optional<std::vector<RuleParameter>> parameters;
+ MAKE_SWAP_METHOD(ShowRuleDescriptionParams, key, name, htmlDescription, type, severity, parameters)
};
MAKE_REFLECT_STRUCT(ShowRuleDescriptionParams, key, name, htmlDescription, type, severity, parameters);
-
-struct GetJavaConfigResponse {
- std::string projectRoot;
- std::string sourceLevel;
- std::vector<std::string> classpath;
- bool isTest;
- std::string vmLocation;
- MAKE_SWAP_METHOD(GetJavaConfigResponse, projectRoot, sourceLevel, classpath, isTest, vmLocation);
+struct GetJavaConfigResponse
+{
+ std::string projectRoot;
+ std::string sourceLevel;
+ std::vector<std::string> classpath;
+ bool isTest;
+ std::string vmLocation;
+ MAKE_SWAP_METHOD(GetJavaConfigResponse, projectRoot, sourceLevel, classpath, isTest, vmLocation);
};
MAKE_REFLECT_STRUCT(GetJavaConfigResponse, projectRoot, sourceLevel, classpath, isTest, vmLocation);
-struct SetTraceNotificationParams {
- lsInitializeParams::lsTrace value;
+struct SetTraceNotificationParams
+{
+ lsInitializeParams::lsTrace value;
};
MAKE_REFLECT_STRUCT(SetTraceNotificationParams, value);
+struct ServerConnectionSettings
+{
-struct ServerConnectionSettings {
-
- std::string SONARCLOUD_URL = "https://sonarcloud.io";
- std::vector<std::string>SONARCLOUD_ALIAS = { "https://sonarqube.com",
- "https://www.sonarqube.com",
- "https://www.sonarcloud.io",
- "https://sonarcloud.io" };
-
- std::string connectionId;
- std::string serverUrl;
- std::string token;
- optional<std::string> organizationKey;
- MAKE_SWAP_METHOD(ServerConnectionSettings, connectionId, serverUrl, token, organizationKey)
+ std::string SONARCLOUD_URL = "https://sonarcloud.io";
+ std::vector<std::string> SONARCLOUD_ALIAS = {
+ "https://sonarqube.com", "https://www.sonarqube.com", "https://www.sonarcloud.io", "https://sonarcloud.io"
+ };
+ std::string connectionId;
+ std::string serverUrl;
+ std::string token;
+ optional<std::string> organizationKey;
+ MAKE_SWAP_METHOD(ServerConnectionSettings, connectionId, serverUrl, token, organizationKey)
};
MAKE_REFLECT_STRUCT(ServerConnectionSettings, connectionId, serverUrl, token, organizationKey)
struct RuleSetting
{
- bool IsOn();
- std::string level = "on";
- RuleSetting(bool activate);
- RuleSetting() = default;
- void toggle();
- void on()
+ bool IsOn();
+ std::string level = "on";
+ RuleSetting(bool activate);
+ RuleSetting() = default;
+ void toggle();
+ void on()
+ {
+ level = "on";
+ }
+ void off()
+ {
+ level = "off";
+ }
+ void turn(bool activate)
+ {
+ if (activate)
{
- level = "on";
+ on();
}
- void off()
+ else
{
- level = "off";
+ off();
}
- void turn(bool activate)
- {
- if (activate)
- {
- on();
- }
- else
- {
- off();
- }
- }
- optional< std::map<std::string, std::string > > parameters;
+ }
+ optional<std::map<std::string, std::string>> parameters;
};
MAKE_REFLECT_STRUCT(RuleSetting, level, parameters)
struct ConsoleParams
{
- optional < bool >showAnalyzerLogs;
- optional < bool >showVerboseLogs;
- MAKE_SWAP_METHOD(ConsoleParams, showAnalyzerLogs, showVerboseLogs)
+ optional<bool> showAnalyzerLogs;
+ optional<bool> showVerboseLogs;
+ MAKE_SWAP_METHOD(ConsoleParams, showAnalyzerLogs, showVerboseLogs)
};
MAKE_REFLECT_STRUCT(ConsoleParams, showAnalyzerLogs, showVerboseLogs)
struct SonarLintWorkspaceSettings
{
- optional < bool > disableTelemetry;
- optional < std::map<std::string, ServerConnectionSettings> >connectedMode;
- optional<std::map<std::string, RuleSetting>> rules;
- optional<ConsoleParams> output;
-
- optional<std::string > pathToNodeExecutable;
-
- optional< std::map<std::string, std::string > > getConfigurationParameters(const std::string& ruleKey);
+ optional<bool> disableTelemetry;
+ optional<std::map<std::string, ServerConnectionSettings>> connectedMode;
+ optional<std::map<std::string, RuleSetting>> rules;
+ optional<ConsoleParams> output;
+ optional<std::string> pathToNodeExecutable;
+ optional<std::map<std::string, std::string>> getConfigurationParameters(std::string const& ruleKey);
};
-MAKE_REFLECT_STRUCT(SonarLintWorkspaceSettings, disableTelemetry, connectedMode,
- rules, output, pathToNodeExecutable)
-
-
-
- DEFINE_REQUEST_RESPONSE_TYPE(slls_listAllRules, JsonNull, lsp::Any, "sonarlint/listAllRules");
-
+MAKE_REFLECT_STRUCT(SonarLintWorkspaceSettings, disableTelemetry, connectedMode, rules, output, pathToNodeExecutable)
+DEFINE_REQUEST_RESPONSE_TYPE(slls_listAllRules, JsonNull, lsp::Any, "sonarlint/listAllRules");
DEFINE_NOTIFICATION_TYPE(Notify_didClasspathUpdate, lsDocumentUri, "sonarlint/didClasspathUpdate")
-
DEFINE_NOTIFICATION_TYPE(Notify_didJavaServerModeChange, std::string, "sonarlint/didJavaServerModeChange")
-
-
DEFINE_REQUEST_RESPONSE_TYPE(slls_showSonarLintOutput, JsonNull, JsonNull, "sonarlint/showSonarLintOutput");
-
-
DEFINE_REQUEST_RESPONSE_TYPE(slls_openJavaHomeSettings, JsonNull, JsonNull, "sonarlint/openJavaHomeSettings");
-
-
-
DEFINE_REQUEST_RESPONSE_TYPE(slls_openPathToNodeSettings, JsonNull, JsonNull, "sonarlint/openPathToNodeSettings");
-
-DEFINE_REQUEST_RESPONSE_TYPE(slls_showRuleDescription, ShowRuleDescriptionParams, JsonNull, "sonarlint/showRuleDescription");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ slls_showRuleDescription, ShowRuleDescriptionParams, JsonNull, "sonarlint/showRuleDescription"
+);
DEFINE_REQUEST_RESPONSE_TYPE(slls_getJavaConfig, lsDocumentUri, GetJavaConfigResponse, "sonarlint/getJavaConfig");
-
DEFINE_NOTIFICATION_TYPE(slls_setTraceNotification, SetTraceNotificationParams, "$/setTraceNotification")
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/InitializeParams.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/InitializeParams.h
index 145c63087f..a23f657a5e 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/InitializeParams.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/InitializeParams.h
@@ -5,28 +5,30 @@
#include "lsClientCapabilities.h"
#include "LibLsp/lsp/workspace/workspaceFolders.h"
-struct ClientInfo {
- std::string name;
- optional<std::string> version;
+struct ClientInfo
+{
+ std::string name;
+ optional<std::string> version;
- MAKE_SWAP_METHOD(ClientInfo,name,version);
+ MAKE_SWAP_METHOD(ClientInfo, name, version);
};
-MAKE_REFLECT_STRUCT(ClientInfo,name,version);
+MAKE_REFLECT_STRUCT(ClientInfo, name, version);
-struct lsInitializeParams {
- // 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.
- optional<int> processId;
+struct lsInitializeParams
+{
+ // 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.
+ optional<int> processId;
- /**
+ /**
* Information about the client
*
* @since 3.15.0
*/
- optional<ClientInfo> clientInfo;
- /**
+ optional<ClientInfo> clientInfo;
+ /**
* The locale the client is currently showing the user interface
* in. This must not necessarily be the locale of the operating
* system.
@@ -36,48 +38,44 @@ struct lsInitializeParams {
*
* @since 3.16.0
*/
- optional<std::string> locale;
+ optional<std::string> locale;
- // The rootPath of the workspace. Is null
- // if no folder is open.
- //
- // @deprecated in favour of rootUri.
- optional<std::string> rootPath;
+ // The rootPath of the workspace. Is null
+ // if no folder is open.
+ //
+ // @deprecated in favour of rootUri.
+ optional<std::string> rootPath;
- // The rootUri of the workspace. Is null if no
- // folder is open. If both `rootPath` and `rootUri` are set
- // `rootUri` wins.
- optional<lsDocumentUri> rootUri;
+ // The rootUri of the workspace. Is null if no
+ // folder is open. If both `rootPath` and `rootUri` are set
+ // `rootUri` wins.
+ optional<lsDocumentUri> rootUri;
- // User provided initialization options.
- optional<lsp::Any> initializationOptions;
+ // User provided initialization options.
+ optional<lsp::Any> initializationOptions;
- // The capabilities provided by the client (editor or tool)
- lsClientCapabilities capabilities;
+ // The capabilities provided by the client (editor or tool)
+ lsClientCapabilities capabilities;
-
- /**
+ /**
* An optional extension to the protocol.
* To tell the server what client (editor) is talking to it.
*/
- // @Deprecated
- optional< std::string >clientName;
-
-
+ // @Deprecated
+ optional<std::string> clientName;
- enum class lsTrace {
- // NOTE: serialized as a string, one of 'off' | 'messages' | 'verbose';
- Off, // off
- Messages, // messages
- Verbose // verbose
+ enum class lsTrace
+ {
+ // NOTE: serialized as a string, one of 'off' | 'messages' | 'verbose';
+ Off, // off
+ Messages, // messages
+ Verbose // verbose
+ };
- };
+ // The initial trace setting. If omitted trace is disabled ('off').
+ lsTrace trace = lsTrace::Off;
- // The initial trace setting. If omitted trace is disabled ('off').
- lsTrace trace = lsTrace::Off;
-
-
- /**
+ /**
* 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
@@ -85,44 +83,34 @@ struct lsInitializeParams {
*
* Since 3.6.0
*/
- optional< std::vector<WorkspaceFolder> > workspaceFolders;
-
- MAKE_SWAP_METHOD(lsInitializeParams,
- processId,
- rootPath,
- rootUri,
- initializationOptions,
- capabilities, clientName, clientInfo,
- trace, workspaceFolders, locale)
+ optional<std::vector<WorkspaceFolder>> workspaceFolders;
+
+ MAKE_SWAP_METHOD(
+ lsInitializeParams, processId, rootPath, rootUri, initializationOptions, capabilities, clientName, clientInfo,
+ trace, workspaceFolders, locale
+ )
};
void Reflect(Reader& reader, lsInitializeParams::lsTrace& value);
-
void Reflect(Writer& writer, lsInitializeParams::lsTrace& value);
-
-MAKE_REFLECT_STRUCT(lsInitializeParams,
- processId,
- rootPath,
- rootUri,
- initializationOptions,
- capabilities, clientName, clientInfo,
- trace, workspaceFolders, locale)
-
-struct lsInitializeError {
- // Indicates whether the client should retry to send the
- // initilize request after showing the message provided
- // in the ResponseError.
- bool retry;
- void swap(lsInitializeError& arg) noexcept
- {
- auto tem = retry;
- retry = arg.retry;
- arg.retry = tem;
- }
+MAKE_REFLECT_STRUCT(
+ lsInitializeParams, processId, rootPath, rootUri, initializationOptions, capabilities, clientName, clientInfo,
+ trace, workspaceFolders, locale
+)
+
+struct lsInitializeError
+{
+ // Indicates whether the client should retry to send the
+ // initilize request after showing the message provided
+ // in the ResponseError.
+ bool retry;
+ void swap(lsInitializeError& arg) noexcept
+ {
+ auto tem = retry;
+ retry = arg.retry;
+ arg.retry = tem;
+ }
};
MAKE_REFLECT_STRUCT(lsInitializeError, retry);
-
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialize.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialize.h
index 2198b158bf..f63f0b5e59 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialize.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialize.h
@@ -5,22 +5,17 @@
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/JsonRpc/RequestInMessage.h"
-
-
-
-
-
/**
* The capabilities the language server provides.
*/
- struct InitializeResult {
+struct InitializeResult
+{
lsServerCapabilities capabilities;
- MAKE_SWAP_METHOD(InitializeResult, capabilities);
- };
+ MAKE_SWAP_METHOD(InitializeResult, capabilities);
+};
MAKE_REFLECT_STRUCT(InitializeResult, capabilities);
-
/**
* The initialize request is sent as the first request from the client to
* the server.
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialized.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialized.h
index bb6d12511c..f63a38b82f 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialized.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialized.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/NotificationInMessage.h"
/**
* The initialized notification is sent from the client to the server after
@@ -10,4 +9,3 @@
* register capabilities.
*/
DEFINE_NOTIFICATION_TYPE(Notify_InitializedNotification, JsonNull, "initialized");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsClientCapabilities.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsClientCapabilities.h
index 4ec9744258..0a454fc773 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsClientCapabilities.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsClientCapabilities.h
@@ -9,40 +9,38 @@
*
* @since 3.16.0
*/
-struct MarkdownClientCapabilities {
- /**
+struct MarkdownClientCapabilities
+{
+ /**
* The name of the parser.
*/
- std::string parser;
+ std::string parser;
- /**
+ /**
* The version of the parser.
*/
- optional<std::string> version;
- MAKE_SWAP_METHOD(MarkdownClientCapabilities, parser, version)
-
+ optional<std::string> version;
+ MAKE_SWAP_METHOD(MarkdownClientCapabilities, parser, version)
};
MAKE_REFLECT_STRUCT(MarkdownClientCapabilities, parser, version)
-struct lsClientCapabilities {
- // Workspace specific client capabilities.
- optional<lsWorkspaceClientCapabilites> workspace;
+struct lsClientCapabilities
+{
+ // Workspace specific client capabilities.
+ optional<lsWorkspaceClientCapabilites> workspace;
- // Text document specific client capabilities.
- optional<lsTextDocumentClientCapabilities> textDocument;
+ // Text document specific client capabilities.
+ optional<lsTextDocumentClientCapabilities> textDocument;
- /**
+ /**
* Window specific client capabilities.
*/
- optional<lsp::Any> window;
- /**
+ optional<lsp::Any> window;
+ /**
* Experimental client capabilities.
*/
- optional<lsp::Any> experimental;
+ optional<lsp::Any> experimental;
- MAKE_SWAP_METHOD(lsClientCapabilities, workspace, textDocument, window, experimental)
+ MAKE_SWAP_METHOD(lsClientCapabilities, workspace, textDocument, window, experimental)
};
MAKE_REFLECT_STRUCT(lsClientCapabilities, workspace, textDocument, window, experimental)
-
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsServerCapabilities.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsServerCapabilities.h
index e8624681b3..a924ebbfb3 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsServerCapabilities.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsServerCapabilities.h
@@ -1,7 +1,6 @@
#pragma once
#include "LibLsp/lsp/method_type.h"
-
#include <stdexcept>
#include "LibLsp/JsonRpc/message.h"
#include "LibLsp/lsp/lsDocumentUri.h"
@@ -9,84 +8,83 @@
#include "InitializeParams.h"
#include "LibLsp/lsp/textDocument/SemanticTokens.h"
-
-extern void Reflect(Reader&, std::pair<optional<lsTextDocumentSyncKind>, optional<lsTextDocumentSyncOptions> >&);
+extern void Reflect(Reader&, std::pair<optional<lsTextDocumentSyncKind>, optional<lsTextDocumentSyncOptions>>&);
//
- // Code Action options.
- //
-struct CodeActionOptions : WorkDoneProgressOptions {
- //
- // 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.
- //
- typedef std::string CodeActionKind;
- std::vector<CodeActionKind> codeActionKinds;
-
- MAKE_SWAP_METHOD(CodeActionOptions, workDoneProgress, codeActionKinds);
+// Code Action options.
+//
+struct CodeActionOptions : WorkDoneProgressOptions
+{
+ //
+ // 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.
+ //
+ typedef std::string CodeActionKind;
+ std::vector<CodeActionKind> codeActionKinds;
+
+ MAKE_SWAP_METHOD(CodeActionOptions, workDoneProgress, codeActionKinds);
};
MAKE_REFLECT_STRUCT(CodeActionOptions, workDoneProgress, codeActionKinds)
-struct CodeLensOptions : WorkDoneProgressOptions {
- //
- // Code lens has a resolve provider as well.
- //
- optional<bool> resolveProvider ;
- MAKE_SWAP_METHOD(CodeLensOptions, workDoneProgress, resolveProvider);
+struct CodeLensOptions : WorkDoneProgressOptions
+{
+ //
+ // Code lens has a resolve provider as well.
+ //
+ optional<bool> resolveProvider;
+ MAKE_SWAP_METHOD(CodeLensOptions, workDoneProgress, resolveProvider);
};
MAKE_REFLECT_STRUCT(CodeLensOptions, workDoneProgress, resolveProvider)
-
// Format document on type options
-struct lsDocumentOnTypeFormattingOptions :WorkDoneProgressOptions {
- // A character on which formatting should be triggered, like `}`.
- std::string firstTriggerCharacter;
-
- // More trigger characters.
- std::vector<std::string> moreTriggerCharacter;
- MAKE_SWAP_METHOD(lsDocumentOnTypeFormattingOptions, workDoneProgress,
- firstTriggerCharacter,
- moreTriggerCharacter);
+struct lsDocumentOnTypeFormattingOptions : WorkDoneProgressOptions
+{
+ // A character on which formatting should be triggered, like `}`.
+ std::string firstTriggerCharacter;
+
+ // More trigger characters.
+ std::vector<std::string> moreTriggerCharacter;
+ MAKE_SWAP_METHOD(lsDocumentOnTypeFormattingOptions, workDoneProgress, firstTriggerCharacter, moreTriggerCharacter);
};
-MAKE_REFLECT_STRUCT(lsDocumentOnTypeFormattingOptions, workDoneProgress,
- firstTriggerCharacter,
- moreTriggerCharacter);
-struct RenameOptions : WorkDoneProgressOptions {
- //
- // Renames should be checked and tested before being executed.
- //
- optional<bool> prepareProvider;
- MAKE_SWAP_METHOD(RenameOptions, workDoneProgress, prepareProvider);
+MAKE_REFLECT_STRUCT(lsDocumentOnTypeFormattingOptions, workDoneProgress, firstTriggerCharacter, moreTriggerCharacter);
+struct RenameOptions : WorkDoneProgressOptions
+{
+ //
+ // Renames should be checked and tested before being executed.
+ //
+ optional<bool> prepareProvider;
+ MAKE_SWAP_METHOD(RenameOptions, workDoneProgress, prepareProvider);
};
-MAKE_REFLECT_STRUCT(RenameOptions,workDoneProgress,prepareProvider)
+MAKE_REFLECT_STRUCT(RenameOptions, workDoneProgress, prepareProvider)
-struct DocumentFilter{
- //
- // A language id, like `typescript`.
- //
- optional<std::string> language;
- //
- // A Uri [scheme](#Uri.scheme), like `file` or `untitled`.
- //
- optional<std::string>scheme;
- //
- // 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 sub patterns into an OR expression. (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`)
- //
- optional<std::string>pattern;
- MAKE_SWAP_METHOD(DocumentFilter, language, scheme, pattern)
+struct DocumentFilter
+{
+ //
+ // A language id, like `typescript`.
+ //
+ optional<std::string> language;
+ //
+ // A Uri [scheme](#Uri.scheme), like `file` or `untitled`.
+ //
+ optional<std::string> scheme;
+ //
+ // 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 sub patterns into an OR expression. (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`)
+ //
+ optional<std::string> pattern;
+ MAKE_SWAP_METHOD(DocumentFilter, language, scheme, pattern)
};
MAKE_REFLECT_STRUCT(DocumentFilter, language, scheme, pattern)
@@ -94,496 +92,476 @@ MAKE_REFLECT_STRUCT(DocumentFilter, language, scheme, pattern)
using DocumentSelector = std::vector<DocumentFilter>;
// Document link options
-struct lsDocumentLinkOptions :WorkDoneProgressOptions {
- // Document links have a resolve provider as well.
- optional<bool> resolveProvider;
- MAKE_SWAP_METHOD(lsDocumentLinkOptions, workDoneProgress, resolveProvider);
+struct lsDocumentLinkOptions : WorkDoneProgressOptions
+{
+ // Document links have a resolve provider as well.
+ optional<bool> resolveProvider;
+ MAKE_SWAP_METHOD(lsDocumentLinkOptions, workDoneProgress, resolveProvider);
};
-MAKE_REFLECT_STRUCT(lsDocumentLinkOptions, workDoneProgress,resolveProvider);
+MAKE_REFLECT_STRUCT(lsDocumentLinkOptions, workDoneProgress, resolveProvider);
// Execute command options.
-struct lsExecuteCommandOptions : WorkDoneProgressOptions {
- // The commands to be executed on the server
- std::vector<std::string> commands;
- MAKE_SWAP_METHOD(lsExecuteCommandOptions, workDoneProgress, commands);
+struct lsExecuteCommandOptions : WorkDoneProgressOptions
+{
+ // The commands to be executed on the server
+ std::vector<std::string> commands;
+ MAKE_SWAP_METHOD(lsExecuteCommandOptions, workDoneProgress, commands);
};
MAKE_REFLECT_STRUCT(lsExecuteCommandOptions, workDoneProgress, commands);
-
struct TextDocumentRegistrationOptions
{
-//
- // 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.
- //
- optional<DocumentSelector> documentSelector;
+ //
+ // A document selector to identify the scope of the registration. If set to null
+ // the document selector provided on the client side will be used.
+ //
+ optional<DocumentSelector> documentSelector;
- MAKE_SWAP_METHOD(TextDocumentRegistrationOptions, documentSelector);
+ MAKE_SWAP_METHOD(TextDocumentRegistrationOptions, documentSelector);
};
MAKE_REFLECT_STRUCT(TextDocumentRegistrationOptions, documentSelector);
//
- // Static registration options to be returned in the initialize request.
- //
-struct StaticRegistrationOptions :public TextDocumentRegistrationOptions
+// Static registration options to be returned in the initialize request.
+//
+struct StaticRegistrationOptions : public TextDocumentRegistrationOptions
{
- //
- // The id used to register the request. The id can be used to deregister
- // the request again. See also Registration#id.
- //
- optional<std::string> id;
- MAKE_SWAP_METHOD(StaticRegistrationOptions, documentSelector, id)
+ //
+ // The id used to register the request. The id can be used to deregister
+ // the request again. See also Registration#id.
+ //
+ optional<std::string> id;
+ MAKE_SWAP_METHOD(StaticRegistrationOptions, documentSelector, id)
};
-MAKE_REFLECT_STRUCT(StaticRegistrationOptions, documentSelector,id)
+MAKE_REFLECT_STRUCT(StaticRegistrationOptions, documentSelector, id)
//
- // The server supports workspace folder.
- //
- // Since 3.6.0
- //
-
-struct WorkspaceFoldersOptions {
- //
- // The server has support for workspace folders
- //
- optional<bool> supported;
+// The server supports workspace folder.
+//
+// Since 3.6.0
+//
- //
- // Whether the server wants to receive workspace folder
- // change notifications.
- //
- // If a string is provided, the string is treated as an ID
- // under which the notification is registered on the client
- // side. The ID can be used to unregister for these events
- // using the `client/unregisterCapability` request.
- //
- optional<std::pair< optional<std::string>, optional<bool> > > changeNotifications;
- MAKE_SWAP_METHOD(WorkspaceFoldersOptions, supported, changeNotifications);
+struct WorkspaceFoldersOptions
+{
+ //
+ // The server has support for workspace folders
+ //
+ optional<bool> supported;
+
+ //
+ // Whether the server wants to receive workspace folder
+ // change notifications.
+ //
+ // If a string is provided, the string is treated as an ID
+ // under which the notification is registered on the client
+ // side. The ID can be used to unregister for these events
+ // using the `client/unregisterCapability` request.
+ //
+ optional<std::pair<optional<std::string>, optional<bool>>> changeNotifications;
+ MAKE_SWAP_METHOD(WorkspaceFoldersOptions, supported, changeNotifications);
};
MAKE_REFLECT_STRUCT(WorkspaceFoldersOptions, supported, changeNotifications);
//
- // A pattern kind describing if a glob pattern matches a file a folder or
- // both.
- //
- // @since 3.16.0
- //
+// A pattern kind describing if a glob pattern matches a file a folder or
+// both.
+//
+// @since 3.16.0
+//
enum lsFileOperationPatternKind
{
- file,
- folder
+ file,
+ folder
};
MAKE_REFLECT_TYPE_PROXY(lsFileOperationPatternKind)
//
- // Matching options for the file operation pattern.
- //
- // @since 3.16.0
- //
-struct lsFileOperationPatternOptions {
+// Matching options for the file operation pattern.
+//
+// @since 3.16.0
+//
+struct lsFileOperationPatternOptions
+{
- //
- // The pattern should be matched ignoring casing.
- //
- optional<bool> ignoreCase;
- MAKE_SWAP_METHOD(lsFileOperationPatternOptions, ignoreCase)
+ //
+ // The pattern should be matched ignoring casing.
+ //
+ optional<bool> ignoreCase;
+ MAKE_SWAP_METHOD(lsFileOperationPatternOptions, ignoreCase)
};
MAKE_REFLECT_STRUCT(lsFileOperationPatternOptions, ignoreCase)
//
- // A pattern to describe in which file operation requests or notifications
- // the server is interested in.
- //
- // @since 3.16.0
- //
-struct lsFileOperationPattern {
- //
- // The glob pattern to match. Glob patterns can have the following syntax:
- // - `*` to match one or more characters in a path segment
- // - `?` to match on one character in a path segment
- // - `**` to match any number of path segments, including none
- // - `{}` to group sub patterns into an OR expression. (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`)
- //
- std::string glob;
-
- //
- // Whether to match files or folders with this pattern.
- //
- // Matches both if undefined.
- //
- optional<lsFileOperationPatternKind> matches;
-
- //
- // Additional options used during matching.
- //
- optional<lsFileOperationPatternOptions> options ;
- MAKE_SWAP_METHOD(lsFileOperationPattern, glob, matches, options)
+// A pattern to describe in which file operation requests or notifications
+// the server is interested in.
+//
+// @since 3.16.0
+//
+struct lsFileOperationPattern
+{
+ //
+ // The glob pattern to match. Glob patterns can have the following syntax:
+ // - `*` to match one or more characters in a path segment
+ // - `?` to match on one character in a path segment
+ // - `**` to match any number of path segments, including none
+ // - `{}` to group sub patterns into an OR expression. (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`)
+ //
+ std::string glob;
+
+ //
+ // Whether to match files or folders with this pattern.
+ //
+ // Matches both if undefined.
+ //
+ optional<lsFileOperationPatternKind> matches;
+
+ //
+ // Additional options used during matching.
+ //
+ optional<lsFileOperationPatternOptions> options;
+ MAKE_SWAP_METHOD(lsFileOperationPattern, glob, matches, options)
};
MAKE_REFLECT_STRUCT(lsFileOperationPattern, glob, matches, options)
//
- // A filter to describe in which file operation requests or notifications
- // the server is interested in.
- //
- // @since 3.16.0
- //
-struct lsFileOperationFilter {
+// A filter to describe in which file operation requests or notifications
+// the server is interested in.
+//
+// @since 3.16.0
+//
+struct lsFileOperationFilter
+{
- //
- // A Uri like `file` or `untitled`.
- //
- optional<std::string> scheme;
+ //
+ // A Uri like `file` or `untitled`.
+ //
+ optional<std::string> scheme;
- //
- // The actual file operation pattern.
- //
- optional<lsFileOperationPattern> pattern;
- MAKE_SWAP_METHOD(lsFileOperationFilter, scheme, pattern)
+ //
+ // The actual file operation pattern.
+ //
+ optional<lsFileOperationPattern> pattern;
+ MAKE_SWAP_METHOD(lsFileOperationFilter, scheme, pattern)
};
MAKE_REFLECT_STRUCT(lsFileOperationFilter, scheme, pattern)
//
- // The options to register for file operations.
- //
- // @since 3.16.0
- //
-struct lsFileOperationRegistrationOptions {
- //
- // The actual filters.
- //
- optional<std::vector<lsFileOperationFilter>> filters;
- MAKE_SWAP_METHOD(lsFileOperationRegistrationOptions, filters)
+// The options to register for file operations.
+//
+// @since 3.16.0
+//
+struct lsFileOperationRegistrationOptions
+{
+ //
+ // The actual filters.
+ //
+ optional<std::vector<lsFileOperationFilter>> filters;
+ MAKE_SWAP_METHOD(lsFileOperationRegistrationOptions, filters)
};
MAKE_REFLECT_STRUCT(lsFileOperationRegistrationOptions, filters)
-struct WorkspaceServerCapabilities {
- //
- // The server supports workspace folder.
- //
- // Since 3.6.0
- //
- WorkspaceFoldersOptions workspaceFolders;
-
+struct WorkspaceServerCapabilities
+{
+ //
+ // The server supports workspace folder.
+ //
+ // Since 3.6.0
+ //
+ WorkspaceFoldersOptions workspaceFolders;
+ //
+ // The server is interested in file notifications/requests.
+ //
+ // @since 3.16.0
+ //
+ struct lsFileOperations
+ {
//
- // The server is interested in file notifications/requests.
- //
- // @since 3.16.0
- //
- struct lsFileOperations
- {
- //
- // The server is interested in receiving didCreateFiles
- // notifications.
- //
- optional<lsFileOperationRegistrationOptions> didCreate;
-
- //
- // The server is interested in receiving willCreateFiles requests.
- //
- optional<lsFileOperationRegistrationOptions> willCreate;
-
- //
- // The server is interested in receiving didRenameFiles
- // notifications.
- //
- optional<lsFileOperationRegistrationOptions> didRename;
-
- //
- // The server is interested in receiving willRenameFiles requests.
- //
- optional<lsFileOperationRegistrationOptions> willRename;
-
- //
- // The server is interested in receiving didDeleteFiles file
- // notifications.
- //
- optional<lsFileOperationRegistrationOptions> didDelete;
-
- //
- // The server is interested in receiving willDeleteFiles file
- // requests.
- //
- optional<lsFileOperationRegistrationOptions> willDelete;
- MAKE_SWAP_METHOD(lsFileOperations, didCreate, willCreate, didRename, willRename, didDelete, willDelete)
- };
- optional<lsFileOperations>fileOperations;
-
-
- MAKE_SWAP_METHOD(WorkspaceServerCapabilities, workspaceFolders, fileOperations)
-};
-MAKE_REFLECT_STRUCT(WorkspaceServerCapabilities, workspaceFolders, fileOperations)
-MAKE_REFLECT_STRUCT(WorkspaceServerCapabilities::lsFileOperations, didCreate, willCreate, didRename, willRename, didDelete, willDelete)
-
-//
- // Semantic highlighting server capabilities.
- //
- // <p>
- // <b>Note:</b> the <a href=
- // "https://github.com/Microsoft/vscode-languageserver-node/pull/367">{@code textDocument/semanticHighlighting}
- // language feature</a> is not yet part of the official LSP specification.
- //
-
-struct SemanticHighlightingServerCapabilities {
+ // The server is interested in receiving didCreateFiles
+ // notifications.
//
- // A "lookup table" of semantic highlighting <a href="https://manual.macromates.com/en/language_grammars">TextMate scopes</a>
- // supported by the language server. If not defined or empty, then the server does not support the semantic highlighting
- // feature. Otherwise, clients should reuse this "lookup table" when receiving semantic highlighting notifications from
- // the server.
- //
- std::vector< std::vector<std::string> > scopes;
- MAKE_SWAP_METHOD(SemanticHighlightingServerCapabilities, scopes)
-};
-MAKE_REFLECT_STRUCT(SemanticHighlightingServerCapabilities, scopes)
+ optional<lsFileOperationRegistrationOptions> didCreate;
-struct SemanticTokensServerFull
-{
//
- // The server supports deltas for full documents.
+ // The server is interested in receiving willCreateFiles requests.
//
- bool delta =false;
- MAKE_SWAP_METHOD(SemanticTokensServerFull, delta)
-};
-MAKE_REFLECT_STRUCT(SemanticTokensServerFull, delta)
-struct SemanticTokensWithRegistrationOptions
-{
- SemanticTokensLegend legend;
+ optional<lsFileOperationRegistrationOptions> willCreate;
//
- // Server supports providing semantic tokens for a specific range
- // of a document.
- //
- optional< std::pair< optional<bool>, optional<lsp::Any> > > range;
-
+ // The server is interested in receiving didRenameFiles
+ // notifications.
//
- // Server supports providing semantic tokens for a full document.
- //
- optional< std::pair< optional<bool>,
- optional<SemanticTokensServerFull> > > full;
+ optional<lsFileOperationRegistrationOptions> didRename;
//
- // 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.
- //
- optional < std::vector<DocumentFilter> > documentSelector;
+ // The server is interested in receiving willRenameFiles requests.
//
- // The id used to register the request. The id can be used to deregister
- // the request again. See also Registration#id.
- //
- optional<std::string> id;
- MAKE_SWAP_METHOD(SemanticTokensWithRegistrationOptions, legend, range, full, documentSelector, id)
-};
-MAKE_REFLECT_STRUCT(SemanticTokensWithRegistrationOptions, legend, range, full, documentSelector ,id)
-
-using DocumentColorOptions = WorkDoneProgressOptions;
-using FoldingRangeOptions = WorkDoneProgressOptions;
-struct lsServerCapabilities {
- // Defines how text documents are synced. Is either a detailed structure
- // defining each notification or for backwards compatibility the
-
- // TextDocumentSyncKind number.
- optional< std::pair<optional<lsTextDocumentSyncKind>,
- optional<lsTextDocumentSyncOptions> >> textDocumentSync;
+ optional<lsFileOperationRegistrationOptions> willRename;
- // The server provides hover support.
- optional<bool> hoverProvider;
-
- // The server provides completion support.
- optional < lsCompletionOptions > completionProvider;
-
- // The server provides signature help support.
- optional < lsSignatureHelpOptions > signatureHelpProvider;
-
- // The server provides goto definition support.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > definitionProvider;
-
-
- //
- // The server provides Goto Type Definition support.
- //
- // Since 3.6.0
- //
- optional< std::pair< optional<bool>, optional<StaticRegistrationOptions> > > typeDefinitionProvider ;
-
- // The server provides implementation support.
- optional< std::pair< optional<bool>, optional<StaticRegistrationOptions> > > implementationProvider ;
-
- // The server provides find references support.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > referencesProvider ;
-
- // The server provides document highlight support.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > documentHighlightProvider ;
-
- // The server provides document symbol support.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > documentSymbolProvider ;
-
- // The server provides workspace symbol support.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > workspaceSymbolProvider ;
-
- // The server provides code actions.
- optional< std::pair< optional<bool>, optional<CodeActionOptions> > > codeActionProvider ;
-
- // The server provides code lens.
- optional<CodeLensOptions> codeLensProvider;
+ //
+ // The server is interested in receiving didDeleteFiles file
+ // notifications.
+ //
+ optional<lsFileOperationRegistrationOptions> didDelete;
- // The server provides document formatting.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > documentFormattingProvider ;
+ //
+ // The server is interested in receiving willDeleteFiles file
+ // requests.
+ //
+ optional<lsFileOperationRegistrationOptions> willDelete;
+ MAKE_SWAP_METHOD(lsFileOperations, didCreate, willCreate, didRename, willRename, didDelete, willDelete)
+ };
+ optional<lsFileOperations> fileOperations;
- // The server provides document range formatting.
- optional< std::pair< optional<bool>, optional<WorkDoneProgressOptions> > > documentRangeFormattingProvider ;
+ MAKE_SWAP_METHOD(WorkspaceServerCapabilities, workspaceFolders, fileOperations)
+};
+MAKE_REFLECT_STRUCT(WorkspaceServerCapabilities, workspaceFolders, fileOperations)
+MAKE_REFLECT_STRUCT(
+ WorkspaceServerCapabilities::lsFileOperations, didCreate, willCreate, didRename, willRename, didDelete, willDelete
+)
- // The server provides document formatting on typing.
- optional<lsDocumentOnTypeFormattingOptions> documentOnTypeFormattingProvider;
+//
+// Semantic highlighting server capabilities.
+//
+// <p>
+// <b>Note:</b> the <a href=
+// "https://github.com/Microsoft/vscode-languageserver-node/pull/367">{@code textDocument/semanticHighlighting}
+// language feature</a> is not yet part of the official LSP specification.
+//
- // The server provides rename support.
- optional< std::pair< optional<bool>, optional<RenameOptions> > > renameProvider;
+struct SemanticHighlightingServerCapabilities
+{
+ //
+ // A "lookup table" of semantic highlighting <a href="https://manual.macromates.com/en/language_grammars">TextMate scopes</a>
+ // supported by the language server. If not defined or empty, then the server does not support the semantic highlighting
+ // feature. Otherwise, clients should reuse this "lookup table" when receiving semantic highlighting notifications from
+ // the server.
+ //
+ std::vector<std::vector<std::string>> scopes;
+ MAKE_SWAP_METHOD(SemanticHighlightingServerCapabilities, scopes)
+};
+MAKE_REFLECT_STRUCT(SemanticHighlightingServerCapabilities, scopes)
+struct SemanticTokensServerFull
+{
+ //
+ // The server supports deltas for full documents.
+ //
+ bool delta = false;
+ MAKE_SWAP_METHOD(SemanticTokensServerFull, delta)
+};
+MAKE_REFLECT_STRUCT(SemanticTokensServerFull, delta)
+struct SemanticTokensWithRegistrationOptions
+{
+ SemanticTokensLegend legend;
+
+ //
+ // Server supports providing semantic tokens for a specific range
+ // of a document.
+ //
+ optional<std::pair<optional<bool>, optional<lsp::Any>>> range;
+
+ //
+ // Server supports providing semantic tokens for a full document.
+ //
+ optional<std::pair<optional<bool>, optional<SemanticTokensServerFull>>> full;
+
+ //
+ // 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.
+ //
+ optional<std::vector<DocumentFilter>> documentSelector;
+ //
+ // The id used to register the request. The id can be used to deregister
+ // the request again. See also Registration#id.
+ //
+ optional<std::string> id;
+ MAKE_SWAP_METHOD(SemanticTokensWithRegistrationOptions, legend, range, full, documentSelector, id)
+};
+MAKE_REFLECT_STRUCT(SemanticTokensWithRegistrationOptions, legend, range, full, documentSelector, id)
- // The server provides document link support.
- optional<lsDocumentLinkOptions > documentLinkProvider;
+using DocumentColorOptions = WorkDoneProgressOptions;
+using FoldingRangeOptions = WorkDoneProgressOptions;
+struct InlayHintOptions : WorkDoneProgressOptions
+{
- //
- // The server provides color provider support.
- //
- // @since 3.6.0
- //
- optional< std::pair< optional<bool>, optional<DocumentColorOptions> > > colorProvider;
+ /**
+ * The server provides support to resolve additional
+ * information for an inlay hint item.
+ */
+ optional<bool> resolveProvider;
+ MAKE_SWAP_METHOD(InlayHintOptions, workDoneProgress, resolveProvider);
+};
- //
- // The server provides folding provider support.
- //
- // @since 3.10.0
- //
- optional < std::pair< optional<bool>, optional<FoldingRangeOptions> > > foldingRangeProvider;
+MAKE_REFLECT_STRUCT(InlayHintOptions, workDoneProgress, resolveProvider)
- // The server provides execute command support.
- optional < lsExecuteCommandOptions >executeCommandProvider;
+struct lsServerCapabilities
+{
+ // Defines how text documents are synced. Is either a detailed structure
+ // defining each notification or for backwards compatibility the
+ // TextDocumentSyncKind number.
+ optional<std::pair<optional<lsTextDocumentSyncKind>, optional<lsTextDocumentSyncOptions>>> textDocumentSync;
- //
- // Workspace specific server capabilities
- //
- optional< WorkspaceServerCapabilities > workspace;
+ // The server provides hover support.
+ optional<bool> hoverProvider;
- //
- // Semantic highlighting server capabilities.
- //
+ // The server provides completion support.
+ optional<lsCompletionOptions> completionProvider;
- optional< SemanticHighlightingServerCapabilities >semanticHighlighting;
+ // The server provides signature help support.
+ optional<lsSignatureHelpOptions> signatureHelpProvider;
- //
- // Server capability for calculating super- and subtype hierarchies.
- // The LS supports the type hierarchy language feature, if this capability is set to {@code true}.
- //
- // <p>
- // <b>Note:</b> the <a href=
- // "https://github.com/Microsoft/vscode-languageserver-node/pull/426">{@code textDocument/typeHierarchy}
- // language feature</a> is not yet part of the official LSP specification.
- //
-
- optional< std::pair< optional<bool>,
- optional<StaticRegistrationOptions> > > typeHierarchyProvider;
+ // The server provides goto definition support.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> definitionProvider;
- //
- // The server provides Call Hierarchy support.
- //
+ //
+ // The server provides Goto Type Definition support.
+ //
+ // Since 3.6.0
+ //
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> typeDefinitionProvider;
- optional< std::pair< optional<bool>,
- optional<StaticRegistrationOptions> > > callHierarchyProvider;
+ // The server provides implementation support.
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> implementationProvider;
- //
- // The server provides selection range support.
- //
- // Since 3.15.0
- //
- optional< std::pair< optional<bool>,
- optional<StaticRegistrationOptions> > > selectionRangeProvider;
-
- //
- // The server provides linked editing range support.
- //
- // Since 3.16.0
- //
- optional< std::pair< optional<bool>,
- optional<StaticRegistrationOptions> > > linkedEditingRangeProvider;
-
-
- //
- // The server provides semantic tokens support.
- //
- // Since 3.16.0
- //
- optional < SemanticTokensWithRegistrationOptions> semanticTokensProvider;
-
- //
- // Whether server provides moniker support.
- //
- // Since 3.16.0
- //
- optional< std::pair< optional<bool>,
- optional<StaticRegistrationOptions> > > monikerProvider;
-
- optional<lsp::Any> experimental;
-
-
- MAKE_SWAP_METHOD(lsServerCapabilities,
- textDocumentSync,
- hoverProvider,
- completionProvider,
- signatureHelpProvider,
- definitionProvider,
- typeDefinitionProvider,
- implementationProvider,
- referencesProvider,
- documentHighlightProvider,
- documentSymbolProvider,
- workspaceSymbolProvider,
- codeActionProvider,
- codeLensProvider,
- documentFormattingProvider,
- documentRangeFormattingProvider,
- documentOnTypeFormattingProvider,
- renameProvider,
- documentLinkProvider,
- executeCommandProvider,
- workspace,
- semanticHighlighting,
- typeHierarchyProvider,
- callHierarchyProvider,
- selectionRangeProvider,
- experimental, colorProvider, foldingRangeProvider,
- linkedEditingRangeProvider, monikerProvider, semanticTokensProvider)
+ // The server provides find references support.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> referencesProvider;
+ // The server provides document highlight support.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> documentHighlightProvider;
+
+ // The server provides document symbol support.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> documentSymbolProvider;
+
+ // The server provides workspace symbol support.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> workspaceSymbolProvider;
+
+ // The server provides code actions.
+ optional<std::pair<optional<bool>, optional<CodeActionOptions>>> codeActionProvider;
+
+ // The server provides code lens.
+ optional<CodeLensOptions> codeLensProvider;
+
+ // The server provides document formatting.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> documentFormattingProvider;
+
+ // The server provides document range formatting.
+ optional<std::pair<optional<bool>, optional<WorkDoneProgressOptions>>> documentRangeFormattingProvider;
+
+ // The server provides document formatting on typing.
+ optional<lsDocumentOnTypeFormattingOptions> documentOnTypeFormattingProvider;
+
+ // The server provides rename support.
+ optional<std::pair<optional<bool>, optional<RenameOptions>>> renameProvider;
+
+ // The server provides document link support.
+ optional<lsDocumentLinkOptions> documentLinkProvider;
+
+ //
+ // The server provides color provider support.
+ //
+ // @since 3.6.0
+ //
+ optional<std::pair<optional<bool>, optional<DocumentColorOptions>>> colorProvider;
+
+ //
+ // The server provides folding provider support.
+ //
+ // @since 3.10.0
+ //
+ optional<std::pair<optional<bool>, optional<FoldingRangeOptions>>> foldingRangeProvider;
+
+ // The server provides execute command support.
+ optional<lsExecuteCommandOptions> executeCommandProvider;
+
+ //
+ // Workspace specific server capabilities
+ //
+ optional<WorkspaceServerCapabilities> workspace;
+
+ //
+ // Semantic highlighting server capabilities.
+ //
+
+ optional<SemanticHighlightingServerCapabilities> semanticHighlighting;
+
+ //
+ // Server capability for calculating super- and subtype hierarchies.
+ // The LS supports the type hierarchy language feature, if this capability is set to {@code true}.
+ //
+ // <p>
+ // <b>Note:</b> the <a href=
+ // "https://github.com/Microsoft/vscode-languageserver-node/pull/426">{@code textDocument/typeHierarchy}
+ // language feature</a> is not yet part of the official LSP specification.
+ //
+
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> typeHierarchyProvider;
+
+ //
+ // The server provides Call Hierarchy support.
+ //
+
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> callHierarchyProvider;
+
+ //
+ // The server provides selection range support.
+ //
+ // Since 3.15.0
+ //
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> selectionRangeProvider;
+
+ //
+ // The server provides linked editing range support.
+ //
+ // Since 3.16.0
+ //
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> linkedEditingRangeProvider;
+
+ //
+ // The server provides semantic tokens support.
+ //
+ // Since 3.16.0
+ //
+ optional<SemanticTokensWithRegistrationOptions> semanticTokensProvider;
+
+ //
+ // Whether server provides moniker support.
+ //
+ // Since 3.16.0
+ //
+ optional<std::pair<optional<bool>, optional<StaticRegistrationOptions>>> monikerProvider;
+
+ /**
+ * The server provides inlay hints.
+ *
+ * @since 3.17.0
+ */
+ optional<std::pair<optional<bool>, optional<InlayHintOptions>>> inlayHintProvider;
+
+ optional<lsp::Any> experimental;
+
+ MAKE_SWAP_METHOD(
+ lsServerCapabilities, textDocumentSync, hoverProvider, completionProvider, signatureHelpProvider,
+ definitionProvider, typeDefinitionProvider, implementationProvider, referencesProvider,
+ documentHighlightProvider, documentSymbolProvider, workspaceSymbolProvider, codeActionProvider,
+ codeLensProvider, documentFormattingProvider, documentRangeFormattingProvider, documentOnTypeFormattingProvider,
+ renameProvider, documentLinkProvider, executeCommandProvider, workspace, semanticHighlighting,
+ typeHierarchyProvider, callHierarchyProvider, selectionRangeProvider, experimental, colorProvider,
+ foldingRangeProvider, linkedEditingRangeProvider, monikerProvider, semanticTokensProvider
+ )
};
-MAKE_REFLECT_STRUCT(lsServerCapabilities,
- textDocumentSync,
- hoverProvider,
- completionProvider,
- signatureHelpProvider,
- definitionProvider,
- typeDefinitionProvider,
- implementationProvider,
- referencesProvider,
- documentHighlightProvider,
- documentSymbolProvider,
- workspaceSymbolProvider,
- codeActionProvider,
- codeLensProvider,
- documentFormattingProvider,
- documentRangeFormattingProvider,
- documentOnTypeFormattingProvider,
- renameProvider,
- documentLinkProvider,
- executeCommandProvider,
- workspace,
- semanticHighlighting,
- typeHierarchyProvider,
- callHierarchyProvider,
- selectionRangeProvider,
- experimental, colorProvider, foldingRangeProvider,
- linkedEditingRangeProvider, monikerProvider, semanticTokensProvider)
+MAKE_REFLECT_STRUCT(
+ lsServerCapabilities, textDocumentSync, hoverProvider, completionProvider, signatureHelpProvider,
+ definitionProvider, typeDefinitionProvider, implementationProvider, referencesProvider, documentHighlightProvider,
+ documentSymbolProvider, workspaceSymbolProvider, codeActionProvider, codeLensProvider, documentFormattingProvider,
+ documentRangeFormattingProvider, documentOnTypeFormattingProvider, renameProvider, documentLinkProvider,
+ executeCommandProvider, workspace, semanticHighlighting, typeHierarchyProvider, callHierarchyProvider,
+ selectionRangeProvider, experimental, colorProvider, foldingRangeProvider, linkedEditingRangeProvider,
+ monikerProvider, semanticTokensProvider
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsTextDocumentClientCapabilities.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsTextDocumentClientCapabilities.h
index 1523254d63..ddedd3711f 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsTextDocumentClientCapabilities.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsTextDocumentClientCapabilities.h
@@ -1,7 +1,6 @@
#pragma once
#include "LibLsp/lsp/method_type.h"
-
#include <stdexcept>
#include "LibLsp/JsonRpc/message.h"
#include "LibLsp/lsp/lsDocumentUri.h"
@@ -11,84 +10,84 @@
#include "LibLsp/lsp/lsp_completion.h"
#include "LibLsp/lsp/lsp_diagnostic.h"
-
-struct WorkDoneProgressOptions
+struct WorkDoneProgressOptions
{
- optional<bool>workDoneProgress;
- MAKE_SWAP_METHOD(WorkDoneProgressOptions, workDoneProgress);
+ optional<bool> workDoneProgress;
+ MAKE_SWAP_METHOD(WorkDoneProgressOptions, workDoneProgress);
};
MAKE_REFLECT_STRUCT(WorkDoneProgressOptions, workDoneProgress);
// Completion options.
-struct lsCompletionOptions:WorkDoneProgressOptions
+struct lsCompletionOptions : WorkDoneProgressOptions
{
- // The server provides support to resolve additional
- // information for a completion item.
- optional<bool> resolveProvider = false;
-
- //
- // 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`.
- //
- // https://github.com/Microsoft/language-server-protocol/issues/138.
- optional< std::vector<std::string> > triggerCharacters ;
-
- //
- // 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`
- //
- optional< std::vector<std::string> > allCommitCharacters;
-
- MAKE_SWAP_METHOD(lsCompletionOptions, workDoneProgress, resolveProvider, triggerCharacters, allCommitCharacters);
+ // The server provides support to resolve additional
+ // information for a completion item.
+ optional<bool> resolveProvider = false;
+
+ //
+ // 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`.
+ //
+ // https://github.com/Microsoft/language-server-protocol/issues/138.
+ optional<std::vector<std::string>> triggerCharacters;
+
+ //
+ // 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`
+ //
+ optional<std::vector<std::string>> allCommitCharacters;
+
+ MAKE_SWAP_METHOD(lsCompletionOptions, workDoneProgress, resolveProvider, triggerCharacters, allCommitCharacters);
};
-MAKE_REFLECT_STRUCT(lsCompletionOptions, workDoneProgress, resolveProvider, triggerCharacters,allCommitCharacters);
-
-
+MAKE_REFLECT_STRUCT(lsCompletionOptions, workDoneProgress, resolveProvider, triggerCharacters, allCommitCharacters);
// Save options.
-struct lsSaveOptions {
- // The client is supposed to include the content on save.
- bool includeText = false;
- void swap(lsSaveOptions& arg)noexcept
- {
- auto temp = includeText;
- includeText = arg.includeText;
- arg.includeText = temp;
- }
+struct lsSaveOptions
+{
+ // The client is supposed to include the content on save.
+ bool includeText = false;
+ void swap(lsSaveOptions& arg) noexcept
+ {
+ auto temp = includeText;
+ includeText = arg.includeText;
+ arg.includeText = temp;
+ }
};
MAKE_REFLECT_STRUCT(lsSaveOptions, includeText);
// Signature help options.
-struct lsSignatureHelpOptions : WorkDoneProgressOptions {
- // The characters that trigger signature help automatically.
- // NOTE: If updating signature help tokens make sure to also update
- // WorkingFile::FindClosestCallNameInBuffer.
- std::vector<std::string> triggerCharacters;
- MAKE_SWAP_METHOD(lsSignatureHelpOptions, workDoneProgress, triggerCharacters);
+struct lsSignatureHelpOptions : WorkDoneProgressOptions
+{
+ // The characters that trigger signature help automatically.
+ // NOTE: If updating signature help tokens make sure to also update
+ // WorkingFile::FindClosestCallNameInBuffer.
+ std::vector<std::string> triggerCharacters;
+ MAKE_SWAP_METHOD(lsSignatureHelpOptions, workDoneProgress, triggerCharacters);
};
-MAKE_REFLECT_STRUCT(lsSignatureHelpOptions, workDoneProgress, triggerCharacters);
+MAKE_REFLECT_STRUCT(lsSignatureHelpOptions, workDoneProgress, triggerCharacters);
// Defines how the host (editor) should sync document changes to the language
// server.
-enum class lsTextDocumentSyncKind {
- // Documents should not be synced at all.
- None = 0,
-
- // Documents are synced by always sending the full content
- // of the document.
- Full = 1,
-
- // Documents are synced by sending the full content on open.
- // After that only incremental updates to the document are
- // send.
- Incremental = 2
+enum class lsTextDocumentSyncKind
+{
+ // Documents should not be synced at all.
+ None = 0,
+
+ // Documents are synced by always sending the full content
+ // of the document.
+ Full = 1,
+
+ // Documents are synced by sending the full content on open.
+ // After that only incremental updates to the document are
+ // send.
+ Incremental = 2
};
#if _WIN32
@@ -100,294 +99,274 @@ MAKE_REFLECT_TYPE_PROXY(lsTextDocumentSyncKind)
//#pragma clang diagnostic pop
#endif
-struct lsTextDocumentSyncOptions {
- // Open and close notifications are sent to the server.
- optional<bool> openClose ;
- // Change notificatins are sent to the server. See TextDocumentSyncKind.None,
- // TextDocumentSyncKind.Full and TextDocumentSyncKindIncremental.
- optional< lsTextDocumentSyncKind> change ;
- // Will save notifications are sent to the server.
- optional<bool> willSave;
- // Will save wait until requests are sent to the server.
- optional<bool> willSaveWaitUntil;
- // Save notifications are sent to the server.
- optional<lsSaveOptions> save;
-
- MAKE_SWAP_METHOD(lsTextDocumentSyncOptions,
- openClose,
- change,
- willSave,
- willSaveWaitUntil,
- save);
-};
-MAKE_REFLECT_STRUCT(lsTextDocumentSyncOptions,
- openClose,
- change,
- willSave,
- willSaveWaitUntil,
- save);
-
-struct SynchronizationCapabilities {
- // Whether text document synchronization supports dynamic registration.
- optional<bool> dynamicRegistration;
-
- // The client supports sending will save notifications.
- optional<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.
- optional<bool> willSaveWaitUntil;
-
- // The client supports did save notifications.
- optional<bool> didSave;
-
- MAKE_SWAP_METHOD(SynchronizationCapabilities,
- dynamicRegistration,
- willSave,
- willSaveWaitUntil,
- didSave);
-};
-MAKE_REFLECT_STRUCT(SynchronizationCapabilities,
- dynamicRegistration,
- willSave,
- willSaveWaitUntil,
- didSave);
-
-struct CompletionItemKindCapabilities
+struct lsTextDocumentSyncOptions
{
- optional<std::vector<lsCompletionItemKind> >valueSet;
- MAKE_SWAP_METHOD(CompletionItemKindCapabilities, valueSet);
+ // Open and close notifications are sent to the server.
+ optional<bool> openClose;
+ // Change notificatins are sent to the server. See TextDocumentSyncKind.None,
+ // TextDocumentSyncKind.Full and TextDocumentSyncKindIncremental.
+ optional<lsTextDocumentSyncKind> change;
+ // Will save notifications are sent to the server.
+ optional<bool> willSave;
+ // Will save wait until requests are sent to the server.
+ optional<bool> willSaveWaitUntil;
+ // Save notifications are sent to the server.
+ optional<lsSaveOptions> save;
+
+ MAKE_SWAP_METHOD(lsTextDocumentSyncOptions, openClose, change, willSave, willSaveWaitUntil, save);
};
-MAKE_REFLECT_STRUCT(CompletionItemKindCapabilities, valueSet);
-
-struct CompletionItemCapabilities {
- // 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.
- optional<bool> snippetSupport;
-
- // Client supports commit characters on a completion item.
-
- optional<bool> commitCharactersSupport;
+MAKE_REFLECT_STRUCT(lsTextDocumentSyncOptions, openClose, change, willSave, willSaveWaitUntil, save);
+struct SynchronizationCapabilities
+{
+ // Whether text document synchronization supports dynamic registration.
+ optional<bool> dynamicRegistration;
- // Client supports the following content formats for the documentation
- // property. The order describes the preferred format of the client.
+ // The client supports sending will save notifications.
+ optional<bool> willSave;
- optional< std::vector<std::string> > documentationFormat;
+ // 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.
+ optional<bool> willSaveWaitUntil;
- // Client supports the deprecated property on a completion item.
+ // The client supports did save notifications.
+ optional<bool> didSave;
- optional<bool> deprecatedSupport;
+ MAKE_SWAP_METHOD(SynchronizationCapabilities, dynamicRegistration, willSave, willSaveWaitUntil, didSave);
+};
+MAKE_REFLECT_STRUCT(SynchronizationCapabilities, dynamicRegistration, willSave, willSaveWaitUntil, didSave);
- //
- // Client supports the preselect property on a completion item.
- //
- optional<bool> preselectSupport;
-
- MAKE_SWAP_METHOD(CompletionItemCapabilities,
- snippetSupport,
- commitCharactersSupport,
- documentationFormat,
- deprecatedSupport, preselectSupport);
+struct CompletionItemKindCapabilities
+{
+ optional<std::vector<lsCompletionItemKind>> valueSet;
+ MAKE_SWAP_METHOD(CompletionItemKindCapabilities, valueSet);
};
-MAKE_REFLECT_STRUCT(CompletionItemCapabilities,
- snippetSupport,
- commitCharactersSupport,
- documentationFormat,
- deprecatedSupport, preselectSupport);
+MAKE_REFLECT_STRUCT(CompletionItemKindCapabilities, valueSet);
+struct CompletionItemCapabilities
+{
+ // 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.
+ optional<bool> snippetSupport;
-//
- // Capabilities specific to the `textDocument/completion`
- //
-struct CompletionCapabilities {
- // Whether completion supports dynamic registration.
- optional<bool> dynamicRegistration;
+ // Client supports commit characters on a completion item.
+ optional<bool> commitCharactersSupport;
+ // Client supports the following content formats for the documentation
+ // property. The order describes the preferred format of the client.
- // The client supports the following `CompletionItem` specific
- // capabilities.
- optional<CompletionItemCapabilities> completionItem;
+ optional<std::vector<std::string>> documentationFormat;
- //
- // The client supports the following `CompletionItemKind` specific
- // capabilities.
- //
- optional<CompletionItemKindCapabilities> completionItemKind;
+ // Client supports the deprecated property on a completion item.
- //
- // The client supports sending additional context information for a
- // `textDocument/completion` request.
- //
- optional<bool> contextSupport;
+ optional<bool> deprecatedSupport;
+ //
+ // Client supports the preselect property on a completion item.
+ //
+ optional<bool> preselectSupport;
- MAKE_SWAP_METHOD(CompletionCapabilities,
- dynamicRegistration,
- completionItem, completionItemKind);
+ MAKE_SWAP_METHOD(
+ CompletionItemCapabilities, snippetSupport, commitCharactersSupport, documentationFormat, deprecatedSupport,
+ preselectSupport
+ );
};
+MAKE_REFLECT_STRUCT(
+ CompletionItemCapabilities, snippetSupport, commitCharactersSupport, documentationFormat, deprecatedSupport,
+ preselectSupport
+);
-MAKE_REFLECT_STRUCT(CompletionCapabilities,
- dynamicRegistration,
- completionItem , completionItemKind);
+//
+// Capabilities specific to the `textDocument/completion`
+//
+struct CompletionCapabilities
+{
+ // Whether completion supports dynamic registration.
+ optional<bool> dynamicRegistration;
+
+ // The client supports the following `CompletionItem` specific
+ // capabilities.
+ optional<CompletionItemCapabilities> completionItem;
+
+ //
+ // The client supports the following `CompletionItemKind` specific
+ // capabilities.
+ //
+ optional<CompletionItemKindCapabilities> completionItemKind;
+
+ //
+ // The client supports sending additional context information for a
+ // `textDocument/completion` request.
+ //
+ optional<bool> contextSupport;
+
+ MAKE_SWAP_METHOD(CompletionCapabilities, dynamicRegistration, completionItem, completionItemKind);
+};
+MAKE_REFLECT_STRUCT(CompletionCapabilities, dynamicRegistration, completionItem, completionItemKind);
-struct HoverCapabilities:public DynamicRegistrationCapabilities
+struct HoverCapabilities : public DynamicRegistrationCapabilities
{
- //
- // Client supports the following content formats for the content
- // property. The order describes the preferred format of the client.
- //
- // See {@link MarkupKind} for allowed values.
- //
- optional<std::vector<std::string>> contentFormat;
-
- MAKE_SWAP_METHOD(HoverCapabilities, dynamicRegistration, contentFormat);
+ //
+ // Client supports the following content formats for the content
+ // property. The order describes the preferred format of the client.
+ //
+ // See {@link MarkupKind} for allowed values.
+ //
+ optional<std::vector<std::string>> contentFormat;
+
+ MAKE_SWAP_METHOD(HoverCapabilities, dynamicRegistration, contentFormat);
};
MAKE_REFLECT_STRUCT(HoverCapabilities, dynamicRegistration, contentFormat);
//
- // Client capabilities specific to parameter information.
- //
-struct ParameterInformationCapabilities {
- //
- // The client supports processing label offsets instead of a
- // simple label string.
- //
- // Since 3.14.0
- //
- optional<bool> labelOffsetSupport;
-
- MAKE_SWAP_METHOD(ParameterInformationCapabilities, labelOffsetSupport);
+// Client capabilities specific to parameter information.
+//
+struct ParameterInformationCapabilities
+{
+ //
+ // The client supports processing label offsets instead of a
+ // simple label string.
+ //
+ // Since 3.14.0
+ //
+ optional<bool> labelOffsetSupport;
+
+ MAKE_SWAP_METHOD(ParameterInformationCapabilities, labelOffsetSupport);
};
MAKE_REFLECT_STRUCT(ParameterInformationCapabilities, labelOffsetSupport)
-
-struct SignatureInformationCapabilities {
- //
- // Client supports the following content formats for the documentation
- // property. The order describes the preferred format of the client.
- //
- // See {@link MarkupKind} for allowed values.
- //
- std::vector<std::string> documentationFormat;
-
- //
- // Client capabilities specific to parameter information.
- //
- ParameterInformationCapabilities parameterInformation;
-
- MAKE_SWAP_METHOD(SignatureInformationCapabilities, documentationFormat, parameterInformation)
+struct SignatureInformationCapabilities
+{
+ //
+ // Client supports the following content formats for the documentation
+ // property. The order describes the preferred format of the client.
+ //
+ // See {@link MarkupKind} for allowed values.
+ //
+ std::vector<std::string> documentationFormat;
+
+ //
+ // Client capabilities specific to parameter information.
+ //
+ ParameterInformationCapabilities parameterInformation;
+
+ MAKE_SWAP_METHOD(SignatureInformationCapabilities, documentationFormat, parameterInformation)
};
-MAKE_REFLECT_STRUCT(SignatureInformationCapabilities,documentationFormat, parameterInformation)
+MAKE_REFLECT_STRUCT(SignatureInformationCapabilities, documentationFormat, parameterInformation)
-struct SignatureHelpCapabilities :public DynamicRegistrationCapabilities
+struct SignatureHelpCapabilities : public DynamicRegistrationCapabilities
{
- //
- // The client supports the following `SignatureInformation`
- // specific properties.
- //
- optional< SignatureInformationCapabilities > signatureInformation;
+ //
+ // The client supports the following `SignatureInformation`
+ // specific properties.
+ //
+ optional<SignatureInformationCapabilities> signatureInformation;
- MAKE_SWAP_METHOD(SignatureHelpCapabilities, dynamicRegistration, signatureInformation)
+ MAKE_SWAP_METHOD(SignatureHelpCapabilities, dynamicRegistration, signatureInformation)
};
MAKE_REFLECT_STRUCT(SignatureHelpCapabilities, dynamicRegistration, signatureInformation)
-struct DocumentSymbolCapabilities :public DynamicRegistrationCapabilities {
- //
- // Specific capabilities for the `SymbolKind`.
- //
- optional<SymbolKindCapabilities> symbolKind;
+struct DocumentSymbolCapabilities : public DynamicRegistrationCapabilities
+{
+ //
+ // Specific capabilities for the `SymbolKind`.
+ //
+ optional<SymbolKindCapabilities> symbolKind;
- //
- // The client support hierarchical document symbols.
- //
- optional<bool> hierarchicalDocumentSymbolSupport;
+ //
+ // The client support hierarchical document symbols.
+ //
+ optional<bool> hierarchicalDocumentSymbolSupport;
- MAKE_SWAP_METHOD(DocumentSymbolCapabilities, dynamicRegistration, symbolKind, hierarchicalDocumentSymbolSupport)
+ MAKE_SWAP_METHOD(DocumentSymbolCapabilities, dynamicRegistration, symbolKind, hierarchicalDocumentSymbolSupport)
};
MAKE_REFLECT_STRUCT(DocumentSymbolCapabilities, dynamicRegistration, symbolKind, hierarchicalDocumentSymbolSupport)
-struct DeclarationCapabilities:public DynamicRegistrationCapabilities{
- //
- // The client supports additional metadata in the form of declaration links.
- //
- optional<bool>linkSupport;
+struct DeclarationCapabilities : public DynamicRegistrationCapabilities
+{
+ //
+ // The client supports additional metadata in the form of declaration links.
+ //
+ optional<bool> linkSupport;
- MAKE_SWAP_METHOD(DeclarationCapabilities, dynamicRegistration, linkSupport);
+ MAKE_SWAP_METHOD(DeclarationCapabilities, dynamicRegistration, linkSupport);
};
MAKE_REFLECT_STRUCT(DeclarationCapabilities, dynamicRegistration, linkSupport)
-
struct CodeActionKindCapabilities
{
- //
- // 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.
- //
- // See {@link CodeActionKind} for allowed values.
- //
- optional< std::vector< std::string> >valueSet;
-
- MAKE_SWAP_METHOD(CodeActionKindCapabilities, 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.
+ //
+ // See {@link CodeActionKind} for allowed values.
+ //
+ optional<std::vector<std::string>> valueSet;
+
+ MAKE_SWAP_METHOD(CodeActionKindCapabilities, valueSet)
};
-MAKE_REFLECT_STRUCT(CodeActionKindCapabilities,valueSet)
+MAKE_REFLECT_STRUCT(CodeActionKindCapabilities, valueSet)
struct CodeActionLiteralSupportCapabilities
{
- optional<CodeActionKindCapabilities> codeActionKind;
+ optional<CodeActionKindCapabilities> codeActionKind;
- MAKE_SWAP_METHOD(CodeActionLiteralSupportCapabilities, codeActionKind)
+ MAKE_SWAP_METHOD(CodeActionLiteralSupportCapabilities, codeActionKind)
};
MAKE_REFLECT_STRUCT(CodeActionLiteralSupportCapabilities, codeActionKind)
-struct CodeActionCapabilities:public DynamicRegistrationCapabilities{
- //
- // The client support code action literals as a valid
- // response of the `textDocument/codeAction` request.
- //
- optional<CodeActionLiteralSupportCapabilities> codeActionLiteralSupport;
+struct CodeActionCapabilities : public DynamicRegistrationCapabilities
+{
+ //
+ // The client support code action literals as a valid
+ // response of the `textDocument/codeAction` request.
+ //
+ optional<CodeActionLiteralSupportCapabilities> codeActionLiteralSupport;
- MAKE_SWAP_METHOD(CodeActionCapabilities, dynamicRegistration, codeActionLiteralSupport)
+ MAKE_SWAP_METHOD(CodeActionCapabilities, dynamicRegistration, codeActionLiteralSupport)
};
-MAKE_REFLECT_STRUCT(CodeActionCapabilities,dynamicRegistration,codeActionLiteralSupport)
+MAKE_REFLECT_STRUCT(CodeActionCapabilities, dynamicRegistration, codeActionLiteralSupport)
-struct RenameCapabilities :public DynamicRegistrationCapabilities {
- //
- // The client support code action literals as a valid
- // response of the `textDocument/codeAction` request.
- //
- optional<bool> prepareSupport;
+struct RenameCapabilities : public DynamicRegistrationCapabilities
+{
+ //
+ // The client support code action literals as a valid
+ // response of the `textDocument/codeAction` request.
+ //
+ optional<bool> prepareSupport;
- MAKE_SWAP_METHOD(RenameCapabilities, dynamicRegistration, prepareSupport)
+ MAKE_SWAP_METHOD(RenameCapabilities, dynamicRegistration, prepareSupport)
};
MAKE_REFLECT_STRUCT(RenameCapabilities, dynamicRegistration, prepareSupport)
-struct DiagnosticsTagSupport {
- /**
+struct DiagnosticsTagSupport
+{
+ /**
* The tags supported by the client.
*/
- std::vector<DiagnosticTag> valueSet;
- MAKE_SWAP_METHOD(DiagnosticsTagSupport, valueSet)
+ std::vector<DiagnosticTag> valueSet;
+ MAKE_SWAP_METHOD(DiagnosticsTagSupport, valueSet)
};
MAKE_REFLECT_STRUCT(DiagnosticsTagSupport, valueSet)
-struct PublishDiagnosticsClientCapabilities :public DynamicRegistrationCapabilities {
- /**
+struct PublishDiagnosticsClientCapabilities : public DynamicRegistrationCapabilities
+{
+ /**
* The client support code action literals as a valid
* response of the `textDocument/codeAction` request.
*/
- optional<bool> relatedInformation;
+ optional<bool> relatedInformation;
- /**
+ /**
* Client supports the tag property to provide meta data about a diagnostic.
* Clients supporting tags have to handle unknown tags gracefully.
*
@@ -398,316 +377,288 @@ struct PublishDiagnosticsClientCapabilities :public DynamicRegistrationCapabilit
*
* Since 3.15
*/
- optional < std::pair<optional<bool>, optional<DiagnosticsTagSupport> > > tagSupport;
+ optional<std::pair<optional<bool>, optional<DiagnosticsTagSupport>>> tagSupport;
- /**
+ /**
* Whether the client interprets the version property of the
* `textDocument/publishDiagnostics` notification's parameter.
*
* Since 3.15.0
*/
- optional<bool> versionSupport;
+ optional<bool> versionSupport;
- /**
+ /**
* Client supports a codeDescription property
*
* @since 3.16.0
*/
- optional<bool> codeDescriptionSupport ;
+ optional<bool> codeDescriptionSupport;
- /**
+ /**
* Whether code action supports the `data` property which is
* preserved between a `textDocument/publishDiagnostics` and
* `textDocument/codeAction` request.
*
* @since 3.16.0
*/
- optional<bool> dataSupport ;
-
+ optional<bool> dataSupport;
- MAKE_SWAP_METHOD(PublishDiagnosticsClientCapabilities, dynamicRegistration, relatedInformation, tagSupport,versionSupport,codeDescriptionSupport,dataSupport)
+ MAKE_SWAP_METHOD(
+ PublishDiagnosticsClientCapabilities, dynamicRegistration, relatedInformation, tagSupport, versionSupport,
+ codeDescriptionSupport, dataSupport
+ )
};
-MAKE_REFLECT_STRUCT(PublishDiagnosticsClientCapabilities, dynamicRegistration, relatedInformation, tagSupport, versionSupport, codeDescriptionSupport, dataSupport)
-
-
-struct FoldingRangeCapabilities :public DynamicRegistrationCapabilities {
- //
- // 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.
- //
- optional<int> rangeLimit;
+MAKE_REFLECT_STRUCT(
+ PublishDiagnosticsClientCapabilities, dynamicRegistration, relatedInformation, tagSupport, versionSupport,
+ codeDescriptionSupport, dataSupport
+)
- //
- // 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.
- //
- optional<bool> lineFoldingOnly;
- MAKE_SWAP_METHOD(FoldingRangeCapabilities, dynamicRegistration, rangeLimit, lineFoldingOnly)
+struct FoldingRangeCapabilities : public DynamicRegistrationCapabilities
+{
+ //
+ // 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.
+ //
+ optional<int> rangeLimit;
+
+ //
+ // 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.
+ //
+ optional<bool> lineFoldingOnly;
+ MAKE_SWAP_METHOD(FoldingRangeCapabilities, dynamicRegistration, rangeLimit, lineFoldingOnly)
};
-MAKE_REFLECT_STRUCT(FoldingRangeCapabilities, dynamicRegistration, rangeLimit,lineFoldingOnly)
+MAKE_REFLECT_STRUCT(FoldingRangeCapabilities, dynamicRegistration, rangeLimit, lineFoldingOnly)
+struct SemanticHighlightingCapabilities : public DynamicRegistrationCapabilities
+{
+ //
+ // The client support code action literals as a valid
+ // response of the `textDocument/codeAction` request.
+ //
+ optional<bool> semanticHighlighting;
-struct SemanticHighlightingCapabilities :public DynamicRegistrationCapabilities {
- //
- // The client support code action literals as a valid
- // response of the `textDocument/codeAction` request.
- //
- optional<bool> semanticHighlighting;
-
- MAKE_SWAP_METHOD(SemanticHighlightingCapabilities, dynamicRegistration, semanticHighlighting)
+ MAKE_SWAP_METHOD(SemanticHighlightingCapabilities, dynamicRegistration, semanticHighlighting)
};
MAKE_REFLECT_STRUCT(SemanticHighlightingCapabilities, dynamicRegistration, semanticHighlighting)
-struct SemanticTokensClientCapabilitiesRequestsFull {
+struct SemanticTokensClientCapabilitiesRequestsFull
+{
- //
- // The client will send the `textDocument/semanticTokens/full/delta` request if
- // the server provides a corresponding handler.
- //
- bool delta = false;
- MAKE_SWAP_METHOD(SemanticTokensClientCapabilitiesRequestsFull, delta)
+ //
+ // The client will send the `textDocument/semanticTokens/full/delta` request if
+ // the server provides a corresponding handler.
+ //
+ bool delta = false;
+ MAKE_SWAP_METHOD(SemanticTokensClientCapabilitiesRequestsFull, delta)
};
MAKE_REFLECT_STRUCT(SemanticTokensClientCapabilitiesRequestsFull, delta)
-struct SemanticTokensClientCapabilities : public DynamicRegistrationCapabilities
+struct SemanticTokensClientCapabilities : public DynamicRegistrationCapabilities
{
- //export TokenFormat = 'relative';
- struct lsRequests
- {
- //
- // The client will send the `textDocument/semanticTokens/range` request
- // if the server provides a corresponding handler.
- //
- optional<std::pair< optional<bool>,
- optional<SemanticTokensClientCapabilitiesRequestsFull>>> range;
- //
- // The client will send the `textDocument/semanticTokens/full` request
- // if the server provides a corresponding handler.
- //
- optional<std::pair< optional<bool>, optional<lsp::Any>>> full;
- MAKE_SWAP_METHOD(lsRequests, range, full)
- };
-
- lsRequests requests;
+ //export TokenFormat = 'relative';
+ struct lsRequests
+ {
//
- // The token types that the client supports.
- //
- std::vector<std::string> tokenTypes;
-
- //
- // The token modifiers that the client supports.
- //
- std::vector<std::string> tokenModifiers;
+ // The client will send the `textDocument/semanticTokens/range` request
+ // if the server provides a corresponding handler.
//
- // The formats the clients supports.
- //
- std::vector<std::string> formats;
+ optional<std::pair<optional<bool>, optional<SemanticTokensClientCapabilitiesRequestsFull>>> range;
//
- // Whether the client supports tokens that can overlap each other.
- //
- optional < bool >overlappingTokenSupport;
-
+ // The client will send the `textDocument/semanticTokens/full` request
+ // if the server provides a corresponding handler.
//
- // Whether the client supports tokens that can span multiple lines.
- //
- optional < bool > multilineTokenSupport;
-
- MAKE_SWAP_METHOD(SemanticTokensClientCapabilities, dynamicRegistration,requests, tokenTypes, tokenModifiers,
- formats, overlappingTokenSupport, multilineTokenSupport)
-
+ optional<std::pair<optional<bool>, optional<lsp::Any>>> full;
+ MAKE_SWAP_METHOD(lsRequests, range, full)
+ };
+
+ lsRequests requests;
+ //
+ // The token types that the client supports.
+ //
+ std::vector<std::string> tokenTypes;
+
+ //
+ // The token modifiers that the client supports.
+ //
+ std::vector<std::string> tokenModifiers;
+ //
+ // The formats the clients supports.
+ //
+ std::vector<std::string> formats;
+ //
+ // Whether the client supports tokens that can overlap each other.
+ //
+ optional<bool> overlappingTokenSupport;
+
+ //
+ // Whether the client supports tokens that can span multiple lines.
+ //
+ optional<bool> multilineTokenSupport;
+
+ MAKE_SWAP_METHOD(
+ SemanticTokensClientCapabilities, dynamicRegistration, requests, tokenTypes, tokenModifiers, formats,
+ overlappingTokenSupport, multilineTokenSupport
+ )
};
-MAKE_REFLECT_STRUCT(SemanticTokensClientCapabilities::lsRequests, range,full)
-MAKE_REFLECT_STRUCT(SemanticTokensClientCapabilities, dynamicRegistration, requests, tokenTypes, tokenModifiers,
- formats, overlappingTokenSupport, multilineTokenSupport)
+MAKE_REFLECT_STRUCT(SemanticTokensClientCapabilities::lsRequests, range, full)
+MAKE_REFLECT_STRUCT(
+ SemanticTokensClientCapabilities, dynamicRegistration, requests, tokenTypes, tokenModifiers, formats,
+ overlappingTokenSupport, multilineTokenSupport
+)
// Text document specific client capabilities.
-struct lsTextDocumentClientCapabilities {
-
- SynchronizationCapabilities synchronization;
-
-
- // Capabilities specific to the `textDocument/completion`
- optional<CompletionCapabilities> completion;
-
-
-
- // Capabilities specific to the `textDocument/hover`
- optional<HoverCapabilities> hover;
-
- // Capabilities specific to the `textDocument/signatureHelp`
- optional<SignatureHelpCapabilities> signatureHelp;
-
- // Capabilities specific to the `textDocument/references`
- optional<DynamicRegistrationCapabilities> references;
-
-
-
-
-
- // Capabilities specific to the `textDocument/documentHighlight`
- optional<DynamicRegistrationCapabilities> documentHighlight;
-
- // Capabilities specific to the `textDocument/documentSymbol`
- optional<DocumentSymbolCapabilities> documentSymbol;
-
- // Capabilities specific to the `textDocument/formatting`
- optional<DynamicRegistrationCapabilities> formatting;
-
- // Capabilities specific to the `textDocument/rangeFormatting`
- optional<DynamicRegistrationCapabilities> rangeFormatting;
-
- // Capabilities specific to the `textDocument/onTypeFormatting`
- optional<DynamicRegistrationCapabilities> onTypeFormatting;
-
-
- //
- // Capabilities specific to the `textDocument/declaration`
- //
- // Since 3.14.0
- //
- optional< DeclarationCapabilities> declaration;
-
-
- typedef DeclarationCapabilities DefinitionCapabilities;
- // Capabilities specific to the `textDocument/definition`
- optional<DefinitionCapabilities> definition;
-
-
-
- //
-// Capabilities specific to the `textDocument/typeDefinition`
-//
-// Since 3.6.0
-//
- typedef DeclarationCapabilities TypeDefinitionCapabilities;
- optional<TypeDefinitionCapabilities> typeDefinition;
-
-
- typedef DeclarationCapabilities ImplementationCapabilities;
- // Capabilities specific to the `textDocument/implementation`
- optional<ImplementationCapabilities> implementation;
-
-
- // Capabilities specific to the `textDocument/codeAction`
- optional<CodeActionCapabilities> codeAction;
-
-
- // Capabilities specific to the `textDocument/codeLens`
- optional<DynamicRegistrationCapabilities> codeLens;
-
- // Capabilities specific to the `textDocument/documentLink`
- optional<DynamicRegistrationCapabilities> documentLink;
-
- //
- // Capabilities specific to the `textDocument/documentColor` and the
- // `textDocument/colorPresentation` request.
- //
- // Since 3.6.0
- //
- optional<DynamicRegistrationCapabilities> colorProvider;
-
- // Capabilities specific to the `textDocument/rename`
- optional<RenameCapabilities> rename;
-
-//
-// Capabilities specific to `textDocument/publishDiagnostics`.
-//
- optional<PublishDiagnosticsClientCapabilities> publishDiagnostics;
-
- //
-// Capabilities specific to `textDocument/foldingRange` requests.
-//
-// Since 3.10.0
-//
- optional< FoldingRangeCapabilities > foldingRange;
-
-
- //
- // Capabilities specific to {@code textDocument/semanticHighlighting}.
- //
- optional< SemanticHighlightingCapabilities > semanticHighlightingCapabilities;
+struct lsTextDocumentClientCapabilities
+{
- //
- // Capabilities specific to {@code textDocument/typeHierarchy}.
- //
- optional< DynamicRegistrationCapabilities > typeHierarchyCapabilities;
+ SynchronizationCapabilities synchronization;
+ // Capabilities specific to the `textDocument/completion`
+ optional<CompletionCapabilities> completion;
+ // Capabilities specific to the `textDocument/hover`
+ optional<HoverCapabilities> hover;
- //
-// Capabilities specific to `textDocument/selectionRange` requests
-//
+ // Capabilities specific to the `textDocument/signatureHelp`
+ optional<SignatureHelpCapabilities> signatureHelp;
+
+ // Capabilities specific to the `textDocument/references`
+ optional<DynamicRegistrationCapabilities> references;
- optional< DynamicRegistrationCapabilities > selectionRange;
-
- //
- // Capabilities specific to the `textDocument/linkedEditingRange` request.
- //
- // @since 3.16.0
- //
- optional< DynamicRegistrationCapabilities > linkedEditingRange;
-
- //
- // Capabilities specific to the various call hierarchy requests.
- //
- // @since 3.16.0
- //
- optional< DynamicRegistrationCapabilities > callHierarchy;
-
- //
- // Capabilities specific to the various semantic token requests.
- //
- // @since 3.16.0
- //
- optional< SemanticTokensClientCapabilities > semanticTokens;
-
- //
- // Capabilities specific to the `textDocument/moniker` request.
- //
- // @since 3.16.0
- //
- optional< DynamicRegistrationCapabilities > moniker;
-
- MAKE_SWAP_METHOD(lsTextDocumentClientCapabilities,
- synchronization,
- completion,
- hover,
- signatureHelp,
- implementation,
- references,
- documentHighlight,
- documentSymbol,
- formatting,
- rangeFormatting,
- onTypeFormatting,
- declaration,
- definition, typeDefinition, implementation,
- codeAction,
- codeLens,
- documentLink, colorProvider,
- rename, publishDiagnostics, foldingRange,
- semanticHighlightingCapabilities, typeHierarchyCapabilities,
- callHierarchy, selectionRange , linkedEditingRange, semanticTokens, moniker)
+ // Capabilities specific to the `textDocument/documentHighlight`
+ optional<DynamicRegistrationCapabilities> documentHighlight;
+
+ // Capabilities specific to the `textDocument/documentSymbol`
+ optional<DocumentSymbolCapabilities> documentSymbol;
+
+ // Capabilities specific to the `textDocument/formatting`
+ optional<DynamicRegistrationCapabilities> formatting;
+
+ // Capabilities specific to the `textDocument/rangeFormatting`
+ optional<DynamicRegistrationCapabilities> rangeFormatting;
+
+ // Capabilities specific to the `textDocument/onTypeFormatting`
+ optional<DynamicRegistrationCapabilities> onTypeFormatting;
+
+ //
+ // Capabilities specific to the `textDocument/declaration`
+ //
+ // Since 3.14.0
+ //
+ optional<DeclarationCapabilities> declaration;
+
+ typedef DeclarationCapabilities DefinitionCapabilities;
+ // Capabilities specific to the `textDocument/definition`
+ optional<DefinitionCapabilities> definition;
+
+ //
+ // Capabilities specific to the `textDocument/typeDefinition`
+ //
+ // Since 3.6.0
+ //
+ typedef DeclarationCapabilities TypeDefinitionCapabilities;
+ optional<TypeDefinitionCapabilities> typeDefinition;
+
+ typedef DeclarationCapabilities ImplementationCapabilities;
+ // Capabilities specific to the `textDocument/implementation`
+ optional<ImplementationCapabilities> implementation;
+
+ // Capabilities specific to the `textDocument/codeAction`
+ optional<CodeActionCapabilities> codeAction;
+
+ // Capabilities specific to the `textDocument/codeLens`
+ optional<DynamicRegistrationCapabilities> codeLens;
+
+ // Capabilities specific to the `textDocument/documentLink`
+ optional<DynamicRegistrationCapabilities> documentLink;
+
+ //
+ // Capabilities specific to the `textDocument/documentColor` and the
+ // `textDocument/colorPresentation` request.
+ //
+ // Since 3.6.0
+ //
+ optional<DynamicRegistrationCapabilities> colorProvider;
+
+ // Capabilities specific to the `textDocument/rename`
+ optional<RenameCapabilities> rename;
+
+ //
+ // Capabilities specific to `textDocument/publishDiagnostics`.
+ //
+ optional<PublishDiagnosticsClientCapabilities> publishDiagnostics;
+
+ //
+ // Capabilities specific to `textDocument/foldingRange` requests.
+ //
+ // Since 3.10.0
+ //
+ optional<FoldingRangeCapabilities> foldingRange;
+
+ //
+ // Capabilities specific to {@code textDocument/semanticHighlighting}.
+ //
+ optional<SemanticHighlightingCapabilities> semanticHighlightingCapabilities;
+
+ //
+ // Capabilities specific to {@code textDocument/typeHierarchy}.
+ //
+ optional<DynamicRegistrationCapabilities> typeHierarchyCapabilities;
+
+ //
+ // Capabilities specific to `textDocument/selectionRange` requests
+ //
+
+ optional<DynamicRegistrationCapabilities> selectionRange;
+
+ //
+ // Capabilities specific to the `textDocument/linkedEditingRange` request.
+ //
+ // @since 3.16.0
+ //
+ optional<DynamicRegistrationCapabilities> linkedEditingRange;
+
+ //
+ // Capabilities specific to the various call hierarchy requests.
+ //
+ // @since 3.16.0
+ //
+ optional<DynamicRegistrationCapabilities> callHierarchy;
+
+ //
+ // Capabilities specific to the various semantic token requests.
+ //
+ // @since 3.16.0
+ //
+ optional<SemanticTokensClientCapabilities> semanticTokens;
+
+ //
+ // Capabilities specific to the `textDocument/moniker` request.
+ //
+ // @since 3.16.0
+ //
+ optional<DynamicRegistrationCapabilities> moniker;
+
+ //
+ // Capabilities specific to the `textDocument/inlayHint` request.
+ //
+ // @since 3.17.0
+ //
+ optional<InlayHintClientCapabilities> inlayHint;
+
+ MAKE_SWAP_METHOD(
+ lsTextDocumentClientCapabilities, synchronization, completion, hover, signatureHelp, implementation, references,
+ documentHighlight, documentSymbol, formatting, rangeFormatting, onTypeFormatting, declaration, definition,
+ typeDefinition, implementation, codeAction, codeLens, documentLink, colorProvider, rename, publishDiagnostics,
+ foldingRange, semanticHighlightingCapabilities, typeHierarchyCapabilities, callHierarchy, selectionRange,
+ linkedEditingRange, semanticTokens, moniker, inlayHint
+ )
};
-
-MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities,
- synchronization,
- completion,
- hover,
- signatureHelp,
- implementation,
- references,
- documentHighlight,
- documentSymbol,
- formatting,
- rangeFormatting,
- onTypeFormatting,
- declaration,
- definition, typeDefinition, implementation,
- codeAction,
- codeLens,
- documentLink, colorProvider,
- rename, publishDiagnostics, foldingRange,
- semanticHighlightingCapabilities, typeHierarchyCapabilities,
- callHierarchy, selectionRange, linkedEditingRange, semanticTokens, moniker)
+MAKE_REFLECT_STRUCT(
+ lsTextDocumentClientCapabilities, synchronization, completion, hover, signatureHelp, implementation, references,
+ documentHighlight, documentSymbol, formatting, rangeFormatting, onTypeFormatting, declaration, definition,
+ typeDefinition, implementation, codeAction, codeLens, documentLink, colorProvider, rename, publishDiagnostics,
+ foldingRange, semanticHighlightingCapabilities, typeHierarchyCapabilities, callHierarchy, selectionRange,
+ linkedEditingRange, semanticTokens, moniker, inlayHint
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsWorkspaceClientCapabilites.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsWorkspaceClientCapabilites.h
index 4b48aec414..db3c4efd92 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsWorkspaceClientCapabilites.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsWorkspaceClientCapabilites.h
@@ -1,7 +1,6 @@
#pragma once
#include "LibLsp/lsp/method_type.h"
-
#include <stdexcept>
#include "LibLsp/JsonRpc/message.h"
@@ -21,48 +20,49 @@
struct lschangeAnnotationSupport
{
- /**
+ /**
* Whether the client groups edits with equal labels into tree nodes,
* for instance all edits labelled with "Changes in Strings" would
* be a tree node.
*/
- optional<bool> groupsOnLabel;
- MAKE_SWAP_METHOD(lschangeAnnotationSupport, groupsOnLabel)
+ optional<bool> groupsOnLabel;
+ MAKE_SWAP_METHOD(lschangeAnnotationSupport, groupsOnLabel)
};
MAKE_REFLECT_STRUCT(lschangeAnnotationSupport, groupsOnLabel)
-struct WorkspaceEditCapabilities {
- /**
+struct WorkspaceEditCapabilities
+{
+ /**
* The client supports versioned document changes in `WorkspaceEdit`s
*/
- optional<bool> documentChanges;
+ optional<bool> documentChanges;
- /**
+ /**
* The client supports resource changes
* in `WorkspaceEdit`s.
*
* @deprecated Since LSP introduces resource operations, use {link #resourceOperations}
*/
- optional<bool> resourceChanges;
+ optional<bool> resourceChanges;
- /**
+ /**
* The resource operations the client supports. Clients should at least
* support 'create', 'rename' and 'delete' files and folders.
*
* @since 3.13.0
*/
- optional< std::vector<std::string> > resourceOperations;
+ optional<std::vector<std::string>> resourceOperations;
- /**
+ /**
* The failure handling strategy of a client if applying the workspace edit
* fails.
*
* See {@link FailureHandlingKind} for allowed values.
*/
- optional<std::string > failureHandling;
+ optional<std::string> failureHandling;
- /**
+ /**
* Whether the client normalizes line endings to the client specific
* setting.
* If set to `true` the client will normalize line ending characters
@@ -70,187 +70,189 @@ struct WorkspaceEditCapabilities {
*
* @since 3.16.0
*/
- optional<bool> normalizesLineEndings;;
+ optional<bool> normalizesLineEndings;
+ ;
- /**
+ /**
* Whether the client in general supports change annotations on text edits,
* create file, rename file and delete file changes.
*
* @since 3.16.0
*/
- optional<lschangeAnnotationSupport> changeAnnotationSupport;
+ optional<lschangeAnnotationSupport> changeAnnotationSupport;
+
+ MAKE_SWAP_METHOD(
+ WorkspaceEditCapabilities, documentChanges, resourceChanges, resourceOperations, failureHandling,
+ normalizesLineEndings, changeAnnotationSupport
+ )
+};
+MAKE_REFLECT_STRUCT(
+ WorkspaceEditCapabilities, documentChanges, resourceChanges, resourceOperations, failureHandling,
+ normalizesLineEndings, changeAnnotationSupport
+)
- MAKE_SWAP_METHOD(WorkspaceEditCapabilities, documentChanges, resourceChanges, resourceOperations, failureHandling, normalizesLineEndings, changeAnnotationSupport)
+struct DynamicRegistrationCapabilities
+{
+ // Did foo notification supports dynamic registration.
+ optional<bool> dynamicRegistration;
+ MAKE_SWAP_METHOD(DynamicRegistrationCapabilities, dynamicRegistration);
};
-MAKE_REFLECT_STRUCT(WorkspaceEditCapabilities,documentChanges, resourceChanges, resourceOperations, failureHandling, normalizesLineEndings, changeAnnotationSupport)
+MAKE_REFLECT_STRUCT(DynamicRegistrationCapabilities, dynamicRegistration);
-struct DynamicRegistrationCapabilities {
- // Did foo notification supports dynamic registration.
- optional<bool> dynamicRegistration;
+struct InlayHintLazyProperties
+{
+ optional<std::vector<std::string>> properties;
- MAKE_SWAP_METHOD(DynamicRegistrationCapabilities,
- dynamicRegistration);
+ MAKE_SWAP_METHOD(InlayHintLazyProperties, properties)
};
-MAKE_REFLECT_STRUCT(DynamicRegistrationCapabilities,
- dynamicRegistration);
+MAKE_REFLECT_STRUCT(InlayHintLazyProperties, properties)
+struct InlayHintClientCapabilities
+{
+ // Whether inlay hints support dynamic registration.
+ optional<bool> dynamicRegistration;
+ optional<InlayHintLazyProperties> resolveSupport;
+
+ MAKE_SWAP_METHOD(InlayHintClientCapabilities, dynamicRegistration, resolveSupport);
+};
+
+MAKE_REFLECT_STRUCT(InlayHintClientCapabilities, dynamicRegistration, resolveSupport)
// Workspace specific client capabilities.
struct SymbolKindCapabilities
{
- optional< std::vector<lsSymbolKind> > valueSet;
-
- MAKE_SWAP_METHOD(SymbolKindCapabilities, valueSet)
-
+ optional<std::vector<lsSymbolKind>> valueSet;
+ MAKE_SWAP_METHOD(SymbolKindCapabilities, valueSet)
};
MAKE_REFLECT_STRUCT(SymbolKindCapabilities, valueSet)
-
-
-
-struct SymbolCapabilities :public DynamicRegistrationCapabilities {
- /**
+struct SymbolCapabilities : public DynamicRegistrationCapabilities
+{
+ /**
* Specific capabilities for the `SymbolKind` in the `workspace/symbol` request.
*/
- optional<SymbolKindCapabilities> symbolKind;
+ optional<SymbolKindCapabilities> symbolKind;
- MAKE_SWAP_METHOD(SymbolCapabilities,
- symbolKind, dynamicRegistration)
+ MAKE_SWAP_METHOD(SymbolCapabilities, symbolKind, dynamicRegistration)
};
-MAKE_REFLECT_STRUCT(SymbolCapabilities,
- symbolKind, dynamicRegistration)
-
+MAKE_REFLECT_STRUCT(SymbolCapabilities, symbolKind, dynamicRegistration)
struct lsFileOperations
{
- /**
+ /**
* Whether the client supports dynamic registration for file
* requests/notifications.
*/
- optional<bool> dynamicRegistration ;
+ optional<bool> dynamicRegistration;
- /**
+ /**
* The client has support for sending didCreateFiles notifications.
*/
- optional<bool>didCreate ;
+ optional<bool> didCreate;
- /**
+ /**
* The client has support for sending willCreateFiles requests.
*/
- optional<bool>willCreate ;
+ optional<bool> willCreate;
- /**
+ /**
* The client has support for sending didRenameFiles notifications.
*/
- optional<bool>didRename ;
+ optional<bool> didRename;
- /**
+ /**
* The client has support for sending willRenameFiles requests.
*/
- optional<bool>willRename ;
+ optional<bool> willRename;
- /**
+ /**
* The client has support for sending didDeleteFiles notifications.
*/
- optional<bool>didDelete ;
+ optional<bool> didDelete;
- /**
+ /**
* The client has support for sending willDeleteFiles requests.
*/
- optional<bool> willDelete ;
- MAKE_SWAP_METHOD(lsFileOperations, dynamicRegistration, didCreate, willCreate,
- didRename, willRename, didDelete, willDelete)
+ optional<bool> willDelete;
+ MAKE_SWAP_METHOD(
+ lsFileOperations, dynamicRegistration, didCreate, willCreate, didRename, willRename, didDelete, willDelete
+ )
};
-MAKE_REFLECT_STRUCT(lsFileOperations, dynamicRegistration, didCreate, willCreate,
- didRename, willRename, didDelete, willDelete)
-
-struct lsWorkspaceClientCapabilites {
- // The client supports applying batch edits to the workspace.
- optional<bool> applyEdit;
-
-
-
- // Capabilities specific to `WorkspaceEdit`s
- optional<WorkspaceEditCapabilities> workspaceEdit;
-
+MAKE_REFLECT_STRUCT(
+ lsFileOperations, dynamicRegistration, didCreate, willCreate, didRename, willRename, didDelete, willDelete
+)
+struct lsWorkspaceClientCapabilites
+{
+ // The client supports applying batch edits to the workspace.
+ optional<bool> applyEdit;
- // Capabilities specific to the `workspace/didChangeConfiguration`
- // notification.
- optional<DynamicRegistrationCapabilities> didChangeConfiguration;
+ // Capabilities specific to `WorkspaceEdit`s
+ optional<WorkspaceEditCapabilities> workspaceEdit;
- // Capabilities specific to the `workspace/didChangeWatchedFiles`
- // notification.
- optional<DynamicRegistrationCapabilities> didChangeWatchedFiles;
+ // Capabilities specific to the `workspace/didChangeConfiguration`
+ // notification.
+ optional<DynamicRegistrationCapabilities> didChangeConfiguration;
- // Capabilities specific to the `workspace/symbol` request.
- optional<SymbolCapabilities> symbol;
+ // Capabilities specific to the `workspace/didChangeWatchedFiles`
+ // notification.
+ optional<DynamicRegistrationCapabilities> didChangeWatchedFiles;
- // Capabilities specific to the `workspace/executeCommand` request.
- optional<DynamicRegistrationCapabilities> executeCommand;
+ // Capabilities specific to the `workspace/symbol` request.
+ optional<SymbolCapabilities> symbol;
+ // Capabilities specific to the `workspace/executeCommand` request.
+ optional<DynamicRegistrationCapabilities> executeCommand;
- /**
+ /**
* The client has support for workspace folders.
*
* Since 3.6.0
*/
- optional<bool> workspaceFolders;
+ optional<bool> workspaceFolders;
- /**
+ /**
* The client supports `workspace/configuration` requests.
*
* Since 3.6.0
*/
- optional<bool> configuration;
-
+ optional<bool> configuration;
- /**
+ /**
* Capabilities specific to the semantic token requests scoped to the
* workspace.
*
* @since 3.16.0
*/
- optional<DynamicRegistrationCapabilities> semanticTokens ;
+ optional<DynamicRegistrationCapabilities> semanticTokens;
- /**
+ /**
* Capabilities specific to the code lens requests scoped to the
* workspace.
*
* @since 3.16.0
*/
- optional<DynamicRegistrationCapabilities> codeLens ;
+ optional<DynamicRegistrationCapabilities> codeLens;
- /**
+ /**
* The client has support for file requests/notifications.
*
* @since 3.16.0
*/
- optional<lsFileOperations> fileOperations;
-
- MAKE_SWAP_METHOD(lsWorkspaceClientCapabilites,
- applyEdit,
- workspaceEdit,
- didChangeConfiguration,
- didChangeWatchedFiles,
- symbol,executeCommand, workspaceFolders,
- configuration, semanticTokens, codeLens, fileOperations)
-};
-
-MAKE_REFLECT_STRUCT(lsWorkspaceClientCapabilites,
- applyEdit,
- workspaceEdit,
- didChangeConfiguration,
- didChangeWatchedFiles,
- symbol,
- executeCommand,workspaceFolders,
- configuration, semanticTokens, codeLens, fileOperations)
-
-
+ optional<lsFileOperations> fileOperations;
+ MAKE_SWAP_METHOD(
+ lsWorkspaceClientCapabilites, applyEdit, workspaceEdit, didChangeConfiguration, didChangeWatchedFiles, symbol,
+ executeCommand, workspaceFolders, configuration, semanticTokens, codeLens, fileOperations
+ )
+};
+MAKE_REFLECT_STRUCT(
+ lsWorkspaceClientCapabilites, applyEdit, workspaceEdit, didChangeConfiguration, didChangeWatchedFiles, symbol,
+ executeCommand, workspaceFolders, configuration, semanticTokens, codeLens, fileOperations
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/progress.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/progress.h
index d21cfc52f8..536401adef 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/progress.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/progress.h
@@ -6,11 +6,11 @@
//This mechanism can be used to report any kind of progress including work done
//progress(usually used to report progress in the user interface using a progress bar)
//and partial result progress to support streaming of results.
-struct ProgressParams
+struct ProgressParams
{
- std::pair<optional<std::string> , optional<int> > token;
- lsp::Any value;
- MAKE_SWAP_METHOD(ProgressParams, token, value)
+ std::pair<optional<std::string>, optional<int>> token;
+ lsp::Any value;
+ MAKE_SWAP_METHOD(ProgressParams, token, value)
};
MAKE_REFLECT_STRUCT(ProgressParams, token, value)
DEFINE_NOTIFICATION_TYPE(Notify_Progress, ProgressParams, "$/progress");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/shutdown.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/shutdown.h
index 2571334503..fd8831ef39 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/shutdown.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/general/shutdown.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/JsonRpc/RequestInMessage.h"
@@ -12,4 +11,3 @@
*/
DEFINE_REQUEST_RESPONSE_TYPE(td_shutdown, optional<JsonNull>, optional<lsp::Any>, "shutdown");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/language/language.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/language/language.h
index 96b4b61fa9..ebde0af4b9 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/language/language.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/language/language.h
@@ -10,28 +10,29 @@
#include <ppltasks.h>
#endif
-struct StatusReport {
-
- std::string ToString() const
- {
- std::string info;
- info += "type:" + type + "\n";
- info += "message:" + message + "\n";
- return info;
- }
- /**
+struct StatusReport
+{
+
+ std::string ToString() const
+ {
+ std::string info;
+ info += "type:" + type + "\n";
+ info += "message:" + message + "\n";
+ return info;
+ }
+ /**
* The message type. See {
*
*/
- std::string type;
- /**
+ std::string type;
+ /**
* The actual message
*
*/
- std::string message;
- MAKE_SWAP_METHOD(StatusReport, type, message);
+ std::string message;
+ MAKE_SWAP_METHOD(StatusReport, type, message);
};
MAKE_REFLECT_STRUCT(StatusReport, type, message);
@@ -41,69 +42,65 @@ MAKE_REFLECT_STRUCT(StatusReport, type, message);
*/
DEFINE_NOTIFICATION_TYPE(lang_status, StatusReport, "language/status");
+enum class MessageType
+{
-enum class MessageType {
-
- /**
+ /**
* An error message.
*/
- Error=(1),
+ Error = (1),
- /**
+ /**
* A warning message.
*/
- Warning=(2),
+ Warning = (2),
- /**
+ /**
* An information message.
*/
- Info=(3),
+ Info = (3),
- /**
+ /**
* A log message.
*/
- Log=(4)
+ Log = (4)
};
MAKE_REFLECT_TYPE_PROXY(MessageType);
+struct ActionableNotification
+{
-struct ActionableNotification {
-
-
-
- /**
+ /**
* The message type. See {
*
*/
- MessageType severity;
- /**
+ MessageType severity;
+ /**
* The actual message
*
*/
- std::string message;
+ std::string message;
- /**
+ /**
* Optional data
*
*/
- optional<lsp::Any> data;
+ optional<lsp::Any> data;
-
- /**
+ /**
* Optional commands
*
*/
- std::vector<lsCommandWithAny> commands;
+ std::vector<lsCommandWithAny> commands;
- MAKE_SWAP_METHOD(ActionableNotification, severity, message, data, commands)
+ MAKE_SWAP_METHOD(ActionableNotification, severity, message, data, commands)
};
MAKE_REFLECT_STRUCT(ActionableNotification, severity, message, data, commands)
-
/**
* The actionable notification is sent from a server to a client to ask the
* client to display a particular message in the user interface, and possible
@@ -111,33 +108,26 @@ MAKE_REFLECT_STRUCT(ActionableNotification, severity, message, data, commands)
*/
DEFINE_NOTIFICATION_TYPE(lang_actionableNotification, ActionableNotification, "language/actionableNotification");
+struct ProgressReport
+{
+ std::string ToString() const;
+ std::string id;
-struct ProgressReport {
- std::string ToString() const;
-
- std::string id;
-
-
- std::string task;
-
-
- std::string subTask;
-
-
- std::string status;
+ std::string task;
- int totalWork = 0;
+ std::string subTask;
+ std::string status;
- int workDone = 0;
+ int totalWork = 0;
+ int workDone = 0;
- bool complete = false;
- MAKE_SWAP_METHOD(ProgressReport, id, task, subTask, status, workDone, complete);
+ bool complete = false;
+ MAKE_SWAP_METHOD(ProgressReport, id, task, subTask, status, workDone, complete);
};
-
MAKE_REFLECT_STRUCT(ProgressReport, id, task, subTask, status, workDone, complete);
/**
@@ -146,24 +136,25 @@ MAKE_REFLECT_STRUCT(ProgressReport, id, task, subTask, status, workDone, complet
*/
DEFINE_NOTIFICATION_TYPE(lang_progressReport, ProgressReport, "language/progressReport");
-enum EventType {
- /**
+enum EventType
+{
+ /**
* classpath updated event.
*/
- ClasspathUpdated = (100),
+ ClasspathUpdated = (100),
- /**
+ /**
* projects imported event.
*/
- ProjectsImported = (200)
+ ProjectsImported = (200)
};
struct EventNotification
{
- int eventType;
- lsp::Any data;
- std::string ToString() const;
- MAKE_SWAP_METHOD(EventNotification, eventType, data)
+ int eventType;
+ lsp::Any data;
+ std::string ToString() const;
+ MAKE_SWAP_METHOD(EventNotification, eventType, data)
};
MAKE_REFLECT_STRUCT(EventNotification, eventType, data);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/location_type.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/location_type.h
index f1d8070bf5..d63b2e472e 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/location_type.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/location_type.h
@@ -3,61 +3,60 @@
#include "lsDocumentUri.h"
#include "lsRange.h"
//Represents a location inside a resource, such as a line inside a text file.
-struct lsLocation {
- lsLocation();
- lsLocation(lsDocumentUri uri, lsRange range);
+struct lsLocation
+{
+ lsLocation();
+ lsLocation(lsDocumentUri uri, lsRange range);
- bool operator==(const lsLocation& other) const;
- bool operator<(const lsLocation& o) const;
+ bool operator==(lsLocation const& other) const;
+ bool operator<(lsLocation const& o) const;
- lsDocumentUri uri;
- lsRange range;
- MAKE_SWAP_METHOD(lsLocation, uri, range)
+ lsDocumentUri uri;
+ lsRange range;
+ MAKE_SWAP_METHOD(lsLocation, uri, range)
};
MAKE_REFLECT_STRUCT(lsLocation, uri, range)
-
-
-struct LinkLocation :public lsLocation
+struct LinkLocation : public lsLocation
{
- std::string displayName;
- std::string kind;
- MAKE_REFLECT_STRUCT(LinkLocation, uri, range, displayName, kind)
+ std::string displayName;
+ std::string kind;
+ MAKE_REFLECT_STRUCT(LinkLocation, uri, range, displayName, kind)
};
-MAKE_REFLECT_STRUCT(LinkLocation, uri, range, displayName,kind)
+MAKE_REFLECT_STRUCT(LinkLocation, uri, range, displayName, kind)
//Represents a link between a sourceand a target location.
struct LocationLink
{
- /**
+ /**
* Span of the origin of this link.
*
* Used as the underlined span for mouse interaction. Defaults to the word range at
* the mouse position.
*/
- optional<lsRange> originSelectionRange;
+ optional<lsRange> originSelectionRange;
- /**
+ /**
* The target resource identifier of this link.
*/
- lsDocumentUri targetUri;
+ lsDocumentUri targetUri;
- /**
+ /**
* 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.
*/
- lsRange targetRange;
+ lsRange 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`
*/
- lsRange targetSelectionRange;
+ lsRange targetSelectionRange;
- MAKE_SWAP_METHOD(LocationLink, originSelectionRange, targetUri, targetRange, targetSelectionRange);
+ MAKE_SWAP_METHOD(LocationLink, originSelectionRange, targetUri, targetRange, targetSelectionRange);
};
MAKE_REFLECT_STRUCT(LocationLink, originSelectionRange, targetUri, targetRange, targetSelectionRange);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lru_cache.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lru_cache.h
index f33bc5627a..c9424918d7 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lru_cache.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lru_cache.h
@@ -8,144 +8,180 @@
// Cache that evicts old entries which have not been used recently. Implemented
// using array/linear search so this works well for small array sizes.
-template <typename TKey, typename TValue>
-struct LruCache {
- explicit LruCache(int max_entries);
-
- // Fetches an entry for |key|. If it does not exist, |allocator| will be
- // invoked to create one.
- template <typename TAllocator>
- TValue Get(const TKey& key, TAllocator allocator);
- // Returns true if there is an entry for |key|.
- bool Has(const TKey& key);
- // Fetches the entry for |filename| and updates it's usage so it is less
- // likely to be evicted.
- bool TryGet(const TKey& key, TValue* dest);
- // TryGetEntry, except the entry is removed from the cache.
- bool TryTake(const TKey& key, TValue* dest);
- // Inserts an entry. Evicts the oldest unused entry if there is no space.
- void Insert(const TKey& key, const TValue& value);
-
- // Call |func| on existing entries. If |func| returns false iteration
- // terminates early.
- template <typename TFunc>
- void IterateValues(TFunc func);
-
- // Empties the cache
- void Clear(void);
-
- private:
- // There is a global score counter, when we access an element we increase
- // its score to the current global value, so it has the highest overall
- // score. This means that the oldest/least recently accessed value has the
- // lowest score.
- //
- // There is a bit of special logic to handle score overlow.
- struct Entry {
- uint32_t score = 0;
- TKey key;
- TValue value;
- bool operator<(const Entry& other) const { return score < other.score; }
- };
-
- void IncrementScore();
-
- std::vector<Entry> entries_;
- int max_entries_ = 1;
- uint32_t next_score_ = 0;
+template<typename TKey, typename TValue>
+struct LruCache
+{
+ explicit LruCache(int max_entries);
+
+ // Fetches an entry for |key|. If it does not exist, |allocator| will be
+ // invoked to create one.
+ template<typename TAllocator>
+ TValue Get(TKey const& key, TAllocator allocator);
+ // Returns true if there is an entry for |key|.
+ bool Has(TKey const& key);
+ // Fetches the entry for |filename| and updates it's usage so it is less
+ // likely to be evicted.
+ bool TryGet(TKey const& key, TValue* dest);
+ // TryGetEntry, except the entry is removed from the cache.
+ bool TryTake(TKey const& key, TValue* dest);
+ // Inserts an entry. Evicts the oldest unused entry if there is no space.
+ void Insert(TKey const& key, TValue const& value);
+
+ // Call |func| on existing entries. If |func| returns false iteration
+ // terminates early.
+ template<typename TFunc>
+ void IterateValues(TFunc func);
+
+ // Empties the cache
+ void Clear(void);
+
+private:
+ // There is a global score counter, when we access an element we increase
+ // its score to the current global value, so it has the highest overall
+ // score. This means that the oldest/least recently accessed value has the
+ // lowest score.
+ //
+ // There is a bit of special logic to handle score overlow.
+ struct Entry
+ {
+ uint32_t score = 0;
+ TKey key;
+ TValue value;
+ bool operator<(Entry const& other) const
+ {
+ return score < other.score;
+ }
+ };
+
+ void IncrementScore();
+
+ std::vector<Entry> entries_;
+ int max_entries_ = 1;
+ uint32_t next_score_ = 0;
};
-template <typename TKey, typename TValue>
-LruCache<TKey, TValue>::LruCache(int max_entries) : max_entries_(max_entries) {
- assert(max_entries > 0);
+template<typename TKey, typename TValue>
+LruCache<TKey, TValue>::LruCache(int max_entries) : max_entries_(max_entries)
+{
+ assert(max_entries > 0);
}
-template <typename TKey, typename TValue>
-template <typename TAllocator>
-TValue LruCache<TKey, TValue>::Get(const TKey& key, TAllocator allocator) {
- for (Entry& entry : entries_) {
- if (entry.key == key)
- return entry.value;
- }
-
- auto result = allocator();
- Insert(key, result);
- return result;
+template<typename TKey, typename TValue>
+template<typename TAllocator>
+TValue LruCache<TKey, TValue>::Get(TKey const& key, TAllocator allocator)
+{
+ for (Entry& entry : entries_)
+ {
+ if (entry.key == key)
+ {
+ return entry.value;
+ }
+ }
+
+ auto result = allocator();
+ Insert(key, result);
+ return result;
}
-template <typename TKey, typename TValue>
-bool LruCache<TKey, TValue>::Has(const TKey& key) {
- for (Entry& entry : entries_) {
- if (entry.key == key)
- return true;
- }
- return false;
+template<typename TKey, typename TValue>
+bool LruCache<TKey, TValue>::Has(TKey const& key)
+{
+ for (Entry& entry : entries_)
+ {
+ if (entry.key == key)
+ {
+ return true;
+ }
+ }
+ return false;
}
-template <typename TKey, typename TValue>
-bool LruCache<TKey, TValue>::TryGet(const TKey& key, TValue* dest) {
- // Assign new score.
- for (Entry& entry : entries_) {
- if (entry.key == key) {
- entry.score = next_score_;
- IncrementScore();
- if (dest)
- *dest = entry.value;
- return true;
+template<typename TKey, typename TValue>
+bool LruCache<TKey, TValue>::TryGet(TKey const& key, TValue* dest)
+{
+ // Assign new score.
+ for (Entry& entry : entries_)
+ {
+ if (entry.key == key)
+ {
+ entry.score = next_score_;
+ IncrementScore();
+ if (dest)
+ {
+ *dest = entry.value;
+ }
+ return true;
+ }
}
- }
- return false;
+ return false;
}
-template <typename TKey, typename TValue>
-bool LruCache<TKey, TValue>::TryTake(const TKey& key, TValue* dest) {
- for (size_t i = 0; i < entries_.size(); ++i) {
- if (entries_[i].key == key) {
- if (dest)
- *dest = entries_[i].value;
- entries_.erase(entries_.begin() + i);
- return true;
+template<typename TKey, typename TValue>
+bool LruCache<TKey, TValue>::TryTake(TKey const& key, TValue* dest)
+{
+ for (size_t i = 0; i < entries_.size(); ++i)
+ {
+ if (entries_[i].key == key)
+ {
+ if (dest)
+ {
+ *dest = entries_[i].value;
+ }
+ entries_.erase(entries_.begin() + i);
+ return true;
+ }
}
- }
- return false;
+ return false;
}
-template <typename TKey, typename TValue>
-void LruCache<TKey, TValue>::Insert(const TKey& key, const TValue& value) {
- if ((int)entries_.size() >= max_entries_)
- entries_.erase(std::min_element(entries_.begin(), entries_.end()));
-
- Entry entry;
- entry.score = next_score_;
- IncrementScore();
- entry.key = key;
- entry.value = value;
- entries_.push_back(entry);
-}
+template<typename TKey, typename TValue>
+void LruCache<TKey, TValue>::Insert(TKey const& key, TValue const& value)
+{
+ if ((int)entries_.size() >= max_entries_)
+ {
+ entries_.erase(std::min_element(entries_.begin(), entries_.end()));
+ }
-template <typename TKey, typename TValue>
-template <typename TFunc>
-void LruCache<TKey, TValue>::IterateValues(TFunc func) {
- for (Entry& entry : entries_) {
- if (!func(entry.value))
- break;
- }
+ Entry entry;
+ entry.score = next_score_;
+ IncrementScore();
+ entry.key = key;
+ entry.value = value;
+ entries_.push_back(entry);
}
-template <typename TKey, typename TValue>
-void LruCache<TKey, TValue>::IncrementScore() {
- // Overflow.
- if (++next_score_ == 0) {
- std::sort(entries_.begin(), entries_.end());
+template<typename TKey, typename TValue>
+template<typename TFunc>
+void LruCache<TKey, TValue>::IterateValues(TFunc func)
+{
for (Entry& entry : entries_)
- entry.score = next_score_++;
- }
+ {
+ if (!func(entry.value))
+ {
+ break;
+ }
+ }
+}
+
+template<typename TKey, typename TValue>
+void LruCache<TKey, TValue>::IncrementScore()
+{
+ // Overflow.
+ if (++next_score_ == 0)
+ {
+ std::sort(entries_.begin(), entries_.end());
+ for (Entry& entry : entries_)
+ {
+ entry.score = next_score_++;
+ }
+ }
}
-template <typename TKey, typename TValue>
-void LruCache<TKey, TValue>::Clear(void) {
- entries_.clear();
- next_score_ = 0;
+template<typename TKey, typename TValue>
+void LruCache<TKey, TValue>::Clear(void)
+{
+ entries_.clear();
+ next_score_ = 0;
}
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsAny.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsAny.h
index 49a917e4f6..880bf7cb82 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsAny.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsAny.h
@@ -5,45 +5,44 @@
#include "LibLsp/JsonRpc/message.h"
namespace lsp
{
- struct Any
- {
- //! Type of JSON value
- enum Type {
- kUnKnown=-1,
- kNullType = 0, //!< null
- kFalseType = 1, //!< false
- kTrueType = 2, //!< true
- kObjectType = 3, //!< object
- kArrayType = 4, //!< array
- kStringType = 5, //!< string
- kNumberType = 6 //!< number
- };
-
-
+struct Any
+{
+ //! Type of JSON value
+ enum Type
+ {
+ kUnKnown = -1,
+ kNullType = 0, //!< null
+ kFalseType = 1, //!< false
+ kTrueType = 2, //!< true
+ kObjectType = 3, //!< object
+ kArrayType = 4, //!< array
+ kStringType = 5, //!< string
+ kNumberType = 6 //!< number
+ };
- template <typename T>
- bool Get(T& value);
+ template<typename T>
+ bool Get(T& value);
- template <typename T>
- void Set(T& value);
+ template<typename T>
+ void Set(T& value);
- int GuessType();
- int GetType();
+ int GuessType();
+ int GetType();
- void Set(std::unique_ptr<LspMessage> value);
+ void Set(std::unique_ptr<LspMessage> value);
- void SetJsonString(std::string&& _data, Type _type);
+ void SetJsonString(std::string&& _data, Type _type);
- void SetJsonString(const std::string& _data, Type _type);
+ void SetJsonString(std::string const& _data, Type _type);
- const std::string& Data()const
- {
- return data;
- }
+ std::string const& Data() const
+ {
+ return data;
+ }
- void swap(Any& arg) noexcept;
+ void swap(Any& arg) noexcept;
- /*
+ /*
*Example for GetFromMap
struct A{
std::string visitor;
@@ -57,103 +56,103 @@ namespace lsp
A a_object;
any.GetFromMap(a_object);
*/
- template <typename T>
- bool GetFromMap(T& value);
-
-
- template <typename T>
- bool GetForMapHelper(T& value);
- bool GetForMapHelper(std::string& value);
- bool GetForMapHelper(optional<std::string>& value);
- private:
- std::unique_ptr<Reader> GetReader();
- std::unique_ptr<Writer> GetWriter() const;
- void SetData(std::unique_ptr<Writer>&);
+ template<typename T>
+ bool GetFromMap(T& value);
- std::string data;
- int jsonType = kUnKnown;
+ template<typename T>
+ bool GetForMapHelper(T& value);
+ bool GetForMapHelper(std::string& value);
+ bool GetForMapHelper(optional<std::string>& value);
- };
+private:
+ std::unique_ptr<Reader> GetReader();
+ std::unique_ptr<Writer> GetWriter() const;
+ void SetData(std::unique_ptr<Writer>&);
+ std::string data;
+ int jsonType = kUnKnown;
};
+}; // namespace lsp
extern void Reflect(Reader& visitor, lsp::Any& value);
-extern void Reflect(Writer& visitor, lsp::Any& value);
+extern void Reflect(Writer& visitor, lsp::Any& value);
-template <typename T>
-void ReflectMember(std::map < std::string, lsp::Any>& visitor, const char* name, T& value) {
+template<typename T>
+void ReflectMember(std::map<std::string, lsp::Any>& visitor, char const* name, T& value)
+{
- auto it = visitor.find(name);
- if (it != visitor.end())
- {
- it->second.GetForMapHelper(value);
- }
-}
-template <typename T>
-void ReflectMember(std::map < std::string, std::string>& visitor, const char* name, T& value) {
-
- auto it = visitor.find(name);
- if (it != visitor.end())
- {
- lsp::Any any;
- any.SetJsonString(it->second, static_cast<lsp::Any::Type>(-1));
- any.Get(value);
- }
+ auto it = visitor.find(name);
+ if (it != visitor.end())
+ {
+ it->second.GetForMapHelper(value);
+ }
}
+template<typename T>
+void ReflectMember(std::map<std::string, std::string>& visitor, char const* name, T& value)
+{
-#define REFLECT_MAP_TO_STRUCT(type, ...) \
- template <typename TVisitor> \
- void ReflectMap(TVisitor& visitor, type& value) { \
- MACRO_MAP(_MAPPABLE_REFLECT_MEMBER, __VA_ARGS__) \
- }
+ auto it = visitor.find(name);
+ if (it != visitor.end())
+ {
+ lsp::Any any;
+ any.SetJsonString(it->second, static_cast<lsp::Any::Type>(-1));
+ any.Get(value);
+ }
+}
+#define REFLECT_MAP_TO_STRUCT(type, ...) \
+ template<typename TVisitor> \
+ void ReflectMap(TVisitor& visitor, type& value) \
+ { \
+ MACRO_MAP(_MAPPABLE_REFLECT_MEMBER, __VA_ARGS__) \
+ }
namespace lsp
{
- template <typename T>
- bool Any::Get(T& value)
- {
- const auto visitor = GetReader();
- Reflect(*visitor, value);
- return true;
- }
-
- template <typename T>
- void Any::Set(T& value)
- {
- auto visitor = GetWriter();
- Reflect(*visitor, value);
- SetData(visitor);
- }
-
- template <typename T>
- bool Any::GetFromMap(T& value)
- {
- const auto visitor = GetReader();
- std::map < std::string, lsp::Any> _temp;
- Reflect(*visitor, _temp);
- ReflectMap(_temp, value);
- return true;
- }
-
- template <typename T>
- bool Any::GetForMapHelper(T& value)
- {
- jsonType = GetType();
- if (jsonType == kStringType)
- {
- auto copy = data;
- copy.erase(copy.find_last_not_of('"') + 1);
- copy.erase(0, copy.find_first_not_of('"'));
- lsp::Any any;
- any.SetJsonString(copy, kUnKnown);
- any.Get(value);
- }
- else
- {
- Get(value);
- }
- return true;
- }
+template<typename T>
+bool Any::Get(T& value)
+{
+ auto const visitor = GetReader();
+ Reflect(*visitor, value);
+ return true;
+}
+
+template<typename T>
+void Any::Set(T& value)
+{
+ auto visitor = GetWriter();
+ Reflect(*visitor, value);
+ SetData(visitor);
+}
+
+template<typename T>
+bool Any::GetFromMap(T& value)
+{
+ auto const visitor = GetReader();
+ std::map<std::string, lsp::Any> _temp;
+ Reflect(*visitor, _temp);
+ ReflectMap(_temp, value);
+ return true;
+}
+
+template<typename T>
+bool Any::GetForMapHelper(T& value)
+{
+ jsonType = GetType();
+ if (jsonType == kStringType)
+ {
+ auto copy = data;
+ copy.erase(copy.find_last_not_of('"') + 1);
+ copy.erase(0, copy.find_first_not_of('"'));
+ lsp::Any any;
+ any.SetJsonString(copy, kUnKnown);
+ any.Get(value);
+ }
+ else
+ {
+ Get(value);
+ }
+ return true;
}
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCodeAction.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCodeAction.h
index 1b398cae2b..4ba18a6667 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCodeAction.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCodeAction.h
@@ -2,8 +2,6 @@
#include "LibLsp/JsonRpc/serializer.h"
-
-
#include <string>
#include <vector>
#include "lsPosition.h"
@@ -13,46 +11,44 @@
struct CodeAction
{
- /**
+ /**
* A short, human-readable, title for this code action.
*/
- std::string title;
+ std::string title;
- /**
+ /**
* The kind of the code action.
*
* Used to filter code actions.
*/
- optional < std::string> kind;
+ optional<std::string> kind;
- /**
+ /**
* The diagnostics that this code action resolves.
*/
- optional < std::vector<lsDiagnostic>> diagnostics;
+ optional<std::vector<lsDiagnostic>> diagnostics;
- /**
+ /**
* The workspace edit this code action performs.
*/
- optional < lsWorkspaceEdit >edit;
+ optional<lsWorkspaceEdit> edit;
- /**
+ /**
* A command this code action executes. If a code action
* provides a edit and a command, first the edit is
* executed and then the command.
*/
- optional< lsCommandWithAny > command;
+ optional<lsCommandWithAny> command;
- MAKE_SWAP_METHOD(CodeAction, title, kind, diagnostics, edit, command)
+ MAKE_SWAP_METHOD(CodeAction, title, kind, diagnostics, edit, command)
};
MAKE_REFLECT_STRUCT(CodeAction, title, kind, diagnostics, edit, command)
struct TextDocumentCodeAction
{
- typedef std::pair<optional<lsCommandWithAny>, optional<CodeAction> > Either;
-
+ typedef std::pair<optional<lsCommandWithAny>, optional<CodeAction>> Either;
};
-
-extern void Reflect(Reader& visitor, TextDocumentCodeAction::Either& value);
+extern void Reflect(Reader& visitor, TextDocumentCodeAction::Either& value);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCommand.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCommand.h
index 2d624c3d99..826c7abe44 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCommand.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCommand.h
@@ -2,8 +2,6 @@
#include "LibLsp/JsonRpc/serializer.h"
-
-
#include <string>
#include <vector>
#include "lsAny.h"
@@ -12,33 +10,34 @@
//Commands are identified by a string identifier.
//The recommended way to handle commands is to implement their execution on the server side
//if the clientand server provides the corresponding capabilities.Alternatively the tool
-//extension code could handle the command.The protocol currently doesn¡¯t specify a set of well - known commands.
-template <typename AnyArray>
-struct lsCommand {
- // Title of the command (ie, 'save')
- std::string title;
- // Actual command identifier.
- std::string command;
- // Arguments to run the command with.
- // **NOTE** This must be serialized as an array. Use
- // MAKE_REFLECT_STRUCT_WRITER_AS_ARRAY.
- optional<AnyArray> arguments;
+//extension code could handle the command.The protocol currently doesn't specify a set of well - known commands.
+template<typename AnyArray>
+struct lsCommand
+{
+ // Title of the command (ie, 'save')
+ std::string title;
+ // Actual command identifier.
+ std::string command;
+ // Arguments to run the command with.
+ // **NOTE** This must be serialized as an array. Use
+ // MAKE_REFLECT_STRUCT_WRITER_AS_ARRAY.
+ optional<AnyArray> arguments;
- void swap(lsCommand<AnyArray>& arg) noexcept
- {
- title.swap(arg.title);
- command.swap(arg.command);
- arguments.swap(arg.arguments);
- }
+ void swap(lsCommand<AnyArray>& arg) noexcept
+ {
+ title.swap(arg.title);
+ command.swap(arg.command);
+ arguments.swap(arg.arguments);
+ }
};
-template <typename TVisitor, typename T>
-void Reflect(TVisitor& visitor, lsCommand<T>& value) {
- REFLECT_MEMBER_START();
- REFLECT_MEMBER(title);
- REFLECT_MEMBER(command);
- REFLECT_MEMBER(arguments);
- REFLECT_MEMBER_END();
+template<typename TVisitor, typename T>
+void Reflect(TVisitor& visitor, lsCommand<T>& value)
+{
+ REFLECT_MEMBER_START();
+ REFLECT_MEMBER(title);
+ REFLECT_MEMBER(command);
+ REFLECT_MEMBER(arguments);
+ REFLECT_MEMBER_END();
}
-
-using lsCommandWithAny = lsCommand< std::vector<lsp::Any>>;
+using lsCommandWithAny = lsCommand<std::vector<lsp::Any>>;
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsDocumentUri.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsDocumentUri.h
index 255c4c39ba..d47e7ac2b3 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsDocumentUri.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsDocumentUri.h
@@ -1,26 +1,27 @@
#pragma once
#include "LibLsp/JsonRpc/serializer.h"
#include <string>
-struct lsDocumentUri {
- static lsDocumentUri FromPath(const AbsolutePath& path);
+struct lsDocumentUri
+{
+ static lsDocumentUri FromPath(AbsolutePath const& path);
- lsDocumentUri();
+ lsDocumentUri();
- lsDocumentUri(const AbsolutePath& path);
- lsDocumentUri(const lsDocumentUri& other);;
- bool operator==(const lsDocumentUri& other) const;
- bool operator==(const std::string& other) const;
- void SetPath(const AbsolutePath& path);
- std::string GetRawPath() const;
- AbsolutePath GetAbsolutePath() const;
+ lsDocumentUri(AbsolutePath const& path);
+ lsDocumentUri(lsDocumentUri const& other);
+ ;
+ bool operator==(lsDocumentUri const& other) const;
+ bool operator==(std::string const& other) const;
+ void SetPath(AbsolutePath const& path);
+ std::string GetRawPath() const;
+ AbsolutePath GetAbsolutePath() const;
-
- std::string raw_uri_;
- void swap(lsDocumentUri& arg) noexcept
- {
- raw_uri_.swap(arg.raw_uri_);
- }
+ std::string raw_uri_;
+ void swap(lsDocumentUri& arg) noexcept
+ {
+ raw_uri_.swap(arg.raw_uri_);
+ }
};
extern void Reflect(Writer& visitor, lsDocumentUri& value);
extern void Reflect(Reader& visitor, lsDocumentUri& value);
-extern std::string make_file_scheme_uri(const std::string& absolute_path);
+extern std::string make_file_scheme_uri(std::string const& absolute_path);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsFormattingOptions.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsFormattingOptions.h
index 0c3999896b..25ebd13e35 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsFormattingOptions.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsFormattingOptions.h
@@ -2,42 +2,48 @@
#include "LibLsp/JsonRpc/serializer.h"
-struct lsFormattingOptions {
- struct KeyData {
- optional<bool> _boolean;
- optional<int32_t> _integer;
- optional<std::string> _string;
- };
+struct lsFormattingOptions
+{
+ struct KeyData
+ {
+ optional<bool> _boolean;
+ optional<int32_t> _integer;
+ optional<std::string> _string;
+ };
- // Size of a tab in spaces.
- int tabSize =4;
- // Prefer spaces over tabs.
- bool insertSpaces = true;
+ // Size of a tab in spaces.
+ int tabSize = 4;
+ // Prefer spaces over tabs.
+ bool insertSpaces = true;
- /**
+ /**
* Trim trailing whitespace on a line.
*
* @since 3.15.0
*/
- optional<bool> trimTrailingWhitespace;
+ optional<bool> trimTrailingWhitespace;
- /**
+ /**
* Insert a newline character at the end of the file if one does not exist.
*
* @since 3.15.0
*/
- optional<bool> insertFinalNewline;
+ optional<bool> insertFinalNewline;
- /**
+ /**
* Trim all newlines after the final newline at the end of the file.
*
* @since 3.15.0
*/
- optional<bool> trimFinalNewlines;
- optional<KeyData> key;
- MAKE_SWAP_METHOD(lsFormattingOptions, tabSize, insertSpaces, trimTrailingWhitespace, insertFinalNewline, trimFinalNewlines, key)
+ optional<bool> trimFinalNewlines;
+ optional<KeyData> key;
+ MAKE_SWAP_METHOD(
+ lsFormattingOptions, tabSize, insertSpaces, trimTrailingWhitespace, insertFinalNewline, trimFinalNewlines, key
+ )
};
-MAKE_REFLECT_STRUCT(lsFormattingOptions, tabSize, insertSpaces, trimTrailingWhitespace, insertFinalNewline, trimFinalNewlines, key);
+MAKE_REFLECT_STRUCT(
+ lsFormattingOptions, tabSize, insertSpaces, trimTrailingWhitespace, insertFinalNewline, trimFinalNewlines, key
+);
extern void Reflect(Reader& visitor, lsFormattingOptions::KeyData& value);
-extern void Reflect(Writer& visitor, lsFormattingOptions::KeyData& value);
+extern void Reflect(Writer& visitor, lsFormattingOptions::KeyData& value);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsMarkedString.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsMarkedString.h
index 8478c055c5..45381e8e2d 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsMarkedString.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsMarkedString.h
@@ -5,7 +5,6 @@
#include <string>
#include <vector>
-
// MarkedString can be used to render human readable text. It is either a
// markdown string or a code-block that provides a language and a code snippet.
// The language identifier is sematically equal to the optional language
@@ -19,27 +18,29 @@
//
// Note that markdown strings will be sanitized - that means html will be
// escaped.
-struct lsMarkedString {
- optional<std::string> language;
- std::string value;
+struct lsMarkedString
+{
+ optional<std::string> language;
+ std::string value;
};
-struct MarkupContent {
- /**
+struct MarkupContent
+{
+ /**
* The type of the Markup.
*/
- std::string kind;
+ std::string kind;
- /**
+ /**
* The content itself.
*/
- std::string value;
+ std::string value;
- MAKE_SWAP_METHOD(MarkupContent, kind, value);
+ MAKE_SWAP_METHOD(MarkupContent, kind, value);
};
-MAKE_REFLECT_STRUCT(MarkupContent,kind,value);
+MAKE_REFLECT_STRUCT(MarkupContent, kind, value);
void Reflect(Writer& visitor, lsMarkedString& value);
void Reflect(Reader& visitor, lsMarkedString& value);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsPosition.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsPosition.h
index a14d75ed90..608ab01f15 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsPosition.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsPosition.h
@@ -2,29 +2,28 @@
#include "LibLsp/JsonRpc/serializer.h"
-
-
#include <string>
#include <vector>
//Position in a text document expressed as zero - based line and zero - based character offset.
-//A position is between two characters like an ¡®insert¡¯ cursor in a editor.Special values like
+//A position is between two characters like an insert cursor in a editor.Special values like
//for example - 1 to denote the end of a line are not supported.
-struct lsPosition {
- lsPosition();
- lsPosition(int line, int character);
+struct lsPosition
+{
+ lsPosition();
+ lsPosition(int line, int character);
- bool operator==(const lsPosition& other) const;
- bool operator<(const lsPosition& other) const;
+ bool operator==(lsPosition const& other) const;
+ bool operator<(lsPosition const& other) const;
- std::string ToString() const;
+ std::string ToString() const;
- /**
+ /**
* Line position in a document (zero-based).
*/
- // Note: these are 0-based.
- unsigned line = 0;
- /**
+ // Note: these are 0-based.
+ unsigned line = 0;
+ /**
* 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`.
@@ -32,9 +31,9 @@ struct lsPosition {
* If the character value is greater than the line length it defaults back
* to the line length.
*/
- unsigned character = 0;
- static const lsPosition kZeroPosition;
+ unsigned character = 0;
+ static lsPosition const kZeroPosition;
- MAKE_SWAP_METHOD(lsPosition, line, character)
+ MAKE_SWAP_METHOD(lsPosition, line, character)
};
MAKE_REFLECT_STRUCT(lsPosition, line, character);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsRange.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsRange.h
index 97d78712d7..ff1715761b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsRange.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsRange.h
@@ -2,8 +2,6 @@
#include "LibLsp/JsonRpc/serializer.h"
-
-
#include <string>
#include <vector>
#include "lsPosition.h"
@@ -11,22 +9,23 @@
//A range is comparable to a selection in an editor.Therefore the end position is exclusive.
//If you want to specify a range that contains a line including the line ending character(s)
//then use an end position denoting the start of the next line.
-struct lsRange {
- lsRange();
- lsRange(lsPosition start, lsPosition end);
+struct lsRange
+{
+ lsRange();
+ lsRange(lsPosition start, lsPosition end);
- bool operator==(const lsRange& other) const;
- bool operator<(const lsRange& other) const;
- /**
+ bool operator==(lsRange const& other) const;
+ bool operator<(lsRange const& other) const;
+ /**
* The range's start position.
*/
- lsPosition start;
- /**
+ lsPosition start;
+ /**
* The range's end position.
*/
- lsPosition end;
- std::string ToString()const;
- MAKE_SWAP_METHOD(lsRange, start, end)
+ lsPosition end;
+ std::string ToString() const;
+ MAKE_SWAP_METHOD(lsRange, start, end)
};
MAKE_REFLECT_STRUCT(lsRange, start, end)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsResponseError.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsResponseError.h
index 254e76f757..9ebe804cef 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsResponseError.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsResponseError.h
@@ -4,15 +4,16 @@
#include <sstream>
#include "LibLsp/lsp/lsAny.h"
-enum class lsErrorCodes:int32_t {
- // Defined by JSON RPC
- ParseError = -32700,
- InvalidRequest = -32600,
- MethodNotFound = -32601,
- InvalidParams = -32602,
- InternalError = -32603,
-
- /**
+enum class lsErrorCodes : int32_t
+{
+ // Defined by JSON RPC
+ ParseError = -32700,
+ InvalidRequest = -32600,
+ MethodNotFound = -32601,
+ InvalidParams = -32602,
+ InternalError = -32603,
+
+ /**
* This is the start range of JSON RPC reserved error codes.
* It doesn't denote a real error code. No LSP error codes should
* be defined between the start and end range. For backwards
@@ -21,45 +22,45 @@ enum class lsErrorCodes:int32_t {
*
* @since 3.16.0
*/
- jsonrpcReservedErrorRangeStart = -32099,
- /** @deprecated use jsonrpcReservedErrorRangeStart */
- serverErrorStart = jsonrpcReservedErrorRangeStart,
+ jsonrpcReservedErrorRangeStart = -32099,
+ /** @deprecated use jsonrpcReservedErrorRangeStart */
+ serverErrorStart = jsonrpcReservedErrorRangeStart,
- /**
+ /**
* This is the start range of JSON RPC reserved error codes.
* It doesn't denote a real error code.
*
* @since 3.16.0
*/
- jsonrpcReservedErrorRangeEnd = -32000,
- /** @deprecated use jsonrpcReservedErrorRangeEnd */
- serverErrorEnd = jsonrpcReservedErrorRangeEnd,
+ jsonrpcReservedErrorRangeEnd = -32000,
+ /** @deprecated use jsonrpcReservedErrorRangeEnd */
+ serverErrorEnd = jsonrpcReservedErrorRangeEnd,
- /**
+ /**
* Error code indicating that a server received a notification or
* request before the server has received the `initialize` request.
*/
- ServerNotInitialized = -32002,
- UnknownErrorCode = -32001,
+ ServerNotInitialized = -32002,
+ UnknownErrorCode = -32001,
- /**
+ /**
* This is the start range of LSP reserved error codes.
* It doesn't denote a real error code.
*
* @since 3.16.0
*/
- lspReservedErrorRangeStart= -32899,
+ lspReservedErrorRangeStart = -32899,
- /**
+ /**
* The server cancelled the request. This error code should
* only be used for requests that explicitly support being
* server cancellable.
*
* @since 3.17.0
*/
- ServerCancelled = -32802,
+ ServerCancelled = -32802,
- /**
+ /**
* The server detected that the content of a document got
* modified outside normal conditions. A server should
* NOT send this error code if it detects a content change
@@ -69,49 +70,47 @@ enum class lsErrorCodes:int32_t {
* If a client decides that a result is not of any use anymore
* the client should cancel the request.
*/
- ContentModified = -32801,
+ ContentModified = -32801,
- /**
+ /**
* The client has canceled a request and a server as detected
* the cancel.
*/
- RequestCancelled = -32800,
+ RequestCancelled = -32800,
- /**
+ /**
* This is the end range of LSP reserved error codes.
* It doesn't denote a real error code.
*
* @since 3.16.0
*/
- lspReservedErrorRangeEnd = -32800,
-
-
-
+ lspReservedErrorRangeEnd = -32800,
};
MAKE_REFLECT_TYPE_PROXY(lsErrorCodes);
-struct lsResponseError {
- lsResponseError(): code(lsErrorCodes::UnknownErrorCode)
- {
- }
+struct lsResponseError
+{
+ lsResponseError() : code(lsErrorCodes::UnknownErrorCode)
+ {
+ }
- /**
+ /**
* A number indicating the error type that occurred.
*/
- lsErrorCodes code;
- // Short description.
- /**
+ lsErrorCodes code;
+ // Short description.
+ /**
* A string providing a short description of the error.
*/
- std::string message;
+ std::string message;
- /**
+ /**
* A primitive or structured value that contains additional
* information about the error. Can be omitted.
*/
- optional<lsp::Any> data;
- std::string ToString();
- void Write(Writer& visitor);
+ optional<lsp::Any> data;
+ std::string ToString();
+ void Write(Writer& visitor);
- MAKE_SWAP_METHOD(lsResponseError, code, message, data)
+ MAKE_SWAP_METHOD(lsResponseError, code, message, data)
};
MAKE_REFLECT_STRUCT(lsResponseError, code, message, data)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentEdit.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentEdit.h
index bebbcd48c2..bf614e39fc 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentEdit.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentEdit.h
@@ -6,19 +6,19 @@
#include "lsVersionedTextDocumentIdentifier.h"
#include "lsTextEdit.h"
+struct lsTextDocumentEdit
+{
+ // The text document to change.
+ lsVersionedTextDocumentIdentifier textDocument;
-struct lsTextDocumentEdit {
- // The text document to change.
- lsVersionedTextDocumentIdentifier textDocument;
-
- /**
+ /**
* The edits to be applied.
*
* @since 3.16.0 - support for AnnotatedTextEdit. This is guarded by the
* client capability `workspace.workspaceEdit.changeAnnotationSupport`
*/
- // The edits to be applied.
- std::vector< lsAnnotatedTextEdit > edits;
- MAKE_SWAP_METHOD(lsTextDocumentEdit, textDocument, edits);
+ // The edits to be applied.
+ std::vector<lsAnnotatedTextEdit> edits;
+ MAKE_SWAP_METHOD(lsTextDocumentEdit, textDocument, edits);
};
MAKE_REFLECT_STRUCT(lsTextDocumentEdit, textDocument, edits);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentIdentifier.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentIdentifier.h
index 0129df9b99..09927478a9 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentIdentifier.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentIdentifier.h
@@ -4,11 +4,12 @@
#include "lsDocumentUri.h"
//Text documents are identified using a URI.On the protocol level,
//URIs are passed as strings.The corresponding JSON structure looks like this:
-struct lsTextDocumentIdentifier {
- /**
+struct lsTextDocumentIdentifier
+{
+ /**
* The text document's URI.
*/
- lsDocumentUri uri;
+ lsDocumentUri uri;
MAKE_SWAP_METHOD(lsTextDocumentIdentifier, uri)
};
MAKE_REFLECT_STRUCT(lsTextDocumentIdentifier, uri)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentItem.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentItem.h
index c5bc915132..365054c453 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentItem.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentItem.h
@@ -6,21 +6,22 @@
#include "lsDocumentUri.h"
//An item to transfer a text document from the client to the server.
-struct lsTextDocumentItem {
- // The text document's URI.
- lsDocumentUri uri;
+struct lsTextDocumentItem
+{
+ // The text document's URI.
+ lsDocumentUri uri;
- // The text document's language identifier.
- std::string languageId;
+ // The text document's language identifier.
+ std::string languageId;
- // The version number of this document (it will strictly increase after each
- // change, including undo/redo).
- int version = 0;
+ // The version number of this document (it will strictly increase after each
+ // change, including undo/redo).
+ int version = 0;
- // The content of the opened text document.
- std::string text;
+ // The content of the opened text document.
+ std::string text;
- MAKE_SWAP_METHOD(lsTextDocumentItem, uri, languageId, version, text)
+ MAKE_SWAP_METHOD(lsTextDocumentItem, uri, languageId, version, text)
};
MAKE_REFLECT_STRUCT(lsTextDocumentItem, uri, languageId, version, text)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentPositionParams.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentPositionParams.h
index a46fa22a9e..ce6b3495c8 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentPositionParams.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentPositionParams.h
@@ -8,19 +8,19 @@
/**
* A parameter literal used in requests to pass a text document and a position inside that document.
*/
-struct lsTextDocumentPositionParams {
- // The text document.
- lsTextDocumentIdentifier textDocument;
+struct lsTextDocumentPositionParams
+{
+ // The text document.
+ lsTextDocumentIdentifier textDocument;
- // The position inside the text document.
- lsPosition position;
+ // The position inside the text document.
+ lsPosition position;
- /**
+ /**
* Legacy property to support protocol version 1.0 requests.
*/
- optional<lsDocumentUri> uri;
-
- MAKE_SWAP_METHOD(lsTextDocumentPositionParams, textDocument, position, uri);
+ optional<lsDocumentUri> uri;
+ MAKE_SWAP_METHOD(lsTextDocumentPositionParams, textDocument, position, uri);
};
MAKE_REFLECT_STRUCT(lsTextDocumentPositionParams, textDocument, position, uri);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextEdit.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextEdit.h
index 29699c9c31..a6ec3e913f 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextEdit.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextEdit.h
@@ -2,12 +2,9 @@
#include "LibLsp/JsonRpc/serializer.h"
-
-
#include <string>
#include "lsRange.h"
-
//Since 3.16.0 there is also the concept of an annotated text edit which supports to add an annotation to a text edit.
//The annotation can add information describing the change to the text edit.
/**
@@ -17,28 +14,27 @@
*/
struct lsChangeAnnotation
{
- /**
+ /**
* A human-readable string describing the actual change. The string
* is rendered prominent in the user interface.
*/
- std::string label;
+ std::string label;
- /**
+ /**
* A flag which indicates that user confirmation is needed
* before applying the change.
*/
- optional<bool> needsConfirmation;
+ optional<bool> needsConfirmation;
- /**
+ /**
* A human-readable string which is rendered less prominent in
* the user interface.
*/
- optional < std::string > description;
- MAKE_REFLECT_STRUCT(lsChangeAnnotation, label, needsConfirmation, description)
+ optional<std::string> description;
+ MAKE_REFLECT_STRUCT(lsChangeAnnotation, label, needsConfirmation, description)
};
MAKE_REFLECT_STRUCT(lsChangeAnnotation, label, needsConfirmation, description)
-
//Usually clients provide options to group the changes along the annotations they are associated with.
//To support this in the protocol an edit or resource operation refers to a change annotation
//using an identifier and not the change annotation literal directly.This allows servers to use
@@ -46,8 +42,6 @@ MAKE_REFLECT_STRUCT(lsChangeAnnotation, label, needsConfirmation, description)
//to group the operations under that change annotation.The actual change annotations together with
//their identifers are managed by the workspace edit via the new property changeAnnotations.
-
-
/**
* An identifier referring to a change annotation managed by a workspace
* edit.
@@ -61,27 +55,26 @@ using lsChangeAnnotationIdentifier = std::string;
* @since 3.16.0.
*/
-
//A textual edit applicable to a text document.
-struct lsTextEdit {
- // The range of the text document to be manipulated. To insert
- // text into a document create a range where start === end.
- lsRange range;
+struct lsTextEdit
+{
+ // The range of the text document to be manipulated. To insert
+ // text into a document create a range where start === end.
+ lsRange range;
- // The string to be inserted. For delete operations use an
- // empty string.
- std::string newText;
+ // The string to be inserted. For delete operations use an
+ // empty string.
+ std::string newText;
- /**
+ /**
* The actual annotation identifier.
*/
- optional<lsChangeAnnotationIdentifier> annotationId;
-
+ optional<lsChangeAnnotationIdentifier> annotationId;
- bool operator==(const lsTextEdit& that);
- std::string ToString() const;
- MAKE_SWAP_METHOD(lsTextEdit, range, newText, annotationId)
+ bool operator==(lsTextEdit const& that);
+ std::string ToString() const;
+ MAKE_SWAP_METHOD(lsTextEdit, range, newText, annotationId)
};
MAKE_REFLECT_STRUCT(lsTextEdit, range, newText, annotationId)
-using lsAnnotatedTextEdit = lsTextEdit;
+using lsAnnotatedTextEdit = lsTextEdit;
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsVersionedTextDocumentIdentifier.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsVersionedTextDocumentIdentifier.h
index 2b17a4fb0b..bf687f2cc7 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsVersionedTextDocumentIdentifier.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsVersionedTextDocumentIdentifier.h
@@ -8,13 +8,13 @@
struct lsVersionedTextDocumentIdentifier
{
- lsDocumentUri uri;
- // The version number of this document. number | null
- optional<int> version;
+ lsDocumentUri uri;
+ // The version number of this document. number | null
+ optional<int> version;
- lsTextDocumentIdentifier AsTextDocumentIdentifier() const;
+ lsTextDocumentIdentifier AsTextDocumentIdentifier() const;
- MAKE_SWAP_METHOD(lsVersionedTextDocumentIdentifier, uri, version)
+ MAKE_SWAP_METHOD(lsVersionedTextDocumentIdentifier, uri, version)
};
MAKE_REFLECT_STRUCT(lsVersionedTextDocumentIdentifier, uri, version)
@@ -29,4 +29,4 @@ MAKE_REFLECT_STRUCT(lsVersionedTextDocumentIdentifier, uri, version)
* The version number of a document will increase after each change,
* including undo/redo. The number doesn't need to be consecutive.
*/
-using lsOptionalVersionedTextDocumentIdentifier = lsVersionedTextDocumentIdentifier;
+using lsOptionalVersionedTextDocumentIdentifier = lsVersionedTextDocumentIdentifier;
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsWorkspaceEdit.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsWorkspaceEdit.h
index 4caf296c28..83c077d9e5 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsWorkspaceEdit.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsWorkspaceEdit.h
@@ -16,28 +16,27 @@
//txt.An invalid sequence(e.g. (1) delete file a.txt and (2) insert text into file a.txt) will cause failure of the operation.
//How the client recovers from the failure is described by the client capability : workspace.workspaceEdit.failureHandling
-
-
struct lsChangeAnnotations
{
- lsChangeAnnotation id;
- MAKE_SWAP_METHOD(lsChangeAnnotations, id)
+ lsChangeAnnotation id;
+ MAKE_SWAP_METHOD(lsChangeAnnotations, id)
};
MAKE_REFLECT_STRUCT(lsChangeAnnotations, id)
-struct lsWorkspaceEdit {
- // Holds changes to existing resources.
- // changes ? : { [uri:string]: TextEdit[]; };
- // std::unordered_map<lsDocumentUri, std::vector<lsTextEdit>> changes;
-
- // An array of `TextDocumentEdit`s to express changes to specific a specific
- // version of a text document. Whether a client supports versioned document
- // edits is expressed via `WorkspaceClientCapabilites.versionedWorkspaceEdit`.
- //
- optional< std::map<std::string, std::vector<lsTextEdit> > > changes;
- typedef std::pair < optional<lsTextDocumentEdit>, optional<lsp::Any> > Either;
-
- optional < std::vector< Either > > documentChanges;
- /**
+struct lsWorkspaceEdit
+{
+ // Holds changes to existing resources.
+ // changes ? : { [uri:string]: TextEdit[]; };
+ // std::unordered_map<lsDocumentUri, std::vector<lsTextEdit>> changes;
+
+ // An array of `TextDocumentEdit`s to express changes to specific a specific
+ // version of a text document. Whether a client supports versioned document
+ // edits is expressed via `WorkspaceClientCapabilites.versionedWorkspaceEdit`.
+ //
+ optional<std::map<std::string, std::vector<lsTextEdit>>> changes;
+ typedef std::pair<optional<lsTextDocumentEdit>, optional<lsp::Any>> Either;
+
+ optional<std::vector<Either>> documentChanges;
+ /**
* A map of change annotations that can be referenced in
* `AnnotatedTextEdit`s or create, rename and delete file / folder
* operations.
@@ -47,11 +46,10 @@ struct lsWorkspaceEdit {
*
* @since 3.16.0
*/
- optional< lsChangeAnnotations > changeAnnotations;
+ optional<lsChangeAnnotations> changeAnnotations;
- MAKE_SWAP_METHOD(lsWorkspaceEdit, changes, documentChanges, changeAnnotations)
+ MAKE_SWAP_METHOD(lsWorkspaceEdit, changes, documentChanges, changeAnnotations)
};
MAKE_REFLECT_STRUCT(lsWorkspaceEdit, changes, documentChanges, changeAnnotations)
extern void Reflect(Reader& visitor, lsWorkspaceEdit::Either& value);
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_code_action.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_code_action.h
index 2d5c7111fb..5f4e143001 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_code_action.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_code_action.h
@@ -1,64 +1,77 @@
#pragma once
-
#include "location_type.h"
#include "lsDocumentUri.h"
#include "lsTextEdit.h"
#include "lsPosition.h"
// codeAction
-struct CommandArgs {
- lsDocumentUri textDocumentUri;
- std::vector<lsTextEdit> edits;
+struct CommandArgs
+{
+ lsDocumentUri textDocumentUri;
+ std::vector<lsTextEdit> edits;
};
MAKE_REFLECT_STRUCT_WRITER_AS_ARRAY(CommandArgs, textDocumentUri, edits);
-inline void Reflect(Reader& visitor, CommandArgs& value) {
- int i = 0;
- visitor.IterArray([&](Reader& visitor) {
- switch (i++) {
- case 0:
- Reflect(visitor, value.textDocumentUri);
- break;
- case 1:
- Reflect(visitor, value.edits);
- break;
-
- }
- });
+inline void Reflect(Reader& visitor, CommandArgs& value)
+{
+ int i = 0;
+ visitor.IterArray(
+ [&](Reader& visitor)
+ {
+ switch (i++)
+ {
+ case 0:
+ Reflect(visitor, value.textDocumentUri);
+ break;
+ case 1:
+ Reflect(visitor, value.edits);
+ break;
+ }
+ }
+ );
}
// codeLens
-struct lsCodeLensUserData {};
+struct lsCodeLensUserData
+{
+};
MAKE_REFLECT_EMPTY_STRUCT(lsCodeLensUserData);
-struct lsCodeLensCommandArguments {
- lsDocumentUri uri;
- lsPosition position;
- std::vector<lsLocation> locations;
+struct lsCodeLensCommandArguments
+{
+ lsDocumentUri uri;
+ lsPosition position;
+ std::vector<lsLocation> locations;
};
// FIXME Don't use array in vscode-cquery
-inline void Reflect(Writer& visitor, lsCodeLensCommandArguments& value) {
- visitor.StartArray(3);
- Reflect(visitor, value.uri);
- Reflect(visitor, value.position);
- Reflect(visitor, value.locations);
- visitor.EndArray();
+inline void Reflect(Writer& visitor, lsCodeLensCommandArguments& value)
+{
+ visitor.StartArray(3);
+ Reflect(visitor, value.uri);
+ Reflect(visitor, value.position);
+ Reflect(visitor, value.locations);
+ visitor.EndArray();
}
-inline void Reflect(Reader& visitor, lsCodeLensCommandArguments& value) {
- int i = 0;
- visitor.IterArray([&](Reader& visitor) {
- switch (i++) {
- case 0:
- Reflect(visitor, value.uri);
- break;
- case 1:
- Reflect(visitor, value.position);
- break;
- case 2:
- Reflect(visitor, value.locations);
- break;
- }
- });
+inline void Reflect(Reader& visitor, lsCodeLensCommandArguments& value)
+{
+ int i = 0;
+ visitor.IterArray(
+ [&](Reader& visitor)
+ {
+ switch (i++)
+ {
+ case 0:
+ Reflect(visitor, value.uri);
+ break;
+ case 1:
+ Reflect(visitor, value.position);
+ break;
+ case 2:
+ Reflect(visitor, value.locations);
+ break;
+ }
+ }
+ );
}
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_completion.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_completion.h
index fca45e9cb7..0f54f173c5 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_completion.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_completion.h
@@ -3,150 +3,147 @@
#include "lsMarkedString.h"
#include "lsCommand.h"
-
// The kind of a completion entry.
-enum class lsCompletionItemKind {
- Text = 1,
- Method = 2,
- Function = 3,
- Constructor = 4,
- Field = 5,
- Variable = 6,
- Class = 7,
- Interface = 8,
- Module = 9,
- Property = 10,
- Unit = 11,
- Value = 12,
- Enum = 13,
- Keyword = 14,
- Snippet = 15,
- Color = 16,
- File = 17,
- Reference = 18,
- Folder = 19,
- EnumMember = 20,
- Constant = 21,
- Struct = 22,
- Event = 23,
- Operator = 24,
- TypeParameter = 25,
+enum class lsCompletionItemKind
+{
+ Text = 1,
+ Method = 2,
+ Function = 3,
+ Constructor = 4,
+ Field = 5,
+ Variable = 6,
+ Class = 7,
+ Interface = 8,
+ Module = 9,
+ Property = 10,
+ Unit = 11,
+ Value = 12,
+ Enum = 13,
+ Keyword = 14,
+ Snippet = 15,
+ Color = 16,
+ File = 17,
+ Reference = 18,
+ Folder = 19,
+ EnumMember = 20,
+ Constant = 21,
+ Struct = 22,
+ Event = 23,
+ Operator = 24,
+ TypeParameter = 25,
};
MAKE_REFLECT_TYPE_PROXY(lsCompletionItemKind);
-
-
// Defines whether the insert text in a completion item should be interpreted as
// plain text or a snippet.
-enum class lsInsertTextFormat {
- // The primary text to be inserted is treated as a plain string.
- PlainText = 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.
- //
- // See also:
- // https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md
- Snippet = 2
+enum class lsInsertTextFormat
+{
+ // The primary text to be inserted is treated as a plain string.
+ PlainText = 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.
+ //
+ // See also:
+ // https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md
+ Snippet = 2
};
MAKE_REFLECT_TYPE_PROXY(lsInsertTextFormat);
namespace lsp
{
- std::string ToString(lsCompletionItemKind);
- std::string ToString(lsInsertTextFormat);
-}
+std::string ToString(lsCompletionItemKind);
+std::string ToString(lsInsertTextFormat);
+} // namespace lsp
/**
* The Completion request is sent from the client to the server to compute completion items at a given cursor position.
* Completion items are presented in the IntelliSense user class. If computing complete completion items is expensive
* servers can additional provide a handler for the resolve completion item request. This request is send when a
* completion item is selected in the user class.
*/
-struct lsCompletionItem {
-
- // The label of this completion item. By default
- // also the text that is inserted when selecting
- // this completion.
- std::string label;
+struct lsCompletionItem
+{
- // The kind of this completion item. Based of the kind
- // an icon is chosen by the editor.
- optional<lsCompletionItemKind> kind ;
+ // The label of this completion item. By default
+ // also the text that is inserted when selecting
+ // this completion.
+ std::string label;
- // A human-readable string with additional information
- // about this item, like type or symbol information.
- optional < std::string > detail;
+ // The kind of this completion item. Based of the kind
+ // an icon is chosen by the editor.
+ optional<lsCompletionItemKind> kind;
- // A human-readable string that represents a doc-comment.
- optional< std::pair<optional< std::string> , optional<MarkupContent> > > documentation;
+ // A human-readable string with additional information
+ // about this item, like type or symbol information.
+ optional<std::string> detail;
+ // A human-readable string that represents a doc-comment.
+ optional<std::pair<optional<std::string>, optional<MarkupContent>>> documentation;
- /**
+ /**
* Indicates if this item is deprecated.
*/
- optional< bool >deprecated;
+ optional<bool> deprecated;
-
- /**
+ /**
* 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.
*/
- optional< bool > preselect;
-
-
- // Internal information to order candidates.
- int relevance = 0;
-
- // A string that shoud be used when comparing this item
- // with other items. When `falsy` the label is used.
- optional< std::string > sortText;
-
- // A string that should be used when filtering a set of
- // completion items. When `falsy` the label is used.
- optional<std::string> filterText;
-
- // A string that should be inserted a document when selecting
- // this completion. When `falsy` the label is used.
- optional<std::string> insertText;
-
- // The format of the insert text. The format applies to both the `insertText`
- // property and the `newText` property of a provided `textEdit`.
- optional< lsInsertTextFormat> insertTextFormat ;
-
- // 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.
- optional<lsTextEdit> textEdit;
-
- // An optional array of additional text edits that are applied when
- // selecting this completion. Edits must not overlap with the main edit
- // nor with themselves.
- // std::vector<TextEdit> 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. Command command;
-
- // An data entry field that is preserved on a completion item between
- // a completion and a completion resolve request.
- // data ? : any
-
- // Use this helper to figure out what content the completion item will insert
- // into the document, as it could live in either |textEdit|, |insertText|, or
- // |label|.
- const std::string& InsertedContent() const;
-
- std::string DisplayText();
- /**
+ optional<bool> preselect;
+
+ // Internal information to order candidates.
+ int relevance = 0;
+
+ // A string that shoud be used when comparing this item
+ // with other items. When `falsy` the label is used.
+ optional<std::string> sortText;
+
+ // A string that should be used when filtering a set of
+ // completion items. When `falsy` the label is used.
+ optional<std::string> filterText;
+
+ // A string that should be inserted a document when selecting
+ // this completion. When `falsy` the label is used.
+ optional<std::string> insertText;
+
+ // The format of the insert text. The format applies to both the `insertText`
+ // property and the `newText` property of a provided `textEdit`.
+ optional<lsInsertTextFormat> insertTextFormat;
+
+ // 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.
+ optional<lsTextEdit> textEdit;
+
+ // An optional array of additional text edits that are applied when
+ // selecting this completion. Edits must not overlap with the main edit
+ // nor with themselves.
+ // std::vector<TextEdit> 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. Command command;
+
+ // An data entry field that is preserved on a completion item between
+ // a completion and a completion resolve request.
+ // data ? : any
+
+ // Use this helper to figure out what content the completion item will insert
+ // into the document, as it could live in either |textEdit|, |insertText|, or
+ // |label|.
+ std::string const& InsertedContent() const;
+
+ std::string DisplayText();
+ /**
* 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.
@@ -155,70 +152,50 @@ struct lsCompletionItem {
* (for example adding an import statement at the top of the file if the completion item will
* insert an unqualified type).
*/
- optional<std::vector<lsTextEdit> >additionalTextEdits;
+ optional<std::vector<lsTextEdit>> additionalTextEdits;
- /**
+ /**
* 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.
*/
- optional< std::vector<std::string> > commitCharacters;
+ optional<std::vector<std::string>> commitCharacters;
- /**
+ /**
* 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.
*/
- optional<lsCommandWithAny> command;
+ optional<lsCommandWithAny> command;
- /**
+ /**
* An data entry field that is preserved on a completion item between a completion and a completion resolve request.
*/
- optional<lsp::Any> data;
- std::string ToString();
- MAKE_SWAP_METHOD(lsCompletionItem,
- label,
- kind,
- detail,
- documentation,
- sortText,
- insertText,
- filterText,
- insertTextFormat,
- textEdit,
- deprecated, preselect, additionalTextEdits, commitCharacters,
- command, data);
-
+ optional<lsp::Any> data;
+ std::string ToString();
+ MAKE_SWAP_METHOD(
+ lsCompletionItem, label, kind, detail, documentation, sortText, insertText, filterText, insertTextFormat,
+ textEdit, deprecated, preselect, additionalTextEdits, commitCharacters, command, data
+ );
};
+MAKE_REFLECT_STRUCT(
+ lsCompletionItem, label, kind, detail, documentation, sortText, insertText, filterText, insertTextFormat, textEdit,
+ deprecated, preselect, additionalTextEdits, commitCharacters, command, data
+);
-
-MAKE_REFLECT_STRUCT(lsCompletionItem,
- label,
- kind,
- detail,
- documentation,
- sortText,
- insertText,
- filterText,
- insertTextFormat,
- textEdit,
- deprecated, preselect, additionalTextEdits, commitCharacters,
- command, data);
-
-
-
-struct CompletionList {
- // This list it not complete. Further typing should result in recomputing
- // this list.
- bool isIncomplete = false;
- // The completion items.
- std::vector<lsCompletionItem> items;
-
- void swap(CompletionList& arg) noexcept
- {
- items.swap(arg.items);
- std::swap(isIncomplete, arg.isIncomplete);
- }
+struct CompletionList
+{
+ // This list it not complete. Further typing should result in recomputing
+ // this list.
+ bool isIncomplete = false;
+ // The completion items.
+ std::vector<lsCompletionItem> items;
+
+ void swap(CompletionList& arg) noexcept
+ {
+ items.swap(arg.items);
+ std::swap(isIncomplete, arg.isIncomplete);
+ }
};
MAKE_REFLECT_STRUCT(CompletionList, isIncomplete, items);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_diagnostic.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_diagnostic.h
index e05e816b69..5035e9e6c1 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_diagnostic.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_diagnostic.h
@@ -10,15 +10,16 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
-enum class lsDiagnosticSeverity {
- // Reports an error.
- Error = 1,
- // Reports a warning.
- Warning = 2,
- // Reports an information.
- Information = 3,
- // Reports a hint.
- Hint = 4
+enum class lsDiagnosticSeverity
+{
+ // Reports an error.
+ Error = 1,
+ // Reports a warning.
+ Warning = 2,
+ // Reports an information.
+ Information = 3,
+ // Reports a hint.
+ Hint = 4
};
MAKE_REFLECT_TYPE_PROXY(lsDiagnosticSeverity);
@@ -27,27 +28,26 @@ MAKE_REFLECT_TYPE_PROXY(lsDiagnosticSeverity);
*
* @since 3.15.0
*/
-enum class DiagnosticTag :uint8_t {
+enum class DiagnosticTag : uint8_t
+{
- /**
+ /**
* Unused or unnecessary code.
*
* Clients are allowed to render diagnostics with this tag faded out instead of having
* an error squiggle.
*/
- Unnecessary=(1),
+ Unnecessary = (1),
- /**
+ /**
* Deprecated or obsolete code.
*
* Clients are allowed to rendered diagnostics with this tag strike through.
*/
- Deprecated=(2),
+ Deprecated = (2),
};
MAKE_REFLECT_TYPE_PROXY(DiagnosticTag);
-
-
/**
* 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
@@ -56,20 +56,21 @@ MAKE_REFLECT_TYPE_PROXY(DiagnosticTag);
* Since 3.7.0
*/
-struct DiagnosticRelatedInformation {
- /**
+struct DiagnosticRelatedInformation
+{
+ /**
* The location of this related diagnostic information.
*/
lsLocation location;
- /**
+ /**
* The message of this related diagnostic information.
*/
- std::string message;
+ std::string message;
- MAKE_SWAP_METHOD(DiagnosticRelatedInformation, location, message)
+ MAKE_SWAP_METHOD(DiagnosticRelatedInformation, location, message)
};
MAKE_REFLECT_STRUCT(DiagnosticRelatedInformation, location, message)
/**
@@ -77,76 +78,73 @@ MAKE_REFLECT_STRUCT(DiagnosticRelatedInformation, location, message)
*
* @since 3.16.0
*/
-struct DiagnosticCodeDescription {
- /**
+struct DiagnosticCodeDescription
+{
+ /**
* An URI to open with more information about the diagnostic error.
*/
- std::string href;
- MAKE_SWAP_METHOD(DiagnosticCodeDescription, href)
+ std::string href;
+ MAKE_SWAP_METHOD(DiagnosticCodeDescription, href)
};
MAKE_REFLECT_STRUCT(DiagnosticCodeDescription, href)
//Represents a diagnostic, such as a compiler error or warning.Diagnostic objects are only valid in the scope of a resource.
-struct lsDiagnostic {
- // The range at which the message applies.
- lsRange range;
+struct lsDiagnostic
+{
+ // The range at which the message applies.
+ lsRange range;
- // The diagnostic's severity. Can be omitted. If omitted it is up to the
- // client to interpret diagnostics as error, warning, info or hint.
- optional<lsDiagnosticSeverity> severity;
+ // The diagnostic's severity. Can be omitted. If omitted it is up to the
+ // client to interpret diagnostics as error, warning, info or hint.
+ optional<lsDiagnosticSeverity> severity;
- // The diagnostic's code. Can be omitted.
- optional< std::pair<optional<std::string>, optional<int>> > code;
+ // The diagnostic's code. Can be omitted.
+ optional<std::pair<optional<std::string>, optional<int>>> code;
- optional<DiagnosticCodeDescription> codeDescription;
- // A human-readable string describing the source of this
- // diagnostic, e.g. 'typescript' or 'super lint'.
- optional < std::string >source ;
+ optional<DiagnosticCodeDescription> codeDescription;
+ // A human-readable string describing the source of this
+ // diagnostic, e.g. 'typescript' or 'super lint'.
+ optional<std::string> source;
- // The diagnostic's message.
- std::string message;
+ // The diagnostic's message.
+ std::string message;
- // Non-serialized set of fixits.
- std::vector<lsTextEdit> fixits_;
+ // Non-serialized set of fixits.
+ std::vector<lsTextEdit> fixits_;
- /**
+ /**
* Additional metadata about the diagnostic.
*
* @since 3.15.0
*/
- optional<std::vector<DiagnosticTag>> tags;
+ optional<std::vector<DiagnosticTag>> tags;
-
- /**
+ /**
* An array of related diagnostic information, e.g. when symbol-names within a scope collide
* all definitions can be marked via this property.
*
* Since 3.7.0
*/
- optional<std::vector<DiagnosticRelatedInformation>> relatedInformation;
+ optional<std::vector<DiagnosticRelatedInformation>> relatedInformation;
- /**
+ /**
* A data entry field that is preserved between a
* `textDocument/publishDiagnostics` notification and
* `textDocument/codeAction` request.
*
* @since 3.16.0
*/
- optional<lsp::Any> data;
- bool operator==(const lsDiagnostic& rhs) const;
- bool operator!=(const lsDiagnostic& rhs) const;
+ optional<lsp::Any> data;
+ bool operator==(lsDiagnostic const& rhs) const;
+ bool operator!=(lsDiagnostic const& rhs) const;
- MAKE_SWAP_METHOD(lsDiagnostic, range, severity, code, codeDescription, source, message, tags, data)
+ MAKE_SWAP_METHOD(lsDiagnostic, range, severity, code, codeDescription, source, message, tags, data)
};
MAKE_REFLECT_STRUCT(lsDiagnostic, range, severity, code, codeDescription, source, message, tags, data)
+struct Rsp_Error : ResponseError<lsResponseError, Rsp_Error>
+{
-
-struct Rsp_Error : ResponseError<lsResponseError, Rsp_Error> {
-
- MAKE_SWAP_METHOD(Rsp_Error, jsonrpc, id, error)
+ MAKE_SWAP_METHOD(Rsp_Error, jsonrpc, id, error)
};
MAKE_REFLECT_STRUCT(Rsp_Error, jsonrpc, id, error)
-
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/method_type.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/method_type.h
index dcbb4a851a..b141367e2a 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/method_type.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/method_type.h
@@ -1,7 +1,4 @@
#pragma once
#include <string>
-using MethodType = const char* const;
-
-
-
+using MethodType = char const* const;
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/out_list.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/out_list.h
index 8ede0b4a60..e10da8255b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/out_list.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/out_list.h
@@ -1,22 +1,18 @@
#pragma once
-
#include "location_type.h"
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
-
-
//DEFINE_RESPONCE_TYPE(Rsp_FindLinkLocationList, std::vector<LinkLocation>);
//DEFINE_RESPONCE_TYPE(Rsp_LocationList, std::vector<lsLocation>);
+namespace LocationListEither
+{
-namespace LocationListEither{
-
- typedef std::pair< optional<std::vector<lsLocation>> , optional<std::vector<LocationLink> > > Either;
+typedef std::pair<optional<std::vector<lsLocation>>, optional<std::vector<LocationLink>>> Either;
};
-extern void Reflect(Reader& visitor, LocationListEither::Either& value);
+extern void Reflect(Reader& visitor, LocationListEither::Either& value);
//DEFINE_RESPONCE_TYPE(Rsp_LocationListEither, LocationListEither::Either);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/symbol.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/symbol.h
index 216c3f7d13..b66da101c9 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/symbol.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/symbol.h
@@ -1,92 +1,95 @@
#pragma once
#include "LibLsp/lsp/location_type.h"
-
-enum class lsSymbolKind : uint8_t {
- Unknown = 0,
-
- File = 1,
- Module = 2,
- Namespace = 3,
- Package = 4,
- Class = 5,
- Method = 6,
- Property = 7,
- Field = 8,
- Constructor = 9,
- Enum = 10,
- Interface = 11,
- Function = 12,
- Variable = 13,
- Constant = 14,
- String = 15,
- Number = 16,
- Boolean = 17,
- Array = 18,
- Object = 19,
- Key = 20,
- Null = 21,
- EnumMember = 22,
- Struct = 23,
- Event = 24,
- Operator = 25,
-
- // For C++, this is interpreted as "template parameter" (including
- // non-type template parameters).
- TypeParameter = 26,
-
- // cquery extensions
- // See also https://github.com/Microsoft/language-server-protocol/issues/344
- // for new SymbolKind clang/Index/IndexSymbol.h clang::index::SymbolKind
- TypeAlias = 252,
- Parameter = 253,
- StaticMethod = 254,
- Macro = 255,
+enum class lsSymbolKind : uint8_t
+{
+ Unknown = 0,
+
+ File = 1,
+ Module = 2,
+ Namespace = 3,
+ Package = 4,
+ Class = 5,
+ Method = 6,
+ Property = 7,
+ Field = 8,
+ Constructor = 9,
+ Enum = 10,
+ Interface = 11,
+ Function = 12,
+ Variable = 13,
+ Constant = 14,
+ String = 15,
+ Number = 16,
+ Boolean = 17,
+ Array = 18,
+ Object = 19,
+ Key = 20,
+ Null = 21,
+ EnumMember = 22,
+ Struct = 23,
+ Event = 24,
+ Operator = 25,
+
+ // For C++, this is interpreted as "template parameter" (including
+ // non-type template parameters).
+ TypeParameter = 26,
+
+ // cquery extensions
+ // See also https://github.com/Microsoft/language-server-protocol/issues/344
+ // for new SymbolKind clang/Index/IndexSymbol.h clang::index::SymbolKind
+ TypeAlias = 252,
+ Parameter = 253,
+ StaticMethod = 254,
+ Macro = 255,
};
MAKE_REFLECT_TYPE_PROXY(lsSymbolKind);
-typedef lsSymbolKind SymbolKind;
+typedef lsSymbolKind SymbolKind;
// A document highlight kind.
-enum class lsDocumentHighlightKind {
- // A textual occurrence.
- Text = 1,
- // Read-access of a symbol, like reading a variable.
- Read = 2,
- // Write-access of a symbol, like writing to a variable.
- Write = 3
+enum class lsDocumentHighlightKind
+{
+ // A textual occurrence.
+ Text = 1,
+ // Read-access of a symbol, like reading a variable.
+ Read = 2,
+ // Write-access of a symbol, like writing to a variable.
+ Write = 3
};
MAKE_REFLECT_TYPE_PROXY(lsDocumentHighlightKind);
// 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.
-struct lsDocumentHighlight {
- // The range this highlight applies to.
- lsRange range;
+struct lsDocumentHighlight
+{
+ // The range this highlight applies to.
+ lsRange range;
- // The highlight kind, default is DocumentHighlightKind.Text.
- optional<lsDocumentHighlightKind> kind ;
+ // The highlight kind, default is DocumentHighlightKind.Text.
+ optional<lsDocumentHighlightKind> kind;
- MAKE_SWAP_METHOD(lsDocumentHighlight, range, kind)
+ MAKE_SWAP_METHOD(lsDocumentHighlight, range, kind)
};
MAKE_REFLECT_STRUCT(lsDocumentHighlight, range, kind);
-struct lsSymbolInformation {
+struct lsSymbolInformation
+{
-/**
+ /**
* The name of this symbol.
*/
- std::string name;
- /**
+ std::string name;
+ /**
* The kind of this symbol.
*/
- lsSymbolKind kind;
- /**
+ lsSymbolKind kind;
+ /**
* Indicates if this symbol is deprecated.
*/
- optional<bool> deprecated;
- /**
+ optional<bool> deprecated;
+ /**
* 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
@@ -97,68 +100,67 @@ struct lsSymbolInformation {
* syntax tree. It can therefore not be used to re-construct a hierarchy of
* the symbols.
*/
- lsLocation location;
- /**
+ lsLocation location;
+ /**
* 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.
*/
- optional<std::string> containerName;
-
+ optional<std::string> containerName;
- MAKE_SWAP_METHOD(lsSymbolInformation, name, kind, deprecated, location, containerName);
+ MAKE_SWAP_METHOD(lsSymbolInformation, name, kind, deprecated, location, containerName);
};
MAKE_REFLECT_STRUCT(lsSymbolInformation, name, kind, deprecated, location, containerName);
-
-struct lsDocumentSymbol {
- /**
+struct lsDocumentSymbol
+{
+ /**
* The name of this symbol.
*/
- std::string name;
+ std::string name;
- /**
+ /**
* The kind of this symbol.
*/
- lsSymbolKind kind = lsSymbolKind::Unknown;
+ lsSymbolKind kind = lsSymbolKind::Unknown;
- /**
+ /**
* 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.
*/
- lsRange range;
+ lsRange 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`.
*/
- lsRange selectionRange;
+ lsRange selectionRange;
- /**
+ /**
* More detail for this symbol, e.g the signature of a function. If not provided the
* name is used.
*/
- optional< std::string > detail;
+ optional<std::string> detail;
- /**
+ /**
* Indicates if this symbol is deprecated.
*/
- optional< bool > deprecated;
+ optional<bool> deprecated;
- /**
+ /**
* Children of this symbol, e.g. properties of a class.
*/
- optional < std::vector<lsDocumentSymbol> > children;
+ optional<std::vector<lsDocumentSymbol>> children;
- //internal use
- int flags=0;
+ //internal use
+ int flags = 0;
- MAKE_SWAP_METHOD(lsDocumentSymbol, name, kind, range, selectionRange, detail, deprecated, children, flags);
+ MAKE_SWAP_METHOD(lsDocumentSymbol, name, kind, range, selectionRange, detail, deprecated, children, flags);
};
MAKE_REFLECT_STRUCT(lsDocumentSymbol, name, kind, range, selectionRange, detail, deprecated, children, flags);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/SemanticTokens.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/SemanticTokens.h
index 8a24ebdd45..e7ada015fd 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/SemanticTokens.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/SemanticTokens.h
@@ -3,139 +3,146 @@
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
#include "LibLsp/lsp/lsVersionedTextDocumentIdentifier.h"
#include "LibLsp/JsonRpc/RequestInMessage.h"
-enum class HighlightingKind_clangD {
- Variable = 0,
- LocalVariable,
- Parameter,
- Function,
- Method,
- StaticMethod,
- Field,
- StaticField,
- Class,
- Interface,
- Enum,
- EnumConstant,
- Typedef,
- Type,
- Unknown,
- Namespace,
- TemplateParameter,
- Concept,
- Primitive,
- Macro,
+enum class HighlightingKind_clangD
+{
+ Variable = 0,
+ LocalVariable,
+ Parameter,
+ Function,
+ Method,
+ StaticMethod,
+ Field,
+ StaticField,
+ Class,
+ Interface,
+ Enum,
+ EnumConstant,
+ Typedef,
+ Type,
+ Unknown,
+ Namespace,
+ TemplateParameter,
+ Concept,
+ Primitive,
+ Macro,
- // This one is different from the other kinds as it's a line style
- // rather than a token style.
- InactiveCode,
+ // This one is different from the other kinds as it's a line style
+ // rather than a token style.
+ InactiveCode,
- LastKind = InactiveCode
+ LastKind = InactiveCode
};
std::string toSemanticTokenType(HighlightingKind_clangD kind);
-enum class HighlightingModifier_clangD {
- Declaration,
- Deprecated,
- Deduced,
- Readonly,
- Static,
- Abstract,
- DependentName,
- DefaultLibrary,
+enum class HighlightingModifier_clangD
+{
+ Declaration,
+ Deprecated,
+ Deduced,
+ Readonly,
+ Static,
+ Abstract,
+ DependentName,
+ DefaultLibrary,
- FunctionScope,
- ClassScope,
- FileScope,
- GlobalScope,
+ FunctionScope,
+ ClassScope,
+ FileScope,
+ GlobalScope,
- LastModifier = GlobalScope
+ LastModifier = GlobalScope
};
std::string toSemanticTokenModifier(HighlightingModifier_clangD modifier);
-enum SemanticTokenType {
- ls_namespace=0,// 'namespace',
- /**
+enum SemanticTokenType
+{
+ ls_namespace = 0, // 'namespace',
+ /**
* Represents a generic type. Acts as a fallback for types which
* can't be mapped to a specific type like class or enum.
*/
- ls_type,// 'type',
- ls_class,// 'class',
- ls_enum,// 'enum',
- ls_interface,// 'interface',
- ls_struct,// 'struct',
- ls_typeParameter,// 'typeParameter',
- ls_parameter,// 'parameter',
- ls_variable,// 'variable',
- ls_property,// 'property',
- ls_enumMember,// 'enumMember',
- ls_event,// 'event',
- ls_function,// 'function',
- ls_method,// 'method',
- ls_macro,// 'macro',
- ls_keyword,// 'keyword',
- ls_modifier,// 'modifier',
- ls_comment,// 'comment',
- ls_string,// 'string',
- ls_number,// 'number',
- ls_regexp,// 'regexp',
- ls_operator,// 'operator'
- lastKind = ls_operator
+ ls_type, // 'type',
+ ls_class, // 'class',
+ ls_enum, // 'enum',
+ ls_interface, // 'interface',
+ ls_struct, // 'struct',
+ ls_typeParameter, // 'typeParameter',
+ ls_parameter, // 'parameter',
+ ls_variable, // 'variable',
+ ls_property, // 'property',
+ ls_enumMember, // 'enumMember',
+ ls_event, // 'event',
+ ls_function, // 'function',
+ ls_method, // 'method',
+ ls_macro, // 'macro',
+ ls_keyword, // 'keyword',
+ ls_modifier, // 'modifier',
+ ls_comment, // 'comment',
+ ls_string, // 'string',
+ ls_number, // 'number',
+ ls_regexp, // 'regexp',
+ ls_operator, // 'operator'
+ lastKind = ls_operator
};
std::string to_string(SemanticTokenType);
unsigned toSemanticTokenType(std::vector<SemanticTokenType>& modifiers);
-enum TokenType_JDT {
- PACKAGE_JDT=0,
- CLASS_JDT,
- INTERFACE_JDT,
- ENUM_JDT,
- ENUM_MEMBER_JDT,
- TYPE_JDT,
- TYPE_PARAMETER_JDT,
- ANNOTATION_JDT,
- ANNOTATION_MEMBER_JDT,
- METHOD_JDT,
- PROPERTY_JDT,
- VARIABLE_JDT,
- PARAMETER_JDT
+enum TokenType_JDT
+{
+ PACKAGE_JDT = 0,
+ CLASS_JDT,
+ INTERFACE_JDT,
+ ENUM_JDT,
+ ENUM_MEMBER_JDT,
+ TYPE_JDT,
+ TYPE_PARAMETER_JDT,
+ ANNOTATION_JDT,
+ ANNOTATION_MEMBER_JDT,
+ METHOD_JDT,
+ PROPERTY_JDT,
+ VARIABLE_JDT,
+ PARAMETER_JDT
};
std::string to_string(TokenType_JDT);
-enum SemanticTokenModifier {
- ls_declaration=0,// 'declaration',
- ls_definition,// 'definition',
- ls_readonly,// 'readonly',
- ls_static,// 'static',
- ls_deprecated,// 'deprecated',
- ls_abstract,// 'abstract',
- ls_async,// 'async',
- ls_modification,// 'modification',
- ls_documentation,// 'documentation',
- ls_defaultLibrary,// 'defaultLibrary'
- LastModifier = ls_defaultLibrary
+enum SemanticTokenModifier
+{
+ ls_declaration = 0, // 'declaration',
+ ls_definition, // 'definition',
+ ls_readonly, // 'readonly',
+ ls_static, // 'static',
+ ls_deprecated, // 'deprecated',
+ ls_abstract, // 'abstract',
+ ls_async, // 'async',
+ ls_modification, // 'modification',
+ ls_documentation, // 'documentation',
+ ls_defaultLibrary, // 'defaultLibrary'
+ LastModifier = ls_defaultLibrary
};
std::string to_string(SemanticTokenModifier);
-unsigned toSemanticTokenModifiers(std::vector<SemanticTokenModifier>&);
+unsigned toSemanticTokenModifiers(std::vector<SemanticTokenModifier>&);
/// Specifies a single semantic token in the document.
/// This struct is not part of LSP, which just encodes lists of tokens as
/// arrays of numbers directly.
-struct SemanticToken {
- /// token line number, relative to the previous token
- unsigned deltaLine = 0;
- /// token start character, relative to the previous token
- /// (relative to 0 or the previous token's start if they are on the same line)
- unsigned deltaStart = 0;
- /// the length of the token. A token cannot be multiline
- unsigned length = 0;
- /// will be looked up in `SemanticTokensLegend.tokenTypes`
- unsigned tokenType = 0;
- /// each set bit will be looked up in `SemanticTokensLegend.tokenModifiers`
- unsigned tokenModifiers = 0;
+struct SemanticToken
+{
+ /// token line number, relative to the previous token
+ unsigned deltaLine = 0;
+ /// token start character, relative to the previous token
+ /// (relative to 0 or the previous token's start if they are on the same line)
+ unsigned deltaStart = 0;
+ /// the length of the token. A token cannot be multiline
+ unsigned length = 0;
+ /// will be looked up in `SemanticTokensLegend.tokenTypes`
+ unsigned tokenType = 0;
+ /// each set bit will be looked up in `SemanticTokensLegend.tokenModifiers`
+ unsigned tokenModifiers = 0;
};
-bool operator==(const SemanticToken&, const SemanticToken&);
-struct SemanticTokens{
+bool operator==(SemanticToken const&, SemanticToken const&);
+struct SemanticTokens
+{
- /**
+ /**
* Tokens in a file are represented as an array of integers. The position of each token is expressed relative to
* the token before it, because most tokens remain stable relative to each other when edits are made in a file.
*
@@ -190,78 +197,85 @@ struct SemanticTokens{
* [ 2,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ]
* ```
*/
- std::vector<int32_t> data;
- static std::vector<int32_t> encodeTokens(std::vector<SemanticToken>& tokens);
+ std::vector<int32_t> data;
+ static std::vector<int32_t> encodeTokens(std::vector<SemanticToken>& tokens);
- /**
+ /**
* An optional result id. If provided and clients support delta updating
* the client will include the result id in the next semantic token request.
* A server can then instead of computing all semantic tokens again simply
* send a delta.
*/
- optional<std::string> resultId;
- MAKE_SWAP_METHOD(SemanticTokens, data, resultId)
+ optional<std::string> resultId;
+ MAKE_SWAP_METHOD(SemanticTokens, data, resultId)
};
MAKE_REFLECT_STRUCT(SemanticTokens, data, resultId)
/// Body of textDocument/semanticTokens/full request.
-struct SemanticTokensParams {
- /// The text document.
- lsTextDocumentIdentifier textDocument;
- MAKE_REFLECT_STRUCT(SemanticTokensParams, textDocument)
+struct SemanticTokensParams
+{
+ /// The text document.
+ lsTextDocumentIdentifier textDocument;
+ MAKE_REFLECT_STRUCT(SemanticTokensParams, textDocument)
};
MAKE_REFLECT_STRUCT(SemanticTokensParams, textDocument)
-
/// Body of textDocument/semanticTokens/full/delta request.
/// Requests the changes in semantic tokens since a previous response.
-struct SemanticTokensDeltaParams {
- /// The text document.
- lsTextDocumentIdentifier textDocument;
- /**
+struct SemanticTokensDeltaParams
+{
+ /// The text document.
+ lsTextDocumentIdentifier textDocument;
+ /**
* The result id of a previous response. The result Id can either point to
* a full response or a delta response depending on what was received last.
*/
- std::string previousResultId;
+ std::string previousResultId;
- MAKE_REFLECT_STRUCT(SemanticTokensDeltaParams, textDocument, previousResultId)
+ MAKE_REFLECT_STRUCT(SemanticTokensDeltaParams, textDocument, previousResultId)
};
MAKE_REFLECT_STRUCT(SemanticTokensDeltaParams, textDocument, previousResultId)
/// Describes a a replacement of a contiguous range of semanticTokens.
-struct SemanticTokensEdit {
- // LSP specifies `start` and `deleteCount` which are relative to the array
- // encoding of the previous tokens.
- // We use token counts instead, and translate when serializing this struct.
- unsigned startToken = 0;
- unsigned deleteTokens = 0;
- std::vector<int32_t> tokens; // encoded as a flat integer array
+struct SemanticTokensEdit
+{
+ // LSP specifies `start` and `deleteCount` which are relative to the array
+ // encoding of the previous tokens.
+ // We use token counts instead, and translate when serializing this struct.
+ unsigned startToken = 0;
+ unsigned deleteTokens = 0;
+ std::vector<int32_t> tokens; // encoded as a flat integer array
- MAKE_REFLECT_STRUCT(SemanticTokensEdit, startToken, deleteTokens, tokens)
+ MAKE_REFLECT_STRUCT(SemanticTokensEdit, startToken, deleteTokens, tokens)
};
MAKE_REFLECT_STRUCT(SemanticTokensEdit, startToken, deleteTokens, tokens)
-
/// This models LSP SemanticTokensDelta | SemanticTokens, which is the result of
/// textDocument/semanticTokens/full/delta.
-struct SemanticTokensOrDelta {
- optional<std::string > resultId;
- /// Set if we computed edits relative to a previous set of tokens.
- optional< std::vector<SemanticTokensEdit> > edits;
- /// Set if we computed a fresh set of tokens.
- /// Set if we computed edits relative to a previous set of tokens.
- optional<std::vector<int32_t>> tokens; // encoded as integer array
- MAKE_REFLECT_STRUCT(SemanticTokensOrDelta, resultId, edits, tokens)
+struct SemanticTokensOrDelta
+{
+ optional<std::string> resultId;
+ /// Set if we computed edits relative to a previous set of tokens.
+ optional<std::vector<SemanticTokensEdit>> edits;
+ /// Set if we computed a fresh set of tokens.
+ /// Set if we computed edits relative to a previous set of tokens.
+ optional<std::vector<int32_t>> tokens; // encoded as integer array
+ MAKE_REFLECT_STRUCT(SemanticTokensOrDelta, resultId, edits, tokens)
};
MAKE_REFLECT_STRUCT(SemanticTokensOrDelta, resultId, edits, tokens)
-
-struct SemanticTokensLegend {
- std::vector<std::string> tokenTypes;
- std::vector<std::string> tokenModifiers;
- MAKE_REFLECT_STRUCT(SemanticTokensLegend, tokenTypes, tokenModifiers)
+struct SemanticTokensLegend
+{
+ std::vector<std::string> tokenTypes;
+ std::vector<std::string> tokenModifiers;
+ MAKE_REFLECT_STRUCT(SemanticTokensLegend, tokenTypes, tokenModifiers)
};
MAKE_REFLECT_STRUCT(SemanticTokensLegend, tokenTypes, tokenModifiers)
-DEFINE_REQUEST_RESPONSE_TYPE(td_semanticTokens_full, SemanticTokensParams,optional<SemanticTokens >,"textDocument/semanticTokens/full")
-DEFINE_REQUEST_RESPONSE_TYPE(td_semanticTokens_full_delta, SemanticTokensDeltaParams, optional<SemanticTokensOrDelta >, "textDocument/semanticTokens/full/delta")
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_semanticTokens_full, SemanticTokensParams, optional<SemanticTokens>, "textDocument/semanticTokens/full"
+)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_semanticTokens_full_delta, SemanticTokensDeltaParams, optional<SemanticTokensOrDelta>,
+ "textDocument/semanticTokens/full/delta"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/callHierarchy.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/callHierarchy.h
index 408767d937..c9ca161422 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/callHierarchy.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/callHierarchy.h
@@ -7,115 +7,116 @@
#include "LibLsp/lsp/lsTextDocumentPositionParams.h"
#include "LibLsp/lsp/lsRange.h"
-enum class SymbolTag { Deprecated = 1 };
+enum class SymbolTag
+{
+ Deprecated = 1
+};
MAKE_REFLECT_TYPE_PROXY(SymbolTag)
struct CallHierarchyPrepareParams
{
- lsTextDocumentIdentifier textDocument;
- lsPosition position;
+ lsTextDocumentIdentifier textDocument;
+ lsPosition position;
- MAKE_SWAP_METHOD(CallHierarchyPrepareParams,
- textDocument,
- position)
+ MAKE_SWAP_METHOD(CallHierarchyPrepareParams, textDocument, position)
};
-MAKE_REFLECT_STRUCT(CallHierarchyPrepareParams,
- textDocument,
- position)
-
+MAKE_REFLECT_STRUCT(CallHierarchyPrepareParams, textDocument, position)
+/// Represents programming constructs like functions or constructors
+/// in the context of call hierarchy.
+struct CallHierarchyItem
+{
+ /// The name of this item.
+ std::string name;
- /// Represents programming constructs like functions or constructors
- /// in the context of call hierarchy.
-struct CallHierarchyItem {
- /// The name of this item.
- std::string name;
-
- /// The kind of this item.
- SymbolKind kind;
+ /// The kind of this item.
+ SymbolKind kind;
- /// Tags for this item.
- optional<std::vector<SymbolTag>> tags;
+ /// Tags for this item.
+ optional<std::vector<SymbolTag>> tags;
- /// More detaill for this item, e.g. the signature of a function.
- optional<std::string> detail;
+ /// More detaill for this item, e.g. the signature of a function.
+ optional<std::string> detail;
- /// The resource identifier of this item.
- lsDocumentUri uri;
+ /// The resource identifier of this item.
+ lsDocumentUri uri;
- /**
+ /**
* The range enclosing this symbol not including leading/trailing whitespace
* but everything else, e.g. comments and code.
*/
- lsRange range;
+ lsRange range;
- /**
+ /**
* The range that should be selected and revealed when this symbol is being
* picked, e.g. the name of a function. Must be contained by the
* [`range`](#CallHierarchyItem.range).
*/
- lsRange selectionRange;
+ lsRange selectionRange;
- /**
+ /**
* A data entry field that is preserved between a call hierarchy prepare and
* incoming calls or outgoing calls requests.
*/
- optional<lsp::Any> data;
- MAKE_SWAP_METHOD(CallHierarchyItem, name, kind, tags, detail, uri, range, selectionRange, data)
+ optional<lsp::Any> data;
+ MAKE_SWAP_METHOD(CallHierarchyItem, name, kind, tags, detail, uri, range, selectionRange, data)
};
MAKE_REFLECT_STRUCT(CallHierarchyItem, name, kind, tags, detail, uri, range, selectionRange, data)
-
-
/// The parameter of a `callHierarchy/incomingCalls` request.
-struct CallHierarchyIncomingCallsParams {
- CallHierarchyItem item;
- MAKE_SWAP_METHOD(CallHierarchyIncomingCallsParams,item)
+struct CallHierarchyIncomingCallsParams
+{
+ CallHierarchyItem item;
+ MAKE_SWAP_METHOD(CallHierarchyIncomingCallsParams, item)
};
MAKE_REFLECT_STRUCT(CallHierarchyIncomingCallsParams, item)
-
/// Represents an incoming call, e.g. a caller of a method or constructor.
-struct CallHierarchyIncomingCall {
- /// The item that makes the call.
- CallHierarchyItem from;
-
- /// The range at which the calls appear.
- /// This is relative to the caller denoted by `From`.
- std::vector<lsRange> fromRanges;
- MAKE_SWAP_METHOD(CallHierarchyIncomingCall, from, fromRanges)
+struct CallHierarchyIncomingCall
+{
+ /// The item that makes the call.
+ CallHierarchyItem from;
+
+ /// The range at which the calls appear.
+ /// This is relative to the caller denoted by `From`.
+ std::vector<lsRange> fromRanges;
+ MAKE_SWAP_METHOD(CallHierarchyIncomingCall, from, fromRanges)
};
MAKE_REFLECT_STRUCT(CallHierarchyIncomingCall, from, fromRanges)
-
-
-
/// The parameter of a `callHierarchy/outgoingCalls` request.
-struct CallHierarchyOutgoingCallsParams {
- CallHierarchyItem item;
- MAKE_SWAP_METHOD(CallHierarchyOutgoingCallsParams, item)
+struct CallHierarchyOutgoingCallsParams
+{
+ CallHierarchyItem item;
+ MAKE_SWAP_METHOD(CallHierarchyOutgoingCallsParams, item)
};
MAKE_REFLECT_STRUCT(CallHierarchyOutgoingCallsParams, item)
/// Represents an outgoing call, e.g. calling a getter from a method or
/// a method from a constructor etc.
-struct CallHierarchyOutgoingCall {
- /// The item that is called.
- CallHierarchyItem to;
-
- /// The range at which this item is called.
- /// This is the range relative to the caller, and not `To`.
- std::vector<lsRange> fromRanges;
- MAKE_SWAP_METHOD(CallHierarchyOutgoingCall, to, fromRanges)
+struct CallHierarchyOutgoingCall
+{
+ /// The item that is called.
+ CallHierarchyItem to;
+
+ /// The range at which this item is called.
+ /// This is the range relative to the caller, and not `To`.
+ std::vector<lsRange> fromRanges;
+ MAKE_SWAP_METHOD(CallHierarchyOutgoingCall, to, fromRanges)
};
MAKE_REFLECT_STRUCT(CallHierarchyOutgoingCall, to, fromRanges)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_prepareCallHierarchy, CallHierarchyPrepareParams, optional<std::vector<CallHierarchyItem>>,
+ "textDocument/prepareCallHierarchy"
+)
-DEFINE_REQUEST_RESPONSE_TYPE(td_prepareCallHierarchy, CallHierarchyPrepareParams,
- optional<std::vector<CallHierarchyItem>>, "textDocument/prepareCallHierarchy")
-
-DEFINE_REQUEST_RESPONSE_TYPE(td_incomingCalls, CallHierarchyIncomingCallsParams,
- optional<std::vector<CallHierarchyIncomingCall>>, "callHierarchy/incomingCalls")
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_incomingCalls, CallHierarchyIncomingCallsParams, optional<std::vector<CallHierarchyIncomingCall>>,
+ "callHierarchy/incomingCalls"
+)
-DEFINE_REQUEST_RESPONSE_TYPE(td_outgoingCalls, CallHierarchyOutgoingCallsParams,
- optional<std::vector<CallHierarchyOutgoingCall>>, "callHierarchy/CallHierarchyOutgoingCall")
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_outgoingCalls, CallHierarchyOutgoingCallsParams, optional<std::vector<CallHierarchyOutgoingCall>>,
+ "callHierarchy/CallHierarchyOutgoingCall"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_action.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_action.h
index e72d83af90..693b98eff1 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_action.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_action.h
@@ -5,27 +5,35 @@
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
#include "LibLsp/lsp/CodeActionParams.h"
-namespace QuickAssistProcessor {
+namespace QuickAssistProcessor
+{
- extern const char* SPLIT_JOIN_VARIABLE_DECLARATION_ID;//$NON-NLS-1$
- extern const char* CONVERT_FOR_LOOP_ID;// ;// "org.eclipse.jdt.ls.correction.convertForLoop.assist"; //$NON-NLS-1$
- extern const char* ASSIGN_TO_LOCAL_ID ;// "org.eclipse.jdt.ls.correction.assignToLocal.assist"; //$NON-NLS-1$
- extern const char* ASSIGN_TO_FIELD_ID ;// "org.eclipse.jdt.ls.correction.assignToField.assist"; //$NON-NLS-1$
- extern const char* ASSIGN_PARAM_TO_FIELD_ID ;// "org.eclipse.jdt.ls.correction.assignParamToField.assist"; //$NON-NLS-1$
- extern const char* ASSIGN_ALL_PARAMS_TO_NEW_FIELDS_ID ;// "org.eclipse.jdt.ls.correction.assignAllParamsToNewFields.assist"; //$NON-NLS-1$
- extern const char* ADD_BLOCK_ID ;// "org.eclipse.jdt.ls.correction.addBlock.assist"; //$NON-NLS-1$
- extern const char* EXTRACT_LOCAL_ID ;// "org.eclipse.jdt.ls.correction.extractLocal.assist"; //$NON-NLS-1$
- extern const char* EXTRACT_LOCAL_NOT_REPLACE_ID ;// "org.eclipse.jdt.ls.correction.extractLocalNotReplaceOccurrences.assist"; //$NON-NLS-1$
- extern const char* EXTRACT_CONSTANT_ID ;// "org.eclipse.jdt.ls.correction.extractConstant.assist"; //$NON-NLS-1$
- extern const char* INLINE_LOCAL_ID ;// "org.eclipse.jdt.ls.correction.inlineLocal.assist"; //$NON-NLS-1$
- extern const char* CONVERT_LOCAL_TO_FIELD_ID ;// "org.eclipse.jdt.ls.correction.convertLocalToField.assist"; //$NON-NLS-1$
- extern const char* CONVERT_ANONYMOUS_TO_LOCAL_ID ;// "org.eclipse.jdt.ls.correction.convertAnonymousToLocal.assist"; //$NON-NLS-1$
- extern const char* CONVERT_TO_STRING_BUFFER_ID ;// "org.eclipse.jdt.ls.correction.convertToStringBuffer.assist"; //$NON-NLS-1$
- extern const char* CONVERT_TO_MESSAGE_FORMAT_ID ;// "org.eclipse.jdt.ls.correction.convertToMessageFormat.assist"; //$NON-NLS-1$;
- extern const char* EXTRACT_METHOD_INPLACE_ID ;// "org.eclipse.jdt.ls.correction.extractMethodInplace.assist"; //$NON-NLS-1$;
+extern char const* SPLIT_JOIN_VARIABLE_DECLARATION_ID; //$NON-NLS-1$
+extern char const* CONVERT_FOR_LOOP_ID; // ;// "org.eclipse.jdt.ls.correction.convertForLoop.assist"; //$NON-NLS-1$
+extern char const* ASSIGN_TO_LOCAL_ID; // "org.eclipse.jdt.ls.correction.assignToLocal.assist"; //$NON-NLS-1$
+extern char const* ASSIGN_TO_FIELD_ID; // "org.eclipse.jdt.ls.correction.assignToField.assist"; //$NON-NLS-1$
+extern char const* ASSIGN_PARAM_TO_FIELD_ID; // "org.eclipse.jdt.ls.correction.assignParamToField.assist"; //$NON-NLS-1$
+extern char const*
+ ASSIGN_ALL_PARAMS_TO_NEW_FIELDS_ID; // "org.eclipse.jdt.ls.correction.assignAllParamsToNewFields.assist"; //$NON-NLS-1$
+extern char const* ADD_BLOCK_ID; // "org.eclipse.jdt.ls.correction.addBlock.assist"; //$NON-NLS-1$
+extern char const* EXTRACT_LOCAL_ID; // "org.eclipse.jdt.ls.correction.extractLocal.assist"; //$NON-NLS-1$
+extern char const*
+ EXTRACT_LOCAL_NOT_REPLACE_ID; // "org.eclipse.jdt.ls.correction.extractLocalNotReplaceOccurrences.assist"; //$NON-NLS-1$
+extern char const* EXTRACT_CONSTANT_ID; // "org.eclipse.jdt.ls.correction.extractConstant.assist"; //$NON-NLS-1$
+extern char const* INLINE_LOCAL_ID; // "org.eclipse.jdt.ls.correction.inlineLocal.assist"; //$NON-NLS-1$
+extern char const*
+ CONVERT_LOCAL_TO_FIELD_ID; // "org.eclipse.jdt.ls.correction.convertLocalToField.assist"; //$NON-NLS-1$
+extern char const*
+ CONVERT_ANONYMOUS_TO_LOCAL_ID; // "org.eclipse.jdt.ls.correction.convertAnonymousToLocal.assist"; //$NON-NLS-1$
+extern char const*
+ CONVERT_TO_STRING_BUFFER_ID; // "org.eclipse.jdt.ls.correction.convertToStringBuffer.assist"; //$NON-NLS-1$
+extern char const*
+ CONVERT_TO_MESSAGE_FORMAT_ID; // "org.eclipse.jdt.ls.correction.convertToMessageFormat.assist"; //$NON-NLS-1$;
+extern char const*
+ EXTRACT_METHOD_INPLACE_ID; // "org.eclipse.jdt.ls.correction.extractMethodInplace.assist"; //$NON-NLS-1$;
- extern const char* CONVERT_ANONYMOUS_CLASS_TO_NESTED_COMMAND ;// "convertAnonymousClassToNestedCommand";
-};
+extern char const* CONVERT_ANONYMOUS_CLASS_TO_NESTED_COMMAND; // "convertAnonymousClassToNestedCommand";
+}; // namespace QuickAssistProcessor
/**
* The code action request is sent from the client to the server to compute
* commands for a given text document and range. These commands are
@@ -34,4 +42,6 @@ namespace QuickAssistProcessor {
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_codeAction, lsCodeActionParams, std::vector<lsCommandWithAny>, "textDocument/codeAction");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_codeAction, lsCodeActionParams, std::vector<lsCommandWithAny>, "textDocument/codeAction"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_lens.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_lens.h
index b9241de06b..3c18c6e41b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_lens.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_lens.h
@@ -3,35 +3,32 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
-struct lsDocumentCodeLensParams {
+struct lsDocumentCodeLensParams
+{
-/**
+ /**
* The document to request code lens for.
*/
- lsTextDocumentIdentifier textDocument;
+ lsTextDocumentIdentifier textDocument;
- MAKE_SWAP_METHOD(lsDocumentCodeLensParams, textDocument);
+ MAKE_SWAP_METHOD(lsDocumentCodeLensParams, textDocument);
};
MAKE_REFLECT_STRUCT(lsDocumentCodeLensParams, textDocument);
-
-
-
-struct lsCodeLens {
- // The range in which this code lens is valid. Should only span a single line.
- lsRange range;
- // The command this code lens represents.
- optional<lsCommandWithAny> command;
- // A data entry field that is preserved on a code lens item between
- // a code lens and a code lens resolve request.
- optional< lsp::Any> data;
-
- MAKE_SWAP_METHOD(lsCodeLens, range, command, data)
+struct lsCodeLens
+{
+ // The range in which this code lens is valid. Should only span a single line.
+ lsRange range;
+ // The command this code lens represents.
+ optional<lsCommandWithAny> command;
+ // A data entry field that is preserved on a code lens item between
+ // a code lens and a code lens resolve request.
+ optional<lsp::Any> data;
+
+ MAKE_SWAP_METHOD(lsCodeLens, range, command, data)
};
MAKE_REFLECT_STRUCT(lsCodeLens, range, command, data)
-
-
/**
* The code lens request is sent from the client to the server to compute
* code lenses for a given text document.
@@ -39,4 +36,3 @@ MAKE_REFLECT_STRUCT(lsCodeLens, range, command, data)
* Registration Options: CodeLensRegistrationOptions
*/
DEFINE_REQUEST_RESPONSE_TYPE(td_codeLens, lsDocumentCodeLensParams, std::vector<lsCodeLens>, "textDocument/codeLens")
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/colorPresentation.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/colorPresentation.h
index c70b6502d2..294d625fbe 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/colorPresentation.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/colorPresentation.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
@@ -9,55 +8,54 @@
#include "documentColor.h"
#include "LibLsp/lsp/lsTextEdit.h"
+struct ColorPresentationParams
+{
-struct ColorPresentationParams {
-
- /**
+ /**
* The text document.
*/
- lsTextDocumentIdentifier textDocument;
+ lsTextDocumentIdentifier textDocument;
- /**
+ /**
* The range in the document where this color appers.
*/
- lsRange range;
+ lsRange range;
- /**
+ /**
* The actual color value for this color range.
*/
- TextDocument::Color color;
- MAKE_SWAP_METHOD(ColorPresentationParams, textDocument, range, color)
+ TextDocument::Color color;
+ MAKE_SWAP_METHOD(ColorPresentationParams, textDocument, range, color)
};
MAKE_REFLECT_STRUCT(ColorPresentationParams, textDocument, range, color)
-
-struct ColorPresentation {
- /**
+struct ColorPresentation
+{
+ /**
* 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.
*/
- std::string label;
+ std::string label;
- /**
+ /**
* An edit which is applied to a document when selecting
* this presentation for the color. When `null` the label is used.
*/
- lsTextEdit textEdit;
+ lsTextEdit textEdit;
- /**
+ /**
* An optional array of additional text edits that are applied when
* selecting this color presentation. Edits must not overlap with the main edit nor with themselves.
*/
- std::vector<lsTextEdit> additionalTextEdits;
- MAKE_SWAP_METHOD(ColorPresentation, label, textEdit, additionalTextEdits)
+ std::vector<lsTextEdit> additionalTextEdits;
+ MAKE_SWAP_METHOD(ColorPresentation, label, textEdit, additionalTextEdits)
};
MAKE_REFLECT_STRUCT(ColorPresentation, label, textEdit, additionalTextEdits)
-
-
-DEFINE_REQUEST_RESPONSE_TYPE(td_colorPresentation,
- ColorPresentationParams, std::vector<ColorPresentation>, "textDocument/colorPresentation")
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_colorPresentation, ColorPresentationParams, std::vector<ColorPresentation>, "textDocument/colorPresentation"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/completion.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/completion.h
index edcf1e1724..50fd5bb4fa 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/completion.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/completion.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
@@ -8,59 +7,52 @@
#include "LibLsp/lsp/lsp_completion.h"
#include "LibLsp/lsp/lsTextDocumentPositionParams.h"
-
// How a completion was triggered
-enum class lsCompletionTriggerKind {
- // Completion was triggered by typing an identifier (24x7 code
- // complete), manual invocation (e.g Ctrl+Space) or via API.
- Invoked = 1,
-
- // Completion was triggered by a trigger character specified by
- // the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
- TriggerCharacter = 2
+enum class lsCompletionTriggerKind
+{
+ // Completion was triggered by typing an identifier (24x7 code
+ // complete), manual invocation (e.g Ctrl+Space) or via API.
+ Invoked = 1,
+
+ // Completion was triggered by a trigger character specified by
+ // the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
+ TriggerCharacter = 2
};
MAKE_REFLECT_TYPE_PROXY(lsCompletionTriggerKind);
-
// Contains additional information about the context in which a completion
// request is triggered.
-struct lsCompletionContext {
- // How the completion was triggered.
- lsCompletionTriggerKind triggerKind = lsCompletionTriggerKind::Invoked;
+struct lsCompletionContext
+{
+ // How the completion was triggered.
+ lsCompletionTriggerKind triggerKind = lsCompletionTriggerKind::Invoked;
- // The trigger character (a single character) that has trigger code complete.
- // Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter`
- optional<std::string> triggerCharacter;
+ // The trigger character (a single character) that has trigger code complete.
+ // Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter`
+ optional<std::string> triggerCharacter;
- MAKE_SWAP_METHOD(lsCompletionContext, triggerKind, triggerCharacter);
+ MAKE_SWAP_METHOD(lsCompletionContext, triggerKind, triggerCharacter);
};
MAKE_REFLECT_STRUCT(lsCompletionContext, triggerKind, triggerCharacter);
-struct lsCompletionParams : lsTextDocumentPositionParams {
- // The completion context. This is only available it the client specifies to
- // send this using
- // `ClientCapabilities.textDocument.completion.contextSupport === true`
- optional<lsCompletionContext> context;
-
- MAKE_SWAP_METHOD(lsCompletionParams, textDocument, position, context);
+struct lsCompletionParams : lsTextDocumentPositionParams
+{
+ // The completion context. This is only available it the client specifies to
+ // send this using
+ // `ClientCapabilities.textDocument.completion.contextSupport === true`
+ optional<lsCompletionContext> context;
+ MAKE_SWAP_METHOD(lsCompletionParams, textDocument, position, context);
};
MAKE_REFLECT_STRUCT(lsCompletionParams, textDocument, position, context);
+namespace TextDocumentComplete
+{
-
-
-
-
-
-
-
-namespace TextDocumentComplete{
-
- typedef std::pair< optional<std::vector<lsCompletionItem>>, optional<CompletionList> > Either;
+typedef std::pair<optional<std::vector<lsCompletionItem>>, optional<CompletionList>> Either;
};
-extern void Reflect(Reader& visitor, TextDocumentComplete::Either& value);
+extern void Reflect(Reader& visitor, TextDocumentComplete::Either& value);
/**
* The Completion request is sent from the client to the server to compute
@@ -72,11 +64,4 @@ extern void Reflect(Reader& visitor, TextDocumentComplete::Either& value);
*
* Registration Options: CompletionRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_completion, lsCompletionParams, CompletionList , "textDocument/completion")
-
-
-
-
-
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(td_completion, lsCompletionParams, CompletionList, "textDocument/completion")
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/declaration_definition.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/declaration_definition.h
index aa20fce046..c64e42ae18 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/declaration_definition.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/declaration_definition.h
@@ -1,13 +1,11 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsTextDocumentPositionParams.h"
#include "LibLsp/lsp/out_list.h"
-
/**
* The go to declaration request is sent from the client to the server to resolve
* the declaration location of a symbol at a given text document position.
@@ -16,7 +14,9 @@
*
* Since version 3.14.0
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_declaration, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/declaration");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_declaration, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/declaration"
+);
/**
* The goto definition request is sent from the client to the server to resolve
@@ -24,6 +24,6 @@ DEFINE_REQUEST_RESPONSE_TYPE(td_declaration, lsTextDocumentPositionParams, Locat
*
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_definition, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/definition");
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_definition, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/definition"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/didRenameFiles.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/didRenameFiles.h
index d88d0e1307..93fc01b5db 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/didRenameFiles.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/didRenameFiles.h
@@ -6,39 +6,42 @@
#include "LibLsp/lsp/CodeActionParams.h"
#include "LibLsp/lsp/lsWorkspaceEdit.h"
-
-class FileRenameEvent {
+class FileRenameEvent
+{
public:
- std::string oldUri;
- std::string newUri;
-
- FileRenameEvent() {
- }
-
- FileRenameEvent(std::string oldUri, std::string newUri) {
- this->oldUri = oldUri;
- this->newUri = newUri;
- }
- MAKE_SWAP_METHOD(FileRenameEvent, oldUri, newUri);
+ std::string oldUri;
+ std::string newUri;
+
+ FileRenameEvent()
+ {
+ }
+
+ FileRenameEvent(std::string oldUri, std::string newUri)
+ {
+ this->oldUri = oldUri;
+ this->newUri = newUri;
+ }
+ MAKE_SWAP_METHOD(FileRenameEvent, oldUri, newUri);
};
MAKE_REFLECT_STRUCT(FileRenameEvent, oldUri, newUri);
-class FileRenameParams {
+class FileRenameParams
+{
public:
- std::vector <FileRenameEvent> files;
+ std::vector<FileRenameEvent> files;
- FileRenameParams() {
- }
+ FileRenameParams()
+ {
+ }
- FileRenameParams(std::vector<FileRenameEvent>& files) {
- this->files = files;
- }
- MAKE_SWAP_METHOD(FileRenameParams, files);
+ FileRenameParams(std::vector<FileRenameEvent>& files)
+ {
+ this->files = files;
+ }
+ MAKE_SWAP_METHOD(FileRenameParams, files);
};
MAKE_REFLECT_STRUCT(FileRenameParams, files);
-
DEFINE_REQUEST_RESPONSE_TYPE(td_didRenameFiles, FileRenameParams, optional<lsWorkspaceEdit>, "java/didRenameFiles");
-
DEFINE_REQUEST_RESPONSE_TYPE(td_willRenameFiles, FileRenameParams, optional<lsWorkspaceEdit>, "java/willRenameFiles");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_change.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_change.h
index 8450bd343a..714dbe0255 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_change.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_change.h
@@ -1,45 +1,43 @@
#pragma once
-
#include "LibLsp/JsonRpc/NotificationInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsVersionedTextDocumentIdentifier.h"
#include "LibLsp/lsp/lsRange.h"
#include "LibLsp/lsp/lsDocumentUri.h"
-struct lsTextDocumentContentChangeEvent {
- // The range of the document that changed.
- optional<lsRange> range;
- // The length of the range that got replaced.
- optional<int> rangeLength;
- // The new text of the range/document.
- std::string text;
-
- MAKE_SWAP_METHOD(lsTextDocumentContentChangeEvent, range, rangeLength, text);
+struct lsTextDocumentContentChangeEvent
+{
+ // The range of the document that changed.
+ optional<lsRange> range;
+ // The length of the range that got replaced.
+ optional<int> rangeLength;
+ // The new text of the range/document.
+ std::string text;
+
+ MAKE_SWAP_METHOD(lsTextDocumentContentChangeEvent, range, rangeLength, text);
};
MAKE_REFLECT_STRUCT(lsTextDocumentContentChangeEvent, range, rangeLength, text);
+struct lsTextDocumentDidChangeParams
+{
+ lsVersionedTextDocumentIdentifier textDocument;
+ std::vector<lsTextDocumentContentChangeEvent> contentChanges;
-struct lsTextDocumentDidChangeParams {
- lsVersionedTextDocumentIdentifier textDocument;
- std::vector<lsTextDocumentContentChangeEvent> contentChanges;
-
- /**
+ /**
* Legacy property to support protocol version 1.0 requests.
*/
- optional<lsDocumentUri> uri;
+ optional<lsDocumentUri> uri;
- void swap(lsTextDocumentDidChangeParams& arg) noexcept
- {
- uri.swap(arg.uri);
- contentChanges.swap(arg.contentChanges);
- textDocument.swap(arg.textDocument);
- }
+ void swap(lsTextDocumentDidChangeParams& arg) noexcept
+ {
+ uri.swap(arg.uri);
+ contentChanges.swap(arg.contentChanges);
+ textDocument.swap(arg.textDocument);
+ }
};
-MAKE_REFLECT_STRUCT(lsTextDocumentDidChangeParams,
- textDocument,
- contentChanges, uri);
+MAKE_REFLECT_STRUCT(lsTextDocumentDidChangeParams, textDocument, contentChanges, uri);
/**
* The document change notification is sent from the client to the server to
@@ -48,4 +46,3 @@ MAKE_REFLECT_STRUCT(lsTextDocumentDidChangeParams,
* Registration Options: TextDocumentChangeRegistrationOptions
*/
DEFINE_NOTIFICATION_TYPE(Notify_TextDocumentDidChange, lsTextDocumentDidChangeParams, "textDocument/didChange");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_close.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_close.h
index d064819ae9..6d17223d3e 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_close.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_close.h
@@ -1,25 +1,21 @@
#pragma once
-
-
#include "LibLsp/JsonRpc/NotificationInMessage.h"
+namespace TextDocumentDidClose
+{
-
-
-namespace TextDocumentDidClose {
-
- struct Params {
+struct Params
+{
lsTextDocumentIdentifier textDocument;
- void swap(Params& arg) noexcept
- {
- textDocument.swap(arg.textDocument);
- }
-
- };
-
+ void swap(Params& arg) noexcept
+ {
+ textDocument.swap(arg.textDocument);
+ }
};
+}; // namespace TextDocumentDidClose
+
MAKE_REFLECT_STRUCT(TextDocumentDidClose::Params, textDocument);
/**
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_open.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_open.h
index 379f35989f..ba6bb30441 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_open.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_open.h
@@ -1,28 +1,26 @@
#pragma once
-
#include "LibLsp/JsonRpc/NotificationInMessage.h"
#include "LibLsp/lsp/lsTextDocumentItem.h"
// Open, view, change, close file
-namespace TextDocumentDidOpen {
+namespace TextDocumentDidOpen
+{
- struct Params {
+struct Params
+{
lsTextDocumentItem textDocument;
-
-
- /**
+ /**
* Legacy property to support protocol version 1.0 requests.
*/
optional<std::string> text;
- MAKE_SWAP_METHOD(TextDocumentDidOpen::Params, textDocument, text);
+ MAKE_SWAP_METHOD(TextDocumentDidOpen::Params, textDocument, text);
+};
- };
-
-}
+} // namespace TextDocumentDidOpen
MAKE_REFLECT_STRUCT(TextDocumentDidOpen::Params, textDocument, text);
/**
@@ -32,8 +30,7 @@ MAKE_REFLECT_STRUCT(TextDocumentDidOpen::Params, textDocument, text);
* using the document's uri.
*
* Registration Options: TextDocumentRegistrationOptions
- */;
-
+ */
+;
DEFINE_NOTIFICATION_TYPE(Notify_TextDocumentDidOpen, TextDocumentDidOpen::Params, "textDocument/didOpen");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_save.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_save.h
index 5d00af0c20..09e3311832 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_save.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_save.h
@@ -1,24 +1,23 @@
#pragma once
-
-
#include "LibLsp/JsonRpc/NotificationInMessage.h"
+namespace TextDocumentDidSave
+{
-namespace TextDocumentDidSave {
-
- struct Params {
+struct Params
+{
// The document that was saved.
lsTextDocumentIdentifier textDocument;
// Optional the content when saved. Depends on the includeText value
// when the save notifcation was requested.
- optional<std::string> text;
-
- MAKE_SWAP_METHOD(TextDocumentDidSave::Params, textDocument, text);
- };
+ optional<std::string> text;
+ MAKE_SWAP_METHOD(TextDocumentDidSave::Params, textDocument, text);
};
+
+}; // namespace TextDocumentDidSave
MAKE_REFLECT_STRUCT(TextDocumentDidSave::Params, textDocument, text);
/**
@@ -28,4 +27,3 @@ MAKE_REFLECT_STRUCT(TextDocumentDidSave::Params, textDocument, text);
* Registration Options: TextDocumentSaveRegistrationOptions
*/
DEFINE_NOTIFICATION_TYPE(Notify_TextDocumentDidSave, TextDocumentDidSave::Params, "textDocument/didSave");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/documentColor.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/documentColor.h
index 9aeeadba05..86c6274e93 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/documentColor.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/documentColor.h
@@ -6,13 +6,14 @@
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
#include "LibLsp/lsp/lsRange.h"
#include <vector>
-struct DocumentColorParams {
- /**
+struct DocumentColorParams
+{
+ /**
* The text document.
*/
- lsTextDocumentIdentifier textDocument;
- MAKE_SWAP_METHOD(DocumentColorParams, textDocument);
+ lsTextDocumentIdentifier textDocument;
+ MAKE_SWAP_METHOD(DocumentColorParams, textDocument);
};
MAKE_REFLECT_STRUCT(DocumentColorParams, textDocument);
@@ -27,47 +28,51 @@ MAKE_REFLECT_STRUCT(DocumentColorParams, textDocument);
* Since version 3.6.0
*/
-namespace TextDocument {
- struct Color {
- /**
+namespace TextDocument
+{
+struct Color
+{
+ /**
* The red component of this color in the range [0-1].
*/
- double red = 0;
+ double red = 0;
- /**
+ /**
* The green component of this color in the range [0-1].
*/
- double green = 0;
+ double green = 0;
- /**
+ /**
* The blue component of this color in the range [0-1].
*/
- double blue = 0;
+ double blue = 0;
- /**
+ /**
* The alpha component of this color in the range [0-1].
*/
- double alpha = 0;
- MAKE_SWAP_METHOD(TextDocument::Color, red, green, blue, alpha)
- };
-}
+ double alpha = 0;
+ MAKE_SWAP_METHOD(TextDocument::Color, red, green, blue, alpha)
+};
+} // namespace TextDocument
MAKE_REFLECT_STRUCT(TextDocument::Color, red, green, blue, alpha)
-
-struct ColorInformation {
- /**
+struct ColorInformation
+{
+ /**
* The range in the document where this color appers.
*/
- lsRange range;
+ lsRange range;
- /**
+ /**
* The actual color value for this color range.
*/
- TextDocument::Color color;
- MAKE_SWAP_METHOD(ColorInformation, range, color)
+ TextDocument::Color color;
+ MAKE_SWAP_METHOD(ColorInformation, range, color)
};
-MAKE_REFLECT_STRUCT(ColorInformation,range,color)
+MAKE_REFLECT_STRUCT(ColorInformation, range, color)
-DEFINE_REQUEST_RESPONSE_TYPE(td_documentColor, DocumentColorParams,std::vector<ColorInformation>, "textDocument/documentColor");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_documentColor, DocumentColorParams, std::vector<ColorInformation>, "textDocument/documentColor"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_link.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_link.h
index 92f02b24f1..52d35bc658 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_link.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_link.h
@@ -2,43 +2,43 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
+#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
+#include "LibLsp/lsp/lsRange.h"
+#include "LibLsp/lsp/lsAny.h"
+namespace TextDocumentDocumentLink
+{
-namespace TextDocumentDocumentLink {
-
- struct Params {
+struct Params
+{
// The document to provide document links for.
lsTextDocumentIdentifier textDocument;
- MAKE_SWAP_METHOD(Params, textDocument)
- };
-
+ MAKE_SWAP_METHOD(Params, textDocument)
};
-MAKE_REFLECT_STRUCT(TextDocumentDocumentLink::Params, textDocument);
-
-
+}; // namespace TextDocumentDocumentLink
+MAKE_REFLECT_STRUCT(TextDocumentDocumentLink::Params, textDocument);
// 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.
-struct lsDocumentLink {
- // The range this link applies to.
- lsRange range;
- // The uri this link points to. If missing a resolve request is sent later.
- optional<lsDocumentUri> target;
-
- optional<lsp::Any> data;
+struct lsDocumentLink
+{
+ // The range this link applies to.
+ lsRange range;
+ // The uri this link points to. If missing a resolve request is sent later.
+ optional<lsDocumentUri> target;
- MAKE_SWAP_METHOD(lsDocumentLink, range, target, data)
+ optional<lsp::Any> data;
+ MAKE_SWAP_METHOD(lsDocumentLink, range, target, data)
};
-MAKE_REFLECT_STRUCT(lsDocumentLink, range, target,data);
-
-
-DEFINE_REQUEST_RESPONSE_TYPE(td_links, TextDocumentDocumentLink::Params, std::vector<lsDocumentLink>, "textDocument/documentLink");
+MAKE_REFLECT_STRUCT(lsDocumentLink, range, target, data);
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_links, TextDocumentDocumentLink::Params, std::vector<lsDocumentLink>, "textDocument/documentLink"
+);
/**
* The document link resolve request is sent from the client to the server to resolve the target of a given document link.
*/
DEFINE_REQUEST_RESPONSE_TYPE(td_linkResolve, lsDocumentLink, lsDocumentLink, "documentLink/resolve");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_symbol.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_symbol.h
index b01ffe0dc7..400bed91df 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_symbol.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_symbol.h
@@ -1,29 +1,26 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/symbol.h"
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
- /**
+/**
* The document symbol request is sent from the client to the server to list all symbols found in a given text document.
*/
-struct lsDocumentSymbolParams {
- lsTextDocumentIdentifier textDocument;
- MAKE_SWAP_METHOD(lsDocumentSymbolParams, textDocument)
+struct lsDocumentSymbolParams
+{
+ lsTextDocumentIdentifier textDocument;
+ MAKE_SWAP_METHOD(lsDocumentSymbolParams, textDocument)
};
MAKE_REFLECT_STRUCT(lsDocumentSymbolParams, textDocument);
-
-
-struct TextDocumentDocumentSymbol{
- typedef std::pair< optional<lsSymbolInformation> , optional<lsDocumentSymbol> > Either;
+struct TextDocumentDocumentSymbol
+{
+ typedef std::pair<optional<lsSymbolInformation>, optional<lsDocumentSymbol>> Either;
};
void Reflect(Reader& visitor, TextDocumentDocumentSymbol::Either& value);
-
-
/**
* The document symbol request is sent from the client to the server to list all
* symbols found in a given text document.
@@ -47,9 +44,6 @@ void Reflect(Reader& visitor, TextDocumentDocumentSymbol::Either& value);
// std::vector<TextDocumentDocumentSymbol::Either> );
//
-DEFINE_REQUEST_RESPONSE_TYPE(td_symbol,
- lsDocumentSymbolParams,
- std::vector< lsDocumentSymbol >,"textDocument/documentSymbol" );
-
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_symbol, lsDocumentSymbolParams, std::vector<lsDocumentSymbol>, "textDocument/documentSymbol"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/foldingRange.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/foldingRange.h
index f863b4991d..fa6e5000a9 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/foldingRange.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/foldingRange.h
@@ -1,62 +1,61 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "document_symbol.h"
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
-
-struct FoldingRangeRequestParams {
- /**
+struct FoldingRangeRequestParams
+{
+ /**
* The text document.
*/
- lsTextDocumentIdentifier textDocument;
- MAKE_SWAP_METHOD(FoldingRangeRequestParams, textDocument)
+ lsTextDocumentIdentifier textDocument;
+ MAKE_SWAP_METHOD(FoldingRangeRequestParams, textDocument)
};
MAKE_REFLECT_STRUCT(FoldingRangeRequestParams, textDocument)
-
-struct FoldingRange {
- /**
+struct FoldingRange
+{
+ /**
* The zero-based line number from where the folded range starts.
*/
- int startLine;
+ int startLine;
- /**
+ /**
* The zero-based line number where the folded range ends.
*/
- int endLine;
+ int endLine;
- /**
+ /**
* The zero-based character offset from where the folded range starts. If not defined, defaults
* to the length of the start line.
*/
- int startCharacter;
+ int startCharacter;
- /**
+ /**
* The zero-based character offset before the folded range ends. If not defined, defaults to the
* length of the end line.
*/
- int endCharacter;
+ int endCharacter;
- /**
+ /**
* 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.
*/
- std::string kind;
+ std::string kind;
- MAKE_SWAP_METHOD(FoldingRange, startLine, endLine, startCharacter, endCharacter, kind)
+ MAKE_SWAP_METHOD(FoldingRange, startLine, endLine, startCharacter, endCharacter, kind)
};
-MAKE_REFLECT_STRUCT(FoldingRange,startLine,endLine,startCharacter,endCharacter,kind)
-
+MAKE_REFLECT_STRUCT(FoldingRange, startLine, endLine, startCharacter, endCharacter, kind)
/**
* The folding range request is sent from the client to the server to return all folding
* ranges found in a given text document.
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_foldingRange, FoldingRangeRequestParams, std::vector<FoldingRange>, "textDocument/foldingRange");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_foldingRange, FoldingRangeRequestParams, std::vector<FoldingRange>, "textDocument/foldingRange"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/formatting.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/formatting.h
index 49b7883b5f..2b54716353 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/formatting.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/formatting.h
@@ -4,22 +4,23 @@
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
+namespace TextDocumentFormatting
+{
-namespace TextDocumentFormatting {
-
- struct Params {
- /**
+struct Params
+{
+ /**
* The document to format.
*/
lsTextDocumentIdentifier textDocument;
- /**
+ /**
* The format options.
*/
lsFormattingOptions options;
- MAKE_SWAP_METHOD(Params, textDocument, options);
- };
-
+ MAKE_SWAP_METHOD(Params, textDocument, options);
};
+
+}; // namespace TextDocumentFormatting
MAKE_REFLECT_STRUCT(TextDocumentFormatting::Params, textDocument, options);
/**
* The document formatting request is sent from the client to the server to
@@ -27,6 +28,6 @@ MAKE_REFLECT_STRUCT(TextDocumentFormatting::Params, textDocument, options);
*
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_formatting, TextDocumentFormatting::Params,
- std::vector<lsTextEdit>, "textDocument/formatting");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_formatting, TextDocumentFormatting::Params, std::vector<lsTextEdit>, "textDocument/formatting"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/highlight.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/highlight.h
index 0e01416126..ed7db9a11b 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/highlight.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/highlight.h
@@ -13,6 +13,6 @@
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_highlight, lsTextDocumentPositionParams,
- std::vector<lsDocumentHighlight>, "textDocument/documentHighlight");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_highlight, lsTextDocumentPositionParams, std::vector<lsDocumentHighlight>, "textDocument/documentHighlight"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/hover.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/hover.h
index f2c15c3c44..0724ac7933 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/hover.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/hover.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
@@ -16,27 +15,27 @@
namespace TextDocumentHover
{
- typedef optional< std::vector< std::pair<optional<std::string>, optional<lsMarkedString>> > > Left;
- typedef std::pair< Left, optional<MarkupContent> > Either;
- struct Result {
- /**
+typedef optional<std::vector<std::pair<optional<std::string>, optional<lsMarkedString>>>> Left;
+typedef std::pair<Left, optional<MarkupContent>> Either;
+struct Result
+{
+ /**
* The hover's content as markdown
*/
- Either contents;
+ Either contents;
- /**
+ /**
* An optional range
*/
- optional<lsRange> range;
+ optional<lsRange> range;
- MAKE_SWAP_METHOD(Result, contents, range)
- };
-}
+ MAKE_SWAP_METHOD(Result, contents, range)
+};
+} // namespace TextDocumentHover
MAKE_REFLECT_STRUCT(TextDocumentHover::Result, contents, range);
-extern void Reflect(Reader& visitor, std::pair<optional<std::string>, optional<lsMarkedString>>& value);
-extern void Reflect(Reader& visitor, TextDocumentHover::Either& value);
-
+extern void Reflect(Reader& visitor, std::pair<optional<std::string>, optional<lsMarkedString>>& value);
+extern void Reflect(Reader& visitor, TextDocumentHover::Either& value);
DEFINE_REQUEST_RESPONSE_TYPE(td_hover, lsTextDocumentPositionParams, TextDocumentHover::Result, "textDocument/hover")
@@ -52,4 +51,3 @@ DEFINE_REQUEST_RESPONSE_TYPE(td_hover, lsTextDocumentPositionParams, TextDocumen
// jsonrpc,
// id,
// result);
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/implementation.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/implementation.h
index 0d7851cb81..f0b69646dd 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/implementation.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/implementation.h
@@ -1,10 +1,8 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/lsp/out_list.h"
-
/**
* The goto implementation request is sent from the client to the server to resolve
* the implementation location of a symbol at a given text document position.
@@ -13,4 +11,6 @@
*
* Since version 3.6.0
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_implementation, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/implementation"); \ No newline at end of file
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_implementation, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/implementation"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/inlayHint.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/inlayHint.h
new file mode 100644
index 0000000000..09e75337ab
--- /dev/null
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/inlayHint.h
@@ -0,0 +1,169 @@
+#pragma once
+
+#include "LibLsp/JsonRpc/RequestInMessage.h"
+#include "LibLsp/JsonRpc/lsResponseMessage.h"
+#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
+#include "LibLsp/lsp/lsRange.h"
+#include "LibLsp/lsp/location_type.h"
+#include "LibLsp/lsp/lsCommand.h"
+#include "LibLsp/lsp/lsTextEdit.h"
+#include "LibLsp/lsp/lsAny.h"
+
+namespace TextDocumentInlayHint
+{
+
+struct Params
+{
+ // The text document
+ lsTextDocumentIdentifier textDocument;
+ // The visible document range for which inlay hints should be computed.
+ lsRange range;
+
+ MAKE_SWAP_METHOD(Params, textDocument, range)
+};
+
+}; // namespace TextDocumentInlayHint
+MAKE_REFLECT_STRUCT(TextDocumentInlayHint::Params, textDocument, range);
+
+struct lsInlayHintLabelPart
+{
+
+ /**
+ * The value of this label part.
+ */
+ std::string value;
+
+ /**
+ * The tooltip text when you hover over this label part. Depending on
+ * the client capability `inlayHint.resolveSupport` clients might resolve
+ * this property late using the resolve request.
+ */
+ optional<std::string> tooltip;
+
+ /**
+ * An optional source code location that represents this
+ * label part.
+ *
+ * The editor will use this location for the hover and for code navigation
+ * features: This part will become a clickable link that resolves to the
+ * definition of the symbol at the given location (not necessarily the
+ * location itself), it shows the hover that shows at the given location,
+ * and it shows a context menu with further code navigation commands.
+ *
+ * Depending on the client capability `inlayHint.resolveSupport` clients
+ * might resolve this property late using the resolve request.
+ */
+ optional<lsLocation> location;
+
+ /**
+ * An optional command for this label part.
+ *
+ * Depending on the client capability `inlayHint.resolveSupport` clients
+ * might resolve this property late using the resolve request.
+ */
+ optional<lsCommand<lsp::Any>> command;
+
+ MAKE_SWAP_METHOD(lsInlayHintLabelPart, value, tooltip, location, command)
+};
+
+MAKE_REFLECT_STRUCT(lsInlayHintLabelPart, value, tooltip, location, command);
+
+enum class lsInlayHintKind
+{
+
+ // An inlay hint that for a type annotation.
+ Type = 1,
+
+ // An inlay hint that is for a parameter.
+ Parameter = 2
+};
+
+MAKE_REFLECT_TYPE_PROXY(lsInlayHintKind);
+
+/**
+ * a inlay hint is displayed in the editor right next to normal code, it is only readable text
+ * that acts like a hint, for example parameter names in function calls are displayed in editors
+ * as inlay hints
+ */
+struct lsInlayHint
+{
+
+ /**
+ * The position of this hint.
+ *
+ * If multiple hints have the same position, they will be shown in the order
+ * they appear in the response.
+ */
+ lsPosition position;
+
+ /**
+ * The label of this hint. A human readable string or an array of
+ * InlayHintLabelPart label parts.
+ *
+ * *Note* that neither the string nor the label part can be empty.
+ */
+ std::string label;
+
+ /**
+ * The kind of this hint. Can be omitted in which case the client
+ * should fall back to a reasonable default.
+ */
+ optional<lsInlayHintKind> kind;
+
+ /**
+ * Optional text edits that are performed when accepting this inlay hint.
+ *
+ * *Note* that edits are expected to change the document so that the inlay
+ * hint (or its nearest variant) is now part of the document and the inlay
+ * hint itself is now obsolete.
+ *
+ * Depending on the client capability `inlayHint.resolveSupport` clients
+ * might resolve this property late using the resolve request.
+ */
+ optional<std::vector<lsTextEdit>> textEdits;
+
+ /**
+ * The tooltip text when you hover over this item.
+ *
+ * Depending on the client capability `inlayHint.resolveSupport` clients
+ * might resolve this property late using the resolve request.
+ */
+ optional<std::string> tooltip;
+
+ /**
+ * Render padding before the hint.
+ *
+ * Note: Padding should use the editor's background color, not the
+ * background color of the hint itself. That means padding can be used
+ * to visually align/separate an inlay hint.
+ */
+ optional<bool> paddingLeft;
+
+ /**
+ * Render padding after the hint.
+ *
+ * Note: Padding should use the editor's background color, not the
+ * background color of the hint itself. That means padding can be used
+ * to visually align/separate an inlay hint.
+ */
+ optional<bool> paddingRight;
+
+ /**
+ * A data entry field that is preserved on an inlay hint between
+ * a `textDocument/inlayHint` and a `inlayHint/resolve` request.
+ */
+ optional<lsp::Any> data;
+
+ MAKE_SWAP_METHOD(lsInlayHint, position, label, kind, textEdits, tooltip, paddingLeft, paddingRight, data)
+};
+
+MAKE_REFLECT_STRUCT(lsInlayHint, position, label, kind, textEdits, tooltip, paddingLeft, paddingRight, data)
+
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_inlayHint, TextDocumentInlayHint::Params, std::vector<lsInlayHint>, "textDocument/inlayHint"
+);
+
+/**
+ * The document link resolve request is sent from the client to the server to resolve the target of a given document link.
+ */
+DEFINE_REQUEST_RESPONSE_TYPE(td_inlayHintResolve, lsInlayHint, lsInlayHint, "inlayHint/resolve");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/linkedEditingRange.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/linkedEditingRange.h
index dfac99d378..8b9b217ecb 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/linkedEditingRange.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/linkedEditingRange.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsAny.h"
@@ -8,44 +7,35 @@
#include "LibLsp/lsp/lsTextDocumentPositionParams.h"
#include "LibLsp/lsp/lsRange.h"
-
-
struct LinkedEditingRangeParams
{
- lsTextDocumentIdentifier textDocument;
- lsPosition position;
+ lsTextDocumentIdentifier textDocument;
+ lsPosition position;
- MAKE_SWAP_METHOD(LinkedEditingRangeParams,
- textDocument,
- position)
+ MAKE_SWAP_METHOD(LinkedEditingRangeParams, textDocument, position)
};
-MAKE_REFLECT_STRUCT(LinkedEditingRangeParams,
- textDocument,
- position)
-
+MAKE_REFLECT_STRUCT(LinkedEditingRangeParams, textDocument, position)
struct LinkedEditingRanges
{
- /**
+ /**
* A list of ranges that can be renamed together. The ranges must have
* identical length and contain identical text content. The ranges cannot overlap.
*/
- std::vector<lsRange> ranges;
+ std::vector<lsRange> ranges;
- /**
+ /**
* An optional word pattern (regular expression) that describes valid contents for
* the given ranges. If no pattern is provided, the client configuration's word
* pattern will be used.
*/
- optional<std::string> wordPattern;
- MAKE_SWAP_METHOD(LinkedEditingRanges,
- ranges,
- wordPattern)
+ optional<std::string> wordPattern;
+ MAKE_SWAP_METHOD(LinkedEditingRanges, ranges, wordPattern)
};
-MAKE_REFLECT_STRUCT(LinkedEditingRanges,
- ranges,
- wordPattern)
-DEFINE_REQUEST_RESPONSE_TYPE(td_linkedEditingRange, LinkedEditingRangeParams,
- optional<std::vector<LinkedEditingRanges >>,"textDocument/linkedEditingRange")
+MAKE_REFLECT_STRUCT(LinkedEditingRanges, ranges, wordPattern)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_linkedEditingRange, LinkedEditingRangeParams, optional<std::vector<LinkedEditingRanges>>,
+ "textDocument/linkedEditingRange"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/onTypeFormatting.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/onTypeFormatting.h
index ada2162d12..a4cff0264f 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/onTypeFormatting.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/onTypeFormatting.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
@@ -9,29 +8,22 @@
#include "LibLsp/lsp/lsRange.h"
#include "LibLsp/lsp/lsTextEdit.h"
-
struct lsDocumentOnTypeFormattingParams
{
- lsTextDocumentIdentifier textDocument;
- lsFormattingOptions options;
+ lsTextDocumentIdentifier textDocument;
+ lsFormattingOptions options;
- lsPosition position;
+ lsPosition position;
- /**
+ /**
* The character that has been typed.
*/
- std::string ch;
+ std::string ch;
- MAKE_SWAP_METHOD(lsDocumentOnTypeFormattingParams,
- textDocument,
- position,
- options, ch);
+ MAKE_SWAP_METHOD(lsDocumentOnTypeFormattingParams, textDocument, position, options, ch);
};
-MAKE_REFLECT_STRUCT(lsDocumentOnTypeFormattingParams,
- textDocument,
- position,
- options,ch);
+MAKE_REFLECT_STRUCT(lsDocumentOnTypeFormattingParams, textDocument, position, options, ch);
/**
* The document range formatting request is sent from the client to the
@@ -39,6 +31,6 @@ MAKE_REFLECT_STRUCT(lsDocumentOnTypeFormattingParams,
*
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_onTypeFormatting,
- lsDocumentOnTypeFormattingParams, std::vector<lsTextEdit>, "textDocument/onTypeFormatting");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_onTypeFormatting, lsDocumentOnTypeFormattingParams, std::vector<lsTextEdit>, "textDocument/onTypeFormatting"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/prepareRename.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/prepareRename.h
index 1ffe5456f7..2564928d6d 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/prepareRename.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/prepareRename.h
@@ -12,29 +12,27 @@
*
* Registration Options: TextDocumentRegistrationOptions
*/
-struct PrepareRenameResult{
- /**
+struct PrepareRenameResult
+{
+ /**
* The range of the string to rename
*/
- lsRange range;
+ lsRange range;
-/**
+ /**
* A placeholder text of the string content to be renamed.
*/
- std::string placeholder;
-
- MAKE_SWAP_METHOD(PrepareRenameResult, range, placeholder)
+ std::string placeholder;
+ MAKE_SWAP_METHOD(PrepareRenameResult, range, placeholder)
};
-MAKE_REFLECT_STRUCT(PrepareRenameResult,range,placeholder)
-
-
-
-typedef std::pair< optional< lsRange>, optional<PrepareRenameResult>> TextDocumentPrepareRenameResult;
-extern void Reflect(Reader& visitor, TextDocumentPrepareRenameResult& value);
+MAKE_REFLECT_STRUCT(PrepareRenameResult, range, placeholder)
+typedef std::pair<optional<lsRange>, optional<PrepareRenameResult>> TextDocumentPrepareRenameResult;
+extern void Reflect(Reader& visitor, TextDocumentPrepareRenameResult& value);
-DEFINE_REQUEST_RESPONSE_TYPE(td_prepareRename,
- lsTextDocumentPositionParams, TextDocumentPrepareRenameResult, "textDocument/prepareRename");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_prepareRename, lsTextDocumentPositionParams, TextDocumentPrepareRenameResult, "textDocument/prepareRename"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/publishDiagnostics.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/publishDiagnostics.h
index 8272df10e8..7929e6ba0d 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/publishDiagnostics.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/publishDiagnostics.h
@@ -4,25 +4,25 @@
#include "LibLsp/lsp/lsp_diagnostic.h"
// Diagnostics
-namespace TextDocumentPublishDiagnostics{
- struct Params {
+namespace TextDocumentPublishDiagnostics
+{
+struct Params
+{
// The URI for which diagnostic information is reported.
lsDocumentUri uri;
// An array of diagnostic information items.
std::vector<lsDiagnostic> diagnostics;
- MAKE_SWAP_METHOD(Params,uri,diagnostics);
- };
-
-
+ MAKE_SWAP_METHOD(Params, uri, diagnostics);
};
-MAKE_REFLECT_STRUCT(TextDocumentPublishDiagnostics::Params,
- uri,
- diagnostics);
+
+}; // namespace TextDocumentPublishDiagnostics
+MAKE_REFLECT_STRUCT(TextDocumentPublishDiagnostics::Params, uri, diagnostics);
/**
* Diagnostics notifications are sent from the server to the client to
* signal results of validation runs.
*/
-DEFINE_NOTIFICATION_TYPE(Notify_TextDocumentPublishDiagnostics, TextDocumentPublishDiagnostics::Params, "textDocument/publishDiagnostics");
-
+DEFINE_NOTIFICATION_TYPE(
+ Notify_TextDocumentPublishDiagnostics, TextDocumentPublishDiagnostics::Params, "textDocument/publishDiagnostics"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/range_formatting.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/range_formatting.h
index c3c5ff0d0b..174fa828bd 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/range_formatting.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/range_formatting.h
@@ -1,26 +1,19 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsFormattingOptions.h"
+struct lsTextDocumentRangeFormattingParams
+{
+ lsTextDocumentIdentifier textDocument;
+ lsRange range;
+ lsFormattingOptions options;
-struct lsTextDocumentRangeFormattingParams {
- lsTextDocumentIdentifier textDocument;
- lsRange range;
- lsFormattingOptions options;
-
- MAKE_SWAP_METHOD(lsTextDocumentRangeFormattingParams,
- textDocument,
- range,
- options)
+ MAKE_SWAP_METHOD(lsTextDocumentRangeFormattingParams, textDocument, range, options)
};
-MAKE_REFLECT_STRUCT(lsTextDocumentRangeFormattingParams,
- textDocument,
- range,
- options);
+MAKE_REFLECT_STRUCT(lsTextDocumentRangeFormattingParams, textDocument, range, options);
/**
* The document range formatting request is sent from the client to the
@@ -28,8 +21,6 @@ MAKE_REFLECT_STRUCT(lsTextDocumentRangeFormattingParams,
*
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_rangeFormatting, lsTextDocumentRangeFormattingParams, std::vector<lsTextEdit>,
- "textDocument/rangeFormatting");
-
-
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_rangeFormatting, lsTextDocumentRangeFormattingParams, std::vector<lsTextEdit>, "textDocument/rangeFormatting"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/references.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/references.h
index 46782c3d6d..4977bf8e53 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/references.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/references.h
@@ -1,41 +1,30 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/symbol.h"
+namespace TextDocumentReferences
+{
-namespace TextDocumentReferences {
-
- struct lsReferenceContext {
+struct lsReferenceContext
+{
// Include the declaration of the current symbol.
- optional<bool> includeDeclaration;
- MAKE_REFLECT_STRUCT(lsReferenceContext,
- includeDeclaration)
- };
- struct Params {
+ optional<bool> includeDeclaration;
+ MAKE_REFLECT_STRUCT(lsReferenceContext, includeDeclaration)
+};
+struct Params
+{
lsTextDocumentIdentifier textDocument;
lsPosition position;
lsReferenceContext context;
- MAKE_SWAP_METHOD(Params,
- textDocument,
- position,
- context)
-
- };
-
+ MAKE_SWAP_METHOD(Params, textDocument, position, context)
};
-MAKE_REFLECT_STRUCT(TextDocumentReferences::lsReferenceContext,
- includeDeclaration);
-MAKE_REFLECT_STRUCT(TextDocumentReferences::Params,
- textDocument,
- position,
- context);
-
-
+}; // namespace TextDocumentReferences
+MAKE_REFLECT_STRUCT(TextDocumentReferences::lsReferenceContext, includeDeclaration);
+MAKE_REFLECT_STRUCT(TextDocumentReferences::Params, textDocument, position, context);
/**
* The references request is sent from the client to the server to resolve
@@ -44,5 +33,6 @@ MAKE_REFLECT_STRUCT(TextDocumentReferences::Params,
*
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_references, TextDocumentReferences::Params,
- std::vector<lsLocation>, "textDocument/references");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_references, TextDocumentReferences::Params, std::vector<lsLocation>, "textDocument/references"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/rename.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/rename.h
index 8b6d085910..c928638509 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/rename.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/rename.h
@@ -1,15 +1,16 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsWorkspaceEdit.h"
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
-namespace TextDocumentRename {
+namespace TextDocumentRename
+{
- struct Params {
+struct Params
+{
// The document to format.
lsTextDocumentIdentifier textDocument;
@@ -20,17 +21,11 @@ namespace TextDocumentRename {
// request must return a [ResponseError](#ResponseError) with an
// appropriate message set.
std::string newName;
- MAKE_SWAP_METHOD(Params,
- textDocument,
- position,
- newName);
- };
-
+ MAKE_SWAP_METHOD(Params, textDocument, position, newName);
};
-MAKE_REFLECT_STRUCT(TextDocumentRename::Params,
- textDocument,
- position,
- newName);
+
+}; // namespace TextDocumentRename
+MAKE_REFLECT_STRUCT(TextDocumentRename::Params, textDocument, position, newName);
/**
* The rename request is sent from the client to the server to do a
* workspace wide rename of a symbol.
@@ -38,4 +33,3 @@ MAKE_REFLECT_STRUCT(TextDocumentRename::Params,
* Registration Options: TextDocumentRegistrationOptions
*/
DEFINE_REQUEST_RESPONSE_TYPE(td_rename, TextDocumentRename::Params, lsWorkspaceEdit, "textDocument/rename");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCodeLens.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCodeLens.h
index 0723985160..d28be9ada2 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCodeLens.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCodeLens.h
@@ -1,10 +1,8 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "code_lens.h"
DEFINE_REQUEST_RESPONSE_TYPE(codeLens_resolve, lsCodeLens, lsCodeLens, "codeLens/resolve")
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCompletionItem.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCompletionItem.h
index f5576894ed..094bff25de 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCompletionItem.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCompletionItem.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
@@ -14,8 +13,3 @@
* information for a given completion item.
*/
DEFINE_REQUEST_RESPONSE_TYPE(completionItem_resolve, lsCompletionItem, lsCompletionItem, "completionItem/resolve");
-
-
-
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveTypeHierarchy.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveTypeHierarchy.h
index 8b5f115af7..89d60ec0e1 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveTypeHierarchy.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveTypeHierarchy.h
@@ -1,31 +1,32 @@
#pragma once
-
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/symbol.h"
#include "typeHierarchy.h"
-struct ResolveTypeHierarchyItemParams {
- /**
+struct ResolveTypeHierarchyItemParams
+{
+ /**
* The hierarchy item to resolve.
*/
- TypeHierarchyItem item;
+ TypeHierarchyItem item;
- /**
+ /**
* The number of hierarchy levels to resolve. {@code 0} indicates no hierarchy level.
*/
- optional<int> resolve;
+ optional<int> resolve;
- /**
+ /**
* The direction of the type hierarchy resolution.
*/
- TypeHierarchyDirection direction;
- MAKE_SWAP_METHOD(ResolveTypeHierarchyItemParams, item, resolve, direction)
+ TypeHierarchyDirection direction;
+ MAKE_SWAP_METHOD(ResolveTypeHierarchyItemParams, item, resolve, direction)
};
-MAKE_REFLECT_STRUCT(ResolveTypeHierarchyItemParams,item,resolve,direction)
-DEFINE_REQUEST_RESPONSE_TYPE(typeHierarchy_resolve, ResolveTypeHierarchyItemParams, TypeHierarchyItem, "typeHierarchy/resolve")
+MAKE_REFLECT_STRUCT(ResolveTypeHierarchyItemParams, item, resolve, direction)
+DEFINE_REQUEST_RESPONSE_TYPE(
+ typeHierarchy_resolve, ResolveTypeHierarchyItemParams, TypeHierarchyItem, "typeHierarchy/resolve"
+)
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/selectionRange.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/selectionRange.h
index 2c908bd57f..f74307e4ba 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/selectionRange.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/selectionRange.h
@@ -1,52 +1,53 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsPosition.h"
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
-struct SelectionRangeParams {
- /**
+struct SelectionRangeParams
+{
+ /**
* The text document.
*/
- lsTextDocumentIdentifier textDocument;
+ lsTextDocumentIdentifier textDocument;
- /**
+ /**
* The positions inside the text document.
*/
- std::vector<lsPosition> positions;
-
- MAKE_SWAP_METHOD(SelectionRangeParams, textDocument, positions)
+ std::vector<lsPosition> positions;
+ MAKE_SWAP_METHOD(SelectionRangeParams, textDocument, positions)
};
MAKE_REFLECT_STRUCT(SelectionRangeParams, textDocument, positions)
-struct SelectionRange {
- /**
+struct SelectionRange
+{
+ /**
* The [range](#Range) of this selection range.
*/
- lsRange range;
+ lsRange range;
- /**
+ /**
* The parent selection range containing this range. Therefore `parent.range` must contain `this.range`.
*/
- optional<SelectionRange*> parent;
- MAKE_SWAP_METHOD(SelectionRange, range, parent)
+ optional<SelectionRange*> parent;
+ MAKE_SWAP_METHOD(SelectionRange, range, parent)
};
-extern void Reflect(Reader& visitor, optional<SelectionRange*>& value);
+extern void Reflect(Reader& visitor, optional<SelectionRange*>& value);
extern void Reflect(Writer& visitor, SelectionRange* value);
-MAKE_REFLECT_STRUCT(SelectionRange,range,parent)
+MAKE_REFLECT_STRUCT(SelectionRange, range, parent)
/**
* The {@code textDocument/selectionRange} request is sent from the client to the server to return
* suggested selection ranges at an array of given positions. A selection range is a range around
* the cursor position which the user might be interested in selecting.
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_selectionRange, SelectionRangeParams, std::vector<SelectionRange>, "textDocument/selectionRange");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_selectionRange, SelectionRangeParams, std::vector<SelectionRange>, "textDocument/selectionRange"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/semanticHighlighting.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/semanticHighlighting.h
index bfb8619559..44bda39594 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/semanticHighlighting.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/semanticHighlighting.h
@@ -9,20 +9,21 @@
* Represents a semantic highlighting information that has to be applied on a specific line of the text document.
*/
-struct SemanticHighlightingInformation {
- /**
+struct SemanticHighlightingInformation
+{
+ /**
* The zero-based line position in the text document.
*/
- int line = 0;
+ int line = 0;
- /**
+ /**
* A base64 encoded string representing every single highlighted ranges in the line with its start position, length
* and the "lookup table" index of of the semantic highlighting <a href="https://manual.macromates.com/en/language_grammars">
* TextMate scopes</a>. If the {@code tokens} is empty or not defined, then no highlighted positions are available for the line.
*/
- std::string tokens;
+ std::string tokens;
- MAKE_SWAP_METHOD(SemanticHighlightingInformation, line, tokens)
+ MAKE_SWAP_METHOD(SemanticHighlightingInformation, line, tokens)
};
MAKE_REFLECT_STRUCT(SemanticHighlightingInformation, line, tokens);
@@ -31,21 +32,21 @@ MAKE_REFLECT_STRUCT(SemanticHighlightingInformation, line, tokens);
* Parameters for the semantic highlighting (server-side) push notification.
*/
-struct SemanticHighlightingParams {
- /**
+struct SemanticHighlightingParams
+{
+ /**
* The text document that has to be decorated with the semantic highlighting information.
*/
- lsVersionedTextDocumentIdentifier textDocument;
+ lsVersionedTextDocumentIdentifier textDocument;
- /**
+ /**
* An array of semantic highlighting information.
*/
- std::vector<SemanticHighlightingInformation> lines;
-
- MAKE_SWAP_METHOD(SemanticHighlightingParams, textDocument, lines)
+ std::vector<SemanticHighlightingInformation> lines;
+ MAKE_SWAP_METHOD(SemanticHighlightingParams, textDocument, lines)
};
MAKE_REFLECT_STRUCT(SemanticHighlightingParams, textDocument, lines);
/**
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/signature_help.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/signature_help.h
index bb5cd1dc52..51e33dec4f 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/signature_help.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/signature_help.h
@@ -1,87 +1,75 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsMarkedString.h"
#include "LibLsp/lsp/lsTextDocumentPositionParams.h"
-extern void Reflect(Reader& visitor,
- std::pair<optional<std::string>, optional<MarkupContent>>& value);
-
-
-
// Represents a parameter of a callable-signature. A parameter can
// have a label and a doc-comment.
-struct lsParameterInformation {
- // The label of this parameter. Will be shown in
- // the UI.
- std::string label;
+struct lsParameterInformation
+{
+ // The label of this parameter. Will be shown in
+ // the UI.
+ std::string label;
- // The human-readable doc-comment of this parameter. Will be shown
- // in the UI but can be omitted.
- optional< std::pair< optional<std::string> , optional <MarkupContent> > > documentation;
+ // The human-readable doc-comment of this parameter. Will be shown
+ // in the UI but can be omitted.
+ optional<std::pair<optional<std::string>, optional<MarkupContent>>> documentation;
- MAKE_SWAP_METHOD(lsParameterInformation, label, documentation)
+ MAKE_SWAP_METHOD(lsParameterInformation, label, documentation)
};
MAKE_REFLECT_STRUCT(lsParameterInformation, label, documentation);
// Represents the signature of something callable. A signature
// can have a label, like a function-name, a doc-comment, and
// a set of parameters.
-struct lsSignatureInformation {
- // The label of this signature. Will be shown in
- // the UI.
- std::string label;
+struct lsSignatureInformation
+{
+ // The label of this signature. Will be shown in
+ // the UI.
+ std::string label;
- // The human-readable doc-comment of this signature. Will be shown
- // in the UI but can be omitted.
- optional< std::pair< optional<std::string>, optional <MarkupContent> > > documentation;
+ // The human-readable doc-comment of this signature. Will be shown
+ // in the UI but can be omitted.
+ optional<std::pair<optional<std::string>, optional<MarkupContent>>> documentation;
- // The parameters of this signature.
- std::vector<lsParameterInformation> parameters;
+ // The parameters of this signature.
+ std::vector<lsParameterInformation> parameters;
- MAKE_SWAP_METHOD(lsSignatureInformation, label, documentation, parameters)
+ MAKE_SWAP_METHOD(lsSignatureInformation, label, documentation, parameters)
};
MAKE_REFLECT_STRUCT(lsSignatureInformation, label, documentation, parameters);
// Signature help represents the signature of something
// callable. There can be multiple signature but only one
// active and only one active parameter.
-struct lsSignatureHelp {
- // One or more signatures.
- std::vector<lsSignatureInformation> signatures;
-
- // 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
- // mandantory to better express this.
- optional<int> activeSignature;
-
- // 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
- // mandantory to better express the active parameter if the
- // active signature does have any.
- optional<int> activeParameter;
-
-
- MAKE_SWAP_METHOD(lsSignatureHelp,
- signatures,
- activeSignature,
- activeParameter)
+struct lsSignatureHelp
+{
+ // One or more signatures.
+ std::vector<lsSignatureInformation> signatures;
+
+ // 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
+ // mandantory to better express this.
+ optional<int> activeSignature;
+
+ // 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
+ // mandantory to better express the active parameter if the
+ // active signature does have any.
+ optional<int> activeParameter;
+
+ MAKE_SWAP_METHOD(lsSignatureHelp, signatures, activeSignature, activeParameter)
};
-MAKE_REFLECT_STRUCT(lsSignatureHelp,
- signatures,
- activeSignature,
- activeParameter);
-
-
+MAKE_REFLECT_STRUCT(lsSignatureHelp, signatures, activeSignature, activeParameter);
/**
* The signature help request is sent from the client to the server to
@@ -89,4 +77,6 @@ MAKE_REFLECT_STRUCT(lsSignatureHelp,
*
* Registration Options: SignatureHelpRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_signatureHelp, lsTextDocumentPositionParams, lsSignatureHelp, "textDocument/signatureHelp");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_signatureHelp, lsTextDocumentPositionParams, lsSignatureHelp, "textDocument/signatureHelp"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/typeHierarchy.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/typeHierarchy.h
index 8fe99edd87..fac696978a 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/typeHierarchy.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/typeHierarchy.h
@@ -18,77 +18,73 @@
* "https://github.com/Microsoft/vscode-languageserver-node/pull/426">{@code textDocument/typeHierarchy}
* language feature</a> is not yet part of the official LSP specification.
*/
-enum class TypeHierarchyDirection : uint32_t{
+enum class TypeHierarchyDirection : uint32_t
+{
- /**
+ /**
* Flag for retrieving/resolving the subtypes. Value: {@code 0}.
*/
- Children = 0,
+ Children = 0,
- /**
+ /**
* Flag to use when retrieving/resolving the supertypes. Value: {@code 1}.
*/
- Parents =1,
+ Parents = 1,
- /**
+ /**
* Flag for resolving both the super- and subtypes. Value: {@code 2}.
*/
- Both=2
+ Both = 2
};
void Reflect(Reader& reader, TypeHierarchyDirection& value);
-
void Reflect(Writer& writer, TypeHierarchyDirection& value);
-struct TypeHierarchyParams :public lsTextDocumentPositionParams
+struct TypeHierarchyParams : public lsTextDocumentPositionParams
{
- optional<int> resolve;
- optional<TypeHierarchyDirection> direction ;
+ optional<int> resolve;
+ optional<TypeHierarchyDirection> direction;
- MAKE_SWAP_METHOD(TypeHierarchyParams, textDocument, position, resolve, direction)
+ MAKE_SWAP_METHOD(TypeHierarchyParams, textDocument, position, resolve, direction)
};
-MAKE_REFLECT_STRUCT(TypeHierarchyParams, textDocument, position, resolve, direction);
-
-
-
-
+MAKE_REFLECT_STRUCT(TypeHierarchyParams, textDocument, position, resolve, direction);
/**
* Representation of an item that carries type information (such as class, interface, enumeration, etc) with additional parentage details.
*/
-struct TypeHierarchyItem {
- /**
+struct TypeHierarchyItem
+{
+ /**
* The human readable name of the hierarchy item.
*/
- std::string name;
+ std::string name;
- /**
+ /**
* Optional detail for the hierarchy item. It can be, for instance, the signature of a function or method.
*/
- optional<std::string>
- detail;
+ optional<std::string> detail;
- /**
+ /**
* The kind of the hierarchy item. For instance, class or interface.
*/
- SymbolKind kind;
+ SymbolKind kind;
- /**
+ /**
* {@code true} if the hierarchy item is deprecated. Otherwise, {@code false}. It is {@code false} by default.
*/
- optional<bool> deprecated;
+ optional<bool> deprecated;
- /**
+ /**
* The URI of the text document where this type hierarchy item belongs to.
*/
- lsDocumentUri uri;
+ lsDocumentUri uri;
- /**
+ /**
* The range enclosing this type hierarchy item not including leading/trailing whitespace but everything else
* like comments. This information is typically used to determine if the clients cursor is inside the type
* hierarchy item to reveal in the symbol in the UI.
@@ -96,38 +92,40 @@ struct TypeHierarchyItem {
* @see TypeHierarchyItem#selectionRange
*/
- lsRange range;
+ lsRange range;
- /**
+ /**
* The range that should be selected and revealed when this type hierarchy item is being picked, e.g the name of a function.
* Must be contained by the the {@link TypeHierarchyItem#getRange range}.
*
* @see TypeHierarchyItem#range
*/
- lsRange selectionRange;
+ lsRange selectionRange;
- /**
+ /**
* If this type hierarchy item is resolved, it contains the direct parents. Could be empty if the item does not have any
* direct parents. If not defined, the parents have not been resolved yet.
*/
- optional< std::vector<TypeHierarchyItem> > parents;
+ optional<std::vector<TypeHierarchyItem>> parents;
- /**
+ /**
* If this type hierarchy item is resolved, it contains the direct children of the current item.
* Could be empty if the item does not have any descendants. If not defined, the children have not been resolved.
*/
- optional< std::vector<TypeHierarchyItem> > children;
+ optional<std::vector<TypeHierarchyItem>> children;
- /**
+ /**
* An optional data field can be used to identify a type hierarchy item in a resolve request.
*/
- optional<lsp::Any> data;
+ optional<lsp::Any> data;
- MAKE_SWAP_METHOD(TypeHierarchyItem, name, detail, kind, deprecated, uri, range, selectionRange, parents, children, data)
+ MAKE_SWAP_METHOD(
+ TypeHierarchyItem, name, detail, kind, deprecated, uri, range, selectionRange, parents, children, data
+ )
};
-MAKE_REFLECT_STRUCT(TypeHierarchyItem, name, detail, kind, deprecated, uri, range, selectionRange, parents, children, data);
-
-
+MAKE_REFLECT_STRUCT(
+ TypeHierarchyItem, name, detail, kind, deprecated, uri, range, selectionRange, parents, children, data
+);
DEFINE_REQUEST_RESPONSE_TYPE(td_typeHierarchy, TypeHierarchyParams, TypeHierarchyItem, "textDocument/typeHierarchy");
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/type_definition.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/type_definition.h
index 196a65c5d3..f8ee982144 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/type_definition.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/type_definition.h
@@ -1,6 +1,5 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/lsp/out_list.h"
@@ -12,5 +11,6 @@
*
* Since version 3.6.0
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_typeDefinition,
- lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/typeDefinition");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_typeDefinition, lsTextDocumentPositionParams, LocationListEither::Either, "textDocument/typeDefinition"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/willSave.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/willSave.h
index 4fe33d1dcc..511b14c64c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/willSave.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/willSave.h
@@ -1,51 +1,53 @@
#pragma once
-
#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsTextDocumentIdentifier.h"
-namespace WillSaveTextDocumentParams {
+namespace WillSaveTextDocumentParams
+{
- /**
+/**
* Represents reasons why a text document is saved.
*/
- enum class TextDocumentSaveReason {
+enum class TextDocumentSaveReason
+{
- /**
+ /**
* Manually triggered, e.g. by the user pressing save, by starting debugging,
* or by an API call.
*/
- Manual=(1),
+ Manual = (1),
- /**
+ /**
* Automatic after a delay.
*/
- AfterDelay=(2),
+ AfterDelay = (2),
- /**
+ /**
* When the editor lost focus.
*/
- FocusOut=(3)
- };
+ FocusOut = (3)
+};
- struct Params {
- /**
+struct Params
+{
+ /**
* The document that will be saved.
*/
lsTextDocumentIdentifier textDocument;
- /*
+ /*
* A reason why a text document is saved.
*/
- optional<TextDocumentSaveReason> reason;
-
- MAKE_SWAP_METHOD(Params, textDocument, reason);
- };
+ optional<TextDocumentSaveReason> reason;
+ MAKE_SWAP_METHOD(Params, textDocument, reason);
};
+
+}; // namespace WillSaveTextDocumentParams
MAKE_REFLECT_TYPE_PROXY(WillSaveTextDocumentParams::TextDocumentSaveReason);
MAKE_REFLECT_STRUCT(WillSaveTextDocumentParams::Params, textDocument, reason);
@@ -66,6 +68,6 @@ DEFINE_NOTIFICATION_TYPE(td_willSave, WillSaveTextDocumentParams::Params, "textD
*
* Registration Options: TextDocumentRegistrationOptions
*/
-DEFINE_REQUEST_RESPONSE_TYPE(td_willSaveWaitUntil,
- WillSaveTextDocumentParams::Params, std::vector<lsTextEdit>, "textDocument/willSaveWaitUntil");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ td_willSaveWaitUntil, WillSaveTextDocumentParams::Params, std::vector<lsTextEdit>, "textDocument/willSaveWaitUntil"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/utils.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/utils.h
index 5f1769f80a..8fd6f8276c 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/utils.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/utils.h
@@ -12,64 +12,56 @@
#include "lsPosition.h"
-
namespace lsp
{
-
// Returns true if |value| starts/ends with |start| or |ending|.
bool StartsWith(std::string value, std::string start);
bool EndsWith(std::string value, std::string ending);
-bool AnyStartsWith(const std::vector<std::string>& values,
- const std::string& start);
-bool StartsWithAny(const std::string& value,
- const std::vector<std::string>& startings);
-bool EndsWithAny(const std::string& value,
- const std::vector<std::string>& endings);
-bool FindAnyPartial(const std::string& value,
- const std::vector<std::string>& values);
+bool AnyStartsWith(std::vector<std::string> const& values, std::string const& start);
+bool StartsWithAny(std::string const& value, std::vector<std::string> const& startings);
+bool EndsWithAny(std::string const& value, std::vector<std::string> const& endings);
+bool FindAnyPartial(std::string const& value, std::vector<std::string> const& values);
// Returns the dirname of |path|, i.e. "foo/bar.cc" => "foo/", "foo" => "./",
// "/foo" => "/". The result always ends in '/'.
std::string GetDirName(std::string path);
// Returns the basename of |path|, ie, "foo/bar.cc" => "bar.cc".
-std::string GetBaseName(const std::string& path);
+std::string GetBaseName(std::string const& path);
// Returns |path| without the filetype, ie, "foo/bar.cc" => "foo/bar".
-std::string StripFileType(const std::string& path);
-
-std::string ReplaceAll(const std::string& source,
- const std::string& from,
- const std::string& to);
-
-std::vector<std::string> SplitString(const std::string& str,
- const std::string& delimiter);
-
-template <typename TValues, typename TMap>
-std::string StringJoinMap(const TValues& values,
- const TMap& map,
- const std::string& sep = ", ") {
- std::string result;
- bool first = true;
- for (auto& entry : values) {
- if (!first)
- result += sep;
- first = false;
- result += map(entry);
- }
- return result;
-}
+std::string StripFileType(std::string const& path);
+
+std::string ReplaceAll(std::string const& source, std::string const& from, std::string const& to);
-template <typename TValues>
-std::string StringJoin(const TValues& values, const std::string& sep = ", ") {
- return StringJoinMap(values, [](const std::string& entry) { return entry; },
- sep);
+std::vector<std::string> SplitString(std::string const& str, std::string const& delimiter);
+
+template<typename TValues, typename TMap>
+std::string StringJoinMap(TValues const& values, TMap const& map, std::string const& sep = ", ")
+{
+ std::string result;
+ bool first = true;
+ for (auto& entry : values)
+ {
+ if (!first)
+ {
+ result += sep;
+ }
+ first = false;
+ result += map(entry);
+ }
+ return result;
}
-template <typename TCollection, typename TValue>
-bool ContainsValue(const TCollection& collection, const TValue& value) {
- return std::find(std::begin(collection), std::end(collection), value) !=
- std::end(collection);
+template<typename TValues>
+std::string StringJoin(TValues const& values, std::string const& sep = ", ")
+{
+ return StringJoinMap(values, [](std::string const& entry) { return entry; }, sep);
}
+template<typename TCollection, typename TValue>
+bool ContainsValue(TCollection const& collection, TValue const& value)
+{
+ return std::find(std::begin(collection), std::end(collection), value) != std::end(collection);
+}
// Ensures that |path| ends in a slash.
void EnsureEndsInSlash(std::string& path);
@@ -79,16 +71,16 @@ void EnsureEndsInSlash(std::string& path);
std::string EscapeFileName(std::string path);
// FIXME: Move ReadContent into ICacheManager?
-bool FileExists(const std::string& filename);
-optional<std::string> ReadContent(const AbsolutePath& filename);
-std::vector<std::string> ReadLinesWithEnding(const AbsolutePath& filename);
+bool FileExists(std::string const& filename);
+optional<std::string> ReadContent(AbsolutePath const& filename);
+std::vector<std::string> ReadLinesWithEnding(AbsolutePath const& filename);
-bool WriteToFile(const std::string& filename, const std::string& content);
+bool WriteToFile(std::string const& filename, std::string const& content);
-
-template <typename T, typename Fn>
-void RemoveIf(std::vector<T>* vec, Fn predicate) {
- vec->erase(std::remove_if(vec->begin(), vec->end(), predicate), vec->end());
+template<typename T, typename Fn>
+void RemoveIf(std::vector<T>* vec, Fn predicate)
+{
+ vec->erase(std::remove_if(vec->begin(), vec->end(), predicate), vec->end());
}
std::string FormatMicroseconds(long long microseconds);
@@ -97,45 +89,35 @@ std::string FormatMicroseconds(long long microseconds);
std::string UpdateToRnNewlines(std::string output);
// Utility methods to check if |path| is absolute.
-bool IsAbsolutePath(const std::string& path);
-bool IsUnixAbsolutePath(const std::string& path);
-bool IsWindowsAbsolutePath(const std::string& path);
+bool IsAbsolutePath(std::string const& path);
+bool IsUnixAbsolutePath(std::string const& path);
+bool IsWindowsAbsolutePath(std::string const& path);
-bool IsDirectory(const std::string& path);
+bool IsDirectory(std::string const& path);
// string <-> wstring conversion (UTF-16), e.g. for use with Window's wide APIs.
- std::string ws2s(std::wstring const& wstr);
- std::wstring s2ws(std::string const& str);
+std::string ws2s(std::wstring const& wstr);
+std::wstring s2ws(std::string const& str);
-AbsolutePath NormalizePath(const std::string& path,
- bool ensure_exists = true,
- bool force_lower_on_windows = true);
+AbsolutePath NormalizePath(std::string const& path, bool ensure_exists = true, bool force_lower_on_windows = true);
-
-int GetOffsetForPosition(lsPosition position, const std::string& content);
+int GetOffsetForPosition(lsPosition position, std::string const& content);
// Finds the position for an |offset| in |content|.
-lsPosition GetPositionForOffset(int offset, const std::string& content);
+lsPosition GetPositionForOffset(int offset, std::string const& content);
// Utility method to find a position for the given character.
-lsPosition CharPos(const std::string& search,
- char character,
- int character_offset = 0);
-
+lsPosition CharPos(std::string const& search, char character, int character_offset = 0);
- void scanDirsNoRecursive(const std::wstring& rootPath, std::vector<std::wstring>& ret);
+void scanDirsNoRecursive(std::wstring const& rootPath, std::vector<std::wstring>& ret);
- void scanFilesUseRecursive(const std::wstring& rootPath, std::vector<std::wstring>& ret,
- std::wstring strSuf = L"");
+void scanFilesUseRecursive(std::wstring const& rootPath, std::vector<std::wstring>& ret, std::wstring strSuf = L"");
- void scanFileNamesUseRecursive(const std::wstring& rootPath, std::vector<std::wstring>& ret,
- std::wstring strSuf = L"");
- void scanFileNamesUseRecursive(const std::string& rootPath, std::vector<std::string>& ret,
- std::string strSuf = "");
+void scanFileNamesUseRecursive(std::wstring const& rootPath, std::vector<std::wstring>& ret, std::wstring strSuf = L"");
+void scanFileNamesUseRecursive(std::string const& rootPath, std::vector<std::string>& ret, std::string strSuf = "");
- void scanFilesUseRecursive(const std::string& rootPath, std::vector<std::string>& ret,
- std::string strSuf = "");
+void scanFilesUseRecursive(std::string const& rootPath, std::vector<std::string>& ret, std::string strSuf = "");
- void scanDirsUseRecursive(const std::wstring& rootPath, std::vector<std::wstring>& ret);
+void scanDirsUseRecursive(std::wstring const& rootPath, std::vector<std::wstring>& ret);
-}
+} // namespace lsp
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/windows/MessageNotify.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/windows/MessageNotify.h
index 332fb7e2e7..567c061068 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/windows/MessageNotify.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/windows/MessageNotify.h
@@ -5,68 +5,73 @@
#include "LibLsp/JsonRpc/lsResponseMessage.h"
// Show a message to the user.
-enum class lsMessageType : int { Error = 1, Warning = 2, Info = 3, Log = 4 };
+enum class lsMessageType : int
+{
+ Error = 1,
+ Warning = 2,
+ Info = 3,
+ Log = 4
+};
MAKE_REFLECT_TYPE_PROXY(lsMessageType)
-struct MessageParams {
-/**
+struct MessageParams
+{
+ /**
* The message type.
*/
- lsMessageType type = lsMessageType::Error;
+ lsMessageType type = lsMessageType::Error;
-/**
+ /**
* The actual message.
*/
- std::string message;
-
- void swap(MessageParams& arg) noexcept {
- lsMessageType temp = type;
- type = arg.type;
- arg.type = temp;
- message.swap(arg.message);
- }
+ std::string message;
+
+ void swap(MessageParams& arg) noexcept
+ {
+ lsMessageType temp = type;
+ type = arg.type;
+ arg.type = temp;
+ message.swap(arg.message);
+ }
};
MAKE_REFLECT_STRUCT(MessageParams, type, message)
- /**
+/**
* The log message notification is send from the server to the client to ask
* the client to log a particular message.
*/
DEFINE_NOTIFICATION_TYPE(Notify_LogMessage, MessageParams, "window/logMessage")
-
/**
* The show message notification is sent from a server to a client to ask
* the client to display a particular message in the user interface.
*/
DEFINE_NOTIFICATION_TYPE(Notify_ShowMessage, MessageParams, "window/showMessage")
-
-
/**
* The show message request is sent from a server to a client to ask the client to display a particular message in the
* user class. In addition to the show message notification the request allows to pass actions and to wait for an
* answer from the client.
*/
-struct MessageActionItem {
- /**
+struct MessageActionItem
+{
+ /**
* A short title like 'Retry', 'Open Log' etc.
*/
- std::string title;
- MAKE_SWAP_METHOD(MessageActionItem, title)
+ std::string title;
+ MAKE_SWAP_METHOD(MessageActionItem, title)
};
MAKE_REFLECT_STRUCT(MessageActionItem, title);
-
-struct ShowMessageRequestParams :public MessageParams {
- /**
+struct ShowMessageRequestParams : public MessageParams
+{
+ /**
* The message action items to present.
*/
- std::vector<MessageActionItem> actions;
-
- MAKE_SWAP_METHOD(ShowMessageRequestParams, type, message, actions)
+ std::vector<MessageActionItem> actions;
+ MAKE_SWAP_METHOD(ShowMessageRequestParams, type, message, actions)
};
MAKE_REFLECT_STRUCT(ShowMessageRequestParams, type, message, actions)
@@ -78,6 +83,3 @@ MAKE_REFLECT_STRUCT(ShowMessageRequestParams, type, message, actions)
*/
DEFINE_REQUEST_RESPONSE_TYPE(WindowShowMessage, ShowMessageRequestParams, MessageActionItem, "window/showMessage")
-
-
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/working_files.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/working_files.h
index 916268f0fa..d4b872e5ce 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/working_files.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/working_files.h
@@ -12,61 +12,66 @@
struct WorkingFiles;
struct WorkingFilesData;
-struct WorkingFile {
+struct WorkingFile
+{
int version = 0;
AbsolutePath filename;
Directory directory;
WorkingFiles& parent;
std::atomic<long long> counter;
- WorkingFile(WorkingFiles& ,const AbsolutePath& filename, const std::string& buffer_content);
- WorkingFile(WorkingFiles&, const AbsolutePath& filename, std::string&& buffer_content);
- const std::string& GetContentNoLock() const
+ WorkingFile(WorkingFiles&, AbsolutePath const& filename, std::string const& buffer_content);
+ WorkingFile(WorkingFiles&, AbsolutePath const& filename, std::string&& buffer_content);
+ std::string const& GetContentNoLock() const
{
- return buffer_content;
+ return buffer_content;
}
+
protected:
friend struct WorkingFiles;
std::string buffer_content;
};
-struct WorkingFiles {
+struct WorkingFiles
+{
- WorkingFiles();
- ~WorkingFiles();
+ WorkingFiles();
+ ~WorkingFiles();
- void CloseFilesInDirectory(const std::vector<Directory>&);
- std::shared_ptr<WorkingFile> OnOpen(lsTextDocumentItem& open);
- std::shared_ptr<WorkingFile> OnChange(const lsTextDocumentDidChangeParams& change);
- bool OnClose(const lsTextDocumentIdentifier& close);
- std::shared_ptr<WorkingFile> OnSave(const lsTextDocumentIdentifier& _save);
+ void CloseFilesInDirectory(std::vector<Directory> const&);
+ std::shared_ptr<WorkingFile> OnOpen(lsTextDocumentItem& open);
+ std::shared_ptr<WorkingFile> OnChange(lsTextDocumentDidChangeParams const& change);
+ bool OnClose(lsTextDocumentIdentifier const& close);
+ std::shared_ptr<WorkingFile> OnSave(lsTextDocumentIdentifier const& _save);
- bool GetFileBufferContent(const AbsolutePath& filename, std::wstring& out)
- {
- auto file = GetFileByFilename(filename);
- if(!file)
- return false;
+ bool GetFileBufferContent(AbsolutePath const& filename, std::wstring& out)
+ {
+ auto file = GetFileByFilename(filename);
+ if (!file)
+ {
+ return false;
+ }
+ return GetFileBufferContent(file, out);
+ }
+ bool GetFileBufferContent(AbsolutePath const& filename, std::string& out)
+ {
+ auto file = GetFileByFilename(filename);
+ if (!file)
+ {
+ return false;
+ }
return GetFileBufferContent(file, out);
- }
- bool GetFileBufferContent(const AbsolutePath& filename,std::string& out)
- {
- auto file = GetFileByFilename(filename);
- if (!file)
- return false;
- return GetFileBufferContent(file, out);
- }
- bool GetFileBufferContent(std::shared_ptr<WorkingFile>&, std::string& out);
- bool GetFileBufferContent(std::shared_ptr<WorkingFile>&, std::wstring& out);
+ }
+ bool GetFileBufferContent(std::shared_ptr<WorkingFile>&, std::string& out);
+ bool GetFileBufferContent(std::shared_ptr<WorkingFile>&, std::wstring& out);
+ // Find the file with the given filename.
+ std::shared_ptr<WorkingFile> GetFileByFilename(AbsolutePath const& filename);
- // Find the file with the given filename.
- std::shared_ptr<WorkingFile> GetFileByFilename(const AbsolutePath& filename);
+ void Clear();
- void Clear();
private:
- std::shared_ptr<WorkingFile> GetFileByFilenameNoLock(const AbsolutePath& filename);
-
- WorkingFilesData* d_ptr;
-
+ std::shared_ptr<WorkingFile> GetFileByFilenameNoLock(AbsolutePath const& filename);
+ WorkingFilesData* d_ptr;
};
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/applyEdit.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/applyEdit.h
index eb1f250b2f..4ee08a2358 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/applyEdit.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/applyEdit.h
@@ -6,37 +6,36 @@
#include "LibLsp/lsp/lsDocumentUri.h"
#include "LibLsp/lsp/lsWorkspaceEdit.h"
-struct ApplyWorkspaceEditParams
+struct ApplyWorkspaceEditParams
{
- /**
+ /**
* The edits to apply.
*/
- lsWorkspaceEdit edit;
+ lsWorkspaceEdit 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.
*/
- std::string label;
+ std::string label;
- MAKE_SWAP_METHOD(ApplyWorkspaceEditParams, edit, label)
+ MAKE_SWAP_METHOD(ApplyWorkspaceEditParams, edit, label)
};
/**
* The workspace/applyEdit request is sent from the server to the client to modify resource on the client side.
*/
MAKE_REFLECT_STRUCT(ApplyWorkspaceEditParams, edit, label);
-
-
-struct ApplyWorkspaceEditResponse
+struct ApplyWorkspaceEditResponse
{
- bool applied;
- optional<std::string> failureReason;
- MAKE_SWAP_METHOD(ApplyWorkspaceEditResponse, applied, failureReason)
+ bool applied;
+ optional<std::string> failureReason;
+ MAKE_SWAP_METHOD(ApplyWorkspaceEditResponse, applied, failureReason)
};
MAKE_REFLECT_STRUCT(ApplyWorkspaceEditResponse, applied, failureReason);
-
-DEFINE_REQUEST_RESPONSE_TYPE(WorkspaceApply, ApplyWorkspaceEditParams, ApplyWorkspaceEditResponse, "workspace/applyEdit");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ WorkspaceApply, ApplyWorkspaceEditParams, ApplyWorkspaceEditResponse, "workspace/applyEdit"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/configuration.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/configuration.h
index ad22bf0185..c545fb04ae 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/configuration.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/configuration.h
@@ -5,24 +5,24 @@
#include "LibLsp/lsp/lsDocumentUri.h"
-
-struct ConfigurationItem {
- /**
+struct ConfigurationItem
+{
+ /**
* The scope to get the configuration section for.
*/
- lsDocumentUri scopeUri;
+ lsDocumentUri scopeUri;
- /**
+ /**
* The configuration section asked for.
*/
- std::string section;
- MAKE_SWAP_METHOD(ConfigurationItem, scopeUri, section);
+ std::string section;
+ MAKE_SWAP_METHOD(ConfigurationItem, scopeUri, section);
};
MAKE_REFLECT_STRUCT(ConfigurationItem, scopeUri, section);
struct ConfigurationParams
{
- std::vector<ConfigurationItem> items;
- MAKE_SWAP_METHOD(ConfigurationParams, items)
+ std::vector<ConfigurationItem> items;
+ MAKE_SWAP_METHOD(ConfigurationParams, items)
};
MAKE_REFLECT_STRUCT(ConfigurationParams, items);
@@ -34,4 +34,6 @@ MAKE_REFLECT_STRUCT(ConfigurationParams, items);
* order of the passed ConfigurationItems (e.g. the first item in the response is the
* result for the first configuration item in the params).
*/
-DEFINE_REQUEST_RESPONSE_TYPE(WorkspaceConfiguration, ConfigurationParams,std::vector<lsp::Any>, "workspace/configuration");
+DEFINE_REQUEST_RESPONSE_TYPE(
+ WorkspaceConfiguration, ConfigurationParams, std::vector<lsp::Any>, "workspace/configuration"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/didChangeWorkspaceFolders.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/didChangeWorkspaceFolders.h
index 1c6cd83b62..ee1f9b10eb 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/didChangeWorkspaceFolders.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/didChangeWorkspaceFolders.h
@@ -4,35 +4,35 @@
/**
* The workspace folder change event.
*/
-struct WorkspaceFoldersChangeEvent {
- /**
+struct WorkspaceFoldersChangeEvent
+{
+ /**
* The array of added workspace folders
*/
- std::vector<WorkspaceFolder> added;
+ std::vector<WorkspaceFolder> added;
- /**
+ /**
* The array of the removed workspace folders
*/
- std::vector <WorkspaceFolder> removed;
- MAKE_SWAP_METHOD(WorkspaceFoldersChangeEvent, added, removed);
-
+ std::vector<WorkspaceFolder> removed;
+ MAKE_SWAP_METHOD(WorkspaceFoldersChangeEvent, added, removed);
};
MAKE_REFLECT_STRUCT(WorkspaceFoldersChangeEvent, added, removed);
-struct DidChangeWorkspaceFoldersParams {
- /**
+struct DidChangeWorkspaceFoldersParams
+{
+ /**
* The actual workspace folder change event.
*/
- WorkspaceFoldersChangeEvent event;
+ WorkspaceFoldersChangeEvent event;
- MAKE_SWAP_METHOD(DidChangeWorkspaceFoldersParams, event);
+ MAKE_SWAP_METHOD(DidChangeWorkspaceFoldersParams, event);
};
MAKE_REFLECT_STRUCT(DidChangeWorkspaceFoldersParams, event);
-
/**
* The workspace/didChangeWorkspaceFolders notification is sent from the client
* to the server to inform the server about workspace folder configuration changes.
@@ -40,9 +40,6 @@ MAKE_REFLECT_STRUCT(DidChangeWorkspaceFoldersParams, event);
* and ClientCapabilities/workspace/workspaceFolders are true; or if the server has
* registered to receive this notification it first.
*/
-DEFINE_NOTIFICATION_TYPE(Notify_WorkspaceDidChangeWorkspaceFolders,
- DidChangeWorkspaceFoldersParams, "workspace/didChangeWorkspaceFolders");
-
-
-
-
+DEFINE_NOTIFICATION_TYPE(
+ Notify_WorkspaceDidChangeWorkspaceFolders, DidChangeWorkspaceFoldersParams, "workspace/didChangeWorkspaceFolders"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_configuration.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_configuration.h
index 3e7ca6dded..c67da825da 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_configuration.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_configuration.h
@@ -2,18 +2,15 @@
#include "LibLsp/JsonRpc/NotificationInMessage.h"
-
#include "workspaceFolders.h"
-
-
-
-struct lsDidChangeConfigurationParams {
- /**
+struct lsDidChangeConfigurationParams
+{
+ /**
* The actual changed settings.
*/
- lsp::Any settings;
- MAKE_SWAP_METHOD(lsDidChangeConfigurationParams, settings);
+ lsp::Any settings;
+ MAKE_SWAP_METHOD(lsDidChangeConfigurationParams, settings);
};
MAKE_REFLECT_STRUCT(lsDidChangeConfigurationParams, settings);
@@ -22,4 +19,6 @@ MAKE_REFLECT_STRUCT(lsDidChangeConfigurationParams, settings);
* A notification sent from the client to the server to signal the change of
* configuration settings.
*/
-DEFINE_NOTIFICATION_TYPE(Notify_WorkspaceDidChangeConfiguration, lsDidChangeConfigurationParams, "workspace/didChangeConfiguration");
+DEFINE_NOTIFICATION_TYPE(
+ Notify_WorkspaceDidChangeConfiguration, lsDidChangeConfigurationParams, "workspace/didChangeConfiguration"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_watched_files.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_watched_files.h
index c14a7e0eda..33fa5ac55d 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_watched_files.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_watched_files.h
@@ -2,13 +2,14 @@
#include "LibLsp/JsonRpc/NotificationInMessage.h"
#include "LibLsp/lsp/lsDocumentUri.h"
-enum class lsFileChangeType {
- Created = 1,
- Changed = 2,
- Deleted = 3,
+enum class lsFileChangeType
+{
+ Created = 1,
+ Changed = 2,
+ Deleted = 3,
};
-#ifdef _WIN32
+#ifdef _WIN32
MAKE_REFLECT_TYPE_PROXY(lsFileChangeType);
#else
//#pragma clang diagnostic push
@@ -17,25 +18,26 @@ MAKE_REFLECT_TYPE_PROXY(lsFileChangeType);
//#pragma clang diagnostic pop
#endif
-
/**
* An event describing a file change.
*/
-struct lsFileEvent {
- lsDocumentUri uri;
- lsFileChangeType type;
+struct lsFileEvent
+{
+ lsDocumentUri uri;
+ lsFileChangeType type;
- MAKE_SWAP_METHOD(lsFileEvent, uri, type)
+ MAKE_SWAP_METHOD(lsFileEvent, uri, type)
};
MAKE_REFLECT_STRUCT(lsFileEvent, uri, type);
-struct lsDidChangeWatchedFilesParams {
- std::vector<lsFileEvent> changes;
- MAKE_SWAP_METHOD(lsDidChangeWatchedFilesParams, changes);
+struct lsDidChangeWatchedFilesParams
+{
+ std::vector<lsFileEvent> changes;
+ MAKE_SWAP_METHOD(lsDidChangeWatchedFilesParams, changes);
};
MAKE_REFLECT_STRUCT(lsDidChangeWatchedFilesParams, changes);
- /**
+/**
* The workspace/didChangeWorkspaceFolders notification is sent from the client
* to the server to inform the server about workspace folder configuration changes.
* The notification is sent by default if both ServerCapabilities/workspaceFolders
@@ -43,4 +45,6 @@ MAKE_REFLECT_STRUCT(lsDidChangeWatchedFilesParams, changes);
* registered to receive this notification it first.
*/
-DEFINE_NOTIFICATION_TYPE(Notify_WorkspaceDidChangeWatchedFiles, lsDidChangeWatchedFilesParams, "workspace/didChangeWatchedFiles");
+DEFINE_NOTIFICATION_TYPE(
+ Notify_WorkspaceDidChangeWatchedFiles, lsDidChangeWatchedFilesParams, "workspace/didChangeWatchedFiles"
+);
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/execute_command.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/execute_command.h
index c656ee5ef7..3132ce82d4 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/execute_command.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/execute_command.h
@@ -7,8 +7,6 @@
#include "LibLsp/JsonRpc/NotificationInMessage.h"
-
-
/**
* The workspace/executeCommand request is sent from the client to the
* server to trigger command execution on the server. In most cases the
@@ -20,5 +18,4 @@
*/
DEFINE_REQUEST_RESPONSE_TYPE(wp_executeCommand, ExecuteCommandParams, lsp::Any, "workspace/executeCommand");
-
-DEFINE_NOTIFICATION_TYPE(Notify_sendNotification, ExecuteCommandParams, "workspace/notify") \ No newline at end of file
+DEFINE_NOTIFICATION_TYPE(Notify_sendNotification, ExecuteCommandParams, "workspace/notify")
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/symbol.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/symbol.h
index 129fb5e822..0b64270329 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/symbol.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/symbol.h
@@ -13,4 +13,3 @@
*/
DEFINE_REQUEST_RESPONSE_TYPE(wp_symbol, WorkspaceSymbolParams, std::vector<lsSymbolInformation>, "workspace/symbol");
-
diff --git a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/workspaceFolders.h b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/workspaceFolders.h
index 136c1d777b..159a239eaf 100644
--- a/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/workspaceFolders.h
+++ b/graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/workspaceFolders.h
@@ -4,23 +4,23 @@
#include "LibLsp/JsonRpc/lsResponseMessage.h"
#include "LibLsp/lsp/lsDocumentUri.h"
-struct WorkspaceFolder {
- /**
+struct WorkspaceFolder
+{
+ /**
* The associated URI for this workspace folder.
*/
- lsDocumentUri uri;
+ lsDocumentUri uri;
- /**
+ /**
* The name of the workspace folder. Defaults to the uri's basename.
*/
- std::string name;
+ std::string name;
- MAKE_SWAP_METHOD(WorkspaceFolder, uri, name)
+ MAKE_SWAP_METHOD(WorkspaceFolder, uri, name)
};
MAKE_REFLECT_STRUCT(WorkspaceFolder, uri, name);
-
/**
* The workspace/workspaceFolders request is sent from the server to the client
* to fetch the current open list of workspace folders.
@@ -29,6 +29,6 @@ MAKE_REFLECT_STRUCT(WorkspaceFolder, uri, name);
* an empty array if a workspace is open but no folders are configured,
* the workspace folders otherwise.
*/
-DEFINE_REQUEST_RESPONSE_TYPE(WorkspaceFolders,
- optional<JsonNull>, optional<std::vector< WorkspaceFolder>>, "workspace/workspaceFolders");
-
+DEFINE_REQUEST_RESPONSE_TYPE(
+ WorkspaceFolders, optional<JsonNull>, optional<std::vector<WorkspaceFolder>>, "workspace/workspaceFolders"
+);