From e5ead400647c382c9d107e568b6374915c3702ae Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 5 Sep 2024 11:25:09 -0700 Subject: Fix invalid documentsymbol error in langauge server. (#5012) --- source/slang/slang-language-server-document-symbols.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'source') 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(child)) { -- cgit v1.2.3