-
Notifications
You must be signed in to change notification settings - Fork 10.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clangd] Support parsing comments without ASTContext #78491
base: main
Are you sure you want to change the base?
Conversation
This is in preparation for implementing doxygen parsing, see discussion in clangd/clangd#529. Differential Revision: https://reviews.llvm.org/D143112
@llvm/pr-subscribers-clang @llvm/pr-subscribers-clangd Author: Tom Praschan (tom-anders) ChangesThis is in preparation for implementing doxygen parsing, see discussion in clangd/clangd#529. (Old Phabricator review: https://reviews.llvm.org/D143112) Full diff: https://github.com/llvm/llvm-project/pull/78491.diff 3 Files Affected:
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).
|
When will this ever get merged? Would really like to see |
Well, the last ready-to-go PR was from September (#65448), so probably a while. |
@aaronliu0130 Do you know if a patch for this exists? |
As mentioned in clangd/clangd#529 (comment), they're here. Hopefully you can follow the build instructions. |
This is in preparation for implementing doxygen parsing, see discussion in clangd/clangd#529.
(Old Phabricator review: https://reviews.llvm.org/D143112)