Skip to content

Commit a916e14

Browse files
committed
Update to not generate suggestion if a file is git ignored
1 parent 81051ab commit a916e14

3 files changed

Lines changed: 44 additions & 2 deletions

File tree

Core/Sources/HostApp/DebugView.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ final class DebugSettings: ObservableObject {
1616
var disableGitHubCopilotSettingsAutoRefreshOnAppear
1717
@AppStorage(\.useUserDefaultsBaseAPIKeychain) var useUserDefaultsBaseAPIKeychain
1818
@AppStorage(\.disableEnhancedWorkspace) var disableEnhancedWorkspace
19+
@AppStorage(\.disableGitIgnoreCheck) var disableGitIgnoreCheck
1920
init() {}
2021
}
2122

@@ -64,6 +65,10 @@ struct DebugSettingsView: View {
6465
Text("Disable Enhanced Workspace")
6566
}
6667

68+
Toggle(isOn: $settings.disableGitIgnoreCheck) {
69+
Text("Disable Git Ignore Check")
70+
}
71+
6772
Button("Reset Migration Version to 0") {
6873
UserDefaults.shared.set(nil, forKey: "OldMigrationVersion")
6974
}

Tool/Sources/Workspace/Filespace.swift

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import Dependencies
12
import Environment
23
import Foundation
4+
import GitIgnoreCheck
35
import SuggestionModel
46

57
public protocol FilespacePropertyKey {
@@ -47,20 +49,34 @@ public struct FilespaceCodeMetadata: Equatable {
4749

4850
@dynamicMemberLookup
4951
public final class Filespace {
52+
struct GitIgnoreStatus {
53+
var isIgnored: Bool
54+
var checkTime: Date
55+
var isExpired: Bool {
56+
Environment.now().timeIntervalSince(checkTime) > 60 * 3
57+
}
58+
}
59+
60+
// MARK: Metadata
61+
5062
public let fileURL: URL
5163
public private(set) lazy var language: CodeLanguage = languageIdentifierFromFileURL(fileURL)
5264
public var codeMetadata: FilespaceCodeMetadata = .init()
65+
66+
// MARK: Suggestions
67+
68+
public private(set) var suggestionIndex: Int = 0
5369
public internal(set) var suggestions: [CodeSuggestion] = [] {
5470
didSet { refreshUpdateTime() }
5571
}
5672

57-
public private(set) var suggestionIndex: Int = 0
58-
5973
public var presentingSuggestion: CodeSuggestion? {
6074
guard suggestions.endIndex > suggestionIndex, suggestionIndex >= 0 else { return nil }
6175
return suggestions[suggestionIndex]
6276
}
6377

78+
// MARK: Life Cycle
79+
6480
public var isExpired: Bool {
6581
Environment.now().timeIntervalSince(lastSuggestionUpdateTime) > 60 * 3
6682
}
@@ -70,6 +86,25 @@ public final class Filespace {
7086
let fileSaveWatcher: FileSaveWatcher
7187
let onClose: (URL) -> Void
7288

89+
// MARK: Git Ignore
90+
91+
private var gitIgnoreStatus: GitIgnoreStatus?
92+
public var isGitIgnored: Bool {
93+
get async {
94+
@Dependency(\.gitIgnoredChecker) var gitIgnoredChecker
95+
@Dependency(\.date) var date
96+
97+
if let gitIgnoreStatus = gitIgnoreStatus, !gitIgnoreStatus.isExpired {
98+
return gitIgnoreStatus.isIgnored
99+
}
100+
let isIgnored = await gitIgnoredChecker.checkIfGitIgnored(fileURL: fileURL)
101+
gitIgnoreStatus = .init(isIgnored: isIgnored, checkTime: date())
102+
return isIgnored
103+
}
104+
}
105+
106+
// MARK: Methods
107+
73108
deinit {
74109
onClose(fileURL)
75110
}

Tool/Sources/WorkspaceSuggestionService/Workspace+SuggestionService.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public extension Workspace {
3434
refreshUpdateTime()
3535

3636
let filespace = createFilespaceIfNeeded(fileURL: fileURL)
37+
38+
guard await filespace.isGitIgnored else { return [] }
3739

3840
if !editor.uti.isEmpty {
3941
filespace.codeMetadata.uti = editor.uti

0 commit comments

Comments
 (0)