[clang-doc] Move file layout to the generators.
authorBrett Wilson <brettw@gmail.com>
Tue, 15 Nov 2022 20:51:45 +0000 (12:51 -0800)
committerBrett Wilson <brettw@gmail.com>
Tue, 22 Nov 2022 18:27:29 +0000 (10:27 -0800)
commitf8a469fc572778d05b72f34a772082cf3abd3cda
tree08f046a5f4bd7d46458cb9d24b4a6b657393cbff
parent24993e749ccd0b8f701f5d8cecaaa49cc205aaa2
[clang-doc] Move file layout to the generators.

Previously file naming and directory layout was handled on a per Info
object basis by ClangDocMain and the generators blindly wrote to the
files given. This means all generators must use the same file layout and
caused problems where multiple objects mapped to the same file. The
object collision problem happens most easily with template
specializations because the template parameters are not part of the
"name".

This patch moves the responsibility for output file organization to the
generators. Currently HTML and MD use the same structure as before. But
they now collect all objects that map to a given file and combine them,
avoiding the corruption problems.

Converts the YAML generator to naming files based on USR in one
directory. This is easier for downstream tools to manage and avoids
the naming problems with template specializations. Since this change
requires backward-incompatible output changes to referenced files anyway
(since each one is now an array), this is a good time to introduce this
change.

Differential Revision: https://reviews.llvm.org/D138073
clang-tools-extra/clang-doc/Generators.h
clang-tools-extra/clang-doc/HTMLGenerator.cpp
clang-tools-extra/clang-doc/MDGenerator.cpp
clang-tools-extra/clang-doc/YAMLGenerator.cpp
clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
clang-tools-extra/test/clang-doc/single-file-public.cpp
clang-tools-extra/test/clang-doc/single-file.cpp