summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-06 14:40:38 -0800
committerGitHub <noreply@github.com>2023-11-06 14:40:38 -0800
commit46529df2c4f73a4655bdd79d48004f29374a99a8 (patch)
tree801e69e70a47ce702c055df68ada41a38158367b /source/slang/slang-language-server.cpp
parentda9e0adb5cf2b1bed6075a3afe93cfdcceabe904 (diff)
Fix ICE when lowering an associatedtype declref from an derived interface. (#3312)
* Fix ICE when lowering an associatedtype declref from an derived interface. * Fixes. * Fix test. * Fix GLSL/SPIRV image subscript swizzle store regression. * Fix. --------- 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.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp
index 7f8338b1b..e550b23d2 100644
--- a/source/slang/slang-language-server.cpp
+++ b/source/slang/slang-language-server.cpp
@@ -642,10 +642,26 @@ SlangResult LanguageServer::hover(
}
}
};
+ auto fillLoc = [&](SourceLoc loc)
+ {
+ auto humaneLoc = version->linkage->getSourceManager()->getHumaneLoc(loc, SourceLocType::Actual);
+ hover.range.start.line = int(humaneLoc.line - 1);
+ hover.range.end.line = int(humaneLoc.line - 1);
+ hover.range.start.character = int(humaneLoc.column - 1);
+ hover.range.end.character = hover.range.start.character + int(doc->getTokenLength(humaneLoc.line, humaneLoc.column));
+ };
auto fillExprHoverInfo = [&](Expr* expr)
{
if (auto declRefExpr = as<DeclRefExpr>(expr))
return fillDeclRefHoverInfo(declRefExpr->declRef);
+ else if (auto thisExpr = as<ThisExpr>(expr))
+ {
+ if (expr->type)
+ {
+ sb << "```\n" << expr->type->toString() << " this" << "\n```\n";
+ }
+ fillLoc(expr->loc);
+ }
if (const auto higherOrderExpr = as<HigherOrderInvokeExpr>(expr))
{
String documentation;
@@ -657,12 +673,7 @@ SlangResult LanguageServer::hover(
<< "\n```\n";
sb << documentation;
maybeAppendAdditionalOverloadsHint();
- auto humaneLoc = version->linkage->getSourceManager()->getHumaneLoc(
- expr->loc, SourceLocType::Actual);
- hover.range.start.line = int(humaneLoc.line - 1);
- hover.range.end.line = int(humaneLoc.line - 1);
- hover.range.start.character = int(humaneLoc.column - 1);
- hover.range.end.character = hover.range.start.character + int(doc->getTokenLength(humaneLoc.line, humaneLoc.column));
+ fillLoc(expr->loc);
}
};
if (auto declRefExpr = as<DeclRefExpr>(leafNode))
@@ -686,6 +697,10 @@ SlangResult LanguageServer::hover(
{
fillExprHoverInfo(higherOrderExpr);
}
+ else if (auto thisExprExpr = as<ThisExpr>(leafNode))
+ {
+ fillExprHoverInfo(thisExprExpr);
+ }
else if (auto importDecl = as<ImportDecl>(leafNode))
{
auto moduleLoc = getModuleLoc(version->linkage->getSourceManager(), importDecl->importedModuleDecl);