Skip to content

Commit c360cfa

Browse files
committed
Make buildSettings(for:in:langauge:fallbackAfterTimeout:) require a target
This simplifies the control flow to get build settings slightly.
1 parent f7dba31 commit c360cfa

File tree

1 file changed

+39
-27
lines changed

1 file changed

+39
-27
lines changed

Sources/BuildServerIntegration/BuildServerManager.swift

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,8 +1071,6 @@ package actor BuildServerManager: QueueBasedMessageHandler {
10711071

10721072
/// Returns the build settings for the given file in the given target.
10731073
///
1074-
/// If no target is given, this always returns fallback build settings.
1075-
///
10761074
/// Only call this method if it is known that `document` is a main file. Prefer `buildSettingsInferredFromMainFile`
10771075
/// otherwise. If `document` is a header file, this will most likely return fallback settings because header files
10781076
/// don't have build settings by themselves.
@@ -1081,42 +1079,30 @@ package actor BuildServerManager: QueueBasedMessageHandler {
10811079
/// `SourceKitLSPOptions.buildSettingsTimeoutOrDefault`.
10821080
package func buildSettings(
10831081
for document: DocumentURI,
1084-
in target: BuildTargetIdentifier?,
1082+
in target: BuildTargetIdentifier,
10851083
language: Language,
10861084
fallbackAfterTimeout: Bool
10871085
) async -> FileBuildSettings? {
1088-
if let target {
1089-
let buildSettingsFromBuildServer = await orLog("Getting build settings") {
1090-
if fallbackAfterTimeout {
1091-
try await withTimeout(options.buildSettingsTimeoutOrDefault) {
1092-
return try await self.buildSettingsFromBuildServer(for: document, in: target, language: language)
1093-
} resultReceivedAfterTimeout: { _ in
1094-
await self.filesBuildSettingsChangedDebouncer.scheduleCall([document])
1095-
}
1096-
} else {
1097-
try await self.buildSettingsFromBuildServer(for: document, in: target, language: language)
1086+
let buildSettingsFromBuildServer = await orLog("Getting build settings") {
1087+
if fallbackAfterTimeout {
1088+
try await withTimeout(options.buildSettingsTimeoutOrDefault) {
1089+
return try await self.buildSettingsFromBuildServer(for: document, in: target, language: language)
1090+
} resultReceivedAfterTimeout: { _ in
1091+
await self.filesBuildSettingsChangedDebouncer.scheduleCall([document])
10981092
}
1099-
}
1100-
if let buildSettingsFromBuildServer {
1101-
return buildSettingsFromBuildServer
1093+
} else {
1094+
try await self.buildSettingsFromBuildServer(for: document, in: target, language: language)
11021095
}
11031096
}
1104-
1105-
guard
1106-
var settings = fallbackBuildSettings(
1097+
guard let buildSettingsFromBuildServer else {
1098+
return fallbackBuildSettings(
11071099
for: document,
11081100
language: language,
11091101
options: options.fallbackBuildSystemOrDefault
11101102
)
1111-
else {
1112-
return nil
1113-
}
1114-
if buildServerAdapter == nil {
1115-
// If there is no build server and we only have the fallback build server, we will never get real build settings.
1116-
// Consider the build settings non-fallback.
1117-
settings.isFallback = false
11181103
}
1119-
return settings
1104+
return buildSettingsFromBuildServer
1105+
11201106
}
11211107

11221108
/// Try finding a source file with the same language as `document` in the same directory as `document` and patch its
@@ -1196,6 +1182,25 @@ package actor BuildServerManager: QueueBasedMessageHandler {
11961182
fallbackAfterTimeout: Bool,
11971183
allowInferenceFromSiblingFile: Bool = true
11981184
) async -> FileBuildSettings? {
1185+
if buildServerAdapter == nil {
1186+
guard let language = language ?? Language(inferredFromFileExtension: document) else {
1187+
return nil
1188+
}
1189+
guard
1190+
var settings = fallbackBuildSettings(
1191+
for: document,
1192+
language: language,
1193+
options: options.fallbackBuildSystemOrDefault
1194+
)
1195+
else {
1196+
return nil
1197+
}
1198+
// If there is no build server and we only have the fallback build server, we will never get real build settings.
1199+
// Consider the build settings non-fallback.
1200+
settings.isFallback = false
1201+
return settings
1202+
}
1203+
11991204
func mainFileAndSettings(
12001205
basedOn document: DocumentURI
12011206
) async -> (mainFile: DocumentURI, settings: FileBuildSettings)? {
@@ -1223,6 +1228,13 @@ package actor BuildServerManager: QueueBasedMessageHandler {
12231228
// settings.
12241229
return nil
12251230
}
1231+
guard let target else {
1232+
return fallbackBuildSettings(
1233+
for: document,
1234+
language: languageForFile,
1235+
options: options.fallbackBuildSystemOrDefault
1236+
)
1237+
}
12261238
return await self.buildSettings(
12271239
for: mainFile,
12281240
in: target,

0 commit comments

Comments
 (0)