jvikstrom updated this revision to Diff 209773. jvikstrom added a comment. Remove operator< and use std::unique.
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,15 @@ 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 &Lhs, const HighlightingToken &Rhs) -> bool { + return std::tie(Lhs.R, Lhs.Kind) < std::tie(Rhs.R, Rhs.Kind); + }); + auto Last = std::unique(Tokens.begin(), Tokens.end()); + Tokens.erase(Last, Tokens.end()); return Tokens; } @@ -80,7 +89,6 @@ DeclarationName::Identifier) // Only want to highlight identifiers. return true; - addToken(Ref->getLocation(), Ref->getDecl()); return true; }
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,15 @@ 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 &Lhs, const HighlightingToken &Rhs) -> bool { + return std::tie(Lhs.R, Lhs.Kind) < std::tie(Rhs.R, Rhs.Kind); + }); + auto Last = std::unique(Tokens.begin(), Tokens.end()); + Tokens.erase(Last, Tokens.end()); return Tokens; } @@ -80,7 +89,6 @@ DeclarationName::Identifier) // Only want to highlight identifiers. return true; - addToken(Ref->getLocation(), Ref->getDecl()); return true; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits