diff --git a/lib/SymbolGraphGen/DeclarationFragmentPrinter.cpp b/lib/SymbolGraphGen/DeclarationFragmentPrinter.cpp index ae9e83a708aca..f31c6541a2fcd 100644 --- a/lib/SymbolGraphGen/DeclarationFragmentPrinter.cpp +++ b/lib/SymbolGraphGen/DeclarationFragmentPrinter.cpp @@ -136,7 +136,13 @@ void DeclarationFragmentPrinter::printStructurePre(PrintStructureKind Kind, void DeclarationFragmentPrinter::printTypeRef(Type T, const TypeDecl *RefTo, Identifier Name, PrintNameContext NameContext) { - openFragment(FragmentKind::TypeIdentifier); + if (Kind != FragmentKind::Attribute) { + openFragment(FragmentKind::TypeIdentifier); + } else { + // create a separate fragment so that only the attribute name is linkable + closeFragment(); + openFragment(FragmentKind::Attribute); + } printText(Name.str()); USR.clear(); diff --git a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Full/CustomAttr.swift b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Full/CustomAttr.swift index 88259dddadd7c..2ceb623647d1c 100644 --- a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Full/CustomAttr.swift +++ b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Full/CustomAttr.swift @@ -35,7 +35,7 @@ public func wrapped(@SomeWrapper arg: Int) {} // CHECK-NEXT: "spelling": "@" // CHECK-NEXT: }, // CHECK-NEXT: { -// CHECK-NEXT: "kind": "typeIdentifier", +// CHECK-NEXT: "kind": "attribute", // CHECK-NEXT: "spelling": "SomeWrapper", // CHECK-NEXT: "preciseIdentifier": "s:10CustomAttr11SomeWrapperV" // CHECK-NEXT: },