diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td
index 353d09a2a4077..c41be344a5cdc 100644
--- a/include/swift/Option/Options.td
+++ b/include/swift/Option/Options.td
@@ -1779,6 +1779,14 @@ 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<[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<[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">,
Flags<[FrontendOption, NoInteractiveOption, SupplementaryOutput, HelpHidden]>,
HelpText<"Include symbols with this access level or more when emitting a symbol graph">,
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;
}
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
+}