Skip to content

Commit 964b69b

Browse files
committed
Move suggestion post processing to middleware
1 parent b0c309a commit 964b69b

File tree

8 files changed

+37
-41
lines changed

8 files changed

+37
-41
lines changed

Tool/Sources/CodeiumService/CodeiumService.swift

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ public protocol CodeiumSuggestionServiceType {
1212
cursorPosition: CursorPosition,
1313
tabSize: Int,
1414
indentSize: Int,
15-
usesTabsForIndentation: Bool,
16-
ignoreSpaceOnlySuggestions: Bool
15+
usesTabsForIndentation: Bool
1716
) async throws -> [CodeSuggestion]
1817
func notifyAccepted(_ suggestion: CodeSuggestion) async
1918
func notifyOpenTextDocument(fileURL: URL, content: String) async throws
@@ -227,8 +226,7 @@ extension CodeiumSuggestionService: CodeiumSuggestionServiceType {
227226
cursorPosition: CursorPosition,
228227
tabSize: Int,
229228
indentSize: Int,
230-
usesTabsForIndentation: Bool,
231-
ignoreSpaceOnlySuggestions: Bool
229+
usesTabsForIndentation: Bool
232230
) async throws -> [CodeSuggestion] {
233231
ongoingTasks.forEach { $0.cancel() }
234232
ongoingTasks.removeAll()
@@ -272,12 +270,7 @@ extension CodeiumSuggestionService: CodeiumSuggestionServiceType {
272270

273271
try Task.checkCancellation()
274272

275-
return result.completionItems?.filter { item in
276-
if ignoreSpaceOnlySuggestions {
277-
return !item.completion.text.allSatisfy { $0.isWhitespace || $0.isNewline }
278-
}
279-
return true
280-
}.map { item in
273+
return result.completionItems?.map { item in
281274
CodeSuggestion(
282275
id: item.completion.completionId,
283276
text: item.completion.text,

Tool/Sources/GitHubCopilotService/GitHubCopilotService.swift

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ public protocol GitHubCopilotSuggestionServiceType {
2222
cursorPosition: CursorPosition,
2323
tabSize: Int,
2424
indentSize: Int,
25-
usesTabsForIndentation: Bool,
26-
ignoreSpaceOnlySuggestions: Bool,
27-
ignoreTrailingNewLinesAndSpaces: Bool
25+
usesTabsForIndentation: Bool
2826
) async throws -> [CodeSuggestion]
2927
func notifyAccepted(_ completion: CodeSuggestion) async
3028
func notifyRejected(_ completions: [CodeSuggestion]) async
@@ -340,9 +338,7 @@ public final class GitHubCopilotSuggestionService: GitHubCopilotBaseService,
340338
cursorPosition: CursorPosition,
341339
tabSize: Int,
342340
indentSize: Int,
343-
usesTabsForIndentation: Bool,
344-
ignoreSpaceOnlySuggestions: Bool,
345-
ignoreTrailingNewLinesAndSpaces: Bool
341+
usesTabsForIndentation: Bool
346342
) async throws -> [CodeSuggestion] {
347343
let languageId = languageIdentifierFromFileURL(fileURL)
348344

@@ -379,28 +375,13 @@ public final class GitHubCopilotSuggestionService: GitHubCopilotBaseService,
379375
position: cursorPosition
380376
)))
381377
.completions
382-
.filter { completion in
383-
if ignoreSpaceOnlySuggestions {
384-
return !completion.text.allSatisfy { $0.isWhitespace || $0.isNewline }
385-
}
386-
return true
387-
}
388378
.map {
389379
let suggestion = CodeSuggestion(
390380
id: $0.uuid,
391381
text: $0.text,
392382
position: $0.position,
393383
range: $0.range
394384
)
395-
if ignoreTrailingNewLinesAndSpaces {
396-
var updated = suggestion
397-
var text = updated.text[...]
398-
while let last = text.last, last.isNewline || last.isWhitespace {
399-
text = text.dropLast(1)
400-
}
401-
updated.text = String(text)
402-
return updated
403-
}
404385
return suggestion
405386
}
406387
try Task.checkCancellation()

Tool/Sources/SuggestionProvider/CodeiumSuggestionProvider.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ public extension CodeiumSuggestionProvider {
4848
cursorPosition: request.cursorPosition,
4949
tabSize: request.tabSize,
5050
indentSize: request.indentSize,
51-
usesTabsForIndentation: request.usesTabsForIndentation,
52-
ignoreSpaceOnlySuggestions: request.ignoreSpaceOnlySuggestions
51+
usesTabsForIndentation: request.usesTabsForIndentation
5352
)
5453
}
5554

Tool/Sources/SuggestionProvider/GitHubCopilotSuggestionProvider.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ public extension GitHubCopilotSuggestionProvider {
4646
cursorPosition: request.cursorPosition,
4747
tabSize: request.tabSize,
4848
indentSize: request.indentSize,
49-
usesTabsForIndentation: request.usesTabsForIndentation,
50-
ignoreSpaceOnlySuggestions: request.ignoreSpaceOnlySuggestions,
51-
ignoreTrailingNewLinesAndSpaces: UserDefaults.shared
52-
.value(for: \.gitHubCopilotIgnoreTrailingNewLines)
49+
usesTabsForIndentation: request.usesTabsForIndentation
5350
)
5451
}
5552

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Foundation
2+
import SuggestionModel
3+
4+
public struct PostProcessingSuggestionServiceMiddleware: SuggestionServiceMiddleware {
5+
public init() {}
6+
7+
public func getSuggestion(
8+
_ request: SuggestionRequest,
9+
configuration: SuggestionServiceConfiguration,
10+
next: Next
11+
) async throws -> [CodeSuggestion] {
12+
let suggestions = try await next(request)
13+
14+
return suggestions.compactMap {
15+
var suggestion = $0
16+
Self.removeTrailingWhitespacesAndNewlines(&suggestion)
17+
if suggestion.text.isEmpty { return nil }
18+
return suggestion
19+
}
20+
}
21+
22+
static func removeTrailingWhitespacesAndNewlines(_ suggestion: inout CodeSuggestion) {
23+
var text = suggestion.text[...]
24+
while let last = text.last, last.isNewline || last.isWhitespace {
25+
text = text.dropLast(1)
26+
}
27+
suggestion.text = String(text)
28+
}
29+
}

Tool/Sources/SuggestionProvider/SuggestionProvider.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public struct SuggestionRequest {
1515
public var tabSize: Int
1616
public var indentSize: Int
1717
public var usesTabsForIndentation: Bool
18-
public var ignoreSpaceOnlySuggestions: Bool
1918
public var relevantCodeSnippets: [RelevantCodeSnippet]
2019

2120
public init(
@@ -28,7 +27,6 @@ public struct SuggestionRequest {
2827
tabSize: Int,
2928
indentSize: Int,
3029
usesTabsForIndentation: Bool,
31-
ignoreSpaceOnlySuggestions: Bool,
3230
relevantCodeSnippets: [RelevantCodeSnippet]
3331
) {
3432
self.fileURL = fileURL
@@ -40,7 +38,6 @@ public struct SuggestionRequest {
4038
self.tabSize = tabSize
4139
self.indentSize = indentSize
4240
self.usesTabsForIndentation = usesTabsForIndentation
43-
self.ignoreSpaceOnlySuggestions = ignoreSpaceOnlySuggestions
4441
self.relevantCodeSnippets = relevantCodeSnippets
4542
}
4643
}

Tool/Sources/SuggestionProvider/SuggestionServiceMiddleware.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public protocol SuggestionServiceMiddleware {
1515
public enum SuggestionServiceMiddlewareContainer {
1616
static var builtInMiddlewares: [SuggestionServiceMiddleware] = [
1717
DisabledLanguageSuggestionServiceMiddleware(),
18+
PostProcessingSuggestionServiceMiddleware()
1819
]
1920

2021
static var customMiddlewares: [SuggestionServiceMiddleware] = []

Tool/Sources/WorkspaceSuggestionService/Workspace+SuggestionService.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ public extension Workspace {
6565
tabSize: editor.tabSize,
6666
indentSize: editor.indentSize,
6767
usesTabsForIndentation: editor.usesTabsForIndentation,
68-
ignoreSpaceOnlySuggestions: true,
6968
relevantCodeSnippets: []
7069
)
7170
)

0 commit comments

Comments
 (0)