summaryrefslogtreecommitdiff
path: root/source/slang
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang')
-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))
{