diff options
Diffstat (limited to 'source/slang')
| -rw-r--r-- | source/slang/slang-language-server-document-symbols.cpp | 10 |
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)) { |
