diff --git a/lib/SymbolGraphGen/SymbolGraph.cpp b/lib/SymbolGraphGen/SymbolGraph.cpp index fb60ff321df7..29ade8e54f16 100644 --- a/lib/SymbolGraphGen/SymbolGraph.cpp +++ b/lib/SymbolGraphGen/SymbolGraph.cpp @@ -48,9 +48,9 @@ PrintOptions SymbolGraph::getDeclarationFragmentsPrintOptions() const { Opts.FunctionDefinitions = false; Opts.ArgAndParamPrinting = PrintOptions::ArgAndParamPrintingMode::MatchSource; - Opts.PrintGetSetOnRWProperties = false; - Opts.PrintPropertyAccessors = false; - Opts.PrintSubscriptAccessors = false; + Opts.PrintGetSetOnRWProperties = true; + Opts.PrintPropertyAccessors = true; + Opts.PrintSubscriptAccessors = true; Opts.SkipUnderscoredKeywords = true; Opts.SkipAttributes = true; Opts.PrintOverrideKeyword = true; @@ -76,6 +76,16 @@ SymbolGraph::getSubHeadingDeclarationFragmentsPrintOptions() const { auto Options = getDeclarationFragmentsPrintOptions(); Options.ArgAndParamPrinting = PrintOptions::ArgAndParamPrintingMode::ArgumentOnly; + + //--------------------------------------------------------------------------// + // Although we want these in the full declaration presentation, + // particularly for protocol requirements, + // we don't want to show these in subheadings. + Options.PrintGetSetOnRWProperties = false; + Options.PrintPropertyAccessors = false; + Options.PrintSubscriptAccessors = false; + //--------------------------------------------------------------------------// + Options.VarInitializers = false; Options.PrintDefaultArgumentValue = false; Options.PrintEmptyArgumentNames = false; diff --git a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/DeclarationFragments.swift b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Basic.swift similarity index 81% rename from test/SymbolGraph/Symbols/Mixins/DeclarationFragments/DeclarationFragments.swift rename to test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Basic.swift index 423f5d73cf92..2c46cf5c7c85 100644 --- a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/DeclarationFragments.swift +++ b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Basic.swift @@ -1,7 +1,7 @@ // RUN: %empty-directory(%t) -// RUN: %target-build-swift %s -module-name DeclarationFragments -emit-module -emit-module-path %t/ -// RUN: %target-swift-symbolgraph-extract -module-name DeclarationFragments -I %t -pretty-print -output-dir %t -// RUN: %FileCheck %s --input-file %t/DeclarationFragments.symbols.json +// RUN: %target-build-swift %s -module-name Basic -emit-module -emit-module-path %t/ +// RUN: %target-swift-symbolgraph-extract -module-name Basic -I %t -pretty-print -output-dir %t +// RUN: %FileCheck %s --input-file %t/Basic.symbols.json public func foo(f: @escaping () -> (), ext int: Int = 2, s: S) {} diff --git a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/ComputedProperties.swift b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/ComputedProperties.swift new file mode 100644 index 000000000000..250bbb694268 --- /dev/null +++ b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/ComputedProperties.swift @@ -0,0 +1,162 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift %s -module-name ComputedProperties -emit-module -emit-module-path %t/ +// RUN: %target-swift-symbolgraph-extract -module-name ComputedProperties -I %t -pretty-print -output-dir %t +// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=XFULL +// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=XSUBHEADING +// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=YFULL +// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=YSUBHEADING + +public struct S { + // We should show { get set } here for the + // full declaration, but not for subheadings. + public var x: Int { + get { return 7 } + set {} + } + public private(set) var y: Int { + get { return 7 } + set {} + } +} + +// XFULL-LABEL: "precise": "s:18ComputedProperties1SV1xSivp" +// XFULL: "declarationFragments": [ +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "keyword", +// XFULL-NEXT: "spelling": "var" +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "text", +// XFULL-NEXT: "spelling": " " +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "identifier", +// XFULL-NEXT: "spelling": "x" +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "text", +// XFULL-NEXT: "spelling": ": " +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "typeIdentifier", +// XFULL-NEXT: "spelling": "Int", +// XFULL-NEXT: "preciseIdentifier": "s:Si" +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "text", +// XFULL-NEXT: "spelling": " { " +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "keyword", +// XFULL-NEXT: "spelling": "get" +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "text", +// XFULL-NEXT: "spelling": " " +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "keyword", +// XFULL-NEXT: "spelling": "set" +// XFULL-NEXT: }, +// XFULL-NEXT: { +// XFULL-NEXT: "kind": "text", +// XFULL-NEXT: "spelling": " }" +// XFULL-NEXT: } +// XFULL-NEXT: ], + +// XSUBHEADING-LABEL: "precise": "s:18ComputedProperties1SV1xSivp" +// XSUBHEADING: names +// XSUBHEADING: "subHeading": [ +// XSUBHEADING-NEXT: { +// XSUBHEADING-NEXT: "kind": "keyword", +// XSUBHEADING-NEXT: "spelling": "var" +// XSUBHEADING-NEXT: }, +// XSUBHEADING-NEXT: { +// XSUBHEADING-NEXT: "kind": "text", +// XSUBHEADING-NEXT: "spelling": " " +// XSUBHEADING-NEXT: }, +// XSUBHEADING-NEXT: { +// XSUBHEADING-NEXT: "kind": "identifier", +// XSUBHEADING-NEXT: "spelling": "x" +// XSUBHEADING-NEXT: }, +// XSUBHEADING-NEXT: { +// XSUBHEADING-NEXT: "kind": "text", +// XSUBHEADING-NEXT: "spelling": ": " +// XSUBHEADING-NEXT: }, +// XSUBHEADING-NEXT: { +// XSUBHEADING-NEXT: "kind": "typeIdentifier", +// XSUBHEADING-NEXT: "spelling": "Int", +// XSUBHEADING-NEXT: "preciseIdentifier": "s:Si" +// XSUBHEADING-NEXT: } +// XSUBHEADING-NEXT: ] + +// YFULL-LABEL: "precise": "s:18ComputedProperties1SV1ySivp" +// YFULL: "declarationFragments": [ +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "keyword", +// YFULL-NEXT: "spelling": "var" +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "text", +// YFULL-NEXT: "spelling": " " +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "identifier", +// YFULL-NEXT: "spelling": "y" +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "text", +// YFULL-NEXT: "spelling": ": " +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "typeIdentifier", +// YFULL-NEXT: "spelling": "Int", +// YFULL-NEXT: "preciseIdentifier": "s:Si" +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "text", +// YFULL-NEXT: "spelling": " { " +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "keyword", +// YFULL-NEXT: "spelling": "get" +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "text", +// YFULL-NEXT: "spelling": " " +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "keyword", +// YFULL-NEXT: "spelling": "set" +// YFULL-NEXT: }, +// YFULL-NEXT: { +// YFULL-NEXT: "kind": "text", +// YFULL-NEXT: "spelling": " }" +// YFULL-NEXT: } +// YFULL-NEXT: ] + +// YSUBHEADING-LABEL: "precise": "s:18ComputedProperties1SV1ySivp" +// YSUBHEADING: names +// YSUBHEADING: "subHeading": [ +// YSUBHEADING-NEXT: { +// YSUBHEADING-NEXT: "kind": "keyword", +// YSUBHEADING-NEXT: "spelling": "var" +// YSUBHEADING-NEXT: }, +// YSUBHEADING-NEXT: { +// YSUBHEADING-NEXT: "kind": "text", +// YSUBHEADING-NEXT: "spelling": " " +// YSUBHEADING-NEXT: }, +// YSUBHEADING-NEXT: { +// YSUBHEADING-NEXT: "kind": "identifier", +// YSUBHEADING-NEXT: "spelling": "y" +// YSUBHEADING-NEXT: }, +// YSUBHEADING-NEXT: { +// YSUBHEADING-NEXT: "kind": "text", +// YSUBHEADING-NEXT: "spelling": ": " +// YSUBHEADING-NEXT: }, +// YSUBHEADING-NEXT: { +// YSUBHEADING-NEXT: "kind": "typeIdentifier", +// YSUBHEADING-NEXT: "spelling": "Int", +// YSUBHEADING-NEXT: "preciseIdentifier": "s:Si" +// YSUBHEADING-NEXT: } +// YSUBHEADING-NEXT: ] diff --git a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/ProtocolRequirements.swift b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/ProtocolRequirements.swift new file mode 100644 index 000000000000..d4e74ea18418 --- /dev/null +++ b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/ProtocolRequirements.swift @@ -0,0 +1,82 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift %s -module-name ProtocolRequirements -emit-module -emit-module-path %t/ +// RUN: %target-swift-symbolgraph-extract -module-name ProtocolRequirements -I %t -pretty-print -output-dir %t +// RUN: %FileCheck %s --input-file %t/ProtocolRequirements.symbols.json --check-prefix=FULL +// RUN: %FileCheck %s --input-file %t/ProtocolRequirements.symbols.json --check-prefix=SUBHEADING + +public protocol P { + // We should show { get set } here for the + // full declaration, but not for subheadings. + var x: Int { get set } +} + +// FULL-LABEL: "precise": "s:20ProtocolRequirements1PP1xSivp" +// FULL: "declarationFragments": [ +// FULL-NEXT: { +// FULL-NEXT: "kind": "keyword", +// FULL-NEXT: "spelling": "var" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "identifier", +// FULL-NEXT: "spelling": "x" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": ": " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "typeIdentifier", +// FULL-NEXT: "spelling": "Int", +// FULL-NEXT: "preciseIdentifier": "s:Si" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " { " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "keyword", +// FULL-NEXT: "spelling": "get" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "keyword", +// FULL-NEXT: "spelling": "set" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " }" +// FULL-NEXT: } +// FULL-NEXT: ] + +// SUBHEADING-LABEL: "precise": "s:20ProtocolRequirements1PP1xSivp" +// SUBHEADING: names +// SUBHEADING: "subHeading": [ +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "keyword", +// SUBHEADING-NEXT: "spelling": "var" +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "text", +// SUBHEADING-NEXT: "spelling": " " +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "identifier", +// SUBHEADING-NEXT: "spelling": "x" +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "text", +// SUBHEADING-NEXT: "spelling": ": " +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "typeIdentifier", +// SUBHEADING-NEXT: "spelling": "Int", +// SUBHEADING-NEXT: "preciseIdentifier": "s:Si" +// SUBHEADING-NEXT: } +// SUBHEADING-NEXT: ] diff --git a/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/Subscripts.swift b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/Subscripts.swift new file mode 100644 index 000000000000..6e05712bb16e --- /dev/null +++ b/test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Properties/Subscripts.swift @@ -0,0 +1,95 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift %s -module-name Subscripts -emit-module -emit-module-path %t/ +// RUN: %target-swift-symbolgraph-extract -module-name Subscripts -I %t -pretty-print -output-dir %t +// RUN: %FileCheck %s --input-file %t/Subscripts.symbols.json --check-prefix=FULL +// RUN: %FileCheck %s --input-file %t/Subscripts.symbols.json --check-prefix=SUBHEADING + +public struct S { + public subscript(i: Int) -> Int { + get { + return 7 + } + set {} + } +} + +// FULL-LABEL: "precise": "s:10Subscripts1SVyS2icip" +// FULL: "declarationFragments": [ +// FULL-NEXT: { +// FULL-NEXT: "kind": "keyword", +// FULL-NEXT: "spelling": "subscript" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": "(" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "internalParam", +// FULL-NEXT: "spelling": "i" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": ": " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "typeIdentifier", +// FULL-NEXT: "spelling": "Int", +// FULL-NEXT: "preciseIdentifier": "s:Si" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": ") -> " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "typeIdentifier", +// FULL-NEXT: "spelling": "Int", +// FULL-NEXT: "preciseIdentifier": "s:Si" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " { " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "keyword", +// FULL-NEXT: "spelling": "get" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " " +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "keyword", +// FULL-NEXT: "spelling": "set" +// FULL-NEXT: }, +// FULL-NEXT: { +// FULL-NEXT: "kind": "text", +// FULL-NEXT: "spelling": " }" +// FULL-NEXT: } +// FULL-NEXT: ] + +// SUBHEADING-LABEL: "precise": "s:10Subscripts1SVyS2icip" +// SUBHEADING: names +// SUBHEADING: "subHeading": [ +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "keyword", +// SUBHEADING-NEXT: "spelling": "subscript" +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "text", +// SUBHEADING-NEXT: "spelling": "(" +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "typeIdentifier", +// SUBHEADING-NEXT: "spelling": "Int", +// SUBHEADING-NEXT: "preciseIdentifier": "s:Si" +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "text", +// SUBHEADING-NEXT: "spelling": ") -> " +// SUBHEADING-NEXT: }, +// SUBHEADING-NEXT: { +// SUBHEADING-NEXT: "kind": "typeIdentifier", +// SUBHEADING-NEXT: "spelling": "Int", +// SUBHEADING-NEXT: "preciseIdentifier": "s:Si" +// SUBHEADING-NEXT: } +// SUBHEADING-NEXT: ]