llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang @llvm/pr-subscribers-clangd Author: Tom Praschan (tom-anders) <details> <summary>Changes</summary> This is in preparation for implementing doxygen parsing, see discussion in https://github.com/clangd/clangd/issues/529. (Old Phabricator review: https://reviews.llvm.org/D143112) --- Full diff: https://github.com/llvm/llvm-project/pull/78491.diff 3 Files Affected: - (modified) clang-tools-extra/clangd/CodeCompletionStrings.cpp (+24) - (modified) clang-tools-extra/clangd/CodeCompletionStrings.h (+11) - (modified) clang/include/clang/Basic/SourceManager.h (+1-1) ``````````diff diff --git a/clang-tools-extra/clangd/CodeCompletionStrings.cpp b/clang-tools-extra/clangd/CodeCompletionStrings.cpp index 2075e5965f181e..540eaa9a3eb6d7 100644 --- a/clang-tools-extra/clangd/CodeCompletionStrings.cpp +++ b/clang-tools-extra/clangd/CodeCompletionStrings.cpp @@ -9,6 +9,9 @@ #include "CodeCompletionStrings.h" #include "clang-c/Index.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/CommentLexer.h" +#include "clang/AST/CommentParser.h" +#include "clang/AST/CommentSema.h" #include "clang/AST/RawCommentList.h" #include "clang/Basic/SourceManager.h" #include "clang/Sema/CodeCompleteConsumer.h" @@ -316,5 +319,26 @@ std::string getReturnType(const CodeCompletionString &CCS) { return ""; } +comments::FullComment *parseComment(llvm::StringRef Comment, + llvm::BumpPtrAllocator &Allocator, + comments::CommandTraits &Traits) { + // The comment lexer expects markers, so add them back + auto CommentWithMarkers = "/*" + Comment.str() + "*/"; + + SourceManagerForFile SourceMgrForFile("mock_file.cpp", CommentWithMarkers); + SourceManager &SourceMgr = SourceMgrForFile.get(); + + comments::Lexer L(Allocator, SourceMgr.getDiagnostics(), Traits, + SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()), + CommentWithMarkers.data(), + CommentWithMarkers.data() + CommentWithMarkers.size()); + comments::Sema S(Allocator, SourceMgr, SourceMgr.getDiagnostics(), Traits, + nullptr); + comments::Parser P(L, S, Allocator, SourceMgr, SourceMgr.getDiagnostics(), + Traits); + + return P.parseFullComment(); +} + } // namespace clangd } // namespace clang diff --git a/clang-tools-extra/clangd/CodeCompletionStrings.h b/clang-tools-extra/clangd/CodeCompletionStrings.h index fa81ad64d406c3..b93420c68f32db 100644 --- a/clang-tools-extra/clangd/CodeCompletionStrings.h +++ b/clang-tools-extra/clangd/CodeCompletionStrings.h @@ -19,6 +19,11 @@ namespace clang { class ASTContext; +namespace comments { +class CommandTraits; +class FullComment; +} // namespace comments + namespace clangd { /// Gets a minimally formatted documentation comment of \p Result, with comment @@ -67,6 +72,12 @@ std::string formatDocumentation(const CodeCompletionString &CCS, /// is usually the return type of a function. std::string getReturnType(const CodeCompletionString &CCS); +/// Parse the \p Comment, storing the result in \p Allocator, assuming +/// that comment markers have already been stripped (e.g. via getDocComment()) +comments::FullComment *parseComment(llvm::StringRef Comment, + llvm::BumpPtrAllocator &Allocator, + comments::CommandTraits &Traits); + } // namespace clangd } // namespace clang diff --git a/clang/include/clang/Basic/SourceManager.h b/clang/include/clang/Basic/SourceManager.h index d2ece14da0b11a..07e3fca1641c73 100644 --- a/clang/include/clang/Basic/SourceManager.h +++ b/clang/include/clang/Basic/SourceManager.h @@ -1971,7 +1971,7 @@ class BeforeThanCompare<SourceRange> { }; /// SourceManager and necessary dependencies (e.g. VFS, FileManager) for a -/// single in-memorty file. +/// single in-memory file. class SourceManagerForFile { public: /// Creates SourceManager and necessary dependencies (e.g. VFS, FileManager). `````````` </details> https://github.com/llvm/llvm-project/pull/78491 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits