summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-09-05 11:25:09 -0700
committerGitHub <noreply@github.com>2024-09-05 11:25:09 -0700
commite5ead400647c382c9d107e568b6374915c3702ae (patch)
tree6961f21b3fe74cb56debd22d40c3d9d022f72942 /source
parent77ecad28cfb0d17b8d3a93fb7c08be4217eb2433 (diff)
Fix invalid documentsymbol error in langauge server. (#5012)
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-language-server-document-symbols.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/source/slang/slang-language-server-document-symbols.cpp b/source/slang/slang-language-server-document-symbols.cpp
index 45a76e97b..edb576408 100644
--- a/source/slang/slang-language-server-document-symbols.cpp
+++ b/source/slang/slang-language-server-document-symbols.cpp
@@ -179,8 +179,14 @@ namespace Slang
auto closingHumaneLoc = srcManager->getHumaneLoc(closingLoc, SourceLocType::Actual);
context.doc->oneBasedUTF8LocToZeroBasedUTF16Loc(
closingHumaneLoc.line, closingHumaneLoc.column, line, col);
- sym.range.end.line = (int)line;
- sym.range.end.character = (int)col;
+ // Due to macro replacements, the closing loc may be before the start loc,
+ // and we need to make sure never returning such invalid ranges to the editor client.
+ if (closingHumaneLoc.line > sym.range.start.line ||
+ closingHumaneLoc.line == sym.range.start.line && closingHumaneLoc.column >= sym.range.start.character)
+ {
+ sym.range.end.line = (int)line;
+ sym.range.end.character = (int)col;
+ }
}
if (const auto childContainerDecl = as<ContainerDecl>(child))
{