Skip to content

Commit ffd258c

Browse files
committed
Merge branch 'feature/esc-to-dismiss-suggestion' into develop
2 parents c2d0fa2 + 57f2577 commit ffd258c

8 files changed

Lines changed: 40 additions & 9 deletions

File tree

Core/Sources/HostApp/FeatureSettings/SuggestionSettingsView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ struct SuggestionSettingsView: View {
5454
var suggestionDisplayCompactMode
5555
@AppStorage(\.acceptSuggestionWithTab)
5656
var acceptSuggestionWithTab
57+
@AppStorage(\.dismissSuggestionWithEsc)
58+
var dismissSuggestionWithEsc
5759
@AppStorage(\.isSuggestionSenseEnabled)
5860
var isSuggestionSenseEnabled
5961

@@ -185,6 +187,10 @@ struct SuggestionSettingsView: View {
185187
Text("Accept Suggestion with Tab")
186188
}
187189
}
190+
191+
Toggle(isOn: $settings.dismissSuggestionWithEsc) {
192+
Text("Dismiss Suggestion with ESC")
193+
}
188194
#endif
189195

190196
HStack {

Core/Sources/Service/GUI/WidgetDataSource.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ extension WidgetDataSource: SuggestionWidgetDataSource {
5050
await handler.acceptSuggestion()
5151
NSWorkspace.activatePreviousActiveXcode()
5252
}
53+
},
54+
onDismissSuggestionTapped: {
55+
Task {
56+
let handler = PseudoCommandHandler()
57+
await handler.dismissSuggestion()
58+
NSWorkspace.activatePreviousActiveXcode()
59+
}
5360
}
5461
)
5562
}

Core/Sources/Service/Service.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,14 @@ public final class Service {
4747
globalShortcutManager = .init(guiController: guiController)
4848

4949
#if canImport(ProService)
50-
proService = withDependencies { dependencyValues in
51-
dependencyValues.proServiceAcceptSuggestion = {
50+
proService = ProService(
51+
acceptSuggestion: {
5252
Task { await PseudoCommandHandler().acceptSuggestion() }
53+
},
54+
dismissSuggestion: {
55+
Task { await PseudoCommandHandler().dismissSuggestion() }
5356
}
54-
} operation: {
55-
ProService()
56-
}
57+
)
5758
#endif
5859

5960
scheduledCleaner.service = self
@@ -92,7 +93,7 @@ public extension Service {
9293
reply(nil, error)
9394
return
9495
}
95-
96+
9697
reply(nil, XPCRequestNotHandledError())
9798
}
9899
}

Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ struct PseudoCommandHandler {
241241
}
242242
}
243243
}
244+
245+
func dismissSuggestion() async {
246+
guard let documentURL = XcodeInspector.shared.activeDocumentURL else { return }
247+
guard let (_, filespace) = try? await Service.shared.workspacePool
248+
.fetchOrCreateWorkspaceAndFilespace(fileURL: documentURL) else { return }
249+
250+
await filespace.reset()
251+
PresentInWindowSuggestionPresenter().discardSuggestion(fileURL: documentURL)
252+
}
244253
}
245254

246255
extension PseudoCommandHandler {

Core/Sources/SuggestionWidget/Providers/CodeSuggestionProvider.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public final class CodeSuggestionProvider: ObservableObject, Equatable {
1818
public var onSelectNextSuggestionTapped: () -> Void
1919
public var onRejectSuggestionTapped: () -> Void
2020
public var onAcceptSuggestionTapped: () -> Void
21+
public var onDismissSuggestionTapped: () -> Void
2122

2223
public init(
2324
code: String = "",
@@ -28,7 +29,8 @@ public final class CodeSuggestionProvider: ObservableObject, Equatable {
2829
onSelectPreviousSuggestionTapped: @escaping () -> Void = {},
2930
onSelectNextSuggestionTapped: @escaping () -> Void = {},
3031
onRejectSuggestionTapped: @escaping () -> Void = {},
31-
onAcceptSuggestionTapped: @escaping () -> Void = {}
32+
onAcceptSuggestionTapped: @escaping () -> Void = {},
33+
onDismissSuggestionTapped: @escaping () -> Void = {}
3234
) {
3335
self.code = code
3436
self.language = language
@@ -39,11 +41,13 @@ public final class CodeSuggestionProvider: ObservableObject, Equatable {
3941
self.onSelectNextSuggestionTapped = onSelectNextSuggestionTapped
4042
self.onRejectSuggestionTapped = onRejectSuggestionTapped
4143
self.onAcceptSuggestionTapped = onAcceptSuggestionTapped
44+
self.onDismissSuggestionTapped = onDismissSuggestionTapped
4245
}
4346

4447
func selectPreviousSuggestion() { onSelectPreviousSuggestionTapped() }
4548
func selectNextSuggestion() { onSelectNextSuggestionTapped() }
4649
func rejectSuggestion() { onRejectSuggestionTapped() }
4750
func acceptSuggestion() { onAcceptSuggestionTapped() }
51+
func dismissSuggestion() { onDismissSuggestionTapped() }
4852
}
4953

Core/Sources/SuggestionWidget/SuggestionPanelContent/CodeBlockSuggestionPanel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ struct CodeBlockSuggestionPanel: View {
7474
Spacer()
7575

7676
Button(action: {
77-
suggestion.rejectSuggestion()
77+
suggestion.dismissSuggestion()
7878
}) {
7979
Image(systemName: "xmark")
8080
}.buttonStyle(.plain)

Pro

Submodule Pro updated from 5eae05a to 0b59096

Tool/Sources/Preferences/Keys.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,10 @@ public extension UserDefaultPreferenceKeys {
334334
.init(defaultValue: true, key: "AcceptSuggestionWithTab")
335335
}
336336

337+
var dismissSuggestionWithEsc: PreferenceKey<Bool> {
338+
.init(defaultValue: true, key: "DismissSuggestionWithEsc")
339+
}
340+
337341
var isSuggestionSenseEnabled: PreferenceKey<Bool> {
338342
.init(defaultValue: false, key: "IsSuggestionSenseEnabled")
339343
}

0 commit comments

Comments
 (0)