Skip to content

Commit 6b7484e

Browse files
committed
Add Swiftly installation support
1 parent a19d0b1 commit 6b7484e

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
@@ -1122,6 +1122,13 @@
11221122
"order": 4,
11231123
"scope": "machine-overridable"
11241124
},
1125+
"swift.suppressSwiftlyInstallPrompt": {
1126+
"type": "boolean",
1127+
"default": false,
1128+
"markdownDescription": "Suppress the automatic Swiftly installation prompt when no Swift toolchain is found.",
1129+
"order": 98,
1130+
"scope": "application"
1131+
},
11251132
"swift.diagnostics": {
11261133
"type": "boolean",
11271134
"default": false,
@@ -2087,6 +2094,7 @@
20872094
"@types/source-map-support": "^0.5.10",
20882095
"@types/svg2ttf": "^5.0.3",
20892096
"@types/svgicons2svgfont": "^10.0.5",
2097+
"@types/tar": "^6.1.13",
20902098
"@types/ttf2woff": "^2.0.4",
20912099
"@types/vscode": "^1.88.0",
20922100
"@types/xml2js": "^0.4.14",
@@ -2137,6 +2145,7 @@
21372145
"fast-glob": "^3.3.3",
21382146
"lcov-parse": "^1.0.0",
21392147
"plist": "^3.1.0",
2148+
"tar": "^6.2.1",
21402149
"vscode-languageclient": "^9.0.1",
21412150
"xml2js": "^0.6.2",
21422151
"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)