jvikstrom updated this revision to Diff 209852.
jvikstrom marked an inline comment as done.
jvikstrom added a comment.
Address comment.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D64634/new/
https://reviews.llvm.org/D64634
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
@@ -166,6 +166,13 @@
$Variable[[AA]].$Field[[E]].$Field[[C]];
$Class[[A]]::$Variable[[S]] = 90;
}
+ )cpp",
+ R"cpp(
+ struct $Class[[AA]] {
+ int $Field[[A]];
+ }
+ int $Variable[[B]];
+ $Class[[AA]] $Variable[[A]]{$Variable[[B]]};
)cpp"};
for (const auto &TestCase : TestCases) {
checkHighlightings(TestCase);
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -31,6 +31,14 @@
std::vector<HighlightingToken> collectTokens() {
Tokens.clear();
TraverseAST(Ctx);
+ // Initializer lists can give duplicates of tokens, therefore all tokens
+ // must be deduplicated.
+ llvm::sort(Tokens,
+ [](const HighlightingToken &L, const HighlightingToken &R) {
+ return std::tie(L.R, L.Kind) < std::tie(R.R, R.Kind);
+ });
+ auto Last = std::unique(Tokens.begin(), Tokens.end());
+ Tokens.erase(Last, Tokens.end());
return Tokens;
}
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -166,6 +166,13 @@
$Variable[[AA]].$Field[[E]].$Field[[C]];
$Class[[A]]::$Variable[[S]] = 90;
}
+ )cpp",
+ R"cpp(
+ struct $Class[[AA]] {
+ int $Field[[A]];
+ }
+ int $Variable[[B]];
+ $Class[[AA]] $Variable[[A]]{$Variable[[B]]};
)cpp"};
for (const auto &TestCase : TestCases) {
checkHighlightings(TestCase);
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -31,6 +31,14 @@
std::vector<HighlightingToken> collectTokens() {
Tokens.clear();
TraverseAST(Ctx);
+ // Initializer lists can give duplicates of tokens, therefore all tokens
+ // must be deduplicated.
+ llvm::sort(Tokens,
+ [](const HighlightingToken &L, const HighlightingToken &R) {
+ return std::tie(L.R, L.Kind) < std::tie(R.R, R.Kind);
+ });
+ auto Last = std::unique(Tokens.begin(), Tokens.end());
+ Tokens.erase(Last, Tokens.end());
return Tokens;
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits