1 //===-- Generators.h - ClangDoc Generator ----------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // Generator classes for converting declaration information into documentation 9 // in a specified format. 10 //===----------------------------------------------------------------------===// 11 12 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H 13 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H 14 15 #include "Representation.h" 16 #include "llvm/Support/Error.h" 17 #include "llvm/Support/Registry.h" 18 19 namespace clang { 20 namespace doc { 21 22 // Abstract base class for generators. 23 // This is expected to be implemented and exposed via the GeneratorRegistry. 24 class Generator { 25 public: 26 virtual ~Generator() = default; 27 28 // Write out the decl info for the objects in the given map in the specified 29 // format. 30 virtual llvm::Error 31 generateDocs(StringRef RootDir, 32 llvm::StringMap<std::unique_ptr<doc::Info>> Infos, 33 const ClangDocContext &CDCtx) = 0; 34 35 // This function writes a file with the index previously constructed. 36 // It can be overwritten by any of the inherited generators. 37 // If the override method wants to run this it should call 38 // Generator::createResources(CDCtx); 39 virtual llvm::Error createResources(ClangDocContext &CDCtx); 40 41 // Write out one specific decl info to the destination stream. 42 virtual llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, 43 const ClangDocContext &CDCtx) = 0; 44 45 static void addInfoToIndex(Index &Idx, const doc::Info *Info); 46 }; 47 48 typedef llvm::Registry<Generator> GeneratorRegistry; 49 50 llvm::Expected<std::unique_ptr<Generator>> 51 findGeneratorByName(llvm::StringRef Format); 52 53 std::string getTagType(TagTypeKind AS); 54 55 } // namespace doc 56 } // namespace clang 57 58 namespace llvm { 59 extern template class Registry<clang::doc::Generator>; 60 } // namespace llvm 61 62 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H 63