From c094c5309f7a00cd4abb822fa078ba33f37bdbb2 Mon Sep 17 00:00:00 2001 From: Adam Ward Date: Thu, 26 Jun 2025 10:16:37 -0400 Subject: [PATCH 1/2] Prevent continuous "package resolve" cycles We can ignore the create and delete events as these were likely caused by the LSP or SwiftPM anywatch. Watch for change still in case the user switches branches Issue: #1571 --- src/PackageWatcher.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/PackageWatcher.ts b/src/PackageWatcher.ts index ab900f1de..712f8c0a9 100644 --- a/src/PackageWatcher.ts +++ b/src/PackageWatcher.ts @@ -30,6 +30,7 @@ import { showReloadExtensionNotification } from "./ui/ReloadExtension"; */ export class PackageWatcher { private packageFileWatcher?: vscode.FileSystemWatcher; + private resolvedChangedDisposable?: vscode.Disposable; private resolvedFileWatcher?: vscode.FileSystemWatcher; private workspaceStateFileWatcher?: vscode.FileSystemWatcher; private snippetWatcher?: vscode.FileSystemWatcher; @@ -59,6 +60,7 @@ export class PackageWatcher { */ dispose() { this.packageFileWatcher?.dispose(); + this.resolvedChangedDisposable?.dispose(); this.resolvedFileWatcher?.dispose(); this.workspaceStateFileWatcher?.dispose(); this.snippetWatcher?.dispose(); @@ -77,11 +79,18 @@ export class PackageWatcher { private createResolvedFileWatcher(): vscode.FileSystemWatcher { const watcher = vscode.workspace.createFileSystemWatcher( - new vscode.RelativePattern(this.folderContext.folder, "Package.resolved") + new vscode.RelativePattern(this.folderContext.folder, "Package.resolved"), + // https://github.com/swiftlang/vscode-swift/issues/1571 + // We can ignore create because that would be seemingly from a Package.resolved + // and will ignore delete as we don't know the reason behind. By still listening + // for change + true, + false, + true + ); + this.resolvedChangedDisposable = watcher.onDidChange( + async () => await this.handlePackageResolvedChange() ); - watcher.onDidCreate(async () => await this.handlePackageResolvedChange()); - watcher.onDidChange(async () => await this.handlePackageResolvedChange()); - watcher.onDidDelete(async () => await this.handlePackageResolvedChange()); return watcher; } From 009b4c803a886e4e91a5e088114af7f636849287 Mon Sep 17 00:00:00 2001 From: Adam Ward Date: Thu, 26 Jun 2025 12:57:45 -0400 Subject: [PATCH 2/2] Add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9d598cdb..2741d537e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Cleanup Swift diagnostics when the source file is moved or deleted ([#1653](https://github.com/swiftlang/vscode-swift/pull/1653)) - Make sure newline starts with /// when splitting doc comment ([#1651](https://github.com/swiftlang/vscode-swift/pull/1651)) +- Prevent continuous "package resolve" cycles ([#1654](https://github.com/swiftlang/vscode-swift/pull/1654)) ## 2.6.0 - 2025-06-26