From b27bc18d363960806e384175670c0eaa2256475e Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 14 Jul 2025 16:09:55 -0400 Subject: [PATCH 1/7] Add pretty print and skip synthesized members options to swiftc --- lib/Frontend/CompilerInvocation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 6b31e72876c2d..f3d17cd60ba32 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -2283,8 +2283,8 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, } // default values for generating symbol graphs during a build - Opts.PrettyPrint = false; - Opts.EmitSynthesizedMembers = true; + Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); + Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_skip_synthesized_members); Opts.PrintMessages = false; Opts.IncludeClangDocs = false; } From 1ea28d875cd5374b6c41d1e5e719c23e49832361 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 14 Jul 2025 16:15:10 -0400 Subject: [PATCH 2/7] Enable skip synthesized members as a driver option --- include/swift/Option/Options.td | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index 353d09a2a4077..f3a0381a4b6eb 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -1839,7 +1839,7 @@ def experimental_allowed_reexported_modules: CommaJoined<["-"], "experimental-al HelpText<"Allow reexporting symbols from the provided modules if they are themselves exported from the main module. This is a comma separated list of module names.">; def skip_synthesized_members: Flag<[ "-" ], "skip-synthesized-members">, - Flags<[NoDriverOption, SwiftSymbolGraphExtractOption]>, + Flags<[SwiftSymbolGraphExtractOption]>, HelpText<"Skip members inherited through classes or default implementations">; def minimum_access_level : Separate<["-"], "minimum-access-level">, From 26168f57cce12e559aa3a69ad2c6d948dec53fc1 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 30 Jul 2025 10:24:56 -0400 Subject: [PATCH 3/7] Create tests for the two new symbol graph options Add options to the driver and frontend options --- include/swift/Frontend/FrontendOptions.h | 6 ++++++ lib/Driver/ToolChains.cpp | 4 ++++ lib/Frontend/ArgsToFrontendOptionsConverter.cpp | 3 +++ lib/Frontend/CompilerInvocation.cpp | 5 +++-- test/SymbolGraph/EmitWhileBuilding.swift | 17 +++++++++++++---- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/include/swift/Frontend/FrontendOptions.h b/include/swift/Frontend/FrontendOptions.h index 339368386cc88..e4a9280938107 100644 --- a/include/swift/Frontend/FrontendOptions.h +++ b/include/swift/Frontend/FrontendOptions.h @@ -573,6 +573,12 @@ class FrontendOptions { /// Whether to include symbols with SPI information in the symbol graph. bool IncludeSPISymbolsInSymbolGraph = false; + /// Whether to pretty print the JSON output. + bool PrettyPrint = false; + + ///Whether to emit synthesized members in the JSON output. + bool EmitSynthesizedMembers = true; + /// Whether to reuse a frontend (i.e. compiler instance) for multiple /// compilations. This prevents ASTContext being freed. bool ReuseFrontendForMultipleCompilations = false; diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index f20fce519faab..e7f64f65b8040 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -706,6 +706,8 @@ ToolChain::constructInvocation(const CompileJobAction &job, context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols, options::OPT_omit_extension_block_symbols); context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level); + context.Args.AddLastArg(Arguments, options::OPT_pretty_print); + context.Args.AddLastArg(Arguments, options::OPT_skip_synthesized_members); return II; } @@ -1223,6 +1225,8 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job, addOutputsOfType(Arguments, context.Output, context.Args, file_types::TY_TBD, "-emit-tbd-path"); + context.Args.AddLastArg(Arguments, options::OPT_pretty_print); + context.Args.AddLastArg(Arguments, options::OPT_skip_synthesized_members); context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph); context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir); context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols); diff --git a/lib/Frontend/ArgsToFrontendOptionsConverter.cpp b/lib/Frontend/ArgsToFrontendOptionsConverter.cpp index 46cf7e72a2096..dbf8952c6aa7b 100644 --- a/lib/Frontend/ArgsToFrontendOptionsConverter.cpp +++ b/lib/Frontend/ArgsToFrontendOptionsConverter.cpp @@ -420,6 +420,9 @@ bool ArgsToFrontendOptionsConverter::convert( Opts.SkipInheritedDocs = Args.hasArg(OPT_skip_inherited_docs); Opts.IncludeSPISymbolsInSymbolGraph = Args.hasArg(OPT_include_spi_symbols); + Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); + Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_skip_synthesized_members); + Opts.Static = Args.hasArg(OPT_static); Opts.HermeticSealAtLink = Args.hasArg(OPT_experimental_hermetic_seal_at_link); diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index f3d17cd60ba32..7ccbafbd18cd1 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -2257,6 +2257,9 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, Args.hasFlag(OPT_emit_extension_block_symbols, OPT_omit_extension_block_symbols, /*default=*/false); + Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); + Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_skip_synthesized_members); + if (auto *A = Args.getLastArg(OPT_symbol_graph_minimum_access_level)) { Opts.MinimumAccessLevel = llvm::StringSwitch(A->getValue()) @@ -2283,8 +2286,6 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, } // default values for generating symbol graphs during a build - Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); - Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_skip_synthesized_members); Opts.PrintMessages = false; Opts.IncludeClangDocs = false; } diff --git a/test/SymbolGraph/EmitWhileBuilding.swift b/test/SymbolGraph/EmitWhileBuilding.swift index c1f0b2100263c..bc2104c55b2fb 100644 --- a/test/SymbolGraph/EmitWhileBuilding.swift +++ b/test/SymbolGraph/EmitWhileBuilding.swift @@ -33,9 +33,12 @@ // now run with -symbol-graph-minimum-access-level to change the available symbols // RUN: %empty-directory(%t) -// RUN: %target-build-swift %s -module-name EmitWhileBuilding -emit-module -emit-module-path %t/EmitWhileBuilding.swiftmodule -emit-symbol-graph -emit-symbol-graph-dir %t/ -symbol-graph-minimum-access-level private +// -skip-synthesized-members +// RUN: %target-build-swift %s -module-name EmitWhileBuilding -emit-module -emit-module-path %t/EmitWhileBuilding.swiftmodule -pretty-print -skip-synthesized-members -emit-symbol-graph -emit-symbol-graph-dir %t/ -symbol-graph-minimum-access-level private // RUN: %FileCheck %s --input-file %t/EmitWhileBuilding.symbols.json // RUN: %FileCheck %s --input-file %t/EmitWhileBuilding.symbols.json --check-prefix PRIV +// Check that the JSON has been pretty printed with some indented lines (FIXME - the pretty-print flag isn't working) +// RUN: cat %t/EmitWhileBuilding.symbols.json | jq | grep '^ ' /// Does a foo. public func foo() {} @@ -43,6 +46,12 @@ public func foo() {} /// Does a bar. func bar() {} -// CHECK: "precise":"s:17EmitWhileBuilding3fooyyF" -// PUB-NOT: "precise":"s:17EmitWhileBuilding3baryyF" -// PRIV: "precise":"s:17EmitWhileBuilding3baryyF" +/// Has a compiler synthesized symbol +public struct Baz: Hashable { + let foo: Int +} + +// CHECK: "precise": "s:17EmitWhileBuilding3fooyyF" +// PUB-NOT: "precise": "s:17EmitWhileBuilding3baryyF" +// PUB-NOT: "precise": "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:17EmitWhileBuilding3BazV", +// PRIV: "precise": "s:17EmitWhileBuilding3baryyF" From 6a38bbe73d2475d6536afb01385a3fa36b73ec14 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Thu, 7 Aug 2025 15:44:33 -0400 Subject: [PATCH 4/7] Qualify the skip synthesized members option with symbol graph for the compiler frontend Rollback the additional usages of the new options and test cases --- include/swift/Frontend/FrontendOptions.h | 6 ------ include/swift/Option/Options.td | 6 +++++- lib/Driver/ToolChains.cpp | 4 ---- lib/Frontend/ArgsToFrontendOptionsConverter.cpp | 3 --- lib/Frontend/CompilerInvocation.cpp | 2 +- test/SymbolGraph/EmitWhileBuilding.swift | 17 ++++------------- 6 files changed, 10 insertions(+), 28 deletions(-) diff --git a/include/swift/Frontend/FrontendOptions.h b/include/swift/Frontend/FrontendOptions.h index e4a9280938107..339368386cc88 100644 --- a/include/swift/Frontend/FrontendOptions.h +++ b/include/swift/Frontend/FrontendOptions.h @@ -573,12 +573,6 @@ class FrontendOptions { /// Whether to include symbols with SPI information in the symbol graph. bool IncludeSPISymbolsInSymbolGraph = false; - /// Whether to pretty print the JSON output. - bool PrettyPrint = false; - - ///Whether to emit synthesized members in the JSON output. - bool EmitSynthesizedMembers = true; - /// Whether to reuse a frontend (i.e. compiler instance) for multiple /// compilations. This prevents ASTContext being freed. bool ReuseFrontendForMultipleCompilations = false; diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index f3a0381a4b6eb..bfd088d46ae05 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -1779,6 +1779,10 @@ def emit_symbol_graph_dir : Separate<["-"], "emit-symbol-graph-dir">, HelpText<"Emit a symbol graph to directory ">, MetaVarName<"">; +def symbol_graph_skip_synthesized_members: Flag<["-"], "symbol-graph-skip-synthesized-members">, + Flags<[FrontendOption, NoInteractiveOption, SupplementaryOutput, HelpHidden]>, + HelpText<"Skip members inherited through classes or default implementations">; + def symbol_graph_minimum_access_level: Separate<["-"], "symbol-graph-minimum-access-level">, Flags<[FrontendOption, NoInteractiveOption, SupplementaryOutput, HelpHidden]>, HelpText<"Include symbols with this access level or more when emitting a symbol graph">, @@ -1839,7 +1843,7 @@ def experimental_allowed_reexported_modules: CommaJoined<["-"], "experimental-al HelpText<"Allow reexporting symbols from the provided modules if they are themselves exported from the main module. This is a comma separated list of module names.">; def skip_synthesized_members: Flag<[ "-" ], "skip-synthesized-members">, - Flags<[SwiftSymbolGraphExtractOption]>, + Flags<[NoDriverOption, SwiftSymbolGraphExtractOption]>, HelpText<"Skip members inherited through classes or default implementations">; def minimum_access_level : Separate<["-"], "minimum-access-level">, diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index e7f64f65b8040..f20fce519faab 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -706,8 +706,6 @@ ToolChain::constructInvocation(const CompileJobAction &job, context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols, options::OPT_omit_extension_block_symbols); context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level); - context.Args.AddLastArg(Arguments, options::OPT_pretty_print); - context.Args.AddLastArg(Arguments, options::OPT_skip_synthesized_members); return II; } @@ -1225,8 +1223,6 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job, addOutputsOfType(Arguments, context.Output, context.Args, file_types::TY_TBD, "-emit-tbd-path"); - context.Args.AddLastArg(Arguments, options::OPT_pretty_print); - context.Args.AddLastArg(Arguments, options::OPT_skip_synthesized_members); context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph); context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir); context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols); diff --git a/lib/Frontend/ArgsToFrontendOptionsConverter.cpp b/lib/Frontend/ArgsToFrontendOptionsConverter.cpp index dbf8952c6aa7b..46cf7e72a2096 100644 --- a/lib/Frontend/ArgsToFrontendOptionsConverter.cpp +++ b/lib/Frontend/ArgsToFrontendOptionsConverter.cpp @@ -420,9 +420,6 @@ bool ArgsToFrontendOptionsConverter::convert( Opts.SkipInheritedDocs = Args.hasArg(OPT_skip_inherited_docs); Opts.IncludeSPISymbolsInSymbolGraph = Args.hasArg(OPT_include_spi_symbols); - Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); - Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_skip_synthesized_members); - Opts.Static = Args.hasArg(OPT_static); Opts.HermeticSealAtLink = Args.hasArg(OPT_experimental_hermetic_seal_at_link); diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 7ccbafbd18cd1..0314d9fc7cd37 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -2258,7 +2258,7 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, OPT_omit_extension_block_symbols, /*default=*/false); Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); - Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_skip_synthesized_members); + Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_symbol_graph_skip_synthesized_members); if (auto *A = Args.getLastArg(OPT_symbol_graph_minimum_access_level)) { Opts.MinimumAccessLevel = diff --git a/test/SymbolGraph/EmitWhileBuilding.swift b/test/SymbolGraph/EmitWhileBuilding.swift index bc2104c55b2fb..c1f0b2100263c 100644 --- a/test/SymbolGraph/EmitWhileBuilding.swift +++ b/test/SymbolGraph/EmitWhileBuilding.swift @@ -33,12 +33,9 @@ // now run with -symbol-graph-minimum-access-level to change the available symbols // RUN: %empty-directory(%t) -// -skip-synthesized-members -// RUN: %target-build-swift %s -module-name EmitWhileBuilding -emit-module -emit-module-path %t/EmitWhileBuilding.swiftmodule -pretty-print -skip-synthesized-members -emit-symbol-graph -emit-symbol-graph-dir %t/ -symbol-graph-minimum-access-level private +// RUN: %target-build-swift %s -module-name EmitWhileBuilding -emit-module -emit-module-path %t/EmitWhileBuilding.swiftmodule -emit-symbol-graph -emit-symbol-graph-dir %t/ -symbol-graph-minimum-access-level private // RUN: %FileCheck %s --input-file %t/EmitWhileBuilding.symbols.json // RUN: %FileCheck %s --input-file %t/EmitWhileBuilding.symbols.json --check-prefix PRIV -// Check that the JSON has been pretty printed with some indented lines (FIXME - the pretty-print flag isn't working) -// RUN: cat %t/EmitWhileBuilding.symbols.json | jq | grep '^ ' /// Does a foo. public func foo() {} @@ -46,12 +43,6 @@ public func foo() {} /// Does a bar. func bar() {} -/// Has a compiler synthesized symbol -public struct Baz: Hashable { - let foo: Int -} - -// CHECK: "precise": "s:17EmitWhileBuilding3fooyyF" -// PUB-NOT: "precise": "s:17EmitWhileBuilding3baryyF" -// PUB-NOT: "precise": "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:17EmitWhileBuilding3BazV", -// PRIV: "precise": "s:17EmitWhileBuilding3baryyF" +// CHECK: "precise":"s:17EmitWhileBuilding3fooyyF" +// PUB-NOT: "precise":"s:17EmitWhileBuilding3baryyF" +// PRIV: "precise":"s:17EmitWhileBuilding3baryyF" From eed54bb4b053a13d04315de3e908cb27d1587350 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 12 Aug 2025 12:04:02 -0400 Subject: [PATCH 5/7] Reduce change to compiler invocation and remove options from frontend --- include/swift/Option/Options.td | 6 +++++- lib/Frontend/CompilerInvocation.cpp | 5 ++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index bfd088d46ae05..cc8db2bbd07d0 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -1779,8 +1779,12 @@ def emit_symbol_graph_dir : Separate<["-"], "emit-symbol-graph-dir">, HelpText<"Emit a symbol graph to directory ">, MetaVarName<"">; +def symbol_graph_pretty_print: Flag<["-"], "symbol-graph-pretty-print">, + Flags<[NoInteractiveOption, HelpHidden]>, + HelpText<"Pretty-print the output symbol graph JSON">; + def symbol_graph_skip_synthesized_members: Flag<["-"], "symbol-graph-skip-synthesized-members">, - Flags<[FrontendOption, NoInteractiveOption, SupplementaryOutput, HelpHidden]>, + Flags<[NoInteractiveOption, HelpHidden]>, HelpText<"Skip members inherited through classes or default implementations">; def symbol_graph_minimum_access_level: Separate<["-"], "symbol-graph-minimum-access-level">, diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 0314d9fc7cd37..6b31e72876c2d 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -2257,9 +2257,6 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, Args.hasFlag(OPT_emit_extension_block_symbols, OPT_omit_extension_block_symbols, /*default=*/false); - Opts.PrettyPrint = Args.hasArg(OPT_pretty_print); - Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_symbol_graph_skip_synthesized_members); - if (auto *A = Args.getLastArg(OPT_symbol_graph_minimum_access_level)) { Opts.MinimumAccessLevel = llvm::StringSwitch(A->getValue()) @@ -2286,6 +2283,8 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, } // default values for generating symbol graphs during a build + Opts.PrettyPrint = false; + Opts.EmitSynthesizedMembers = true; Opts.PrintMessages = false; Opts.IncludeClangDocs = false; } From b8ab5d548d6bc182b607ba969d02632fcdc1f0b8 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 8 Sep 2025 16:41:11 -0400 Subject: [PATCH 6/7] Set driver options for frontend too and propagate them in compiler invocation --- include/swift/Option/Options.td | 4 ++-- lib/Driver/ToolChains.cpp | 2 ++ lib/Frontend/CompilerInvocation.cpp | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index cc8db2bbd07d0..c41be344a5cdc 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -1780,11 +1780,11 @@ def emit_symbol_graph_dir : Separate<["-"], "emit-symbol-graph-dir">, MetaVarName<"">; def symbol_graph_pretty_print: Flag<["-"], "symbol-graph-pretty-print">, - Flags<[NoInteractiveOption, HelpHidden]>, + Flags<[FrontendOption, NoInteractiveOption, HelpHidden, SupplementaryOutput]>, HelpText<"Pretty-print the output symbol graph JSON">; def symbol_graph_skip_synthesized_members: Flag<["-"], "symbol-graph-skip-synthesized-members">, - Flags<[NoInteractiveOption, HelpHidden]>, + Flags<[FrontendOption, NoInteractiveOption, HelpHidden, SupplementaryOutput]>, HelpText<"Skip members inherited through classes or default implementations">; def symbol_graph_minimum_access_level: Separate<["-"], "symbol-graph-minimum-access-level">, diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index f20fce519faab..7586c1c578cbf 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -706,6 +706,8 @@ ToolChain::constructInvocation(const CompileJobAction &job, context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols, options::OPT_omit_extension_block_symbols); context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level); + context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_skip_synthesized_members); + context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_pretty_print); return II; } diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 6b31e72876c2d..8faa8b33802de 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -2283,8 +2283,8 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, } // default values for generating symbol graphs during a build - Opts.PrettyPrint = false; - Opts.EmitSynthesizedMembers = true; + Opts.PrettyPrint = Args.hasArg(OPT_symbol_graph_pretty_print); + Opts.EmitSynthesizedMembers = !Args.hasArg(OPT_symbol_graph_skip_synthesized_members); Opts.PrintMessages = false; Opts.IncludeClangDocs = false; } From 5048345664c6705f7b406f056b784112379903b4 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 8 Sep 2025 20:18:42 -0400 Subject: [PATCH 7/7] Add a test case for skipping synthesized members --- test/SymbolGraph/Symbols/SkipsSynthesizedMembers.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/SymbolGraph/Symbols/SkipsSynthesizedMembers.swift diff --git a/test/SymbolGraph/Symbols/SkipsSynthesizedMembers.swift b/test/SymbolGraph/Symbols/SkipsSynthesizedMembers.swift new file mode 100644 index 0000000000000..19e7933c8e5a0 --- /dev/null +++ b/test/SymbolGraph/Symbols/SkipsSynthesizedMembers.swift @@ -0,0 +1,10 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift %s -module-name SkipsSynthesizedMembers -emit-module -emit-module-path %t/ +// RUN: %target-swift-symbolgraph-extract -module-name SkipsSynthesizedMembers -I %t -pretty-print -skip-synthesized-members -output-dir %t +// RUN: %FileCheck %s --input-file %t/SkipsSynthesizedMembers.symbols.json + +// CHECK-NOT: ::SYNTHESIZED + +public struct ShouldAppear: Hashable { + public let foo: Int +}