[clang-doc] add namespace references to VarInfo (#146964)

VarInfo was missing its addReference specialization. This causes errors
when a VarInfo is inside a namespace that isn't the global namespace.
This commit is contained in:
Erick Velez
2025-07-03 15:50:23 -07:00
committed by GitHub
parent 96f7f22825
commit 0a02c28e29
2 changed files with 47 additions and 0 deletions

View File

@@ -569,6 +569,17 @@ static llvm::Error addReference(T I, Reference &&R, FieldId F) {
"invalid type cannot contain Reference");
}
template <> llvm::Error addReference(VarInfo *I, Reference &&R, FieldId F) {
switch (F) {
case FieldId::F_namespace:
I->Namespace.emplace_back(std::move(R));
return llvm::Error::success();
default:
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"VarInfo cannot contain this Reference");
}
}
template <> llvm::Error addReference(TypeInfo *I, Reference &&R, FieldId F) {
switch (F) {
case FieldId::F_type:

View File

@@ -0,0 +1,36 @@
// RUN: rm -rf %t && mkdir -p %t
// RUN: clang-doc --output=%t --format=json --executor=standalone %s
// RUN: FileCheck %s < %t/nested/index.json --check-prefix=NESTED
// RUN: FileCheck %s < %t/nested/inner/index.json --check-prefix=INNER
namespace nested {
int Global;
namespace inner {
int InnerGlobal;
} // namespace inner
} // namespace nested
// NESTED: "Variables": [
// NESTED-NEXT: {
// NESTED-NEXT: "IsStatic": false,
// NESTED-NEXT: "Location": {
// NESTED-NEXT: "Filename": "{{.*}}nested-namespace.cpp",
// NESTED-NEXT: "LineNumber": 7
// NESTED-NEXT: },
// NESTED-NEXT: "Name": "Global",
// NESTED-NEXT: "Namespace": [
// NESTED-NEXT: "nested"
// NESTED-NEXT: ],
// INNER: "Variables": [
// INNER-NEXT: {
// INNER-NEXT: "IsStatic": false,
// INNER-NEXT: "Location": {
// INNER-NEXT: "Filename": "{{.*}}nested-namespace.cpp",
// INNER-NEXT: "LineNumber": 9
// INNER-NEXT: },
// INNER-NEXT: "Name": "InnerGlobal",
// INNER-NEXT: "Namespace": [
// INNER-NEXT: "inner",
// INNER-NEXT: "nested"
// INNER-NEXT: ],