summaryrefslogtreecommitdiff
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-08-04 15:47:39 -0700
committerGitHub <noreply@github.com>2023-08-04 15:47:39 -0700
commita2d90fb275962da84611160f8ddd74d934a68dbd (patch)
tree066084537b9f4fe1f367de100ed6638a88a028c1 /source/slang/slang-language-server.cpp
parent17da4f0dec2b86ba3a4bdaf8a2ae112047d23623 (diff)
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 <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-language-server.cpp')
-rw-r--r--source/slang/slang-language-server.cpp33
1 files changed, 25 insertions, 8 deletions
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<BasicExpressionType>(t);
if (!basicType)
return false;
- return basicType->baseType == BaseType::Bool;
+ return basicType->getBaseType() == BaseType::Bool;
}
String getDeclKindString(DeclRef<Decl> declRef)
@@ -303,11 +303,11 @@ String getDeclSignatureString(DeclRef<Decl> 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<Decl> declRef, String* outDocumentation, List<Slang::Range<Index>>* 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<DeclRefExpr>(funcExpr))
{
- if (auto aggDecl = as<AggTypeDecl>(declRefExpr->declRef.getDecl()))
+ if (auto aggDeclRef = as<AggTypeDecl>(declRefExpr->declRef))
{
// Look for initializers
- for (auto member : aggDecl->getMembersOfType<ConstructorDecl>())
+ for (auto member : getMembersOfType<ConstructorDecl>(version->linkage->getASTBuilder(), aggDeclRef))
{
- addDeclRef(version->linkage->getASTBuilder()->getSpecializedDeclRef<Decl>(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<String> filesToRemove;
for (auto& file : m_lastPublishedDiagnostics)