Skip to content

Commit cba82db

Browse files
committed
Fix that the case where updated content is nil was not handled
1 parent f7929cb commit cba82db

18 files changed

+68
-56
lines changed

Copilot for Xcode.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@
695695
CODE_SIGN_ENTITLEMENTS = "Copilot for Xcode/Copilot_for_Xcode.entitlements";
696696
CODE_SIGN_STYLE = Automatic;
697697
COMBINE_HIDPI_IMAGES = YES;
698-
CURRENT_PROJECT_VERSION = 4;
698+
CURRENT_PROJECT_VERSION = 7;
699699
DEVELOPMENT_ASSET_PATHS = "\"Copilot for Xcode/Preview Content\"";
700700
DEVELOPMENT_TEAM = 5YKZ4Y3DAW;
701701
ENABLE_HARDENED_RUNTIME = YES;
@@ -709,7 +709,7 @@
709709
"@executable_path/../Frameworks",
710710
);
711711
MACOSX_DEPLOYMENT_TARGET = 12.0;
712-
MARKETING_VERSION = 0.2.0;
712+
MARKETING_VERSION = 0.3.0;
713713
PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER_BASE)";
714714
PRODUCT_MODULE_NAME = Copilot_for_Xcode;
715715
PRODUCT_NAME = "Copilot for Xcode Dev";
@@ -727,7 +727,7 @@
727727
CODE_SIGN_ENTITLEMENTS = "Copilot for Xcode/Copilot_for_Xcode.entitlements";
728728
CODE_SIGN_STYLE = Automatic;
729729
COMBINE_HIDPI_IMAGES = YES;
730-
CURRENT_PROJECT_VERSION = 4;
730+
CURRENT_PROJECT_VERSION = 7;
731731
DEVELOPMENT_ASSET_PATHS = "\"Copilot for Xcode/Preview Content\"";
732732
DEVELOPMENT_TEAM = 5YKZ4Y3DAW;
733733
ENABLE_HARDENED_RUNTIME = YES;
@@ -741,7 +741,7 @@
741741
"@executable_path/../Frameworks",
742742
);
743743
MACOSX_DEPLOYMENT_TARGET = 12.0;
744-
MARKETING_VERSION = 0.2.0;
744+
MARKETING_VERSION = 0.3.0;
745745
PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER_BASE)";
746746
PRODUCT_NAME = "Copilot for Xcode";
747747
SWIFT_EMIT_LOC_STRINGS = YES;

Copilot for Xcode/InstructionView.swift

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,6 @@ Text("""
2121
7. Restart Xcode, the Copilot commands should be available in the menu bar.
2222
""")
2323

24-
Text("Permissions Requirement")
25-
.font(.title3)
26-
27-
Text("""
28-
- The extension will ask for Accessibility API permission the first time it runs.
29-
- The extension may ask for folder access permission when it runs.
30-
""")
31-
3224
Text("Disable Extension")
3325
.font(.title3)
3426

Core/Sources/Client/AsyncXPCService.swift

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,47 +80,47 @@ public struct AsyncXPCService {
8080
}
8181
}
8282

83-
public func getSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent {
83+
public func getSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent? {
8484
try await suggestionRequest(
8585
connection,
8686
editorContent,
8787
{ $0.getSuggestedCode }
8888
)
8989
}
9090

91-
public func getNextSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent {
91+
public func getNextSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent? {
9292
try await suggestionRequest(
9393
connection,
9494
editorContent,
9595
{ $0.getNextSuggestedCode }
9696
)
9797
}
9898

99-
public func getPreviousSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent {
99+
public func getPreviousSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent? {
100100
try await suggestionRequest(
101101
connection,
102102
editorContent,
103103
{ $0.getPreviousSuggestedCode }
104104
)
105105
}
106106

107-
public func getSuggestionAcceptedCode(editorContent: EditorContent) async throws -> UpdatedContent {
107+
public func getSuggestionAcceptedCode(editorContent: EditorContent) async throws -> UpdatedContent? {
108108
try await suggestionRequest(
109109
connection,
110110
editorContent,
111111
{ $0.getSuggestionAcceptedCode }
112112
)
113113
}
114114

115-
public func getSuggestionRejectedCode(editorContent: EditorContent) async throws -> UpdatedContent {
115+
public func getSuggestionRejectedCode(editorContent: EditorContent) async throws -> UpdatedContent? {
116116
try await suggestionRequest(
117117
connection,
118118
editorContent,
119119
{ $0.getSuggestionRejectedCode }
120120
)
121121
}
122122

123-
public func getRealtimeSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent {
123+
public func getRealtimeSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent? {
124124
try await suggestionRequest(
125125
connection,
126126
editorContent,
@@ -172,7 +172,7 @@ func suggestionRequest(
172172
_ connection: NSXPCConnection,
173173
_ editorContent: EditorContent,
174174
_ fn: @escaping (any XPCServiceProtocol) -> (Data, @escaping (Data?, Error?) -> Void) -> Void
175-
) async throws -> UpdatedContent {
175+
) async throws -> UpdatedContent? {
176176
let data = try JSONEncoder().encode(editorContent)
177177
return try await withXPCServiceConnected(connection: connection) {
178178
service, continuation in
@@ -182,9 +182,13 @@ func suggestionRequest(
182182
return
183183
}
184184
do {
185-
let updatedContent = try JSONDecoder()
186-
.decode(UpdatedContent.self, from: updatedData ?? Data())
187-
continuation.resume(updatedContent)
185+
if let updatedData {
186+
let updatedContent = try JSONDecoder()
187+
.decode(UpdatedContent.self, from: updatedData ?? Data())
188+
continuation.resume(updatedContent)
189+
} else {
190+
continuation.resume(nil)
191+
}
188192
} catch {
189193
continuation.reject(error)
190194
}

Core/Tests/ServiceTests/AcceptSuggestionTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ final class AcceptSuggestionTests: XCTestCase {
4141
tabSize: 1,
4242
indentSize: 1,
4343
usesTabsForIndentation: false
44-
))
44+
))!
4545

4646
let result1Lines = lines.applying(result1.modifications)
4747

@@ -53,7 +53,7 @@ final class AcceptSuggestionTests: XCTestCase {
5353
tabSize: 1,
5454
indentSize: 1,
5555
usesTabsForIndentation: false
56-
))
56+
))!
5757

5858
let result2Lines = result1Lines.applying(result2.modifications)
5959

@@ -79,7 +79,7 @@ final class AcceptSuggestionTests: XCTestCase {
7979
tabSize: 1,
8080
indentSize: 1,
8181
usesTabsForIndentation: false
82-
))
82+
))!
8383

8484
let result3Lines = lines.applying(result3.modifications)
8585

Core/Tests/ServiceTests/Environment.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ func clearEnvironment() {
2626
Environment.createSuggestionService = {
2727
_ in fatalError("")
2828
}
29+
30+
Environment.triggerAction = { _ in }
2931
}
3032

3133
func getService() -> AsyncXPCService {

Core/Tests/ServiceTests/GetNextSuggestionTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ final class GetNextSuggestionTests: XCTestCase {
5151
tabSize: 1,
5252
indentSize: 1,
5353
usesTabsForIndentation: false
54-
))
54+
))!
5555

5656
let result1Lines = lines.applying(result1.modifications)
5757

@@ -63,7 +63,7 @@ final class GetNextSuggestionTests: XCTestCase {
6363
tabSize: 1,
6464
indentSize: 1,
6565
usesTabsForIndentation: false
66-
))
66+
))!
6767

6868
let result2Lines = result1Lines.applying(result2.modifications)
6969

@@ -92,7 +92,7 @@ final class GetNextSuggestionTests: XCTestCase {
9292
tabSize: 1,
9393
indentSize: 1,
9494
usesTabsForIndentation: false
95-
))
95+
))!
9696

9797
let result3Lines = lines.applying(result3.modifications)
9898

Core/Tests/ServiceTests/GetPreviousSuggestionTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ final class GetPreviousSuggestionTests: XCTestCase {
5151
tabSize: 1,
5252
indentSize: 1,
5353
usesTabsForIndentation: false
54-
))
54+
))!
5555

5656
let result1Lines = lines.applying(result1.modifications)
5757

@@ -63,7 +63,7 @@ final class GetPreviousSuggestionTests: XCTestCase {
6363
tabSize: 1,
6464
indentSize: 1,
6565
usesTabsForIndentation: false
66-
))
66+
))!
6767

6868
let result2Lines = result1Lines.applying(result2.modifications)
6969

@@ -92,7 +92,7 @@ final class GetPreviousSuggestionTests: XCTestCase {
9292
tabSize: 1,
9393
indentSize: 1,
9494
usesTabsForIndentation: false
95-
))
95+
))!
9696

9797
let result3Lines = lines.applying(result3.modifications)
9898

Core/Tests/ServiceTests/GetSuggestionsTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ final class GetSuggestionsTests: XCTestCase {
4242
tabSize: 1,
4343
indentSize: 1,
4444
usesTabsForIndentation: false
45-
))
45+
))!
4646

4747
let resultLines = lines.applying(result.modifications)
4848

@@ -95,7 +95,7 @@ final class GetSuggestionsTests: XCTestCase {
9595
tabSize: 1,
9696
indentSize: 1,
9797
usesTabsForIndentation: false
98-
))
98+
))!
9999

100100
let resultLines = lines.applying(result.modifications)
101101

Core/Tests/ServiceTests/RejectSuggestionTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ final class RejectSuggestionTests: XCTestCase {
4141
tabSize: 1,
4242
indentSize: 1,
4343
usesTabsForIndentation: false
44-
))
44+
))!
4545

4646
let result1Lines = lines.applying(result1.modifications)
4747

@@ -53,7 +53,7 @@ final class RejectSuggestionTests: XCTestCase {
5353
tabSize: 1,
5454
indentSize: 1,
5555
usesTabsForIndentation: false
56-
))
56+
))!
5757

5858
let result2Lines = result1Lines.applying(result2.modifications)
5959
XCTAssertEqual(result2Lines.joined(), result2.content)
@@ -73,7 +73,7 @@ final class RejectSuggestionTests: XCTestCase {
7373
tabSize: 1,
7474
indentSize: 1,
7575
usesTabsForIndentation: false
76-
))
76+
))!
7777

7878
let result3Lines = result1Lines.applying(result3.modifications)
7979
XCTAssertEqual(result3Lines.joined(), result3.content)

EditorExtension/AcceptSuggestionCommand.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@ import XPCShared
66

77
class AcceptSuggestionCommand: NSObject, XCSourceEditorCommand, CommandType {
88
var name: String { "Accept Suggestion" }
9-
9+
1010
func perform(
1111
with invocation: XCSourceEditorCommandInvocation,
1212
completionHandler: @escaping (Error?) -> Void
1313
) {
1414
Task {
1515
do {
1616
let service = try getService()
17-
invocation.accept(try await service.getSuggestionAcceptedCode(
17+
if let content = try await service.getSuggestionAcceptedCode(
1818
editorContent: .init(invocation)
19-
))
19+
) {
20+
invocation.accept(content)
21+
}
2022
completionHandler(nil)
2123
} catch {
2224
completionHandler(error)

0 commit comments

Comments
 (0)