summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-12-30 23:40:22 -0800
committerGitHub <noreply@github.com>2024-12-30 23:40:22 -0800
commit1f98bd6195b58d8f61807671cb704d42bf24c54d (patch)
tree49d570731a25d34d9eda3602be3ddbbfa542b766 /source
parent3f43d6c14320c71a170b697bf13a4f130a71d297 (diff)
LanguageServer: fix highlighting of wrapper type. (#5968)
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-check-decl.cpp1
-rw-r--r--source/slang/slang-language-server-ast-lookup.cpp7
-rw-r--r--source/slang/slang-language-server-semantic-tokens.cpp34
3 files changed, 30 insertions, 12 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index c4d64c668..ce3f1e64c 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -2133,6 +2133,7 @@ void SemanticsDeclHeaderVisitor::visitStructDecl(StructDecl* structDecl)
member->nameAndLoc.name = getName("inner");
member->nameAndLoc.loc = structDecl->wrappedType.exp->loc;
member->loc = member->nameAndLoc.loc;
+ addModifier(member, m_astBuilder->create<SynthesizedModifier>());
structDecl->addMember(member);
}
checkVisibility(structDecl);
diff --git a/source/slang/slang-language-server-ast-lookup.cpp b/source/slang/slang-language-server-ast-lookup.cpp
index 3f738c504..ebc3fe9ad 100644
--- a/source/slang/slang-language-server-ast-lookup.cpp
+++ b/source/slang/slang-language-server-ast-lookup.cpp
@@ -665,6 +665,13 @@ bool _findAstNodeImpl(ASTLookupContext& context, SyntaxNode* node)
{
if (_isLocInRange(&context, decl->nameAndLoc.loc, _getDeclNameLength(decl->getName())))
{
+ for (auto modifier : decl->modifiers)
+ {
+ if (as<SynthesizedModifier>(modifier))
+ return false;
+ if (as<ImplicitParameterGroupElementTypeModifier>(modifier))
+ return false;
+ }
ASTLookupResult result;
result.path = context.nodePath;
context.results.add(_Move(result));
diff --git a/source/slang/slang-language-server-semantic-tokens.cpp b/source/slang/slang-language-server-semantic-tokens.cpp
index 4ac40321c..5d0e41ecb 100644
--- a/source/slang/slang-language-server-semantic-tokens.cpp
+++ b/source/slang/slang-language-server-semantic-tokens.cpp
@@ -74,6 +74,8 @@ List<SemanticToken> getSemanticTokens(
.pathInfo.foundPath.getUnownedSlice()
.endsWithCaseInsensitive(fileName))
return;
+ if (decl->hasModifier<SynthesizedModifier>())
+ return;
SemanticToken token = _createSemanticToken(manager, loc, name);
auto target = decl;
if (as<AggTypeDecl>(target))
@@ -137,6 +139,17 @@ List<SemanticToken> getSemanticTokens(
module->getModuleDecl(),
[&](SyntaxNode* node)
{
+ if (auto decl = as<Decl>(node))
+ {
+ for (auto modifier : decl->modifiers)
+ {
+ if (as<SynthesizedModifier>(modifier))
+ return;
+ if (as<ImplicitParameterGroupElementTypeModifier>(modifier))
+ return;
+ }
+ }
+
if (auto declRefExpr = as<DeclRefExpr>(node))
{
handleDeclRef(
@@ -173,19 +186,16 @@ List<SemanticToken> getSemanticTokens(
maybeInsertToken(token);
}
}
- else if (auto aggTypeDecl = as<AggTypeDeclBase>(node))
+ else if (auto aggTypeDeclBase = as<AggTypeDeclBase>(node))
{
- if (aggTypeDecl->getName() &&
- aggTypeDecl->findModifier<ImplicitParameterGroupElementTypeModifier>() ==
- nullptr)
- {
- SemanticToken token = _createSemanticToken(
- manager,
- aggTypeDecl->getNameLoc(),
- aggTypeDecl->getName());
- token.type = SemanticTokenType::Type;
- maybeInsertToken(token);
- }
+ if (!aggTypeDeclBase->getName())
+ return;
+ SemanticToken token = _createSemanticToken(
+ manager,
+ aggTypeDeclBase->getNameLoc(),
+ aggTypeDeclBase->getName());
+ token.type = SemanticTokenType::Type;
+ maybeInsertToken(token);
}
else if (auto enumCase = as<EnumCaseDecl>(node))
{