Skip to content

Commit 45100b5

Browse files
committed
Prompt for reload on .swift-version update, add some tests
1 parent 361d5ef commit 45100b5

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

src/PackageWatcher.ts

+4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { FolderOperation, WorkspaceContext } from "./WorkspaceContext";
2020
import { BuildFlags } from "./toolchain/BuildFlags";
2121
import { Version } from "./utilities/version";
2222
import { fileExists } from "./utilities/filesystem";
23+
import { showReloadExtensionNotification } from "./ui/ReloadExtension";
2324

2425
/**
2526
* Watches for changes to **Package.swift** and **Package.resolved**.
@@ -131,6 +132,9 @@ export class PackageWatcher {
131132
this.folderContext,
132133
FolderOperation.swiftVersionUpdated
133134
);
135+
await showReloadExtensionNotification(
136+
"Changing the swift toolchain version requires the extension to be reloaded"
137+
);
134138
}
135139
this.currentVersion = version ?? this.folderContext.toolchain.swiftVersion;
136140
}

src/ui/ToolchainSelection.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export async function downloadToolchain() {
3737
* Open the installation page for Swiftly
3838
*/
3939
export async function installSwiftly() {
40-
if (await vscode.env.openExternal(vscode.Uri.parse("https://swiftlang.github.io/swiftly"))) {
40+
if (await vscode.env.openExternal(vscode.Uri.parse("https://www.swift.org/install/"))) {
4141
const selected = await showReloadExtensionNotification(
4242
"The Swift extension must be reloaded once you have downloaded and installed the new toolchain.",
4343
"Select Toolchain"

test/unit-tests/sourcekit-lsp/LanguageClientManager.test.ts

+65
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,71 @@ suite("LanguageClientManager Suite", () => {
210210
mockedEnvironment.setValue({});
211211
});
212212

213+
suite.only("LanguageClientToolchainCoordinator", () => {
214+
test("returns the same language client for the same folder", async () => {
215+
const factory = new LanguageClientToolchainCoordinator(
216+
instance(mockedWorkspace),
217+
languageClientFactoryMock
218+
);
219+
220+
const sut1 = factory.get(instance(mockedFolder));
221+
const sut2 = factory.get(instance(mockedFolder));
222+
223+
expect(sut1).to.equal(sut2, "Expected the same LanguageClient to be returned");
224+
expect(languageClientFactoryMock.createLanguageClient).to.have.been.calledOnce;
225+
});
226+
227+
test("returns the same language client for two folders with the same toolchain", async () => {
228+
const newFolder = mockObject<FolderContext>({
229+
isRootFolder: false,
230+
folder: vscode.Uri.file("/folder11"),
231+
workspaceFolder: {
232+
uri: vscode.Uri.file("/folder11"),
233+
name: "folder11",
234+
index: 0,
235+
},
236+
workspaceContext: instance(mockedWorkspace),
237+
swiftVersion: mockedFolder.swiftVersion,
238+
});
239+
mockedWorkspace.folders.push(instance(newFolder));
240+
const factory = new LanguageClientToolchainCoordinator(
241+
instance(mockedWorkspace),
242+
languageClientFactoryMock
243+
);
244+
245+
const sut1 = factory.get(instance(mockedFolder));
246+
const sut2 = factory.get(instance(newFolder));
247+
248+
expect(sut1).to.equal(sut2, "Expected the same LanguageClient to be returned");
249+
expect(languageClientFactoryMock.createLanguageClient).to.have.been.calledOnce;
250+
});
251+
252+
test("returns the a new language client for folders with different toolchains", async () => {
253+
const newFolder = mockObject<FolderContext>({
254+
isRootFolder: false,
255+
folder: vscode.Uri.file("/folder11"),
256+
workspaceFolder: {
257+
uri: vscode.Uri.file("/folder11"),
258+
name: "folder11",
259+
index: 0,
260+
},
261+
workspaceContext: instance(mockedWorkspace),
262+
swiftVersion: new Version(6, 1, 0),
263+
});
264+
mockedWorkspace.folders.push(instance(newFolder));
265+
const factory = new LanguageClientToolchainCoordinator(
266+
instance(mockedWorkspace),
267+
languageClientFactoryMock
268+
);
269+
270+
const sut1 = factory.get(instance(mockedFolder));
271+
const sut2 = factory.get(instance(newFolder));
272+
273+
expect(sut1).to.not.equal(sut2, "Expected different LanguageClients to be returned");
274+
expect(languageClientFactoryMock.createLanguageClient).to.have.been.calledOnce;
275+
});
276+
});
277+
213278
test("launches SourceKit-LSP on startup", async () => {
214279
const factory = new LanguageClientToolchainCoordinator(
215280
instance(mockedWorkspace),

0 commit comments

Comments
 (0)