mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
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.
93 lines
3.4 KiB
C++
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
|