[PATCH] D92148: [clangd] Do not treat line as inactive if skipped range ends at character position 0
Nathan Ridge via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 25 18:31:41 PST 2020
nridge created this revision.
Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman.
Herald added a project: clang.
nridge requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.
Fixes https://github.com/clangd/clangd/issues/602
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D92148
Files:
clang-tools-extra/clangd/SemanticHighlighting.cpp
clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -623,18 +623,23 @@
// Code after the preamble.
// Code inside inactive blocks does not get regular highlightings
// because it's not part of the AST.
-$InactiveCode[[#ifdef test]]
+ #define $Macro[[test2]]
+$InactiveCode[[#if defined(test)]]
$InactiveCode[[int Inactive2;]]
+$InactiveCode[[#elif defined(test2)]]
+ int $Variable[[Active1]];
+$InactiveCode[[#else]]
+$InactiveCode[[int Inactive3;]]
$InactiveCode[[#endif]]
#ifndef $Macro[[test]]
- int $Variable[[Active1]];
+ int $Variable[[Active2]];
#endif
$InactiveCode[[#ifdef test]]
-$InactiveCode[[int Inactive3;]]
+$InactiveCode[[int Inactive4;]]
$InactiveCode[[#else]]
- int $Variable[[Active2]];
+ int $Variable[[Active3]];
#endif
)cpp",
// Argument to 'sizeof...'
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -234,6 +234,10 @@
// with line-based diffing.
assert(R.start.line <= R.end.line);
for (int Line = R.start.line; Line <= R.end.line; ++Line) {
+ // If the end of the inactive range is at the beginning
+ // of a line, that line is not inactive.
+ if (Line == R.end.line && R.end.character == 0)
+ continue;
// Copy tokens before the inactive line
for (; It != NonConflicting.end() && It->R.start.line < Line; ++It)
WithInactiveLines.push_back(std::move(*It));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92148.307742.patch
Type: text/x-patch
Size: 1870 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201126/0eb039ae/attachment.bin>
More information about the cfe-commits
mailing list