diff --git a/clang-tools-extra/clangd/Selection.cpp b/clang-tools-extra/clangd/Selection.cpp index 06165dfbbcdd2..456d76ce93702 100644 --- a/clang-tools-extra/clangd/Selection.cpp +++ b/clang-tools-extra/clangd/Selection.cpp @@ -1042,14 +1042,20 @@ pointBounds(unsigned Offset, const syntax::TokenBuffer &Tokens) { const auto &SM = Tokens.sourceManager(); SourceLocation Loc = SM.getComposedLoc(SM.getMainFileID(), Offset); llvm::SmallVector, 2> Result; - // Prefer right token over left. + llvm::SmallVector, 2> ResultLowPrio; + // Prefer right token over left, also non comma over comma. for (const syntax::Token &Tok : llvm::reverse(spelledTokensTouching(Loc, Tokens))) { if (shouldIgnore(Tok)) continue; unsigned Offset = Tokens.sourceManager().getFileOffset(Tok.location()); - Result.emplace_back(Offset, Offset + Tok.length()); + if (Tok.kind() == tok::comma) { + ResultLowPrio.emplace_back(Offset, Offset + Tok.length()); + } else { + Result.emplace_back(Offset, Offset + Tok.length()); + } } + Result.append(ResultLowPrio); if (Result.empty()) Result.emplace_back(Offset, Offset); return Result; diff --git a/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp b/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp index 08cc80ff8981e..2c0e5f1fed7df 100644 --- a/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp +++ b/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp @@ -636,7 +636,7 @@ TEST(CallHierarchy, HierarchyOnVar) { TEST(CallHierarchy, HierarchyOnEnumConstant) { // Tests that the call hierarchy works on enum constants. Annotations Source(R"cpp( - enum class Coin { heads$Heads^ , tai$Tails^ls }; + enum class Coin { heads$Heads^, tai$Tails^ls }; void caller() { Coin::$CallerH[[heads]]; Coin::$CallerT[[tails]];