From 504fe3c3a4ea040ab49d4863cb56f36e893fb97e Mon Sep 17 00:00:00 2001 From: Max Obermeier Date: Sun, 2 Oct 2022 13:59:31 +0200 Subject: [PATCH] Make emission of extension block symbols formal feature - add name to lib/Option/features.json - add flag for explicitly disabling extension block symbols feature --- include/swift/Option/Options.td | 5 +++++ lib/Driver/ToolChains.cpp | 6 ++++-- lib/DriverTool/swift_symbolgraph_extract_main.cpp | 3 ++- lib/Frontend/CompilerInvocation.cpp | 3 ++- lib/Option/features.json | 3 +++ test/SymbolGraph/Module/BasicExtension.swift | 4 ++-- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index 8da56f4eb2ac3..dbc88c72500c3 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -1370,6 +1370,11 @@ def emit_extension_block_symbols: Flag<["-"], "emit-extension-block-symbols">, NoInteractiveOption, SupplementaryOutput, HelpHidden]>, HelpText<"Emit 'swift.extension' symbols for extensions to external types instead of directly associating members and conformances with the extended nominal when generating symbol graphs">; +def omit_extension_block_symbols: Flag<["-"], "omit-extension-block-symbols">, + Flags<[SwiftSymbolGraphExtractOption, FrontendOption, + NoInteractiveOption, SupplementaryOutput, HelpHidden]>, + HelpText<"Directly associate members and conformances with the extended nominal when generating symbol graphs instead of emitting 'swift.extension' symbols for extensions to external types">; + // swift-symbolgraph-extract-only options def output_dir : Separate<["-"], "output-dir">, Flags<[NoDriverOption, SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption, diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 8fa85a0d7632d..565e24a516adf 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -617,7 +617,8 @@ ToolChain::constructInvocation(const CompileJobAction &job, context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir); } context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols); - context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols); + 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); return II; @@ -1114,7 +1115,8 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job, 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); - context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols); + 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_import_objc_header); diff --git a/lib/DriverTool/swift_symbolgraph_extract_main.cpp b/lib/DriverTool/swift_symbolgraph_extract_main.cpp index 316507b9999d1..d5f9c2d9389e5 100644 --- a/lib/DriverTool/swift_symbolgraph_extract_main.cpp +++ b/lib/DriverTool/swift_symbolgraph_extract_main.cpp @@ -172,7 +172,8 @@ int swift_symbolgraph_extract_main(ArrayRef Args, ParsedArgs.hasArg(OPT_skip_inherited_docs), ParsedArgs.hasArg(OPT_include_spi_symbols), /*IncludeClangDocs=*/false, - ParsedArgs.hasArg(OPT_emit_extension_block_symbols), + ParsedArgs.hasFlag(OPT_emit_extension_block_symbols, + OPT_omit_extension_block_symbols, /*default=*/false), }; if (auto *A = ParsedArgs.getLastArg(OPT_minimum_access_level)) { diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 5fbe8ca1bb390..9f86c63c9c8d8 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1306,7 +1306,8 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts, Opts.SkipInheritedDocs = Args.hasArg(OPT_skip_inherited_docs); Opts.IncludeSPISymbols = Args.hasArg(OPT_include_spi_symbols); Opts.EmitExtensionBlockSymbols = - Args.hasArg(OPT_emit_extension_block_symbols); + Args.hasFlag(OPT_emit_extension_block_symbols, + OPT_omit_extension_block_symbols, /*default=*/false); if (auto *A = Args.getLastArg(OPT_symbol_graph_minimum_access_level)) { Opts.MinimumAccessLevel = diff --git a/lib/Option/features.json b/lib/Option/features.json index aec42f89ffcb2..1d09a9c8ed64b 100644 --- a/lib/Option/features.json +++ b/lib/Option/features.json @@ -26,6 +26,9 @@ }, { "name": "emit-const-value-sidecar" + }, + { + "name": "emit-extension-block-symbols" } ] } diff --git a/test/SymbolGraph/Module/BasicExtension.swift b/test/SymbolGraph/Module/BasicExtension.swift index 811e112519bb6..828df4e314175 100644 --- a/test/SymbolGraph/Module/BasicExtension.swift +++ b/test/SymbolGraph/Module/BasicExtension.swift @@ -2,11 +2,11 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -// RUN: %target-swift-symbolgraph-extract -module-name BasicExtension -I %t -pretty-print -output-dir %t +// RUN: %target-swift-symbolgraph-extract -module-name BasicExtension -I %t -pretty-print -output-dir %t -omit-extension-block-symbols // RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,EXTRACT,EBSOff,EBSOff_EXTRACT // RUN: %empty-directory(%t) -// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -emit-symbol-graph -emit-symbol-graph-dir %t +// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -emit-symbol-graph -emit-symbol-graph-dir %t -omit-extension-block-symbols // RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,BUILD,EBSOff,EBSOff_BUILD