diff options
| author | Yong He <yonghe@outlook.com> | 2024-09-05 11:25:09 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-05 11:25:09 -0700 |
| commit | e5ead400647c382c9d107e568b6374915c3702ae (patch) | |
| tree | 6961f21b3fe74cb56debd22d40c3d9d022f72942 /source | |
| parent | 77ecad28cfb0d17b8d3a93fb7c08be4217eb2433 (diff) | |
Fix invalid documentsymbol error in langauge server. (#5012)
Diffstat (limited to 'source')
| -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)) { |
