diff options
| author | Yong He <yonghe@outlook.com> | 2022-06-08 11:54:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-08 11:54:27 -0700 |
| commit | 1146920bc9ed9bef2b5bb91b3cdec4700eb09881 (patch) | |
| tree | e8d94a3aad0d204f7c33f38b42b9e03d862cc3c8 /source/compiler-core | |
| parent | ff2ae7e0c1b48fa222f14dc84f15d0178ed056a1 (diff) | |
Add smoke test for language server. (#2266)
Diffstat (limited to 'source/compiler-core')
| -rw-r--r-- | source/compiler-core/slang-json-native.cpp | 2 | ||||
| -rw-r--r-- | source/compiler-core/slang-language-server-protocol.cpp | 475 | ||||
| -rw-r--r-- | source/compiler-core/slang-language-server-protocol.h | 634 |
3 files changed, 1110 insertions, 1 deletions
diff --git a/source/compiler-core/slang-json-native.cpp b/source/compiler-core/slang-json-native.cpp index d268fffc2..c7a90df4c 100644 --- a/source/compiler-core/slang-json-native.cpp +++ b/source/compiler-core/slang-json-native.cpp @@ -308,7 +308,7 @@ SlangResult NativeToJSONConverter::_structToJSON(const StructRttiInfo* structRtt // Do the super class first if (structRttiInfo->m_super) { - SLANG_RETURN_ON_FAIL(_structToJSON(structRttiInfo, src, outPairs)); + SLANG_RETURN_ON_FAIL(_structToJSON(structRttiInfo->m_super, src, outPairs)); } const Byte* base = (const Byte*)src; diff --git a/source/compiler-core/slang-language-server-protocol.cpp b/source/compiler-core/slang-language-server-protocol.cpp new file mode 100644 index 000000000..3e8907b9a --- /dev/null +++ b/source/compiler-core/slang-language-server-protocol.cpp @@ -0,0 +1,475 @@ +#include "slang-language-server-protocol.h" + +namespace Slang +{ +namespace LanguageServerProtocol +{ +static const StructRttiInfo _makeTextDocumentSyncOptionsRtti() +{ + TextDocumentSyncOptions obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextDocumentSyncOptions", nullptr); + builder.addField("change", &obj.change); + builder.addField("openClose", &obj.openClose); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextDocumentSyncOptions::g_rttiInfo = _makeTextDocumentSyncOptionsRtti(); + +static const StructRttiInfo _makeWorkDoneProgressParamsRtti() +{ + WorkDoneProgressParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::WorkDoneProgressParams", nullptr); + builder.addField("workDoneToken", &obj.workDoneToken, StructRttiInfo::Flag::Optional); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo WorkDoneProgressParams::g_rttiInfo = _makeWorkDoneProgressParamsRtti(); + +static const StructRttiInfo _makeCompletionOptionsRtti() +{ + CompletionOptions obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::CompletionOptions", &WorkDoneProgressParams::g_rttiInfo); + builder.addField("triggerCharacters", &obj.triggerCharacters); + builder.addField("resolveProvider", &obj.resolveProvider); + builder.addField("allCommitCharacters", &obj.allCommitCharacters); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo CompletionOptions::g_rttiInfo = _makeCompletionOptionsRtti(); + +static const StructRttiInfo _makeSemanticTokensLegendRtti() +{ + SemanticTokensLegend obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SemanticTokensLegend", nullptr); + builder.addField("tokenTypes", &obj.tokenTypes); + builder.addField("tokenModifiers", &obj.tokenModifiers); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SemanticTokensLegend::g_rttiInfo = _makeSemanticTokensLegendRtti(); + +static const StructRttiInfo _makeSemanticTokensOptionsRtti() +{ + SemanticTokensOptions obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SemanticTokensOptions", nullptr); + builder.addField("legend", &obj.legend); + builder.addField("range", &obj.range); + builder.addField("full", &obj.full); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SemanticTokensOptions::g_rttiInfo = _makeSemanticTokensOptionsRtti(); + +static const StructRttiInfo _makeSignatureHelpOptionsRtti() +{ + SignatureHelpOptions obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SignatureHelpOptions", nullptr); + builder.addField("triggerCharacters", &obj.triggerCharacters); + builder.addField("retriggerCharacters", &obj.retriggerCharacters); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SignatureHelpOptions::g_rttiInfo = _makeSignatureHelpOptionsRtti(); + +static const StructRttiInfo _makeTextDocumentItemRtti() +{ + TextDocumentItem obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextDocumentItem", nullptr); + builder.addField("uri", &obj.uri); + builder.addField("version", &obj.version); + builder.addField("languageId", &obj.languageId); + builder.addField("text", &obj.text); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextDocumentItem::g_rttiInfo = _makeTextDocumentItemRtti(); + +static const StructRttiInfo _makeTextDocumentIdentifierRtti() +{ + TextDocumentIdentifier obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextDocumentIdentifier", nullptr); + builder.addField("uri", &obj.uri); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextDocumentIdentifier::g_rttiInfo = _makeTextDocumentIdentifierRtti(); + +static const StructRttiInfo _makeVersionedTextDocumentIdentifierRtti() +{ + VersionedTextDocumentIdentifier obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::VersionedTextDocumentIdentifier", nullptr); + builder.addField("uri", &obj.uri); + builder.addField("version", &obj.version); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo VersionedTextDocumentIdentifier::g_rttiInfo = + _makeVersionedTextDocumentIdentifierRtti(); + +static const StructRttiInfo _makePositionRtti() +{ + Position obj; + StructRttiBuilder builder( + &obj, "LanguageServerProtocol::Position", nullptr); + builder.addField("line", &obj.line); + builder.addField("character", &obj.character); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo Position::g_rttiInfo = _makePositionRtti(); + +static const StructRttiInfo _makeRangeRtti() +{ + Range obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::Range", nullptr); + builder.addField("start", &obj.start); + builder.addField("end", &obj.end); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo Range::g_rttiInfo = _makeRangeRtti(); + +static const StructRttiInfo _makeDidOpenTextDocumentRtti() +{ + DidOpenTextDocumentParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::DidOpenTextDocumentParams", nullptr); + builder.addField("textDocument", &obj.textDocument); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo DidOpenTextDocumentParams::g_rttiInfo = _makeDidOpenTextDocumentRtti(); +const UnownedStringSlice DidOpenTextDocumentParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/didOpen"); + +static const StructRttiInfo _makeTextDocumentContentChangeEventRtti() +{ + TextDocumentContentChangeEvent obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextDocumentContentChangeEvent", nullptr); + builder.addField("range", &obj.range, StructRttiInfo::Flag::Optional); + builder.addField("text", &obj.text); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextDocumentContentChangeEvent::g_rttiInfo = + _makeTextDocumentContentChangeEventRtti(); + +static const StructRttiInfo _makeDidChangeTextDocumentParamsRtti() +{ + DidChangeTextDocumentParams obj; + StructRttiBuilder builder( + &obj, "LanguageServerProtocol::DidChangeTextDocumentParams", nullptr); + builder.addField("textDocument", &obj.textDocument); + builder.addField("contentChanges", &obj.contentChanges); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo DidChangeTextDocumentParams::g_rttiInfo = + _makeDidChangeTextDocumentParamsRtti(); +const UnownedStringSlice DidChangeTextDocumentParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/didChange"); + + +static const StructRttiInfo _makeDidCloseTextDocumentParamsRtti() +{ + DidCloseTextDocumentParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::DidCloseTextDocumentParams", nullptr); + builder.addField("textDocument", &obj.textDocument); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo DidCloseTextDocumentParams::g_rttiInfo = _makeDidCloseTextDocumentParamsRtti(); +const UnownedStringSlice DidCloseTextDocumentParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/didClose"); + +static const StructRttiInfo _makeServerCapabilitiesRtti() +{ + ServerCapabilities obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::ServerCapabilities", nullptr); + builder.addField("positionEncoding", &obj.positionEncoding); + builder.addField("textDocumentSync", &obj.textDocumentSync); + builder.addField("hoverProvider", &obj.hoverProvider); + builder.addField("definitionProvider", &obj.definitionProvider); + builder.addField("completionProvider", &obj.completionProvider); + builder.addField("semanticTokensProvider", &obj.semanticTokensProvider); + builder.addField("signatureHelpProvider", &obj.signatureHelpProvider); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo ServerCapabilities::g_rttiInfo = _makeServerCapabilitiesRtti(); + +static const StructRttiInfo _makeServerInfoRtti() +{ + ServerInfo obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::ServerInfo", nullptr); + builder.addField("name", &obj.name); + builder.addField("version", &obj.version); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo ServerInfo::g_rttiInfo = _makeServerInfoRtti(); + + +static const StructRttiInfo _makeInitializeResultRtti() +{ + InitializeResult obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::InitializeResult", nullptr); + builder.addField("capabilities", &obj.capabilities); + builder.addField("serverInfo", &obj.serverInfo); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo InitializeResult::g_rttiInfo = _makeInitializeResultRtti(); + +const UnownedStringSlice InitializeParams::methodName = + UnownedStringSlice::fromLiteral("initialize"); + +const UnownedStringSlice ShutdownParams::methodName = UnownedStringSlice::fromLiteral("shutdown"); + +const UnownedStringSlice ExitParams::methodName = UnownedStringSlice::fromLiteral("exit"); + +static const StructRttiInfo _makeWorkspaceFolderRtti() +{ + WorkspaceFolder obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::WorkspaceFolder", nullptr); + builder.addField("uri", &obj.uri); + builder.addField("name", &obj.name); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo WorkspaceFolder::g_rttiInfo = _makeWorkspaceFolderRtti(); + +static const StructRttiInfo _makeInitializeParamsRtti() +{ + InitializeParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::InitializeParams", nullptr); + builder.addField("workspaceFolders", &obj.workspaceFolders, StructRttiInfo::Flag::Optional); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo InitializeParams::g_rttiInfo = _makeInitializeParamsRtti(); + +static const StructRttiInfo _makeNullResponseRtti() +{ + NullResponse obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::NullResponse", nullptr); + return builder.make(); +} +const StructRttiInfo NullResponse::g_rttiInfo = _makeNullResponseRtti(); + +NullResponse* NullResponse::get() +{ + static NullResponse result = {}; + return &result; +} + +static const StructRttiInfo _makeLocationRtti() +{ + Location obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::Location", nullptr); + builder.addField("uri", &obj.uri); + builder.addField("range", &obj.range); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo Location::g_rttiInfo = _makeLocationRtti(); + +static const StructRttiInfo _makeDiagnosticRelatedInformationRtti() +{ + DiagnosticRelatedInformation obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::DiagnosticRelatedInformation", nullptr); + builder.addField("location", &obj.location); + builder.addField("message", &obj.message); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo DiagnosticRelatedInformation::g_rttiInfo = + _makeDiagnosticRelatedInformationRtti(); + +static const StructRttiInfo _makeDiagnosticRtti() +{ + Diagnostic obj; + StructRttiBuilder builder( + &obj, "LanguageServerProtocol::Diagnostic", nullptr); + builder.addField("code", &obj.code); + builder.addField("message", &obj.message); + builder.addField("range", &obj.range); + builder.addField("relatedInformation", &obj.relatedInformation); + builder.addField("severity", &obj.severity); + builder.addField("source", &obj.source); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo Diagnostic::g_rttiInfo = _makeDiagnosticRtti(); + +static const StructRttiInfo _makePublishDiagnosticsParamsRtti() +{ + PublishDiagnosticsParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::PublishDiagnosticsParams", nullptr); + builder.addField("uri", &obj.uri); + builder.addField("diagnostics", &obj.diagnostics); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo PublishDiagnosticsParams::g_rttiInfo = _makePublishDiagnosticsParamsRtti(); + +static const StructRttiInfo _makeTextDocumentPositionParamsRtti() +{ + TextDocumentPositionParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextDocumentPositionParams", nullptr); + builder.addField("textDocument", &obj.textDocument); + builder.addField("position", &obj.position); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextDocumentPositionParams::g_rttiInfo = _makeTextDocumentPositionParamsRtti(); + +static const StructRttiInfo _makeHoverParamsRtti() +{ + HoverParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::HoverParams", &WorkDoneProgressParams::g_rttiInfo); + builder.addField("textDocument", &obj.textDocument); + builder.addField("position", &obj.position); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo HoverParams::g_rttiInfo = _makeHoverParamsRtti(); +const UnownedStringSlice HoverParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/hover"); + +static const StructRttiInfo _makeMarkupContentRtti() +{ + MarkupContent obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::MarkupContent", nullptr); + builder.addField("kind", &obj.kind); + builder.addField("value", &obj.value); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo MarkupContent::g_rttiInfo = _makeMarkupContentRtti(); + +static const StructRttiInfo _makeHoverRtti() +{ + Hover obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::Hover", nullptr); + builder.addField("contents", &obj.contents); + builder.addField("range", &obj.range); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo Hover::g_rttiInfo = _makeHoverRtti(); + +static const StructRttiInfo _makeDefinitionParamsRtti() +{ + DefinitionParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::DefinitionParams", &WorkDoneProgressParams::g_rttiInfo); + builder.addField("textDocument", &obj.textDocument); + builder.addField("position", &obj.position); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo DefinitionParams::g_rttiInfo = _makeDefinitionParamsRtti(); +const UnownedStringSlice DefinitionParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/definition"); + +static const StructRttiInfo _makeCompletionParamsRtti() +{ + CompletionParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::CompletionParams", &WorkDoneProgressParams::g_rttiInfo); + builder.addField("textDocument", &obj.textDocument); + builder.addField("position", &obj.position); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo CompletionParams::g_rttiInfo = _makeCompletionParamsRtti(); +const UnownedStringSlice CompletionParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/completion"); + +static const StructRttiInfo _makeCompletionItemRtti() +{ + CompletionItem obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::CompletionItem", nullptr); + builder.addField("label", &obj.label, StructRttiInfo::Flag::Optional); + builder.addField("detail", &obj.detail, StructRttiInfo::Flag::Optional); + builder.addField("kind", &obj.kind, StructRttiInfo::Flag::Optional); + builder.addField("documentation", &obj.documentation, StructRttiInfo::Flag::Optional); + builder.addField("data", &obj.data, StructRttiInfo::Flag::Optional); + builder.addField("commitCharacters", &obj.commitCharacters, StructRttiInfo::Flag::Optional); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo CompletionItem::g_rttiInfo = _makeCompletionItemRtti(); + +static const StructRttiInfo _makeSemanticTokensParamsRtti() +{ + SemanticTokensParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SemanticTokensParams", &WorkDoneProgressParams::g_rttiInfo); + builder.addField("textDocument", &obj.textDocument); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SemanticTokensParams::g_rttiInfo = _makeSemanticTokensParamsRtti(); +const UnownedStringSlice SemanticTokensParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/semanticTokens/full"); + +static const StructRttiInfo _makeSemanticTokensRtti() +{ + SemanticTokens obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SemanticTokens", nullptr); + builder.addField("resultId", &obj.resultId); + builder.addField("data", &obj.data); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SemanticTokens::g_rttiInfo = _makeSemanticTokensRtti(); + +static const StructRttiInfo _makeSignatureHelpParamsRtti() +{ + SignatureHelpParams obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SignatureHelpParams", &WorkDoneProgressParams::g_rttiInfo); + builder.addField("textDocument", &obj.textDocument); + builder.addField("position", &obj.position); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SignatureHelpParams::g_rttiInfo = _makeSignatureHelpParamsRtti(); +const UnownedStringSlice SignatureHelpParams::methodName = + UnownedStringSlice::fromLiteral("textDocument/signatureHelp"); + +static const StructRttiInfo _makeParameterInformationRtti() +{ + ParameterInformation obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::ParameterInformation", nullptr); + builder.addField("label", &obj.label); + builder.addField("documentation", &obj.documentation, StructRttiInfo::Flag::Optional); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo ParameterInformation::g_rttiInfo = _makeParameterInformationRtti(); + +static const StructRttiInfo _makeSignatureInformationRtti() +{ + SignatureInformation obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SignatureInformation", nullptr); + builder.addField("label", &obj.label); + builder.addField("parameters", &obj.parameters); + builder.addField("documentation", &obj.documentation, StructRttiInfo::Flag::Optional); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SignatureInformation::g_rttiInfo = _makeSignatureInformationRtti(); + +static const StructRttiInfo _makeSignatureHelpRtti() +{ + SignatureHelp obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::SignatureHelp", nullptr); + builder.addField("signatures", &obj.signatures); + builder.addField("activeParameter", &obj.activeParameter); + builder.addField("activeSignature", &obj.activeSignature); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo SignatureHelp::g_rttiInfo = _makeSignatureHelpRtti(); + +} // namespace LanguageServerProtocol + +} diff --git a/source/compiler-core/slang-language-server-protocol.h b/source/compiler-core/slang-language-server-protocol.h new file mode 100644 index 000000000..a23ba0130 --- /dev/null +++ b/source/compiler-core/slang-language-server-protocol.h @@ -0,0 +1,634 @@ +#pragma once + +#include "../../slang-com-helper.h" +#include "../../slang-com-ptr.h" +#include "../../slang.h" + +#include "../../source/core/slang-rtti-info.h" +#include "../../source/compiler-core/slang-json-value.h" + +namespace Slang +{ +namespace LanguageServerProtocol +{ +struct ServerInfo +{ + String name; + String version; + + static const StructRttiInfo g_rttiInfo; +}; + +enum class TextDocumentSyncKind +{ + None = 0, + Full = 1, + Incremental = 2 +}; + +struct TextDocumentSyncOptions +{ + bool openClose; + int32_t change; // TextDocumentSyncKind + static const StructRttiInfo g_rttiInfo; +}; + +struct WorkDoneProgressParams +{ + /** + * An optional token that a server can use to report work done progress. + */ + String workDoneToken; // optional + + static const StructRttiInfo g_rttiInfo; +}; + +struct CompletionOptions : public WorkDoneProgressParams +{ + /** + * 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`. + */ + List<String> triggerCharacters; + + /** + * The list of all possible characters that commit a completion. This field + * can be used if clients don't support individual commit characters per + * completion item. See client capability + * `completion.completionItem.commitCharactersSupport`. + * + * If a server provides both `allCommitCharacters` and commit characters on + * an individual completion item the ones on the completion item win. + * + * @since 3.2.0 + */ + List<String> allCommitCharacters; + + /** + * The server provides support to resolve additional + * information for a completion item. + */ + bool resolveProvider; + + static const StructRttiInfo g_rttiInfo; +}; + +struct SemanticTokensLegend +{ + /** + * The token types a server uses. + */ + List<String> tokenTypes; + + /** + * The token modifiers a server uses. + */ + List<String> tokenModifiers; + + static const StructRttiInfo g_rttiInfo; +}; + + +struct SemanticTokensOptions +{ + /** + * The legend used by the server + */ + SemanticTokensLegend legend; + + /** + * Server supports providing semantic tokens for a specific range + * of a document. + */ + bool range; + + /** + * Server supports providing semantic tokens for a full document. + */ + bool full; + + static const StructRttiInfo g_rttiInfo; +}; + +struct SignatureHelpOptions +{ + /** + * The characters that trigger signature help + * automatically. + */ + List<String> triggerCharacters; + + /** + * List of characters that re-trigger signature help. + * + * These trigger characters are only active when signature help is already + * showing. All trigger characters are also counted as re-trigger + * characters. + * + * @since 3.15.0 + */ + List<String> retriggerCharacters; + + static const StructRttiInfo g_rttiInfo; +}; + +struct TextDocumentItem +{ + String uri; + String languageId; + int version; + String text; + static const StructRttiInfo g_rttiInfo; +}; + +struct TextDocumentIdentifier +{ + String uri; + static const StructRttiInfo g_rttiInfo; +}; + +struct VersionedTextDocumentIdentifier +{ + String uri; + int version; + static const StructRttiInfo g_rttiInfo; +}; + +struct Position +{ + int line = -1; + int character = -1; + static const StructRttiInfo g_rttiInfo; +}; + +struct Range +{ + Position start; + Position end; + static const StructRttiInfo g_rttiInfo; +}; + +struct DidOpenTextDocumentParams +{ + TextDocumentItem textDocument; + static const StructRttiInfo g_rttiInfo; + static const UnownedStringSlice methodName; +}; + +struct TextDocumentContentChangeEvent +{ + Range range; // optional + String text; + static const StructRttiInfo g_rttiInfo; +}; + +struct DidChangeTextDocumentParams +{ + VersionedTextDocumentIdentifier textDocument; + List<TextDocumentContentChangeEvent> contentChanges; + static const StructRttiInfo g_rttiInfo; + static const UnownedStringSlice methodName; +}; + +struct DidCloseTextDocumentParams +{ + TextDocumentIdentifier textDocument; + static const StructRttiInfo g_rttiInfo; + static const UnownedStringSlice methodName; +}; + +struct ServerCapabilities +{ + String positionEncoding; + TextDocumentSyncOptions textDocumentSync; + bool hoverProvider; + bool definitionProvider; + CompletionOptions completionProvider; + SemanticTokensOptions semanticTokensProvider; + SignatureHelpOptions signatureHelpProvider; + static const StructRttiInfo g_rttiInfo; +}; + +struct WorkspaceFolder +{ + String uri; + String name; + static const StructRttiInfo g_rttiInfo; +}; + +struct InitializeParams +{ + List<WorkspaceFolder> workspaceFolders; + static const UnownedStringSlice methodName; + static const StructRttiInfo g_rttiInfo; +}; + +struct NullResponse +{ + static const StructRttiInfo g_rttiInfo; + static NullResponse* get(); +}; + +struct InitializeResult +{ + ServerCapabilities capabilities; + ServerInfo serverInfo; + + static const StructRttiInfo g_rttiInfo; +}; + +struct ShutdownParams { + static const UnownedStringSlice methodName; +}; + +struct ExitParams { + static const UnownedStringSlice methodName; +}; + +typedef uint32_t DiagnosticSeverity; +/** + * Reports an error. + */ +const DiagnosticSeverity kDiagnosticsSeverityError = 1; +/** + * Reports a warning. + */ +const DiagnosticSeverity kDiagnosticsSeverityWarning = 2; +/** + * Reports an information. + */ +const DiagnosticSeverity kDiagnosticsSeverityInformation = 3; +/** + * Reports a hint. + */ +const DiagnosticSeverity kDiagnosticsSeverityHint = 4; + + +struct Location +{ + String uri; + Range range; + static const StructRttiInfo g_rttiInfo; +}; + +struct DiagnosticRelatedInformation +{ + /** + * The location of this related diagnostic information. + */ + Location location; + + /** + * The message of this related diagnostic information. + */ + String message; + + static const StructRttiInfo g_rttiInfo; +}; + +struct Diagnostic +{ + /** + * The range at which the message applies. + */ + Range 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. + */ + DiagnosticSeverity severity; + + /** + * The diagnostic's code, which might appear in the user interface. + */ + int32_t code; + + /** + * A human-readable string describing the source of this + * diagnostic, e.g. 'typescript' or 'super lint'. + */ + String source; + + /** + * The diagnostic's message. + */ + String message; + + /** + * An array of related diagnostic information, e.g. when symbol-names within + * a scope collide all definitions can be marked via this property. + */ + List<DiagnosticRelatedInformation> relatedInformation; + + bool operator==(const Diagnostic& other) const + { + return code == other.code && range.start.line == other.range.start.line && + message == other.message; + } + + HashCode getHashCode() const + { + return combineHash( + code, combineHash(range.start.line, message.getHashCode())); + } + + static const StructRttiInfo g_rttiInfo; +}; + +struct PublishDiagnosticsParams +{ + /** + * The URI for which diagnostic information is reported. + */ + String uri; + + /** + * An array of diagnostic information items. + */ + List<Diagnostic> diagnostics; + + static const StructRttiInfo g_rttiInfo; +}; + +struct TextDocumentPositionParams +{ + /** + * The text document. + */ + TextDocumentIdentifier textDocument; + + /** + * The position inside the text document. + */ + Position position; + + static const StructRttiInfo g_rttiInfo; +}; + +struct HoverParams + : WorkDoneProgressParams + ,TextDocumentPositionParams +{ + static const StructRttiInfo g_rttiInfo; + static const UnownedStringSlice methodName; +}; + +struct DefinitionParams + : WorkDoneProgressParams + , TextDocumentPositionParams +{ + static const StructRttiInfo g_rttiInfo; + static const UnownedStringSlice methodName; +}; + +struct MarkupContent +{ + /** + * The type of the Markup + */ + String kind; + + /** + * The content itself + */ + String value; + + static const StructRttiInfo g_rttiInfo; +}; + +struct Hover +{ + /** + * The hover's content + */ + MarkupContent contents; + + /** + * An optional range is a range inside a text document + * that is used to visualize a hover, e.g. by changing the background color. + */ + Range range; + + static const StructRttiInfo g_rttiInfo; +}; + +struct CompletionParams + : WorkDoneProgressParams + , TextDocumentPositionParams +{ + static const StructRttiInfo g_rttiInfo; + static const UnownedStringSlice methodName; +}; + +typedef int32_t CompletionItemKind; +const CompletionItemKind kCompletionItemKindText = 1; +const CompletionItemKind kCompletionItemKindMethod = 2; +const CompletionItemKind kCompletionItemKindFunction = 3; +const CompletionItemKind kCompletionItemKindConstructor = 4; +const CompletionItemKind kCompletionItemKindField = 5; +const CompletionItemKind kCompletionItemKindVariable = 6; +const CompletionItemKind kCompletionItemKindClass = 7; +const CompletionItemKind kCompletionItemKindInterface = 8; +const CompletionItemKind kCompletionItemKindModule = 9; +const CompletionItemKind kCompletionItemKindProperty = 10; +const CompletionItemKind kCompletionItemKindUnit = 11; +const CompletionItemKind kCompletionItemKindValue = 12; +const CompletionItemKind kCompletionItemKindEnum = 13; +const CompletionItemKind kCompletionItemKindKeyword = 14; +const CompletionItemKind kCompletionItemKindSnippet = 15; +const CompletionItemKind kCompletionItemKindColor = 16; +const CompletionItemKind kCompletionItemKindFile = 17; +const CompletionItemKind kCompletionItemKindReference = 18; +const CompletionItemKind kCompletionItemKindFolder = 19; +const CompletionItemKind kCompletionItemKindEnumMember = 20; +const CompletionItemKind kCompletionItemKindConstant = 21; +const CompletionItemKind kCompletionItemKindStruct = 22; +const CompletionItemKind kCompletionItemKindEvent = 23; +const CompletionItemKind kCompletionItemKindOperator = 24; +const CompletionItemKind kCompletionItemKindTypeParameter = 25; + +struct CompletionItem +{ + /** + * The label of this completion item. + * + * The label property is also by default the text that + * is inserted when selecting this completion. + * + * If label details are provided the label itself should + * be an unqualified name of the completion item. + */ + String label; + + /** + * The kind of this completion item. Based of the kind + * an icon is chosen by the editor. The standardized set + * of available values is defined in `CompletionItemKind`. + */ + CompletionItemKind kind; + + /** + * A human-readable string with additional information + * about this item, like type or symbol information. + */ + String detail; + + /** + * A human-readable string that represents a doc-comment. + */ + MarkupContent documentation; + + /** + * 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. + */ + List<String> commitCharacters; + + // Additional data. + String data; + + static const StructRttiInfo g_rttiInfo; +}; + +struct SemanticTokensParams : WorkDoneProgressParams +{ + TextDocumentIdentifier textDocument; + + static const UnownedStringSlice methodName; + + static const StructRttiInfo g_rttiInfo; +}; + + +struct SemanticTokens +{ + /** + * 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. + */ + String resultId; + + /** + * The actual tokens. + */ + List<uint32_t> data; + + static const StructRttiInfo g_rttiInfo; +}; + +struct SignatureHelpParams + : WorkDoneProgressParams + , TextDocumentPositionParams +{ + static const UnownedStringSlice methodName; + + static const StructRttiInfo g_rttiInfo; +}; + +/** + * Represents a parameter of a callable-signature. A parameter can + * have a label and a doc-comment. + */ +struct ParameterInformation +{ + /** + * The label of this parameter information. + * + * Either a string or an inclusive start and exclusive end offsets within + * its containing signature label. (see SignatureInformation.label). The + * offsets are based on a UTF-16 string representation as `Position` and + * `Range` does. + * + * *Note*: a label of type string should be a substring of its containing + * signature label. Its intended use case is to highlight the parameter + * label part in the `SignatureInformation.label`. + */ + uint32_t label[2]; + + /** + * The human-readable doc-comment of this parameter. Will be shown + * in the UI but can be omitted. + */ + MarkupContent documentation; + + static const StructRttiInfo g_rttiInfo; +}; + +/** + * 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 SignatureInformation +{ + /** + * The label of this signature. Will be shown in + * the UI. + */ + String label; + + /** + * The human-readable doc-comment of this signature. Will be shown + * in the UI but can be omitted. + */ + MarkupContent documentation; + + /** + * The parameters of this signature. + */ + List<ParameterInformation> parameters; + + static const StructRttiInfo g_rttiInfo; +}; + +struct SignatureHelp +{ + /** + * One or more signatures. If no signatures are available the signature help + * request should return `null`. + */ + List<SignatureInformation> signatures; + + /** + * The active signature. If omitted or the value lies outside the + * range of `signatures` the value defaults to zero or is ignore if + * the `SignatureHelp` as no signatures. + * + * Whenever possible implementors should make an active decision about + * the active signature and shouldn't rely on a default value. + * + * In future version of the protocol this property might become + * mandatory to better express this. + */ + uint32_t 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 + * mandatory to better express the active parameter if the + * active signature does have any. + */ + uint32_t activeParameter; + + static const StructRttiInfo g_rttiInfo; +}; + + +} // namespace LanguageServerProtocol +} // namespace Slang |
