Skip to content

Commit 7e2d12a

Browse files
committed
Add configuration option to disable the sandbox for SwiftPM operations
Disabling the sandbox is needed to run tests for the Swift VS Code extension in a sandbox.
1 parent 5c2055d commit 7e2d12a

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

Documentation/Configuration File.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ The structure of the file is currently not guaranteed to be stable. Options may
2323
- `cxxCompilerFlags: string[]`: Extra arguments passed to the compiler for C++ files. Equivalent to SwiftPM's `-Xcxx` option.
2424
- `swiftCompilerFlags: string[]`: Extra arguments passed to the compiler for Swift files. Equivalent to SwiftPM's `-Xswiftc` option.
2525
- `linkerFlags: string[]`: Extra arguments passed to the linker. Equivalent to SwiftPM's `-Xlinker` option.
26+
- `disableSandbox: bool`: Disables running subprocesses from SwiftPM in a sandbox. Useful when running `sourcekit-lsp` in a sandbox because nested sandboxes are not supported.
2627
- `compilationDatabase`: Dictionary with the following keys, defining options for workspaces with a compilation database
2728
- `searchPaths: string[]`: Additional paths to search for a compilation database, relative to a workspace root.
2829
- `fallbackBuildSystem`: Dictionary with the following keys, defining options for files that aren't managed by any build system

Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,13 @@ package actor SwiftPMBuildSystem {
261261
fileSystem: fileSystem,
262262
location: location,
263263
configuration: configuration,
264-
customHostToolchain: hostSwiftPMToolchain
264+
customHostToolchain: hostSwiftPMToolchain,
265+
customManifestLoader: ManifestLoader(
266+
toolchain: hostSwiftPMToolchain,
267+
isManifestSandboxEnabled: !(options.swiftPM.disableSandbox ?? false),
268+
cacheDir: location.sharedManifestsCacheDirectory,
269+
importRestrictions: configuration.manifestImportRestrictions
270+
)
265271
)
266272

267273
let buildConfiguration: PackageModel.BuildConfiguration
@@ -378,6 +384,7 @@ extension SwiftPMBuildSystem {
378384
destinationBuildParameters: destinationBuildParameters,
379385
toolsBuildParameters: toolsBuildParameters,
380386
graph: modulesGraph,
387+
disableSandbox: options.swiftPM.disableSandbox ?? false,
381388
fileSystem: fileSystem,
382389
observabilityScope: observabilitySystem.topScope
383390
)
@@ -631,6 +638,9 @@ extension SwiftPMBuildSystem: BuildSystemIntegration.BuildSystem {
631638
"--disable-index-store",
632639
"--target", target.targetID,
633640
]
641+
if options.swiftPM.disableSandbox ?? false {
642+
arguments += ["--disable-sandbox"]
643+
}
634644
if let configuration = options.swiftPM.configuration {
635645
arguments += ["-c", configuration.rawValue]
636646
}

Sources/SKOptions/SourceKitLSPOptions.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
5353
/// Equivalent to SwiftPM's `-Xlinker` option
5454
public var linkerFlags: [String]?
5555

56+
/// Equivalent to SwiftPM's `--disable-sandbox` option
57+
public var disableSandbox: Bool?
58+
5659
public init(
5760
configuration: BuildConfiguration? = nil,
5861
scratchPath: String? = nil,
@@ -62,7 +65,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
6265
cCompilerFlags: [String]? = nil,
6366
cxxCompilerFlags: [String]? = nil,
6467
swiftCompilerFlags: [String]? = nil,
65-
linkerFlags: [String]? = nil
68+
linkerFlags: [String]? = nil,
69+
disableSandbox: Bool? = nil
6670
) {
6771
self.configuration = configuration
6872
self.scratchPath = scratchPath
@@ -73,6 +77,7 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
7377
self.cxxCompilerFlags = cxxCompilerFlags
7478
self.swiftCompilerFlags = swiftCompilerFlags
7579
self.linkerFlags = linkerFlags
80+
self.disableSandbox = disableSandbox
7681
}
7782

7883
static func merging(base: SwiftPMOptions, override: SwiftPMOptions?) -> SwiftPMOptions {
@@ -85,7 +90,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
8590
cCompilerFlags: override?.cCompilerFlags ?? base.cCompilerFlags,
8691
cxxCompilerFlags: override?.cxxCompilerFlags ?? base.cxxCompilerFlags,
8792
swiftCompilerFlags: override?.swiftCompilerFlags ?? base.swiftCompilerFlags,
88-
linkerFlags: override?.linkerFlags ?? base.linkerFlags
93+
linkerFlags: override?.linkerFlags ?? base.linkerFlags,
94+
disableSandbox: override?.disableSandbox ?? base.disableSandbox
8995
)
9096
}
9197

0 commit comments

Comments
 (0)