1 //===-- Generators.h - ClangDoc Generator ----------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
8 // Generator classes for converting declaration information into documentation
9 // in a specified format.
10 //===----------------------------------------------------------------------===//
12 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H
13 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H
15 #include "Representation.h"
16 #include "llvm/Support/Error.h"
17 #include "llvm/Support/Registry.h"
22 // Abstract base class for generators.
23 // This is expected to be implemented and exposed via the GeneratorRegistry.
26 virtual ~Generator() = default;
28 // Write out the decl info for the objects in the given map in the specified
31 generateDocs(StringRef RootDir
,
32 llvm::StringMap
<std::unique_ptr
<doc::Info
>> Infos
,
33 const ClangDocContext
&CDCtx
) = 0;
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
);
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;
45 static void addInfoToIndex(Index
&Idx
, const doc::Info
*Info
);
48 typedef llvm::Registry
<Generator
> GeneratorRegistry
;
50 llvm::Expected
<std::unique_ptr
<Generator
>>
51 findGeneratorByName(llvm::StringRef Format
);
53 std::string
getTagType(TagTypeKind AS
);
59 extern template class Registry
<clang::doc::Generator
>;
62 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H