[clang-tools-extra] [clang-doc] lower filename length limit by 5 (PR #155511)

Erick Velez via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 26 15:33:19 PDT 2025


https://github.com/evelez7 created https://github.com/llvm/llvm-project/pull/155511

The previous limit did not take into account filename extensions. Since
the extensions we use (.yaml, .json, .html, .md) are at most 5
characters, we can lower the limit by 5.

Also add some tests to make sure the rules are observed and don't
explicitly crash clang-doc.

>From 509159b26f8480cc6e85a3b9d836f434a9a31505 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvelez7 at gmail.com>
Date: Tue, 26 Aug 2025 15:30:33 -0700
Subject: [PATCH] [clang-doc] lower filename length limit by 5

The previous limit did not take into account filename extensions. Since
the extensions we use (.yaml, .json, .html, .md) are at most 5
characters, we can lower the limit by 5.

Also add some tests to make sure the rules are observed and don't
explicitly crash clang-doc.
---
 clang-tools-extra/clang-doc/Serialize.cpp      |  2 +-
 clang-tools-extra/test/clang-doc/long-name.cpp | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
 create mode 100644 clang-tools-extra/test/clang-doc/long-name.cpp

diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp
index bcab4f1b8a729..fdcf3b29fb754 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -778,7 +778,7 @@ static void populateSymbolInfo(SymbolInfo &I, const T *D, const FullComment *C,
     Mangler->mangleCXXVTable(CXXD, MangledStream);
   else
     MangledStream << D->getNameAsString();
-  if (MangledName.size() > 255)
+  if (MangledName.size() > 250)
     // File creation fails if the mangled name is too long, so default to the
     // USR. We should look for a better check since filesystems differ in
     // maximum filename length
diff --git a/clang-tools-extra/test/clang-doc/long-name.cpp b/clang-tools-extra/test/clang-doc/long-name.cpp
new file mode 100644
index 0000000000000..b33337588da19
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/long-name.cpp
@@ -0,0 +1,14 @@
+// RUN: rm -rf %t && mkdir -p %t
+// RUN: clang-doc --output=%t --format=mustache --executor=standalone %s
+// RUN: ls %t/json | FileCheck %s -check-prefix=CHECK-JSON
+// RUN: ls %t/html | FileCheck %s -check-prefix=CHECK-HTML
+
+struct ThisStructHasANameThatResultsInAMangledNameThatIsExactly250CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd12 {};
+
+// This name is 1 character over the limit, so it will be serialized as a USR.
+struct ThisStructHasANameThatResultsInAMangledNameThatIsExactly251CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd123 {};
+
+// CHECK-JSON: ThisStructHasANameThatResultsInAMangledNameThatIsExactly250CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd12.json
+// CHECK-JSON: {{[0-9A-F]*}}.json
+// CHECK-HTML: ThisStructHasANameThatResultsInAMangledNameThatIsExactly250CharactersLongThatIsSupposedToTestTheFilenameLengthLimitsWithinClangDocInOrdertoSeeifclangdocwillcrashornotdependingonthelengthofthestructIfTheLengthIsTooLongThenClangDocWillCrashAnd12.html
+// CHECK-HTML: {{[0-9A-F]*}}.html



More information about the cfe-commits mailing list