summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-09-04 19:10:38 -0700
committerGitHub <noreply@github.com>2024-09-04 19:10:38 -0700
commita7e911985327be427d6ff96bd7548ab1b06d3103 (patch)
tree0e40f4b84d5bf72e29c59d6909d3f6b87410ef6b /source/slang/slang-language-server.cpp
parentdc3f2d65848837afaf528beefc305534a29540c8 (diff)
Preserve name in DeclRefExpr for correct highlighitng of `This`. (#4980)
* Preserve name in DeclRefExpr for correct highlighitng of `This`. * Fix test.
Diffstat (limited to 'source/slang/slang-language-server.cpp')
-rw-r--r--source/slang/slang-language-server.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp
index 9588e7284..94debde40 100644
--- a/source/slang/slang-language-server.cpp
+++ b/source/slang/slang-language-server.cpp
@@ -576,7 +576,7 @@ SlangResult LanguageServer::hover(
}
};
- auto fillDeclRefHoverInfo = [&](DeclRef<Decl> declRef)
+ auto fillDeclRefHoverInfo = [&](DeclRef<Decl> declRef, Name* name)
{
if (declRef.getDecl())
{
@@ -664,7 +664,8 @@ SlangResult LanguageServer::hover(
hover.range.start.line,
hover.range.start.character);
hover.range.end = hover.range.start;
- auto name = declRef.getName();
+ if (!name)
+ name = declRef.getName();
if (auto ctorDecl = declRef.as<ConstructorDecl>())
{
auto parent = ctorDecl.getDecl()->parentDecl;
@@ -692,7 +693,7 @@ SlangResult LanguageServer::hover(
auto fillExprHoverInfo = [&](Expr* expr)
{
if (auto declRefExpr = as<DeclRefExpr>(expr))
- return fillDeclRefHoverInfo(declRefExpr->declRef);
+ return fillDeclRefHoverInfo(declRefExpr->declRef, declRefExpr->name);
else if (as<ThisExpr>(expr))
{
if (expr->type)
@@ -751,12 +752,12 @@ SlangResult LanguageServer::hover(
};
if (auto declRefExpr = as<DeclRefExpr>(leafNode))
{
- fillDeclRefHoverInfo(declRefExpr->declRef);
+ fillDeclRefHoverInfo(declRefExpr->declRef, declRefExpr->name);
}
else if (auto overloadedExpr = as<OverloadedExpr>(leafNode))
{
LookupResultItem& item = overloadedExpr->lookupResult2.item;
- fillDeclRefHoverInfo(item.declRef);
+ fillDeclRefHoverInfo(item.declRef, overloadedExpr->name);
}
else if (auto overloadedExpr2 = as<OverloadedExpr2>(leafNode))
{
@@ -826,11 +827,11 @@ SlangResult LanguageServer::hover(
}
else if (auto decl = as<Decl>(leafNode))
{
- fillDeclRefHoverInfo(makeDeclRef(decl));
+ fillDeclRefHoverInfo(makeDeclRef(decl), nullptr);
}
else if (auto attr = as<Attribute>(leafNode))
{
- fillDeclRefHoverInfo(makeDeclRef(attr->attributeDecl));
+ fillDeclRefHoverInfo(makeDeclRef(attr->attributeDecl), nullptr);
hover.range.end.character = hover.range.start.character + (int)attr->originalIdentifierToken.getContentLength();
}
if (sb.getLength() == 0)