From a2d90fb275962da84611160f8ddd74d934a68dbd Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 4 Aug 2023 15:47:39 -0700 Subject: Redesign `DeclRef` and systematic `Val` deduplication (#3049) * Redesign DeclRef + Deduplicate Val. * Update project files * Fix warning. * Fix. * Fix. * Remove `Val::_equalsImplOverride`. * Rmove `Val::_getHashCodeOverride`. * Remove `semanticVisitor` param from `resolve`. * Cleanups. --------- Co-authored-by: Yong He --- source/slang/slang-language-server.cpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'source/slang/slang-language-server.cpp') diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index e79716975..bc12ad34f 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -213,7 +213,7 @@ static bool isBoolType(Type* t) auto basicType = as(t); if (!basicType) return false; - return basicType->baseType == BaseType::Bool; + return basicType->getBaseType() == BaseType::Bool; } String getDeclKindString(DeclRef declRef) @@ -303,11 +303,11 @@ String getDeclSignatureString(DeclRef declRef, WorkspaceVersion* version) sb << " = "; if (isBoolType(varDecl->getType())) { - sb << (constantInt->value ? "true" : "false"); + sb << (constantInt->getValue() ? "true" : "false"); } else { - sb << constantInt->value; + sb << constantInt->getValue(); } } else @@ -492,6 +492,8 @@ SlangResult LanguageServer::hover( doc->zeroBasedUTF16LocToOneBasedUTF8Loc(args.position.line, args.position.character, line, col); auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + Module* parsedModule = version->getOrLoadModule(canonicalPath); if (!parsedModule) { @@ -741,6 +743,8 @@ SlangResult LanguageServer::gotoDefinition( doc->zeroBasedUTF16LocToOneBasedUTF8Loc(args.position.line, args.position.character, line, col); auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + Module* parsedModule = version->getOrLoadModule(canonicalPath); if (!parsedModule) { @@ -1029,6 +1033,8 @@ SlangResult LanguageServer::semanticTokens( } auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + Module* parsedModule = version->getOrLoadModule(canonicalPath); if (!parsedModule) { @@ -1073,6 +1079,7 @@ String LanguageServer::getExprDeclSignature(Expr* expr, String* outDocumentation return String(); auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); SignatureInformation sigInfo; @@ -1096,7 +1103,7 @@ String LanguageServer::getExprDeclSignature(Expr* expr, String* outDocumentation bool isFirst = true; printer.getStringBuilder() << "("; int paramIndex = 0; - for (auto param : funcType->paramTypes) + for (auto param : funcType->getParamTypes()) { if (!isFirst) printer.getStringBuilder() << ", "; @@ -1134,6 +1141,8 @@ String LanguageServer::getExprDeclSignature(Expr* expr, String* outDocumentation String LanguageServer::getDeclRefSignature(DeclRef declRef, String* outDocumentation, List>* outParamRanges) { auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + ASTPrinter printer( version->linkage->getASTBuilder(), ASTPrinter::OptionFlag::ParamNames | ASTPrinter::OptionFlag::NoInternalKeywords | @@ -1169,6 +1178,8 @@ SlangResult LanguageServer::signatureHelp( doc->zeroBasedUTF16LocToOneBasedUTF8Loc(args.position.line, args.position.character, line, col); auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + Module* parsedModule = version->getOrLoadModule(canonicalPath); if (!parsedModule) { @@ -1289,7 +1300,7 @@ SlangResult LanguageServer::signatureHelp( printer.getStringBuilder() << "func ("; bool isFirst = true; - for (auto param : funcType->paramTypes) + for (auto param : funcType->getParamTypes()) { if (!isFirst) printer.getStringBuilder() << ", "; @@ -1315,12 +1326,12 @@ SlangResult LanguageServer::signatureHelp( if (auto declRefExpr = as(funcExpr)) { - if (auto aggDecl = as(declRefExpr->declRef.getDecl())) + if (auto aggDeclRef = as(declRefExpr->declRef)) { // Look for initializers - for (auto member : aggDecl->getMembersOfType()) + for (auto member : getMembersOfType(version->linkage->getASTBuilder(), aggDeclRef)) { - addDeclRef(version->linkage->getASTBuilder()->getSpecializedDeclRef(member, declRefExpr->declRef.getSubst())); + addDeclRef(member); } } else @@ -1379,6 +1390,8 @@ SlangResult LanguageServer::documentSymbol( return SLANG_OK; } auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + Module* parsedModule = version->getOrLoadModule(canonicalPath); if (!parsedModule) { @@ -1400,6 +1413,8 @@ SlangResult LanguageServer::inlayHint(const LanguageServerProtocol::InlayHintPar return SLANG_OK; } auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + Module* parsedModule = version->getOrLoadModule(canonicalPath); if (!parsedModule) { @@ -1518,6 +1533,8 @@ void LanguageServer::publishDiagnostics() m_lastDiagnosticUpdateTime = std::chrono::system_clock::now(); auto version = m_workspace->getCurrentVersion(); + SLANG_AST_BUILDER_RAII(version->linkage->getASTBuilder()); + // Send updates to clear diagnostics for files that no longer have any messages. List filesToRemove; for (auto& file : m_lastPublishedDiagnostics) -- cgit v1.2.3