Skip to content

Commit d6cb6ce

Browse files
committed
Add Swiftly installation support
1 parent a5e141a commit d6cb6ce

File tree

7 files changed

+568
-27
lines changed

7 files changed

+568
-27
lines changed

package-lock.json

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

package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,13 @@
10831083
"order": 4,
10841084
"scope": "machine-overridable"
10851085
},
1086+
"swift.suppressSwiftlyInstallPrompt": {
1087+
"type": "boolean",
1088+
"default": false,
1089+
"markdownDescription": "Suppress the automatic Swiftly installation prompt when no Swift toolchain is found.",
1090+
"order": 98,
1091+
"scope": "application"
1092+
},
10861093
"swift.diagnostics": {
10871094
"type": "boolean",
10881095
"default": false,
@@ -2047,6 +2054,7 @@
20472054
"@types/source-map-support": "^0.5.10",
20482055
"@types/svg2ttf": "^5.0.3",
20492056
"@types/svgicons2svgfont": "^10.0.5",
2057+
"@types/tar": "^6.1.13",
20502058
"@types/ttf2woff": "^2.0.4",
20512059
"@types/vscode": "^1.88.0",
20522060
"@types/xml2js": "^0.4.14",
@@ -2096,6 +2104,7 @@
20962104
"fast-glob": "^3.3.3",
20972105
"lcov-parse": "^1.0.0",
20982106
"plist": "^3.1.0",
2107+
"tar": "^6.2.1",
20992108
"vscode-languageclient": "^9.0.1",
21002109
"xml2js": "^0.6.2",
21012110
"zod": "^4.1.5"

src/PackageWatcher.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ import * as vscode from "vscode";
1717

1818
import { FolderContext } from "./FolderContext";
1919
import { FolderOperation } from "./WorkspaceContext";
20+
import { handleMissingSwiftly } from "./commands/installSwiftly";
2021
import { SwiftLogger } from "./logging/SwiftLogger";
2122
import { BuildFlags } from "./toolchain/BuildFlags";
23+
import { handleMissingSwiftlyToolchain } from "./toolchain/swiftly";
2224
import { showReloadExtensionNotification } from "./ui/ReloadExtension";
2325
import { fileExists } from "./utilities/filesystem";
2426
import { Version } from "./utilities/version";
@@ -140,6 +142,31 @@ export class PackageWatcher {
140142
async handleSwiftVersionFileChange() {
141143
const version = await this.readSwiftVersionFile();
142144
if (version?.toString() !== this.currentVersion?.toString()) {
145+
if (version) {
146+
const swiftlyInstalled = await handleMissingSwiftly(this.logger);
147+
if (swiftlyInstalled) {
148+
const toolchainInstalled = await handleMissingSwiftlyToolchain(
149+
version.toString(),
150+
this.folderContext.workspaceContext.extensionContext.extensionPath,
151+
this.logger,
152+
this.folderContext.folder
153+
);
154+
if (toolchainInstalled) {
155+
// Build dynamic message based on installation results
156+
const message =
157+
"Swiftly and Swift toolchain have been installed. Please reload the extension to use the new toolchain.";
158+
await showReloadExtensionNotification(message);
159+
return;
160+
} else {
161+
// Only Swiftly was installed
162+
const message =
163+
"Swiftly has been installed. Please reload the extension to continue.";
164+
await showReloadExtensionNotification(message);
165+
return;
166+
}
167+
}
168+
}
169+
143170
await this.folderContext.fireEvent(FolderOperation.swiftVersionUpdated);
144171
await showReloadExtensionNotification(
145172
"Changing the swift toolchain version requires the extension to be reloaded"

0 commit comments

Comments
 (0)