diff options
-rw-r--r-- | clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp | 12 | ||||
-rw-r--r-- | clang-tools-extra/clangd/unittests/TweakTests.cpp | 11 |
2 files changed, 16 insertions, 7 deletions
diff --git a/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp b/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp index 10437f29030..7fbd28a9168 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp @@ -33,18 +33,16 @@ public: REGISTER_TWEAK(AnnotateHighlightings) Expected<Tweak::Effect> AnnotateHighlightings::apply(const Selection &Inputs) { - // TUDecl is always the root ancestor. - const Decl *CommonDecl = - Inputs.ASTSelection.root().ASTNode.get<TranslationUnitDecl>(); + const Decl *CommonDecl = nullptr; for (auto N = Inputs.ASTSelection.commonAncestor(); N && !CommonDecl; N = N->Parent) CommonDecl = N->ASTNode.get<Decl>(); std::vector<HighlightingToken> HighlightingTokens; - if (llvm::isa<TranslationUnitDecl>(CommonDecl)) { - // We only annotate tokens in the main file, if CommonDecl is a TUDecl, - // we use the default traversal scope (which is the top level decls of the - // main file). + if (!CommonDecl) { + // Now we hit the TUDecl case where commonAncestor() returns null + // intendedly. We only annotate tokens in the main file, so use the default + // traversal scope (which is the top level decls of the main file). HighlightingTokens = getSemanticHighlightings(Inputs.AST); } else { // Store the existing scopes. diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp index 62e9d79c57e..ce1d11d01ab 100644 --- a/clang-tools-extra/clangd/unittests/TweakTests.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -572,6 +572,17 @@ void f2();]] void /* entity.name.function.cpp */f1(); void /* entity.name.function.cpp */f2(); )cpp"); + + checkTransform(ID, + R"cpp( +void f1(); +void f2() {^}; +)cpp", + + R"cpp( +void f1(); +void /* entity.name.function.cpp */f2() {}; +)cpp"); } TEST(TweakTest, ExpandMacro) { |