Skip to content

Commit d6dd5ca

Browse files
authored
Merge pull request #416 from pkasila/extensions-api
Demo Extension API (Swift) and Extension Store
2 parents 2668c9e + f62ae43 commit d6dd5ca

22 files changed

+955
-6
lines changed

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,29 @@
1111
043C321627E3201F006AE443 /* WorkspaceDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043C321527E3201F006AE443 /* WorkspaceDocument.swift */; };
1212
043C321A27E32295006AE443 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 043C321927E32295006AE443 /* MainMenu.xib */; };
1313
04540D5E27DD08C300E91B77 /* WorkspaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B658FB3127DA9E0F00EA4DBD /* WorkspaceView.swift */; };
14+
0463E51127FCC1DF00806D5C /* CodeEditAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0463E51027FCC1DF00806D5C /* CodeEditAPI.swift */; };
15+
0463E51327FCC1FB00806D5C /* CodeEditTargetsAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0463E51227FCC1FB00806D5C /* CodeEditTargetsAPI.swift */; };
1416
04660F6A27E51E5C00477777 /* CodeEditWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04660F6927E51E5C00477777 /* CodeEditWindowController.swift */; };
17+
0483E34D27FCC46600354AC0 /* ExtensionsStore in Frameworks */ = {isa = PBXBuildFile; productRef = 0483E34C27FCC46600354AC0 /* ExtensionsStore */; };
18+
0483E35027FDB17700354AC0 /* ExtensionNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0483E34F27FDB17700354AC0 /* ExtensionNavigator.swift */; };
1519
0485EB1F27E7458B00138301 /* WorkspaceCodeFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0485EB1E27E7458B00138301 /* WorkspaceCodeFileView.swift */; };
1620
0485EB2527E7B9C800138301 /* Overlays in Frameworks */ = {isa = PBXBuildFile; productRef = 0485EB2427E7B9C800138301 /* Overlays */; };
21+
04C3254B27FF23B000C8DA2D /* ExtensionNavigatorData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C3254A27FF23B000C8DA2D /* ExtensionNavigatorData.swift */; };
22+
04C3254D27FF331B00C8DA2D /* ExtensionNavigatorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C3254C27FF331B00C8DA2D /* ExtensionNavigatorItem.swift */; };
23+
04C3254F2800AA4700C8DA2D /* ExtensionInstallationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C3254E2800AA4700C8DA2D /* ExtensionInstallationView.swift */; };
24+
04C325512800AC7400C8DA2D /* ExtensionInstallationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C325502800AC7400C8DA2D /* ExtensionInstallationViewModel.swift */; };
25+
04C3255B2801F86400C8DA2D /* OutlineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285FEC6D27FE4B4A00E57D53 /* OutlineViewController.swift */; };
26+
04C3255C2801F86900C8DA2D /* OutlineMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285FEC7127FE4EEF00E57D53 /* OutlineMenu.swift */; };
27+
04C3256B28034FC800C8DA2D /* CodeEditKit in Frameworks */ = {isa = PBXBuildFile; productRef = 04C3256A28034FC800C8DA2D /* CodeEditKit */; };
28+
04C3256C28034FC800C8DA2D /* CodeEditKit in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 04C3256A28034FC800C8DA2D /* CodeEditKit */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
1729
20D2A95527F72E6800E7ECF6 /* Accounts in Frameworks */ = {isa = PBXBuildFile; productRef = 20D2A95427F72E6800E7ECF6 /* Accounts */; };
1830
2803257127F3CF1F009C7DC2 /* AppPreferences in Frameworks */ = {isa = PBXBuildFile; productRef = 2803257027F3CF1F009C7DC2 /* AppPreferences */; };
1931
28069DA427F5BCF70016BC47 /* default-dark.json in Resources */ = {isa = PBXBuildFile; fileRef = 28069DA327F5BCDD0016BC47 /* default-dark.json */; };
2032
2813F93827ECC4AA00E305E4 /* FindNavigatorResultList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E201B327E9989900CB86D0 /* FindNavigatorResultList.swift */; };
2133
2813F93927ECC4C300E305E4 /* NavigatorSidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776E627E3413200D46668 /* NavigatorSidebar.swift */; };
2234
2847019E27FDDF7600F87B6B /* OutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2847019D27FDDF7600F87B6B /* OutlineView.swift */; };
2335
2859B93F27EB50050069BE88 /* FontPicker in Frameworks */ = {isa = PBXBuildFile; productRef = 2859B93E27EB50050069BE88 /* FontPicker */; };
24-
285FEC6E27FE4B4A00E57D53 /* OutlineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285FEC6D27FE4B4A00E57D53 /* OutlineViewController.swift */; };
2536
285FEC7027FE4B9800E57D53 /* OutlineTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285FEC6F27FE4B9800E57D53 /* OutlineTableViewCell.swift */; };
26-
285FEC7227FE4EEF00E57D53 /* OutlineMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285FEC7127FE4EEF00E57D53 /* OutlineMenu.swift */; };
2737
286471AB27ED51FD0039369D /* ProjectNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 286471AA27ED51FD0039369D /* ProjectNavigator.swift */; };
2838
286620A527E4AB6900E18C2B /* BreadcrumbsComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 286620A427E4AB6900E18C2B /* BreadcrumbsComponent.swift */; };
2939
2875A46D27E3BE5B007805F8 /* BreadcrumbsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2875A46C27E3BE5B007805F8 /* BreadcrumbsView.swift */; };
@@ -73,14 +83,35 @@
7383
};
7484
/* End PBXContainerItemProxy section */
7585

86+
/* Begin PBXCopyFilesBuildPhase section */
87+
04C3255A2801B43A00C8DA2D /* Embed Frameworks */ = {
88+
isa = PBXCopyFilesBuildPhase;
89+
buildActionMask = 2147483647;
90+
dstPath = "";
91+
dstSubfolderSpec = 10;
92+
files = (
93+
04C3256C28034FC800C8DA2D /* CodeEditKit in Embed Frameworks */,
94+
);
95+
name = "Embed Frameworks";
96+
runOnlyForDeploymentPostprocessing = 0;
97+
};
98+
/* End PBXCopyFilesBuildPhase section */
99+
76100
/* Begin PBXFileReference section */
77101
043C321327E31FF6006AE443 /* CodeEditDocumentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeEditDocumentController.swift; sourceTree = "<group>"; };
78102
043C321527E3201F006AE443 /* WorkspaceDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceDocument.swift; sourceTree = "<group>"; };
79103
043C321927E32295006AE443 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
104+
0463E51027FCC1DF00806D5C /* CodeEditAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeEditAPI.swift; sourceTree = "<group>"; };
105+
0463E51227FCC1FB00806D5C /* CodeEditTargetsAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeEditTargetsAPI.swift; sourceTree = "<group>"; };
80106
04660F6027E3A68A00477777 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
81107
04660F6927E51E5C00477777 /* CodeEditWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeEditWindowController.swift; sourceTree = "<group>"; };
82108
0468438427DC76E200F8E88E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
109+
0483E34F27FDB17700354AC0 /* ExtensionNavigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionNavigator.swift; sourceTree = "<group>"; };
83110
0485EB1E27E7458B00138301 /* WorkspaceCodeFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceCodeFileView.swift; sourceTree = "<group>"; };
111+
04C3254A27FF23B000C8DA2D /* ExtensionNavigatorData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionNavigatorData.swift; sourceTree = "<group>"; };
112+
04C3254C27FF331B00C8DA2D /* ExtensionNavigatorItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionNavigatorItem.swift; sourceTree = "<group>"; };
113+
04C3254E2800AA4700C8DA2D /* ExtensionInstallationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionInstallationView.swift; sourceTree = "<group>"; };
114+
04C325502800AC7400C8DA2D /* ExtensionInstallationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionInstallationViewModel.swift; sourceTree = "<group>"; };
84115
28069DA327F5BCDD0016BC47 /* default-dark.json */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = text.json; path = "default-dark.json"; sourceTree = "<group>"; tabWidth = 2; };
85116
2847019D27FDDF7600F87B6B /* OutlineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutlineView.swift; sourceTree = "<group>"; };
86117
285FEC6D27FE4B4A00E57D53 /* OutlineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutlineViewController.swift; sourceTree = "<group>"; };
@@ -120,8 +151,10 @@
120151
isa = PBXFrameworksBuildPhase;
121152
buildActionMask = 2147483647;
122153
files = (
154+
0483E34D27FCC46600354AC0 /* ExtensionsStore in Frameworks */,
123155
5CA8776327FC4FC8003F5CD5 /* Design in Frameworks */,
124156
64B64EDE27F7B79400C400F1 /* About in Frameworks */,
157+
04C3256B28034FC800C8DA2D /* CodeEditKit in Frameworks */,
125158
5C403B8F27E20F8000788241 /* WorkspaceClient in Frameworks */,
126159
2803257127F3CF1F009C7DC2 /* AppPreferences in Frameworks */,
127160
5CA8776527FC6A95003F5CD5 /* QuickOpen in Frameworks */,
@@ -165,6 +198,27 @@
165198
path = Documents;
166199
sourceTree = "<group>";
167200
};
201+
0463E50F27FCC19800806D5C /* Extensions */ = {
202+
isa = PBXGroup;
203+
children = (
204+
0463E51027FCC1DF00806D5C /* CodeEditAPI.swift */,
205+
0463E51227FCC1FB00806D5C /* CodeEditTargetsAPI.swift */,
206+
);
207+
path = Extensions;
208+
sourceTree = "<group>";
209+
};
210+
0483E34E27FDB15F00354AC0 /* ExtensionNavigator */ = {
211+
isa = PBXGroup;
212+
children = (
213+
0483E34F27FDB17700354AC0 /* ExtensionNavigator.swift */,
214+
04C3254A27FF23B000C8DA2D /* ExtensionNavigatorData.swift */,
215+
04C3254C27FF331B00C8DA2D /* ExtensionNavigatorItem.swift */,
216+
04C3254E2800AA4700C8DA2D /* ExtensionInstallationView.swift */,
217+
04C325502800AC7400C8DA2D /* ExtensionInstallationViewModel.swift */,
218+
);
219+
path = ExtensionNavigator;
220+
sourceTree = "<group>";
221+
};
168222
28069DA527F5BD320016BC47 /* DefaultThemes */ = {
169223
isa = PBXGroup;
170224
children = (
@@ -206,6 +260,7 @@
206260
287776EA27E350A100D46668 /* NavigatorSidebar */ = {
207261
isa = PBXGroup;
208262
children = (
263+
0483E34E27FDB15F00354AC0 /* ExtensionNavigator */,
209264
286471AC27ED52950039369D /* ProjectNavigator */,
210265
D7012EE627E757660001E1EF /* FindNavigator */,
211266
287776E627E3413200D46668 /* NavigatorSidebar.swift */,
@@ -255,6 +310,7 @@
255310
B658FB2E27DA9E0F00EA4DBD /* CodeEdit */ = {
256311
isa = PBXGroup;
257312
children = (
313+
0463E50F27FCC19800806D5C /* Extensions */,
258314
2875A46E27E3BE63007805F8 /* Breadcrumbs */,
259315
043C321227E31FE8006AE443 /* Documents */,
260316
B6EE988E27E8877C00CDD8AB /* InspectorSidebar */,
@@ -326,6 +382,7 @@
326382
2B18499A27F8A7A0005119F0 /* Mark // swiftlint:disable:all as errors | Run Script */,
327383
2BA119D327E5274D00A996FF /* SwiftLint Run Script */,
328384
04ADA0CC27E6043B00BF00B2 /* Add TODO/FIXME as warnings | Run Script */,
385+
04C3255A2801B43A00C8DA2D /* Embed Frameworks */,
329386
);
330387
buildRules = (
331388
);
@@ -346,6 +403,8 @@
346403
64B64EDD27F7B79400C400F1 /* About */,
347404
5CA8776227FC4FC8003F5CD5 /* Design */,
348405
5CA8776427FC6A95003F5CD5 /* QuickOpen */,
406+
0483E34C27FCC46600354AC0 /* ExtensionsStore */,
407+
04C3256A28034FC800C8DA2D /* CodeEditKit */,
349408
);
350409
productName = CodeEdit;
351410
productReference = B658FB2C27DA9E0F00EA4DBD /* CodeEdit.app */;
@@ -420,6 +479,7 @@
420479
);
421480
mainGroup = B658FB2327DA9E0F00EA4DBD;
422481
packageReferences = (
482+
04C3256728034F3D00C8DA2D /* XCRemoteSwiftPackageReference "CodeEditKit" */,
423483
);
424484
productRefGroup = B658FB2D27DA9E0F00EA4DBD /* Products */;
425485
projectDirPath = "";
@@ -543,14 +603,18 @@
543603
files = (
544604
2813F93927ECC4C300E305E4 /* NavigatorSidebar.swift in Sources */,
545605
2813F93827ECC4AA00E305E4 /* FindNavigatorResultList.swift in Sources */,
606+
0483E35027FDB17700354AC0 /* ExtensionNavigator.swift in Sources */,
546607
2B7A583527E4BA0100D25D4E /* AppDelegate.swift in Sources */,
547608
2875A46D27E3BE5B007805F8 /* BreadcrumbsView.swift in Sources */,
548609
D7012EE827E757850001E1EF /* FindNavigator.swift in Sources */,
549610
D7E201AE27E8B3C000CB86D0 /* String+Ranges.swift in Sources */,
611+
0463E51327FCC1FB00806D5C /* CodeEditTargetsAPI.swift in Sources */,
612+
04C3254D27FF331B00C8DA2D /* ExtensionNavigatorItem.swift in Sources */,
550613
D7E201B027E8C07300CB86D0 /* FindNavigatorSearchBar.swift in Sources */,
551614
B6EE989227E887C600CDD8AB /* InspectorSidebarToolbar.swift in Sources */,
552615
B673FDAD27E8296A00795864 /* PressActionsModifier.swift in Sources */,
553616
043C321427E31FF6006AE443 /* CodeEditDocumentController.swift in Sources */,
617+
04C3255C2801F86900C8DA2D /* OutlineMenu.swift in Sources */,
554618
04540D5E27DD08C300E91B77 /* WorkspaceView.swift in Sources */,
555619
D7211D4327E066CE008F2ED7 /* Localized+Ex.swift in Sources */,
556620
D7E201B227E8D50000CB86D0 /* FindNavigatorModeSelector.swift in Sources */,
@@ -559,16 +623,19 @@
559623
0485EB1F27E7458B00138301 /* WorkspaceCodeFileView.swift in Sources */,
560624
2847019E27FDDF7600F87B6B /* OutlineView.swift in Sources */,
561625
286471AB27ED51FD0039369D /* ProjectNavigator.swift in Sources */,
626+
04C3254B27FF23B000C8DA2D /* ExtensionNavigatorData.swift in Sources */,
562627
D7E201BD27EA00E200CB86D0 /* FindNavigatorResultFileItem.swift in Sources */,
563628
286620A527E4AB6900E18C2B /* BreadcrumbsComponent.swift in Sources */,
564629
287776EF27E3515300D46668 /* TabBarItem.swift in Sources */,
565630
04660F6A27E51E5C00477777 /* CodeEditWindowController.swift in Sources */,
631+
04C3254F2800AA4700C8DA2D /* ExtensionInstallationView.swift in Sources */,
566632
B6EE989027E8879A00CDD8AB /* InspectorSidebar.swift in Sources */,
567633
D76D11CC27F2F2B6009FE61F /* BreadcrumbsMenu.swift in Sources */,
568634
043C321627E3201F006AE443 /* WorkspaceDocument.swift in Sources */,
635+
04C325512800AC7400C8DA2D /* ExtensionInstallationViewModel.swift in Sources */,
569636
28B0A19827E385C300B73177 /* NavigatorSidebarToolbarTop.swift in Sources */,
570-
285FEC7227FE4EEF00E57D53 /* OutlineMenu.swift in Sources */,
571-
285FEC6E27FE4B4A00E57D53 /* OutlineViewController.swift in Sources */,
637+
0463E51127FCC1DF00806D5C /* CodeEditAPI.swift in Sources */,
638+
04C3255B2801F86400C8DA2D /* OutlineViewController.swift in Sources */,
572639
28FFE1BF27E3A441001939DB /* NavigatorSidebarToolbarBottom.swift in Sources */,
573640
);
574641
runOnlyForDeploymentPostprocessing = 0;
@@ -934,11 +1001,31 @@
9341001
};
9351002
/* End XCConfigurationList section */
9361003

1004+
/* Begin XCRemoteSwiftPackageReference section */
1005+
04C3256728034F3D00C8DA2D /* XCRemoteSwiftPackageReference "CodeEditKit" */ = {
1006+
isa = XCRemoteSwiftPackageReference;
1007+
repositoryURL = "https://github.com/CodeEditApp/CodeEditKit";
1008+
requirement = {
1009+
branch = main;
1010+
kind = branch;
1011+
};
1012+
};
1013+
/* End XCRemoteSwiftPackageReference section */
1014+
9371015
/* Begin XCSwiftPackageProductDependency section */
1016+
0483E34C27FCC46600354AC0 /* ExtensionsStore */ = {
1017+
isa = XCSwiftPackageProductDependency;
1018+
productName = ExtensionsStore;
1019+
};
9381020
0485EB2427E7B9C800138301 /* Overlays */ = {
9391021
isa = XCSwiftPackageProductDependency;
9401022
productName = Overlays;
9411023
};
1024+
04C3256A28034FC800C8DA2D /* CodeEditKit */ = {
1025+
isa = XCSwiftPackageProductDependency;
1026+
package = 04C3256728034F3D00C8DA2D /* XCRemoteSwiftPackageReference "CodeEditKit" */;
1027+
productName = CodeEditKit;
1028+
};
9421029
20D2A95427F72E6800E7ECF6 /* Accounts */ = {
9431030
isa = XCSwiftPackageProductDependency;
9441031
productName = Accounts;

CodeEdit.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CodeEdit/AppDelegate.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import AppPreferences
1010
import Preferences
1111
import About
1212
import WelcomeModule
13+
import ExtensionsStore
1314

1415
class CodeEditApplication: NSApplication {
1516
let strongDelegate = AppDelegate()
@@ -52,6 +53,14 @@ class AppDelegate: NSObject, NSApplicationDelegate, ObservableObject {
5253
self.handleOpen()
5354
}
5455
}
56+
57+
DispatchQueue(label: "extensions.preload").async {
58+
do {
59+
try ExtensionsManager.shared?.preload()
60+
} catch let error {
61+
print(error)
62+
}
63+
}
5564
}
5665

5766
func applicationWillTerminate(_ aNotification: Notification) {

CodeEdit/CodeEdit.entitlements

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
4-
<dict/>
4+
<dict>
5+
<key>com.apple.security.cs.allow-jit</key>
6+
<true/>
7+
<key>com.apple.security.cs.disable-library-validation</key>
8+
<true/>
9+
</dict>
510
</plist>

CodeEdit/Documents/WorkspaceDocument.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,24 @@ import Combine
1313
import CodeFile
1414
import Search
1515
import QuickOpen
16+
import CodeEditKit
17+
import ExtensionsStore
1618

1719
@objc(WorkspaceDocument)
1820
class WorkspaceDocument: NSDocument, ObservableObject, NSToolbarDelegate {
1921
var workspaceClient: WorkspaceClient?
2022

23+
var extensionNavigatorData = ExtensionNavigatorData()
24+
2125
@Published var sortFoldersOnTop: Bool = true
2226
@Published var selectionState: WorkspaceSelectionState = .init()
2327

2428
var searchState: SearchState?
2529
var quickOpenState: QuickOpenState?
2630
private var cancellables = Set<AnyCancellable>()
2731

32+
@Published var targets: [Target] = []
33+
2834
deinit {
2935
cancellables.forEach { $0.cancel() }
3036
}
@@ -172,6 +178,15 @@ class WorkspaceDocument: NSDocument, ObservableObject, NSToolbarDelegate {
172178
}
173179
}
174180
.store(in: &cancellables)
181+
182+
// initialize extensions
183+
do {
184+
try ExtensionsManager.shared?.load { extensionID in
185+
return CodeEditAPI(extensionId: extensionID, workspace: self)
186+
}
187+
} catch let error {
188+
Swift.print(error)
189+
}
175190
}
176191

177192
override func write(to url: URL, ofType typeName: String) throws {}
@@ -207,6 +222,11 @@ class WorkspaceDocument: NSDocument, ObservableObject, NSToolbarDelegate {
207222
} catch {}
208223
}
209224
selectionState.openedCodeFiles.removeAll()
225+
226+
if let url = self.fileURL {
227+
ExtensionsManager.shared?.close(url: url)
228+
}
229+
210230
super.close()
211231
}
212232
}
@@ -306,3 +326,16 @@ struct WorkspaceSelectionState: Codable {
306326
try container.encode(openFileItems, forKey: .openFileItems)
307327
}
308328
}
329+
330+
// MARK: - Extensions
331+
extension WorkspaceDocument {
332+
func target(didAdd target: Target) {
333+
self.targets.append(target)
334+
}
335+
func target(didRemove target: Target) {
336+
self.targets.removeAll { $0.id == target.id }
337+
}
338+
func targetDidClear() {
339+
self.targets.removeAll()
340+
}
341+
}

CodeEdit/Extensions/CodeEditAPI.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//
2+
// CodeEditAPI.swift
3+
// CodeEdit
4+
//
5+
// Created by Pavel Kasila on 5.04.22.
6+
//
7+
8+
import Foundation
9+
import CodeEditKit
10+
11+
class CodeEditAPI: ExtensionAPI {
12+
var extensionId: String
13+
var workspace: WorkspaceDocument
14+
15+
var workspaceURL: URL {
16+
return workspace.fileURL!
17+
}
18+
19+
init(extensionId: String, workspace: WorkspaceDocument) {
20+
self.extensionId = extensionId
21+
self.workspace = workspace
22+
}
23+
24+
lazy var targets: TargetsAPI = CodeEditTargetsAPI(workspace)
25+
}

0 commit comments

Comments
 (0)