And, as soon as I sent that, I realized what was up. Apparently auto-complete is driven by the parser, and delayed template parsing means we don't parse templates. That seems like a serious issue that should get fixed eventually.
Anyway, I landed a crummy workaround in r334973 to green the bots. On Mon, Jun 18, 2018 at 11:53 AM Reid Kleckner <r...@google.com> wrote: > This test has been failing on Windows since it has been added: > http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/12549 > > I took a look at the unittest code, but I'm not familiar enough with this > code to debug it. Can you take a look at this? > > On Fri, Jun 15, 2018 at 1:35 AM Ilya Biryukov via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: ibiryukov >> Date: Fri Jun 15 01:31:17 2018 >> New Revision: 334807 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=334807&view=rev >> Log: >> [clangd] Do not report comments that only have special chars. >> >> Summary: >> Like the following: >> // ------- >> // ======= >> // ******* >> >> It does not cover all the cases, but those are definitely not very >> useful. >> >> Reviewers: sammccall, ioeric, hokein >> >> Reviewed By: sammccall >> >> Subscribers: MaskRay, jkorous, cfe-commits >> >> Differential Revision: https://reviews.llvm.org/D48171 >> >> Modified: >> clang-tools-extra/trunk/clangd/CodeCompletionStrings.cpp >> clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp >> >> Modified: clang-tools-extra/trunk/clangd/CodeCompletionStrings.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeCompletionStrings.cpp?rev=334807&r1=334806&r2=334807&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/clangd/CodeCompletionStrings.cpp (original) >> +++ clang-tools-extra/trunk/clangd/CodeCompletionStrings.cpp Fri Jun 15 >> 01:31:17 2018 >> @@ -151,6 +151,16 @@ bool canRequestComment(const ASTContext >> const ObjCPropertyDecl *PDecl = M ? M->findPropertyDecl() : nullptr; >> return !PDecl || canRequestForDecl(*PDecl); >> } >> + >> +bool LooksLikeDocComment(llvm::StringRef CommentText) { >> + // We don't report comments that only contain "special" chars. >> + // This avoids reporting various delimiters, like: >> + // ================= >> + // ----------------- >> + // ***************** >> + return CommentText.find_first_not_of("/*-= \t\r\n") != >> llvm::StringRef::npos; >> +} >> + >> } // namespace >> >> std::string getDocComment(const ASTContext &Ctx, >> @@ -167,7 +177,10 @@ std::string getDocComment(const ASTConte >> const RawComment *RC = getCompletionComment(Ctx, Decl); >> if (!RC) >> return ""; >> - return RC->getFormattedText(Ctx.getSourceManager(), >> Ctx.getDiagnostics()); >> + std::string Doc = RC->getFormattedText(Ctx.getSourceManager(), >> Ctx.getDiagnostics()); >> + if (!LooksLikeDocComment(Doc)) >> + return ""; >> + return Doc; >> } >> >> std::string >> @@ -180,7 +193,10 @@ getParameterDocComment(const ASTContext >> const RawComment *RC = getParameterComment(Ctx, Result, ArgIndex); >> if (!RC) >> return ""; >> - return RC->getFormattedText(Ctx.getSourceManager(), >> Ctx.getDiagnostics()); >> + std::string Doc = RC->getFormattedText(Ctx.getSourceManager(), >> Ctx.getDiagnostics()); >> + if (!LooksLikeDocComment(Doc)) >> + return ""; >> + return Doc; >> } >> >> void getLabelAndInsertText(const CodeCompletionString &CCS, std::string >> *Label, >> >> Modified: clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp?rev=334807&r1=334806&r2=334807&view=diff >> >> ============================================================================== >> --- clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp >> (original) >> +++ clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp Fri >> Jun 15 01:31:17 2018 >> @@ -1100,6 +1100,65 @@ TEST(CompletionTest, DocumentationFromCh >> Contains(AllOf(Not(IsDocumented()), Named("func")))); >> } >> >> +TEST(CompletionTest, NonDocComments) { >> + MockFSProvider FS; >> + auto FooCpp = testPath("foo.cpp"); >> + FS.Files[FooCpp] = ""; >> + >> + MockCompilationDatabase CDB; >> + IgnoreDiagnostics DiagConsumer; >> + ClangdServer Server(CDB, FS, DiagConsumer, >> ClangdServer::optsForTest()); >> + >> + Annotations Source(R"cpp( >> + // ------------------ >> + int comments_foo(); >> + >> + // A comment and a decl are separated by newlines. >> + // Therefore, the comment shouldn't show up as doc comment. >> + >> + int comments_bar(); >> + >> + // this comment should be in the results. >> + int comments_baz(); >> + >> + >> + template <class T> >> + struct Struct { >> + int comments_qux(); >> + int comments_quux(); >> + }; >> + >> + >> + // This comment should not be there. >> + >> + template <class T> >> + int Struct<T>::comments_qux() { >> + } >> + >> + // This comment **should** be in results. >> + template <class T> >> + int Struct<T>::comments_quux() { >> + int a = comments^; >> + } >> + )cpp"); >> + Server.addDocument(FooCpp, Source.code(), WantDiagnostics::Yes); >> + CompletionList Completions = cantFail(runCodeComplete( >> + Server, FooCpp, Source.point(), clangd::CodeCompleteOptions())); >> + >> + // We should not get any of those comments in completion. >> + EXPECT_THAT( >> + Completions.items, >> + UnorderedElementsAre(AllOf(Not(IsDocumented()), >> Named("comments_foo")), >> + AllOf(IsDocumented(), Named("comments_baz")), >> + AllOf(IsDocumented(), Named("comments_quux")), >> + // FIXME(ibiryukov): the following items >> should have >> + // empty documentation, since they are >> separated from >> + // a comment with an empty line. >> Unfortunately, I >> + // couldn't make Sema tests pass if we ignore >> those. >> + AllOf(IsDocumented(), Named("comments_bar")), >> + AllOf(IsDocumented(), >> Named("comments_qux")))); >> +} >> + >> TEST(CompletionTest, CompleteOnInvalidLine) { >> auto FooCpp = testPath("foo.cpp"); >> >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits