From a453fadfb373499f08779dd7df8f2347d292fd91 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 8 Jul 2024 19:33:51 -0700 Subject: Language server performance and document symbol fix. (#4561) --- source/slang/slang-check-decl.cpp | 1 + source/slang/slang-language-server-document-symbols.cpp | 2 ++ source/slang/slang.cpp | 8 +++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index c3074bc55..66bdbc18e 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -1823,6 +1823,7 @@ namespace Slang static ConstructorDecl* _createCtor(SemanticsDeclVisitorBase* visitor, ASTBuilder* m_astBuilder, AggTypeDecl* decl) { auto ctor = m_astBuilder->create(); + addModifier(ctor, m_astBuilder->create()); auto ctorName = visitor->getName("$init"); ctor->ownedScope = m_astBuilder->create(); ctor->ownedScope->containerDecl = ctor; diff --git a/source/slang/slang-language-server-document-symbols.cpp b/source/slang/slang-language-server-document-symbols.cpp index 26366d6cf..ec9b434eb 100644 --- a/source/slang/slang-language-server-document-symbols.cpp +++ b/source/slang/slang-language-server-document-symbols.cpp @@ -150,6 +150,8 @@ namespace Slang continue; if (!nameLoc.loc.isValid()) continue; + if (child->hasModifier() || child->hasModifier()) + continue; auto humaneLoc = srcManager->getHumaneLoc(nameLoc.loc, SourceLocType::Actual); if (humaneLoc.line == 0) continue; diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 67492d9b2..adfa031f5 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -3669,8 +3669,14 @@ RefPtr Linkage::findOrImportModule( // Look for a precompiled module first, if not exist, load from source. - for (int checkBinaryModule = 1; checkBinaryModule >= 0; checkBinaryModule--) + bool shouldCheckBinaryModuleSettings[2] = { true, false }; + + for (auto checkBinaryModule : shouldCheckBinaryModuleSettings) { + // When in language server, we always prefer to use source module if it is available. + if (isInLanguageServer()) + checkBinaryModule = !checkBinaryModule; + // Try without translating `_` to `-` first, if that fails, try translating. for (int translateUnderScore = 0; translateUnderScore <= 1; translateUnderScore++) { -- cgit v1.2.3