diff options
Diffstat (limited to 'source/slang')
| -rw-r--r-- | source/slang/slang-check-modifier.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-language-server-protocol.cpp | 481 | ||||
| -rw-r--r-- | source/slang/slang-language-server-protocol.h | 636 | ||||
| -rw-r--r-- | source/slang/slang-language-server.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-workspace-version.cpp | 96 | ||||
| -rw-r--r-- | source/slang/slang-workspace-version.h | 22 |
6 files changed, 10 insertions, 1229 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp index 1d9e30c95..176609106 100644 --- a/source/slang/slang-check-modifier.cpp +++ b/source/slang/slang-check-modifier.cpp @@ -80,6 +80,8 @@ namespace Slang AttributeDecl* SemanticsVisitor::lookUpAttributeDecl(Name* attributeName, Scope* scope) { + if (!attributeName) + return nullptr; // We start by looking for an existing attribute matching // the name `attributeName`. // diff --git a/source/slang/slang-language-server-protocol.cpp b/source/slang/slang-language-server-protocol.cpp deleted file mode 100644 index c557be7ec..000000000 --- a/source/slang/slang-language-server-protocol.cpp +++ /dev/null @@ -1,481 +0,0 @@ -#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 _makeCompletionOptionsRtti() -{ - CompletionOptions obj; - StructRttiBuilder builder(&obj, "LanguageServerProtocol::CompletionOptions", nullptr); - builder.addField("triggerCharacters", &obj.triggerCharacters); - builder.addField("resolveProvider", &obj.resolveProvider); - builder.addField("allCommitCharacters", &obj.allCommitCharacters); - builder.addField("workDoneToken", &obj.workDoneToken); - 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 _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 _makeHoverParamsRtti() -{ - HoverParams obj; - StructRttiBuilder builder(&obj, "LanguageServerProtocol::HoverParams", nullptr); - builder.addField("textDocument", &obj.textDocument); - builder.addField("position", &obj.position); - builder.addField("workDoneToken", &obj, StructRttiInfo::Flag::Optional); - 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", nullptr); - builder.addField("textDocument", &obj.textDocument); - builder.addField("position", &obj.position); - builder.addField("workDoneToken", &obj, StructRttiInfo::Flag::Optional); - 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", nullptr); - builder.addField("textDocument", &obj.textDocument); - builder.addField("position", &obj.position); - builder.addField("workDoneToken", &obj, StructRttiInfo::Flag::Optional); - 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", nullptr); - builder.addField("textDocument", &obj.textDocument); - builder.addField("workDoneToken", &obj.workDoneToken, StructRttiInfo::Flag::Optional); - 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", nullptr); - builder.addField("textDocument", &obj.textDocument); - builder.addField("position", &obj.position); - builder.addField("workDoneToken", &obj.workDoneToken, StructRttiInfo::Flag::Optional); - 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/slang/slang-language-server-protocol.h b/source/slang/slang-language-server-protocol.h deleted file mode 100644 index 29fbaa701..000000000 --- a/source/slang/slang-language-server-protocol.h +++ /dev/null @@ -1,636 +0,0 @@ -#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 - : TextDocumentPositionParams - , WorkDoneProgressParams -{ - static const StructRttiInfo g_rttiInfo; - static const UnownedStringSlice methodName; -}; - -struct DefinitionParams - : TextDocumentPositionParams - , WorkDoneProgressParams -{ - 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 - : TextDocumentPositionParams - , WorkDoneProgressParams -{ - 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 - : TextDocumentPositionParams - , WorkDoneProgressParams -{ - 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 diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index dc3b4fe89..180e17ed9 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -13,7 +13,7 @@ #include "../core/slang-range.h" #include "../../slang-com-helper.h" #include "../compiler-core/slang-json-rpc-connection.h" -#include "slang-language-server-protocol.h" +#include "../compiler-core/slang-language-server-protocol.h" #include "slang-language-server.h" #include "slang-workspace-version.h" #include "slang-language-server-ast-lookup.h" diff --git a/source/slang/slang-workspace-version.cpp b/source/slang/slang-workspace-version.cpp index 29404c2d0..1e92c31ca 100644 --- a/source/slang/slang-workspace-version.cpp +++ b/source/slang/slang-workspace-version.cpp @@ -1,7 +1,6 @@ #include "slang-workspace-version.h" #include "../core/slang-io.h" #include "../core/slang-file-system.h" -#include "../core/slang-char-util.h" #include "../compiler-core/slang-lexer.h" namespace Slang @@ -93,18 +92,18 @@ void parseDiagnostics(Dictionary<String, DocumentDiagnostics>& diagnostics, Stri LanguageServerProtocol::Diagnostic diagnostic; Index pos = lparentIndex + 1; - int lineLoc = StringUtil::parseInt(line, pos); + int lineLoc = StringUtil::parseIntAndAdvancePos(line, pos); if (lineLoc == 0) lineLoc = 1; diagnostic.range.end.line = diagnostic.range.start.line = lineLoc - 1; pos++; - int colLoc = StringUtil::parseInt(line, pos); + int colLoc = StringUtil::parseIntAndAdvancePos(line, pos); if (colLoc == 0) colLoc = 1; diagnostic.range.end.character = diagnostic.range.start.character = colLoc - 1; if (pos >= line.getLength()) continue; - line = line.subString(colonIndex + 3, line.getLength()); + line = line.tail(colonIndex + 3); colonIndex = line.indexOf(':'); if (colonIndex == -1) continue; @@ -125,13 +124,13 @@ void parseDiagnostics(Dictionary<String, DocumentDiagnostics>& diagnostics, Stri continue; } pos = line.indexOf(' '); - diagnostic.code = StringUtil::parseInt(line, pos); - diagnostic.message = line.subString(colonIndex + 2, line.getLength()); + diagnostic.code = StringUtil::parseIntAndAdvancePos(line, pos); + diagnostic.message = line.tail(colonIndex + 2); if (lineIndex + 1 < lines.getCount() && lines[lineIndex].startsWith("^+")) { lineIndex++; pos = 2; - auto tokenLength = StringUtil::parseInt(lines[lineIndex], pos); + auto tokenLength = StringUtil::parseIntAndAdvancePos(line, pos); diagnostic.range.end.character += tokenLength; } diagnosticList.messages.Add(diagnostic); @@ -192,89 +191,6 @@ void* Workspace::getInterface(const Guid& uuid) return nullptr; } -String URI::getPath() const -{ - Index startIndex = uri.indexOf("://"); - if (startIndex == -1) return String(); - startIndex += 3; - Index endIndex = uri.indexOf('?'); - if (endIndex == -1) - endIndex = uri.getLength(); - StringBuilder sb; -#if SLANG_WINDOWS_FAMILY - if (uri[startIndex] == '/') - startIndex++; -#endif - for (Index i = startIndex; i < endIndex;) - { - auto ch = uri[i]; - if (ch == '%') - { - Int charVal = CharUtil::getHexDigitValue(uri[i + 1]) * 16 + - CharUtil::getHexDigitValue(uri[i + 2]); - sb.appendChar((char)charVal); - i += 3; - } - else - { - sb.appendChar(uri[i]); - i++; - } - } - return sb.ProduceString(); -} - -StringSlice URI::getProtocol() const -{ - Index separatorIndex = uri.indexOf("://"); - if (separatorIndex != -1) - return uri.subString(0, separatorIndex); - return StringSlice(); -} - -bool URI::isSafeURIChar(char ch) -{ - return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || - ch == '-' || ch == '_' || ch == '/' || ch == '.'; -} - -URI URI::fromLocalFilePath(UnownedStringSlice path) -{ - URI uri; - StringBuilder sb; - sb << "file://"; - -#if SLANG_WINDOWS_FAMILY - sb << "/"; -#endif - - for (auto ch : path) - { - if (isSafeURIChar(ch)) - { - sb.appendChar(ch); - } - else if (ch == '\\') - { - sb.appendChar('/'); - } - else - { - char buffer[32]; - int length = IntToAscii(buffer, (int)ch, 16); - ReverseInternalAscii(buffer, length); - sb << "%" << buffer; - } - } - return URI::fromString(sb.getUnownedSlice()); -} - -URI URI::fromString(UnownedStringSlice uriString) -{ - URI uri; - uri.uri = uriString; - return uri; -} void DocumentVersion::setText(const String& newText) { text = newText; diff --git a/source/slang/slang-workspace-version.h b/source/slang/slang-workspace-version.h index 58811ed7d..2aa2619f1 100644 --- a/source/slang/slang-workspace-version.h +++ b/source/slang/slang-workspace-version.h @@ -5,32 +5,12 @@ #include "../../slang.h" #include "../core/slang-basic.h" #include "../core/slang-com-object.h" -#include "slang-language-server-protocol.h" +#include "../compiler-core/slang-language-server-protocol.h" #include "slang-compiler.h" #include "slang-doc-ast.h" namespace Slang { - struct URI - { - String uri; - bool operator==(const URI& other) const - { - return uri == other.uri; - } - bool operator!=(const URI& other) const { return uri != other.uri; } - - HashCode getHashCode() const { return uri.getHashCode(); } - - bool isLocalFile() { return uri.startsWith("file://"); }; - String getPath() const; - StringSlice getProtocol() const; - - static URI fromLocalFilePath(UnownedStringSlice path); - static URI fromString(UnownedStringSlice uriString); - static bool isSafeURIChar(char ch); - }; - class Workspace; class DocumentVersion : public RefObject |
