https://github.com/tom-anders updated https://github.com/llvm/llvm-project/pull/78491
>From 640318fcf475a82b5483889795e2bd906b7b3c9c Mon Sep 17 00:00:00 2001 From: Tom Praschan <13141438+tom-and...@users.noreply.github.com> Date: Sat, 18 Feb 2023 15:54:09 +0100 Subject: [PATCH] [clangd] Support parsing comments without ASTContext This is in preparation for implementing doxygen parsing, see discussion in https://github.com/clangd/clangd/issues/529. Differential Revision: https://reviews.llvm.org/D143112 --- .../clangd/CodeCompletionStrings.cpp | 24 +++++++++++++++++++ .../clangd/CodeCompletionStrings.h | 11 +++++++++ clang/include/clang/Basic/SourceManager.h | 2 +- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clangd/CodeCompletionStrings.cpp b/clang-tools-extra/clangd/CodeCompletionStrings.cpp index 2075e5965f181ed..540eaa9a3eb6d74 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 fa81ad64d406c3b..b93420c68f32dba 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 d2ece14da0b11ab..07e3fca1641c738 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). _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits