Author: Mohamed Emad Date: 2025-03-28T16:45:09-07:00 New Revision: 515d1ae679ea25687423be37abec74565d755921
URL: https://github.com/llvm/llvm-project/commit/515d1ae679ea25687423be37abec74565d755921 DIFF: https://github.com/llvm/llvm-project/commit/515d1ae679ea25687423be37abec74565d755921.diff LOG: [clang-doc] Add --repository-line-prefix argument (#131280) This PR adds a new command-line option that allows users to specify the prefix used for line-based anchors in repository URLs. Different repository interfaces use different formats for line anchors (GitHub uses `#L123`, googlesource uses `#123`, etc.). This option enables users to customize the line prefix to match their repository platform without requiring hard-coded values for each service. Fixes #59814 Added: Modified: clang-tools-extra/clang-doc/HTMLGenerator.cpp clang-tools-extra/clang-doc/MDGenerator.cpp clang-tools-extra/clang-doc/Representation.cpp clang-tools-extra/clang-doc/Representation.h clang-tools-extra/clang-doc/tool/ClangDocMain.cpp clang-tools-extra/test/clang-doc/basic-project.test clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 9b95d082fdfe7..f559933fc2283 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -490,15 +490,15 @@ genReferencesBlock(const std::vector<Reference> &References, } return Out; } +static std::unique_ptr<TagNode> writeSourceFileRef(const ClangDocContext &CDCtx, + const Location &L) { -static std::unique_ptr<TagNode> -writeFileDefinition(const Location &L, - std::optional<StringRef> RepositoryUrl = std::nullopt) { - if (!L.IsFileInRootDir && !RepositoryUrl) + if (!L.IsFileInRootDir && !CDCtx.RepositoryUrl) return std::make_unique<TagNode>( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + " of file " + L.Filename); - SmallString<128> FileURL(RepositoryUrl.value_or("")); + + SmallString<128> FileURL(CDCtx.RepositoryUrl.value_or("")); llvm::sys::path::append( FileURL, llvm::sys::path::Style::posix, // If we're on Windows, the file name will be in the wrong format, and @@ -516,11 +516,9 @@ writeFileDefinition(const Location &L, std::make_unique<TagNode>(HTMLTag::TAG_A, std::to_string(L.LineNumber)); // The links to a specific line in the source code use the github / // googlesource notation so it won't work for all hosting pages. - // FIXME: we probably should have a configuration setting for line number - // rendering in the HTML. For example, GitHub uses #L22, while googlesource - // uses #22 for line numbers. LocNumberNode->Attributes.emplace_back( - "href", (FileURL + "#" + std::to_string(L.LineNumber)).str()); + "href", formatv("{0}#{1}{2}", FileURL, + CDCtx.RepositoryLinePrefix.value_or(""), L.LineNumber)); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique<TextNode>(" of file ")); auto LocFileNode = std::make_unique<TagNode>( @@ -530,6 +528,13 @@ writeFileDefinition(const Location &L, return Node; } +static void maybeWriteSourceFileRef(std::vector<std::unique_ptr<TagNode>> &Out, + const ClangDocContext &CDCtx, + const std::optional<Location> &DefLoc) { + if (DefLoc) + Out.emplace_back(writeSourceFileRef(CDCtx, *DefLoc)); +} + static std::vector<std::unique_ptr<TagNode>> genHTML(const Index &Index, StringRef InfoPath, bool IsOutermostList); @@ -749,13 +754,7 @@ genHTML(const EnumInfo &I, const ClangDocContext &CDCtx) { Out.emplace_back(std::move(Table)); - if (I.DefLoc) { - if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); - else - Out.emplace_back( - writeFileDefinition(*I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); - } + maybeWriteSourceFileRef(Out, CDCtx, I.DefLoc); std::string Description; if (!I.Description.empty()) @@ -798,13 +797,7 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, } FunctionHeader->Children.emplace_back(std::make_unique<TextNode>(")")); - if (I.DefLoc) { - if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); - else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); - } + maybeWriteSourceFileRef(Out, CDCtx, I.DefLoc); std::string Description; if (!I.Description.empty()) @@ -865,13 +858,7 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, InfoTitle = (getTagType(I.TagType) + " " + I.Name).str(); Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_H1, InfoTitle)); - if (I.DefLoc) { - if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); - else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); - } + maybeWriteSourceFileRef(Out, CDCtx, I.DefLoc); std::string Description; if (!I.Description.empty()) diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index 7bef2c0db04d8..5c782fcc10da5 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -10,7 +10,9 @@ #include "Representation.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/Path.h" +#include "llvm/Support/raw_ostream.h" #include <string> using namespace llvm; @@ -50,22 +52,28 @@ static void writeHeader(const Twine &Text, unsigned int Num, raw_ostream &OS) { OS << std::string(Num, '#') + " " + Text << "\n\n"; } -static void writeFileDefinition(const ClangDocContext &CDCtx, const Location &L, - raw_ostream &OS) { +static void writeSourceFileRef(const ClangDocContext &CDCtx, const Location &L, + raw_ostream &OS) { if (!CDCtx.RepositoryUrl) { OS << "*Defined at " << L.Filename << "#" << std::to_string(L.LineNumber) << "*"; } else { - OS << "*Defined at [" << L.Filename << "#" << std::to_string(L.LineNumber) - << "](" << StringRef{*CDCtx.RepositoryUrl} - << llvm::sys::path::relative_path(L.Filename) << "#" - << std::to_string(L.LineNumber) << ")" - << "*"; + + OS << formatv("*Defined at [#{0}{1}{2}](#{0}{1}{3})*", + CDCtx.RepositoryLinePrefix.value_or(""), L.LineNumber, + L.Filename, *CDCtx.RepositoryUrl); } OS << "\n\n"; } +static void maybeWriteSourceFileRef(llvm::raw_ostream &OS, + const ClangDocContext &CDCtx, + const std::optional<Location> &DefLoc) { + if (DefLoc) + writeSourceFileRef(CDCtx, *DefLoc, OS); +} + static void writeDescription(const CommentInfo &I, raw_ostream &OS) { if (I.Kind == "FullComment") { for (const auto &Child : I.Children) @@ -142,8 +150,8 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, for (const auto &N : I.Members) Members << "| " << N.Name << " |\n"; writeLine(Members.str(), OS); - if (I.DefLoc) - writeFileDefinition(CDCtx, *I.DefLoc, OS); + + maybeWriteSourceFileRef(OS, CDCtx, I.DefLoc); for (const auto &C : I.Description) writeDescription(C, OS); @@ -170,8 +178,8 @@ static void genMarkdown(const ClangDocContext &CDCtx, const FunctionInfo &I, writeLine(genItalic(I.ReturnType.Type.QualName + " " + I.Name + "(" + Stream.str() + ")"), OS); - if (I.DefLoc) - writeFileDefinition(CDCtx, *I.DefLoc, OS); + + maybeWriteSourceFileRef(OS, CDCtx, I.DefLoc); for (const auto &C : I.Description) writeDescription(C, OS); @@ -230,8 +238,8 @@ static void genMarkdown(const ClangDocContext &CDCtx, const NamespaceInfo &I, static void genMarkdown(const ClangDocContext &CDCtx, const RecordInfo &I, llvm::raw_ostream &OS) { writeHeader(getTagType(I.TagType) + " " + I.Name, 1, OS); - if (I.DefLoc) - writeFileDefinition(CDCtx, *I.DefLoc, OS); + + maybeWriteSourceFileRef(OS, CDCtx, I.DefLoc); if (!I.Description.empty()) { for (const auto &C : I.Description) diff --git a/clang-tools-extra/clang-doc/Representation.cpp b/clang-tools-extra/clang-doc/Representation.cpp index fd206fb6a18cc..0947ecff72272 100644 --- a/clang-tools-extra/clang-doc/Representation.cpp +++ b/clang-tools-extra/clang-doc/Representation.cpp @@ -367,7 +367,8 @@ void Index::sort() { ClangDocContext::ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName, bool PublicOnly, StringRef OutDirectory, StringRef SourceRoot, - StringRef RepositoryUrl, StringRef Base, + StringRef RepositoryUrl, + StringRef RepositoryLinePrefix, StringRef Base, std::vector<std::string> UserStylesheets) : ECtx(ECtx), ProjectName(ProjectName), PublicOnly(PublicOnly), OutDirectory(OutDirectory), UserStylesheets(UserStylesheets), Base(Base) { @@ -381,6 +382,9 @@ ClangDocContext::ClangDocContext(tooling::ExecutionContext *ECtx, if (!RepositoryUrl.empty() && !RepositoryUrl.starts_with("http://") && !RepositoryUrl.starts_with("https://")) this->RepositoryUrl->insert(0, "https://"); + + if (!RepositoryLinePrefix.empty()) + this->RepositoryLinePrefix = std::string(RepositoryLinePrefix); } } diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h index 5473439cec319..2153b62864ee3 100644 --- a/clang-tools-extra/clang-doc/Representation.h +++ b/clang-tools-extra/clang-doc/Representation.h @@ -507,8 +507,8 @@ struct ClangDocContext { ClangDocContext() = default; ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName, bool PublicOnly, StringRef OutDirectory, StringRef SourceRoot, - StringRef RepositoryUrl, StringRef Base, - std::vector<std::string> UserStylesheets); + StringRef RepositoryUrl, StringRef RepositoryCodeLinePrefix, + StringRef Base, std::vector<std::string> UserStylesheets); tooling::ExecutionContext *ECtx; std::string ProjectName; // Name of project clang-doc is documenting. bool PublicOnly; // Indicates if only public declarations are documented. @@ -518,6 +518,8 @@ struct ClangDocContext { // the file is in this dir. // URL of repository that hosts code used for links to definition locations. std::optional<std::string> RepositoryUrl; + // Prefix of line code for repository. + std::optional<std::string> RepositoryLinePrefix; // Path of CSS stylesheets that will be copied to OutDirectory and used to // style all HTML files. std::vector<std::string> UserStylesheets; diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index a754f38a95447..c58d2060bc1e7 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -105,6 +105,11 @@ URL of repository that hosts code. Used for links to definition locations.)"), llvm::cl::cat(ClangDocCategory)); +static llvm::cl::opt<std::string> RepositoryCodeLinePrefix( + "repository-line-prefix", + llvm::cl::desc("Prefix of line code for repository."), + llvm::cl::cat(ClangDocCategory)); + enum OutputFormatTy { md, yaml, @@ -273,6 +278,7 @@ Example usage for a project using a compile commands database: OutDirectory, SourceRoot, RepositoryUrl, + RepositoryCodeLinePrefix, BaseDirectory, {UserStylesheets.begin(), UserStylesheets.end()}}; diff --git a/clang-tools-extra/test/clang-doc/basic-project.test b/clang-tools-extra/test/clang-doc/basic-project.test index 11beb7660040d..ef26e5b8916b4 100644 --- a/clang-tools-extra/test/clang-doc/basic-project.test +++ b/clang-tools-extra/test/clang-doc/basic-project.test @@ -3,6 +3,17 @@ // RUN: clang-doc --format=html --output=%t/docs --executor=all-TUs %t/build/compile_commands.json // RUN: FileCheck %s -input-file=%t/docs/index_json.js -check-prefix=JSON-INDEX +// RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Shape.html -check-prefix=HTML-SHAPE +// RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Calculator.html -check-prefix=HTML-CALC +// RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Rectangle.html -check-prefix=HTML-RECTANGLE +// RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Circle.html -check-prefix=HTML-CIRCLE + +// RUN: clang-doc --format=html --output=%t/docs-with-prefix --executor=all-TUs %t/build/compile_commands.json --repository=https://repository.com --repository-line-prefix=L +// RUN: FileCheck %s -input-file=%t/docs-with-prefix/GlobalNamespace/Shape.html -check-prefixes=HTML-SHAPE,SHAPE-LINE-PREFIX +// RUN: FileCheck %s -input-file=%t/docs-with-prefix/GlobalNamespace/Calculator.html -check-prefixes=HTML-CALC,CALC-LINE-PREFIX +// RUN: FileCheck %s -input-file=%t/docs-with-prefix/GlobalNamespace/Rectangle.html -check-prefixes=HTML-RECTANGLE,RECTANGLE-LINE-PREFIX +// RUN: FileCheck %s -input-file=%t/docs-with-prefix/GlobalNamespace/Circle.html -check-prefixes=HTML-CIRCLE,CIRCLE-LINE-PREFIX + // RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Shape.html -check-prefixes=HTML-SHAPE,SHAPE-NO-REPOSITORY // RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Calculator.html -check-prefixes=HTML-CALC,CALC-NO-REPOSITORY // RUN: FileCheck %s -input-file=%t/docs/GlobalNamespace/Rectangle.html -check-prefixes=HTML-RECTANGLE,RECTANGLE-NO-REPOSITORY @@ -75,6 +86,7 @@ // SHAPE-REPOSITORY: <p> // SHAPE-REPOSITORY-NEXT: Defined at line // SHAPE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Shape.h#8">8</a> +// SHAPE-LINE-PREFIX: <a href="https://repository.com/./include/Shape.h#L8">8</a> // SHAPE-REPOSITORY-NEXT: of file // SHAPE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Shape.h">Shape.h</a> // SHAPE-REPOSITORY-NEXT: </p> @@ -98,6 +110,7 @@ // SHAPE-NO-REPOSITORY: Defined at line 13 of file .{{.}}include{{.}}Shape.h // SHAPE-REPOSITORY: Defined at line // SHAPE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Shape.h#13">13</a> +// SHAPE-LINE-PREFIX: <a href="https://repository.com/./include/Shape.h#L13">13</a> // SHAPE-REPOSITORY-NEXT: of file // SHAPE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Shape.h">Shape.h</a> @@ -109,6 +122,7 @@ // CALC-REPOSITORY: <p> // CALC-REPOSITORY-NEXT: Defined at line // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./include/Calculator.h#8">8</a> +// CALC-LINE-PREFIX: <a href="https://repository.com/./include/Calculator.h#L8">8</a> // CALC-REPOSITORY-NEXT: of file // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./include/Calculator.h">Calculator.h</a> // CALC-REPOSITORY-NEXT: </p> @@ -121,6 +135,7 @@ // CALC-NO-REPOSITORY: Defined at line 3 of file .{{.}}src{{.}}Calculator.cpp // CALC-REPOSITORY: Defined at line // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp#3">3</a> +// CALC-LINE-PREFIX: <a href="https://repository.com/./src/Calculator.cpp#L3">3</a> // CALC-REPOSITORY-NEXT: of file // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp">Calculator.cpp</a> @@ -133,6 +148,7 @@ // CALC-NO-REPOSITORY: Defined at line 7 of file .{{.}}src{{.}}Calculator.cpp // CALC-REPOSITORY: Defined at line // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp#7">7</a> +// CALC-LINE-PREFIX: <a href="https://repository.com/./src/Calculator.cpp#L7">7</a> // CALC-REPOSITORY-NEXT: of file // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp">Calculator.cpp</a> @@ -145,6 +161,7 @@ // CALC-NO-REPOSITORY: Defined at line 11 of file .{{.}}src{{.}}Calculator.cpp // CALC-REPOSITORY: Defined at line // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp#11">11</a> +// CALC-LINE-PREFIX: <a href="https://repository.com/./src/Calculator.cpp#L11">11</a> // CALC-REPOSITORY-NEXT: of file // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp">Calculator.cpp</a> @@ -157,6 +174,7 @@ // CALC-NO-REPOSITORY: Defined at line 15 of file .{{.}}src{{.}}Calculator.cpp // CALC-REPOSITORY: Defined at line // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp#15">15</a> +// CALC-LINE-PREFIX: <a href="https://repository.com/./src/Calculator.cpp#L15">15</a> // CALC-REPOSITORY-NEXT: of file // CALC-REPOSITORY-NEXT: <a href="https://repository.com/./src/Calculator.cpp">Calculator.cpp</a> @@ -172,6 +190,7 @@ // RECTANGLE-REPOSITORY: <p> // RECTANGLE-REPOSITORY-NEXT: Defined at line // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Rectangle.h#10">10</a> +// RECTANGLE-LINE-PREFIX: <a href="https://repository.com/./include/Rectangle.h#L10">10</a> // RECTANGLE-REPOSITORY-NEXT: of file // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Rectangle.h">Rectangle.h</a> // RECTANGLE-REPOSITORY-NEXT: </p> @@ -192,6 +211,7 @@ // RECTANGLE-NO-REPOSITORY: Defined at line 3 of file .{{.}}src{{.}}Rectangle.cpp // RECTANGLE-REPOSITORY: Defined at line // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Rectangle.cpp#3">3</a> +// RECTANGLE-LINE-PREFIX: <a href="https://repository.com/./src/Rectangle.cpp#L3">3</a> // RECTANGLE-REPOSITORY-NEXT: of file // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Rectangle.cpp">Rectangle.cpp</a> @@ -202,6 +222,7 @@ // RECTANGLE-NO-REPOSITORY: Defined at line 6 of file .{{.}}src{{.}}Rectangle.cpp // RECTANGLE-REPOSITORY: Defined at line // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Rectangle.cpp#6">6</a> +// RECTANGLE-LINE-PREFIX: <a href="https://repository.com/./src/Rectangle.cpp#L6">6</a> // RECTANGLE-REPOSITORY-NEXT: of file // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Rectangle.cpp">Rectangle.cpp</a> @@ -214,6 +235,7 @@ // RECTANGLE-NO-REPOSITORY: Defined at line 10 of file .{{.}}src{{.}}Rectangle.cpp // RECTANGLE-REPOSITORY: Defined at line // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Rectangle.cpp#10">10</a> +// RECTANGLE-LINE-PREFIX: <a href="https://repository.com/./src/Rectangle.cpp#L10">10</a> // RECTANGLE-REPOSITORY-NEXT: of file // RECTANGLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Rectangle.cpp">Rectangle.cpp</a> // HTML-RECTANGLE: <div>brief</div> @@ -226,6 +248,7 @@ // CIRCLE-REPOSITORY: <p> // CIRCLE-REPOSITORY-NEXT: Defined at line // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Circle.h#10">10</a> +// CIRCLE-LINE-PREFIX: <a href="https://repository.com/./include/Circle.h#L10">10</a> // CIRCLE-REPOSITORY-NEXT: of file // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./include/Circle.h">Circle.h</a> // CIRCLE-REPOSITORY-NEXT: </p> @@ -246,6 +269,7 @@ // CIRCLE-NO-REPOSITORY: Defined at line 3 of file .{{.}}src{{.}}Circle.cpp // CIRCLE-REPOSITORY: Defined at line // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Circle.cpp#3">3</a> +// CIRCLE-LINE-PREFIX: <a href="https://repository.com/./src/Circle.cpp#L3">3</a> // CIRCLE-REPOSITORY-NEXT: of file // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Circle.cpp">Circle.cpp</a> @@ -256,6 +280,7 @@ // CIRCLE-NO-REPOSITORY: Defined at line 5 of file .{{.}}src{{.}}Circle.cpp // CIRCLE-REPOSITORY: Defined at line // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Circle.cpp#5">5</a> +// CIRCLE-LINE-PREFIX: <a href="https://repository.com/./src/Circle.cpp#L5">5</a> // CIRCLE-REPOSITORY-NEXT: of file // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Circle.cpp">Circle.cpp</a> @@ -268,6 +293,7 @@ // CIRCLE-NO-REPOSITORY: Defined at line 9 of file .{{.}}src{{.}}Circle.cpp // CIRCLE-REPOSITORY: Defined at line // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Circle.cpp#9">9</a> +// CIRCLE-LINE-PREFIX: <a href="https://repository.com/./src/Circle.cpp#L9">9</a> // CIRCLE-REPOSITORY-NEXT: of file // CIRCLE-REPOSITORY-NEXT: <a href="https://repository.com/./src/Circle.cpp">Circle.cpp</a> @@ -384,3 +410,4 @@ // MD-INDEX: # C/C++ Reference // MD-INDEX: * Namespace: [GlobalNamespace](GlobalNamespace) + diff --git a/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp index 66cf77d7b0f37..e440e11c07fdb 100644 --- a/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -28,9 +28,11 @@ std::unique_ptr<Generator> getHTMLGenerator() { ClangDocContext getClangDocContext(std::vector<std::string> UserStylesheets = {}, - StringRef RepositoryUrl = "", StringRef Base = "") { - ClangDocContext CDCtx{{}, "test-project", {}, {}, - {}, RepositoryUrl, Base, UserStylesheets}; + StringRef RepositoryUrl = "", + StringRef RepositoryLinePrefix = "", StringRef Base = "") { + ClangDocContext CDCtx{ + {}, "test-project", {}, {}, {}, RepositoryUrl, RepositoryLinePrefix, + Base, UserStylesheets}; CDCtx.UserStylesheets.insert( CDCtx.UserStylesheets.begin(), "../share/clang/clang-doc-default-stylesheet.css"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits