[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); hulxv wrote: > Perhaps its better if WriteFileDefinition just takes StringRef arguments > instead of optional? Then instead of checking the optional, you > can either just use the StringRef as is or at worst check for empty(). Do you > think that would allow us to simplify this code? Yup, I think that. it will be better https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/12] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/11] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: @ilovepi About `writeFileDefiniation`, what's your opinion about making it similar to the markdown generator like this? ```cpp static void writeFileDefinition(const ClangDocContext &CDCtx, const Location &L); ``` I think it's more better https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -490,15 +490,17 @@ genReferencesBlock(const std::vector &References, } return Out; } - static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { - if (!L.IsFileInRootDir && !RepositoryUrl) +writeFileDefinition(const ClangDocContext &CDCtx, const Location &L) { + std::string RepositoryUrl = CDCtx.RepositoryUrl.value_or(""); + std::string RepositoryLinePrefix = CDCtx.RepositoryLinePrefix.value_or(""); hulxv wrote: Is using `StringRef` better here then? https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -57,11 +58,13 @@ static void writeFileDefinition(const ClangDocContext &CDCtx, const Location &L, 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) << ")" - << "*"; + +std::string LineAnchor = +formatv("#{0}{1}", CDCtx.RepositoryLinePrefix.value_or(""), +std::to_string(L.LineNumber)); + +OS << formatv("*Defined at [{0}{1}]({0}{2})*", LineAnchor, L.Filename, + StringRef{*CDCtx.RepositoryUrl}); hulxv wrote: https://github.com/llvm/llvm-project/pull/131280#discussion_r2008862784 The same thing, it's more readable https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -749,13 +752,8 @@ 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})); - } + if (I.DefLoc) +Out.emplace_back(writeFileDefinition(CDCtx, *I.DefLoc)); hulxv wrote: The same should happen here? https://github.com/llvm/llvm-project/blob/6e4e88d4cccb4903dff4144cd86c4f966e4ae09c/clang-tools-extra/clang-doc/MDGenerator.cpp#L145-L146 https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv edited https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv created https://github.com/llvm/llvm-project/pull/131280 ### Description 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", chromium-project 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. Fix #59814 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/2] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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}))
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/4] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc][fix] crashes when generating HTML without `--repository` (PR #131698)
@@ -494,7 +494,7 @@ genReferencesBlock(const std::vector &References, static std::unique_ptr writeFileDefinition(const Location &L, std::optional RepositoryUrl = std::nullopt) { - if (!L.IsFileInRootDir && !RepositoryUrl) + if (!L.IsFileInRootDir || !RepositoryUrl) hulxv wrote: > This logic isn't correct, and happens to prevent us from effectively using > the --repository= string anywhere, as evidenced by our tests. The whole next logic depends on `RepositoryUrl`. how can we continue using it if it's not passed? > An alternative would be to change the deref of the option to use > .value_or("") instead. If `RepositoryUrl` is not passed, shouldn't we use `file://` protocol as I think? In this case, the `FileUrl` should be something like `file:///path/to/file`, not just an empty string https://github.com/llvm/llvm-project/pull/131698 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc][fix] crashes when generating HTML without `--repository` (PR #131698)
@@ -494,7 +494,7 @@ genReferencesBlock(const std::vector &References, static std::unique_ptr writeFileDefinition(const Location &L, std::optional RepositoryUrl = std::nullopt) { - if (!L.IsFileInRootDir && !RepositoryUrl) + if (!L.IsFileInRootDir || !RepositoryUrl) hulxv wrote: > #131894 adds more complete testing logic around the `--repository` flag. see > if the behavior you're trying to fix reproduces in the tests w/ that PR? yup, it's correct but I think we need to add some tests for single files also https://github.com/llvm/llvm-project/pull/131698 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc][fix] crashes when generating HTML without `--repository` (PR #131698)
hulxv wrote: @ilovepi I see you opened a PR to solve the same issue [here](https://github.com/llvm/llvm-project/pull/131939). Wouldn't be better if I continue working on it with your suggestions? 😅 https://github.com/llvm/llvm-project/pull/131698 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/9] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -57,7 +57,12 @@ static void writeFileDefinition(const ClangDocContext &CDCtx, const Location &L, OS << "*Defined at " << L.Filename << "#" << std::to_string(L.LineNumber) << "*"; } else { -OS << "*Defined at [" << L.Filename << "#" << std::to_string(L.LineNumber) +OS << "*Defined at [" << L.Filename << "#"; + +if (!CDCtx.RepositoryLinePrefix) + OS << StringRef{*CDCtx.RepositoryLinePrefix}; + +OS << std::to_string(L.LineNumber) hulxv wrote: What do you think about using `formatv` for the whole of this part as you referred to previously [here](https://github.com/llvm/llvm-project/pull/131280/files#r1996279237)? Is it not more readable? https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/8] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -749,13 +752,8 @@ 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})); - } + if (I.DefLoc) +Out.emplace_back(writeFileDefinition(CDCtx, *I.DefLoc)); hulxv wrote: Should we create a file containing shared functions (`Shared.cpp`, for example)? https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/7] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/16] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: Should I modify `HTMLGeneratorTest.cpp` to test `RepositoryLinePrefix`? https://github.com/llvm/llvm-project/blob/7a370748c0928b9ccfe26127e54eb3c1a1827d75/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp#L179 https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/15] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv created https://github.com/llvm/llvm-project/pull/132991 Closes #132983 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/17] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/15] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc][fix] crashes when generating HTML without `--repository` (PR #131698)
https://github.com/hulxv closed https://github.com/llvm/llvm-project/pull/131698 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/17] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: > The failures on the presubmit bot look unrelated, but you need to update your > branch, since it looks like the base revision is broken. Done https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/16] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/6] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: @ilovepi Ping https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: > While its not a problem, we typically wait for 1 week between reviews to > "ping" a reviewer. > https://llvm.org/docs/CodeReview.html#lgtm-how-a-patch-is-accepted Ok, I am sorry for that https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/18] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: > The branch has conflicts that need to be resolved. I think all is fine now https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: @ilovepi Hey, could you please review this PR whenever you have a moment? I’d really appreciate your feedback! https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv edited https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -518,10 +519,12 @@ struct ClangDocContext { // the file is in this dir. // URL of repository that hosts code used for links to definition locations. std::optional RepositoryUrl; + // Prefix of line code for repository. + std::optional RepositoryLinePrefix; // Path of CSS stylesheets that will be copied to OutDirectory and used to // style all HTML files. std::vector UserStylesheets; - // JavaScript files that will be imported in allHTML file. + // JavaScript files that will be imported in all HTML file. hulxv wrote: Do you want to discard it and make a separate PR? https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); hulxv wrote: I thought about that too. We can make a helper function that takes `Location` and `CDCtx` and makes this repeated operation. https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/2] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/2] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/8] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/8] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 3/8] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/Releas
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 Rate limit · GitHub body { background-color: #f6f8fa; color: #24292e; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; font-size: 14px; line-height: 1.5; margin: 0; } .container { margin: 50px auto; max-width: 600px; text-align: center; padding: 0 24px; } a { color: #0366d6; text-decoration: none; } a:hover { text-decoration: underline; } h1 { line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; text-shadow: 0 1px 0 #fff; } p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; } ul { list-style: none; margin: 25px 0; padding: 0; } li { display: table-cell; font-weight: bold; width: 1%; } .logo { display: inline-block; margin-top: 35px; } .logo-img-2x { display: none; } @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { .logo-img-1x { display: none; } .logo-img-2x { display: inline-block; } } #suggestions { margin-top: 35px; color: #ccc; } #suggestions a { color: #66; font-weight: 200; font-size: 14px; margin: 0 10px; } Whoa there! You have exceeded a secondary rate limit. Please wait a few minutes before you try again; in some cases this may take up to an hour. https://support.github.com/contact";>Contact Support — https://githubstatus.com";>GitHub Status — https://twitter.com/githubstatus";>@githubstatus ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
hulxv wrote: I think all is fine now https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 01/11] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 02/11] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 03/11] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 01/10] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 02/10] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 03/10] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/9] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/9] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 3/9] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/Releas
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
hulxv wrote: @AaronBallman Do you think we need to work on something in CommandLine to make the deprecation of commands easier and standardised for all tools? https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
@@ -183,9 +195,26 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) + +if (!Insert) { + llvm::errs() + << "[WARNING] -insert is deprecated in favor of `-disable-insert`. " + "The old flag was confusing since it suggested that inserts " + "were disabled by default, when they were actually enabled. " + "See https://github.com/llvm/llvm-project/issues/132983\n";; +} + +if (!Remove) { + llvm::errs() + << "[WARNING] -remove is deprecated in favor of `-disable-remove`. " + "The old flag was confusing since it suggested that removes " + "were disabled by default, when they were actually enabled. " + "See https://github.com/llvm/llvm-project/issues/132983\n";; +} + hulxv wrote: That will make the user need to `-remove=0` to use `-disable-remove` because `-remove` is true by default. Do you find that correct? https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
hulxv wrote: > LGTM! Do you need me to land the changes on your behalf? Yup, I don't have access yet https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 01/12] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 02/12] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 03/12] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/
[clang-tools-extra] [clang-doc][NFC] clean unused variable in HTML generator (PR #135505)
https://github.com/hulxv created https://github.com/llvm/llvm-project/pull/135505 While reading the code, I found some dead variables that are not used anymore but it still declared without removing them. I think it should be removed. CC @ilovepi @petrhosek >From 5c2d71ade401ad29335d1518ff48d9bad844da5a Mon Sep 17 00:00:00 2001 From: hulxv Date: Sat, 12 Apr 2025 03:05:44 +0200 Subject: [PATCH] [clang-doc][NFC] clean unused variable in HTML generator --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 4 1 file changed, 4 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index cb10f16804024..aceb83e8c4c57 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -716,7 +716,6 @@ genHTML(const EnumInfo &I, const ClangDocContext &CDCtx) { maybeWriteSourceFileRef(Out, CDCtx, I.DefLoc); - std::string Description; if (!I.Description.empty()) Out.emplace_back(genHTML(I.Description)); @@ -759,7 +758,6 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, maybeWriteSourceFileRef(Out, CDCtx, I.DefLoc); - std::string Description; if (!I.Description.empty()) Out.emplace_back(genHTML(I.Description)); @@ -777,7 +775,6 @@ genHTML(const NamespaceInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(HTMLTag::TAG_H1, InfoTitle)); - std::string Description; if (!I.Description.empty()) Out.emplace_back(genHTML(I.Description)); @@ -820,7 +817,6 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, maybeWriteSourceFileRef(Out, CDCtx, I.DefLoc); - std::string Description; if (!I.Description.empty()) Out.emplace_back(genHTML(I.Description)); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc][NFC] clean unused variable in HTML generator (PR #135505)
https://github.com/hulxv edited https://github.com/llvm/llvm-project/pull/135505 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
hulxv wrote: @AaronBallman @hokein can you please review this PR? https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/2] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From 9bbae72d13e2d3f221ea3f55266413d7a18eb03a Mon Sep 17 00:00:00 2001 From: hulxv Date: Thu, 17 Apr 2025 13:52:17 +0200 Subject: [PATCH 2/2] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/test/tool.cpp | 8 .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index 8b723a5bf40e2..2584f75b6a54c 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -14,6 +14,14 @@ int x = foo(); // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" +// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// INSERT-NOT: - "foobar.h" +// INSERT: + "foo.h" + +// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// REMOVE: - "foobar.h" +// REMOVE-NOT: + "foo.h" + //RUN: clang-include-cleaner -print=changes %s --ignore-headers="foobar\.h,foo\.h" -- -I%S/Inputs/ | FileCheck --match-full-lines --allow-empty --check-prefix=IGNORE %s // IGNORE-NOT: - "foobar.h" // IGNORE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
hulxv wrote: > Do we need a deprecation period for this change? This will break anyone using > the old names in scripts and whatnot. > > Also, the changes will need something in the release notes so users know > about the new names. Is there a specific way to mark flags as deprecated? I didn't find anything like that in [`Support/CommandLine`](https://github.com/llvm/llvm-project/blob/main/llvm/lib/Support/CommandLine.cpp). It will be useful if we implement something like that to mark a specific flag as deprecated, and it will appear when the user shows the help message https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/4] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/4] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 3/4] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/Releas
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/5] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/5] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 3/5] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/Releas
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/7] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/7] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 3/7] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/Releas
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/132991 >From c476948593a80ed31765cdd711a626e4e03930ab Mon Sep 17 00:00:00 2001 From: hulxv Date: Tue, 25 Mar 2025 22:56:51 +0200 Subject: [PATCH 1/6] [include-cleaner] rename enabled flags to `disable-*` --- .../include-cleaner/test/tool.cpp | 4 ++-- .../include-cleaner/tool/IncludeCleaner.cpp | 20 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/include-cleaner/test/tool.cpp b/clang-tools-extra/include-cleaner/test/tool.cpp index d72d2317ce2b1..8b723a5bf40e2 100644 --- a/clang-tools-extra/include-cleaner/test/tool.cpp +++ b/clang-tools-extra/include-cleaner/test/tool.cpp @@ -6,11 +6,11 @@ int x = foo(); // CHANGE: - "foobar.h" // CHANGE-NEXT: + "foo.h" -// RUN: clang-include-cleaner -remove=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s +// RUN: clang-include-cleaner -disable-remove -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=INSERT %s // INSERT-NOT: - "foobar.h" // INSERT: + "foo.h" -// RUN: clang-include-cleaner -insert=0 -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s +// RUN: clang-include-cleaner -disable-insert -print=changes %s -- -I%S/Inputs/ | FileCheck --check-prefix=REMOVE %s // REMOVE: - "foobar.h" // REMOVE-NOT: + "foo.h" diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 1d9458ffc4d32..472611073f732 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -91,16 +91,16 @@ cl::opt Edit{ cl::cat(IncludeCleaner), }; -cl::opt Insert{ -"insert", -cl::desc("Allow header insertions"), -cl::init(true), +cl::opt DisableInsert{ +"disable-insert", +cl::desc("DIsable header insertions"), +cl::init(false), cl::cat(IncludeCleaner), }; -cl::opt Remove{ -"remove", -cl::desc("Allow header removals"), -cl::init(true), +cl::opt DisableRemove{ +"disable-remove", +cl::desc("Disable header removals"), +cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +183,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (!Insert) +if (DisableInsert) Results.Missing.clear(); -if (!Remove) +if (DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From e2f78ab69f656313fc87b004506abc1deb096189 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 18 Apr 2025 08:59:03 +0200 Subject: [PATCH 2/6] [include-cleaner] return `--remove` and `--insert` to be in deprecation period --- .../include-cleaner/tool/IncludeCleaner.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 472611073f732..7a07d09ce277d 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -90,10 +90,21 @@ cl::opt Edit{ cl::desc("Apply edits to analyzed source files"), cl::cat(IncludeCleaner), }; - +cl::opt Insert{ +"insert", +cl::desc("Allow header insertions"), +cl::init(true), +cl::cat(IncludeCleaner), +}; +cl::opt Remove{ +"remove", +cl::desc("Allow header removals"), +cl::init(true), +cl::cat(IncludeCleaner), +}; cl::opt DisableInsert{ "disable-insert", -cl::desc("DIsable header insertions"), +cl::desc("Disable header insertions"), cl::init(false), cl::cat(IncludeCleaner), }; @@ -183,9 +194,9 @@ class Action : public clang::ASTFrontendAction { auto Results = analyze(AST.Roots, PP.MacroReferences, PP.Includes, &PI, getCompilerInstance().getPreprocessor(), HeaderFilter); -if (DisableInsert) +if (!Insert || DisableInsert) Results.Missing.clear(); -if (DisableRemove) +if (!Remove || DisableRemove) Results.Unused.clear(); std::string Final = fixIncludes(Results, AbsPath, Code, getStyle(AbsPath)); >From b7dd110307c0ba467022775398b9bd2ab66517f5 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 25 Apr 2025 19:30:55 +0300 Subject: [PATCH 3/6] [clang-tools-extra] add note for deprecation of `-remove` and `-insert` --- clang-tools-extra/docs/ReleaseNotes.rst | 8 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 72aa05eb4dcd1..8b39fa09e2839 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/Releas
[clang-tools-extra] [include-cleaner] rename enabled flags to `disable-*` (PR #132991)
hulxv wrote: > If Insert or Remove is true, we should diagnose those as being deprecated and > recommend using disable-insert or disable-remove instead. `Insert` and `Remove` are true by default. Should it not be as false? Also, the recommendation should be as regular `stdout` message, or is there a specific function for that? > A release note should be added to clang-tools-extra/docs/ReleaseNotes.rst so > users know about the change and new flags. Is there a specific format for this note? https://github.com/llvm/llvm-project/pull/132991 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: It works without problems now😄 https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/17] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/7] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
hulxv wrote: @ilovepi done https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/10] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/10] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 1/9] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/10] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/10] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
https://github.com/hulxv updated https://github.com/llvm/llvm-project/pull/131280 >From bf9bd4156cb7f652c9cf0477f537e5c58b470448 Mon Sep 17 00:00:00 2001 From: hulxv Date: Fri, 14 Mar 2025 07:39:15 +0200 Subject: [PATCH 01/14] [clang-doc] [feat] add `--repository-line-prefix` argument (fix #59814) --- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 66 --- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 +- .../clang-doc/Representation.cpp | 4 ++ clang-tools-extra/clang-doc/Representation.h | 5 +- .../clang-doc/tool/ClangDocMain.cpp | 13 ++-- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 18a0de826630c..967275f93193b 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -491,9 +491,9 @@ genReferencesBlock(const std::vector &References, return Out; } -static std::unique_ptr -writeFileDefinition(const Location &L, -std::optional RepositoryUrl = std::nullopt) { +static std::unique_ptr writeFileDefinition( +const Location &L, std::optional RepositoryUrl = std::nullopt, +std::optional RepositoryLinePrefix = std::nullopt) { if (!L.IsFileInRootDir && !RepositoryUrl) return std::make_unique( HTMLTag::TAG_P, "Defined at line " + std::to_string(L.LineNumber) + @@ -514,17 +514,21 @@ writeFileDefinition(const Location &L, Node->Children.emplace_back(std::make_unique("Defined at line ")); auto LocNumberNode = std::make_unique(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()); + + std::string LineAnchor = "#"; + + if (RepositoryLinePrefix) +LineAnchor += RepositoryLinePrefix.value().str(); + + LineAnchor += std::to_string(L.LineNumber); + + LocNumberNode->Attributes.emplace_back("href", (FileURL + LineAnchor).str()); Node->Children.emplace_back(std::move(LocNumberNode)); Node->Children.emplace_back(std::make_unique(" of file ")); + auto LocFileNode = std::make_unique( HTMLTag::TAG_A, llvm::sys::path::filename(FileURL)); + LocFileNode->Attributes.emplace_back("href", std::string(FileURL)); Node->Children.emplace_back(std::move(LocFileNode)); return Node; @@ -750,11 +754,15 @@ 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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -799,11 +807,15 @@ genHTML(const FunctionInfo &I, const ClangDocContext &CDCtx, FunctionHeader->Children.emplace_back(std::make_unique(")")); if (I.DefLoc) { -if (!CDCtx.RepositoryUrl) - Out.emplace_back(writeFileDefinition(*I.DefLoc)); -else - Out.emplace_back(writeFileDefinition( - *I.DefLoc, StringRef{*CDCtx.RepositoryUrl})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; @@ -866,11 +878,15 @@ genHTML(const RecordInfo &I, Index &InfoIndex, const ClangDocContext &CDCtx, Out.emplace_back(std::make_unique(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})); +std::optional RepoUrl; +std::optional RepoLinePrefix; + +if (CDCtx.RepositoryUrl) + RepoUrl = StringRef{*CDCtx.RepositoryUrl}; +if (CDCtx.RepositoryLinePrefix) + RepoLinePrefix = StringRef{*CDCtx.RepositoryLinePrefix}; + +Out.emplace_back(writeFileDefinition(*I.DefLoc, RepoUrl, RepoLinePrefix)); } std::string Description; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-too
[clang-tools-extra] [clang-doc] [feat] add --repository-line-prefix argument (PR #131280)
@@ -516,15 +518,16 @@ writeFileDefinition(const Location &L, std::make_unique(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()); + std::string LineAnchor = + formatv("#{0}{1}", RepositoryLinePrefix, L.LineNumber); hulxv wrote: More readable as I think? https://github.com/llvm/llvm-project/pull/131280 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [lld] [llvm] [polly] Fix regression tests with bad FileCheck checks (PR #140373)
https://github.com/hulxv closed https://github.com/llvm/llvm-project/pull/140373 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [lld] [llvm] [polly] Fix regression tests with bad FileCheck checks (PR #140373)
https://github.com/hulxv approved this pull request. https://github.com/llvm/llvm-project/pull/140373 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [lld] [llvm] [polly] Fix regression tests with bad FileCheck checks (PR #140373)
@@ -377,7 +377,7 @@ void foo18() { // CHECK-NEXT: [[A:%.*a.*]] = getelementptr inbounds nuw [[STRUCT_G]], ptr [[G]], i32 0, i32 0 // CHECK-NEXT: store i32 2, ptr [[A]], align 4 // CHECK-NEXT: [[F:%.*]] = getelementptr inbounds i8, ptr [[G]], i64 4 -// CHECk-NEXT: call void @{{.*F.*}}(ptr noundef nonnull align 1 dereferenceable(1)) [[F]], ie32 noundef 1) +// CHECK-NEXT: call void @{{.*F.*}}(ptr noundef nonnull align 1 dereferenceable(1)) [[F]], ie32 noundef 1) hulxv wrote: ```suggestion // CHECK-NEXT: call void @{{.*F.*}}(ptr noundef nonnull align 1 dereferenceable(1) [[F]], i32 noundef 1) ``` I think there are some typos here that cause the failure in the tests https://github.com/llvm/llvm-project/pull/140373 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [lld] [llvm] [polly] Fix regression tests with bad FileCheck checks (PR #140373)
@@ -14,7 +14,7 @@ // CHECK-DAG: @"_TI5?AUY@@" = linkonce_odr unnamed_addr constant %eh.ThrowInfo { i32 0, ptr @"??_DY@@QAEXXZ", ptr null, ptr @"_CTA5?AUY@@" }, section ".xdata", comdat // CHECK-DAG: @"_CT??_R0?AUDefault@@@8??_ODefault@@QAEXAAU0@@Z1" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUDefault@@@8", i32 0, i32 -1, i32 0, i32 1, ptr @"??_ODefault@@QAEXAAU0@@Z" }, section ".xdata", comdat // CHECK-DAG: @"_CT??_R0?AUDeletedCopy@@@81" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUDeletedCopy@@@8", i32 0, i32 -1, i32 0, i32 1, ptr null }, section ".xdata", comdat -// CHECk-DAG: @"_CT??_R0?AUMoveOnly@@@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUMoveOnly@@@8", i32 0, i321-1, i32 0, i32 4, ptr null }, section ".xdata", comda +// CHECK-DAG: @"_CT??_R0?AUMoveOnly@@@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUMoveOnly@@@8", i32 0, i321-1, i32 0, i32 4, ptr null }, section ".xdata", comda hulxv wrote: ```suggestion // CHECK-DAG: @"_CT??_R0?AUMoveOnly@@@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 0, ptr @"??_R0?AUMoveOnly@@@8", i32 0, i32 -1, i32 0, i32 4, ptr null }, section ".xdata", comdat ``` More typos https://github.com/llvm/llvm-project/pull/140373 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits