//===--- CodeCompletionStrings.h ---------------------------------*- C++-*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===---------------------------------------------------------------------===// // // Functions for retrieving code completion information from // `CodeCompletionString`. // //===---------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_CODECOMPLETIONSTRINGS_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_CODECOMPLETIONSTRINGS_H #include "clang/Sema/CodeCompleteConsumer.h" namespace clang { class ASTContext; namespace clangd { /// Gets a minimally formatted documentation comment of \p Result, with comment /// markers stripped. See clang::RawComment::getFormattedText() for the detailed /// explanation of how the comment text is transformed. /// Returns empty string when no comment is available. /// If \p CommentsFromHeaders parameter is set, only comments from the main /// file will be returned. It is used to workaround crashes when parsing /// comments in the stale headers, coming from completion preamble. std::string getDocComment(const ASTContext &Ctx, const CodeCompletionResult &Result, bool CommentsFromHeaders); /// Gets a minimally formatted documentation for parameter of \p Result, /// corresponding to argument number \p ArgIndex. /// This currently looks for comments attached to the parameter itself, and /// doesn't extract them from function documentation. /// Returns empty string when no comment is available. /// If \p CommentsFromHeaders parameter is set, only comments from the main /// file will be returned. It is used to workaround crashes when parsing /// comments in the stale headers, coming from completion preamble. std::string getParameterDocComment(const ASTContext &Ctx, const CodeCompleteConsumer::OverloadCandidate &Result, unsigned ArgIndex, bool CommentsFromHeaders); /// Gets label and insert text for a completion item. For example, for function /// `Foo`, this returns <"Foo(int x, int y)", "Foo"> without snippts enabled. /// /// If \p EnableSnippets is true, this will try to use snippet for the insert /// text. Otherwise, the insert text will always be plain text. void getLabelAndInsertText(const CodeCompletionString &CCS, std::string *Label, std::string *InsertText, bool EnableSnippets); /// Assembles formatted documentation for a completion result. This includes /// documentation comments and other relevant information like annotations. /// /// \param DocComment is a documentation comment for the original declaration, /// it should be obtained via getDocComment or getParameterDocComment. std::string formatDocumentation(const CodeCompletionString &CCS, llvm::StringRef DocComment); /// Gets detail to be used as the detail field in an LSP completion item. This /// is usually the return type of a function. std::string getDetail(const CodeCompletionString &CCS); /// Gets the piece of text that the user is expected to type to match the /// code-completion string, typically a keyword or the name of a declarator or /// macro. std::string getFilterText(const CodeCompletionString &CCS); } // namespace clangd } // namespace clang #endif