sammccall created this revision. sammccall added a reviewer: kbobyrev. Herald added subscribers: usaxena95, kadircet, arphaman. sammccall requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang.
Fixes https://github.com/clangd/clangd/issues/707 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D97803 Files: clang-tools-extra/clangd/CodeComplete.cpp clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -1644,7 +1644,7 @@ std::string Context = R"cpp( struct X { // Overload with int - int a(int); + int a(int) __attribute__((deprecated("", ""))); // Overload with bool int a(bool); int b(float); @@ -1682,6 +1682,7 @@ EXPECT_EQ(A.ReturnType, "int"); // All overloads return int. // For now we just return one of the doc strings arbitrarily. ASSERT_TRUE(A.Documentation); + ASSERT_FALSE(A.Deprecated); // Not all overloads deprecated. EXPECT_THAT( A.Documentation->asPlainText(), AnyOf(HasSubstr("Overload with int"), HasSubstr("Overload with bool"))); Index: clang-tools-extra/clangd/CodeComplete.cpp =================================================================== --- clang-tools-extra/clangd/CodeComplete.cpp +++ clang-tools-extra/clangd/CodeComplete.cpp @@ -249,6 +249,12 @@ return RankedIncludeHeaders[0]; } + bool isDeprecated() const { + return (SemaResult && + SemaResult->Availability == CXAvailability_Deprecated) || + (IndexResult && IndexResult->Flags & Symbol::Deprecated); + } + using Bundle = llvm::SmallVector<CompletionCandidate, 4>; }; using ScoredBundle = @@ -309,8 +315,6 @@ return std::tie(X.range.start.line, X.range.start.character) < std::tie(Y.range.start.line, Y.range.start.character); }); - Completion.Deprecated |= - (C.SemaResult->Availability == CXAvailability_Deprecated); } if (C.IndexResult) { Completion.Origin |= C.IndexResult->Origin; @@ -332,13 +336,13 @@ } Completion.RequiredQualifier = std::string(ShortestQualifier); } - Completion.Deprecated |= (C.IndexResult->Flags & Symbol::Deprecated); } if (C.IdentifierResult) { Completion.Origin |= SymbolOrigin::Identifier; Completion.Kind = CompletionItemKind::Text; Completion.Name = std::string(C.IdentifierResult->Name); } + Completion.Deprecated |= C.isDeprecated(); // Turn absolute path into a literal string that can be #included. auto Inserted = [&](llvm::StringRef Header) @@ -408,6 +412,7 @@ /*CommentsFromHeader=*/false)); } } + Completion.Deprecated = Completion.Deprecated && C.isDeprecated(); } CodeCompletion build() {
Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -1644,7 +1644,7 @@ std::string Context = R"cpp( struct X { // Overload with int - int a(int); + int a(int) __attribute__((deprecated("", ""))); // Overload with bool int a(bool); int b(float); @@ -1682,6 +1682,7 @@ EXPECT_EQ(A.ReturnType, "int"); // All overloads return int. // For now we just return one of the doc strings arbitrarily. ASSERT_TRUE(A.Documentation); + ASSERT_FALSE(A.Deprecated); // Not all overloads deprecated. EXPECT_THAT( A.Documentation->asPlainText(), AnyOf(HasSubstr("Overload with int"), HasSubstr("Overload with bool"))); Index: clang-tools-extra/clangd/CodeComplete.cpp =================================================================== --- clang-tools-extra/clangd/CodeComplete.cpp +++ clang-tools-extra/clangd/CodeComplete.cpp @@ -249,6 +249,12 @@ return RankedIncludeHeaders[0]; } + bool isDeprecated() const { + return (SemaResult && + SemaResult->Availability == CXAvailability_Deprecated) || + (IndexResult && IndexResult->Flags & Symbol::Deprecated); + } + using Bundle = llvm::SmallVector<CompletionCandidate, 4>; }; using ScoredBundle = @@ -309,8 +315,6 @@ return std::tie(X.range.start.line, X.range.start.character) < std::tie(Y.range.start.line, Y.range.start.character); }); - Completion.Deprecated |= - (C.SemaResult->Availability == CXAvailability_Deprecated); } if (C.IndexResult) { Completion.Origin |= C.IndexResult->Origin; @@ -332,13 +336,13 @@ } Completion.RequiredQualifier = std::string(ShortestQualifier); } - Completion.Deprecated |= (C.IndexResult->Flags & Symbol::Deprecated); } if (C.IdentifierResult) { Completion.Origin |= SymbolOrigin::Identifier; Completion.Kind = CompletionItemKind::Text; Completion.Name = std::string(C.IdentifierResult->Name); } + Completion.Deprecated |= C.isDeprecated(); // Turn absolute path into a literal string that can be #included. auto Inserted = [&](llvm::StringRef Header) @@ -408,6 +412,7 @@ /*CommentsFromHeader=*/false)); } } + Completion.Deprecated = Completion.Deprecated && C.isDeprecated(); } CodeCompletion build() {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits