Files
swift-mirror/include/swift/SymbolGraphGen/SymbolGraphOptions.h
Dylan Sturgeon 4b4f9f18fc Add an option for symbol graph to support long module names. (#83782)
Currently symbol graphs are always written in files that contain 1 to 2
module names. It's possible for Swift module names to be very long, so
combining 2 of them in file name like `module1@module2...` in the same
path component means the name can be too long for some file systems. The
new option `-symbol-graph-shorten-output-names` changes the symbol graph
output files to use a MD5 hash of the module name(s) as the filename and
outputs an additional JSON file with the original names mapped to the
real filename. The module names JSON can be used to construct a VFS
overlay with the original naming scheme.

fix #83723

I considered using vfsoverlay, which seems like a viable solution, but
the vfsoverlay options don't seem to apply to any of the outputs from
the compiler. When I set an overlay to remap the symbol graph file
outputs, the remapped external paths aren't used so the root problem of
too long file names remains.
2025-11-06 19:30:44 -08:00

93 lines
3.4 KiB
C++

//===--- SymbolGraphOptions.h - Swift SymbolGraph Options -----------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/TargetParser/Triple.h"
#include "swift/AST/AttrKind.h"
#ifndef SWIFT_SYMBOLGRAPHGEN_SYMBOLGRAPHOPTIONS_H
#define SWIFT_SYMBOLGRAPHGEN_SYMBOLGRAPHOPTIONS_H
namespace swift {
namespace symbolgraphgen {
struct SymbolGraphOptions {
/// The directory to output the symbol graph JSON files.
StringRef OutputDir = {};
/// The target of the module.
llvm::Triple Target = {};
/// Pretty-print the JSON with newlines and indentation.
bool PrettyPrint = false;
/// The minimum access level that symbols must have in order to be
/// included in the graph.
AccessLevel MinimumAccessLevel = AccessLevel::Public;
/// Emit members gotten through class inheritance or protocol default
/// implementations with compound, "SYNTHESIZED" USRs.
bool EmitSynthesizedMembers = false;
/// Whether to print informational messages when rendering
/// a symbol graph.
bool PrintMessages = false;
/// Whether to skip docs for symbols with compound, "SYNTHESIZED" USRs.
bool SkipInheritedDocs = false;
/// Whether to skip emitting symbols that are implementations of protocol requirements or
/// inherited from protocol extensions.
bool SkipProtocolImplementations = false;
/// Whether to emit symbols with SPI information.
bool IncludeSPISymbols = false;
/// Whether to include documentation for clang nodes or not.
bool IncludeClangDocs = false;
/// Whether to emit "swift.extension" symbols for extensions to external types
/// along with "extensionTo" relationships instead of directly associating
/// members and conformances with the extended nominal.
bool EmitExtensionBlockSymbols = false;
/// Whether to print information for private symbols in system modules.
/// This should be left as `false` when printing a full-module symbol graph,
/// but SourceKit should be able to load the information when pulling symbol
/// information for individual queries.
bool PrintPrivateSystemSymbols = false;
/// If this has a value specifies an explicit allow list of reexported module
/// names that should be included symbol graph.
std::optional<llvm::ArrayRef<StringRef>> AllowedReexportedModules = {};
/// If set, a list of availability platforms to restrict (or block) when
/// rendering symbol graphs.
std::optional<llvm::DenseSet<StringRef>> AvailabilityPlatforms = {};
/// Whether `AvailabilityPlatforms` is an allow list or a block list.
bool AvailabilityIsBlockList = false;
/// Whether to use shortened, by using a hash of the module names, file names
/// when writing symbol graph files to `OutputDir`.
/// An additional JSON file is written at `OutputDir` that contains a mapping
/// of the shortened file names to the module name(s) in the symbol graph
/// files.
bool ShortenOutputNames = false;
};
} // end namespace symbolgraphgen
} // end namespace swift
#endif // SWIFT_SYMBOLGRAPHGEN_SYMBOLGRAPHOPTIONS_H