diff options
| author | Yong He <yonghe@outlook.com> | 2024-12-30 23:40:22 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-30 23:40:22 -0800 |
| commit | 1f98bd6195b58d8f61807671cb704d42bf24c54d (patch) | |
| tree | 49d570731a25d34d9eda3602be3ddbbfa542b766 /source | |
| parent | 3f43d6c14320c71a170b697bf13a4f130a71d297 (diff) | |
LanguageServer: fix highlighting of wrapper type. (#5968)
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 1 | ||||
| -rw-r--r-- | source/slang/slang-language-server-ast-lookup.cpp | 7 | ||||
| -rw-r--r-- | source/slang/slang-language-server-semantic-tokens.cpp | 34 |
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)) { |
