From c065093b5cf975cdc8d7d509c7d2ca8d6dace1ad Mon Sep 17 00:00:00 2001 From: Ben Barham Date: Mon, 17 Feb 2025 09:42:51 -0800 Subject: [PATCH] Add option to skip building and running plugins This *shouldn't* be needed, but allows running plugins to be skipped if there's any unexpected interactions with background indexing. (cherry picked from commit a5343852c6ee4f87a64c3b64c53fdd790ba3a208) --- .../BuildSystemIntegration/SwiftPMBuildSystem.swift | 2 +- Sources/SKOptions/SourceKitLSPOptions.swift | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift b/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift index e9522719..9dd1a22a 100644 --- a/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift +++ b/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift @@ -371,7 +371,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem { // We have a whole separate arena if we're performing background indexing. This allows us to also build and run // plugins, without having to worry about messing up any regular build state. let buildDescription: SourceKitLSPAPI.BuildDescription - if isForIndexBuild { + if isForIndexBuild && !(options.swiftPMOrDefault.skipPlugins ?? false) { let loaded = try await BuildDescription.load( destinationBuildParameters: destinationBuildParameters, toolsBuildParameters: toolsBuildParameters, diff --git a/Sources/SKOptions/SourceKitLSPOptions.swift b/Sources/SKOptions/SourceKitLSPOptions.swift index bde0f664..09608236 100644 --- a/Sources/SKOptions/SourceKitLSPOptions.swift +++ b/Sources/SKOptions/SourceKitLSPOptions.swift @@ -76,6 +76,12 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable { /// Useful when running `sourcekit-lsp` in a sandbox because nested sandboxes are not supported. public var disableSandbox: Bool? + /// Whether to skip building and running plugins when creating the in-memory build graph. + /// + /// - Note: Internal option, only exists as an escape hatch in case this causes unintentional interactions with + /// background indexing. + public var skipPlugins: Bool? + public init( configuration: BuildConfiguration? = nil, scratchPath: String? = nil, @@ -88,7 +94,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable { swiftCompilerFlags: [String]? = nil, linkerFlags: [String]? = nil, buildToolsSwiftCompilerFlags: [String]? = nil, - disableSandbox: Bool? = nil + disableSandbox: Bool? = nil, + skipPlugins: Bool? = nil ) { self.configuration = configuration self.scratchPath = scratchPath @@ -117,7 +124,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable { swiftCompilerFlags: override?.swiftCompilerFlags ?? base.swiftCompilerFlags, linkerFlags: override?.linkerFlags ?? base.linkerFlags, buildToolsSwiftCompilerFlags: override?.buildToolsSwiftCompilerFlags ?? base.buildToolsSwiftCompilerFlags, - disableSandbox: override?.disableSandbox ?? base.disableSandbox + disableSandbox: override?.disableSandbox ?? base.disableSandbox, + skipPlugins: override?.skipPlugins ?? base.skipPlugins ) } }