Skip to content

Commit 4fed754

Browse files
committed
Fix project URL
1 parent 17d202a commit 4fed754

File tree

5 files changed

+12
-29
lines changed

5 files changed

+12
-29
lines changed

Tool/Package.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ let package = Package(
189189
"Environment",
190190
"Logger",
191191
"Preferences",
192+
"XcodeInspector"
192193
]
193194
),
194195

Tool/Sources/Environment/Environment.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public enum Environment {
4141
return false
4242
}
4343
}
44-
44+
45+
#warning("TODO: Use XcodeInspector instead.")
4546
public static var fetchCurrentWorkspaceURLFromXcode: () async throws -> URL? = {
4647
if let xcode = ActiveApplicationMonitor.shared.activeXcode
4748
?? ActiveApplicationMonitor.shared.latestXcode

Tool/Sources/Workspace/Workspace.swift

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Foundation
33
import Preferences
44
import SuggestionModel
55
import UserDefaultsObserver
6+
import XcodeInspector
67

78
public protocol WorkspacePropertyKey {
89
associatedtype Value
@@ -89,16 +90,10 @@ public final class Workspace {
8990

9091
init(workspaceURL: URL) {
9192
self.workspaceURL = workspaceURL
92-
self.projectRootURL = {
93-
var url = workspaceURL
94-
while !FileManager.default.fileIsDirectory(atPath: url.path) ||
95-
!url.pathExtension.isEmpty
96-
{
97-
url = url.deletingLastPathComponent()
98-
}
99-
return url
100-
101-
}()
93+
self.projectRootURL = WorkspaceXcodeWindowInspector.extractProjectURL(
94+
workspaceURL: workspaceURL,
95+
documentURL: nil
96+
) ?? workspaceURL
10297
openedFileRecoverableStorage = .init(projectRootURL: projectRootURL)
10398
let openedFiles = openedFileRecoverableStorage.openedFiles
10499
Task { @WorkspaceActor in

Tool/Sources/XcodeInspector/XcodeInspector.swift

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public final class XcodeInspector: ObservableObject {
2424
@Published public internal(set) var focusedEditor: SourceEditor?
2525
@Published public internal(set) var focusedElement: AXUIElement?
2626
@Published public internal(set) var completionPanel: AXUIElement?
27-
27+
2828
public var focusedEditorContent: EditorInformation? {
2929
guard let documentURL = XcodeInspector.shared.realtimeActiveDocumentURL,
3030
let workspaceURL = XcodeInspector.shared.realtimeActiveWorkspaceURL,
@@ -253,11 +253,9 @@ public final class XcodeAppInstanceInspector: AppInstanceInspector {
253253
}
254254

255255
public var realtimeProjectURL: URL? {
256-
guard let window = appElement.focusedWindow else { return nil }
257256
let workspaceURL = realtimeWorkspaceURL
258257
let documentURL = realtimeDocumentURL
259258
return WorkspaceXcodeWindowInspector.extractProjectURL(
260-
windowElement: window,
261259
workspaceURL: workspaceURL,
262260
documentURL: documentURL
263261
)
@@ -469,18 +467,8 @@ extension XcodeAppInstanceInspector {
469467

470468
/// Use the project path as the workspace identifier.
471469
static func workspaceIdentifier(_ window: AXUIElement) -> WorkspaceIdentifier {
472-
for child in window.children {
473-
if child.description.starts(with: "/"), child.description.count > 1 {
474-
let path = child.description
475-
let trimmedNewLine = path.trimmingCharacters(in: .newlines)
476-
var url = URL(fileURLWithPath: trimmedNewLine)
477-
while !FileManager.default.fileIsDirectory(atPath: url.path) ||
478-
!url.pathExtension.isEmpty
479-
{
480-
url = url.deletingLastPathComponent()
481-
}
482-
return WorkspaceIdentifier.url(url)
483-
}
470+
if let url = WorkspaceXcodeWindowInspector.extractWorkspaceURL(windowElement: window) {
471+
return WorkspaceIdentifier.url(url)
484472
}
485473
return WorkspaceIdentifier.unknown
486474
}

Tool/Sources/XcodeInspector/XcodeWindowInspector.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ public final class WorkspaceXcodeWindowInspector: XcodeWindowInspector {
6666
self.workspaceURL = workspaceURL
6767
}
6868
let projectURL = Self.extractProjectURL(
69-
windowElement: uiElement,
7069
workspaceURL: workspaceURL,
7170
documentURL: documentURL
7271
)
@@ -104,8 +103,7 @@ public final class WorkspaceXcodeWindowInspector: XcodeWindowInspector {
104103
return nil
105104
}
106105

107-
static func extractProjectURL(
108-
windowElement: AXUIElement,
106+
public static func extractProjectURL(
109107
workspaceURL: URL?,
110108
documentURL: URL?
111109
) -> URL? {

0 commit comments

Comments
 (0)