From cbf45076c1486033772131d3607cc0db0ef97aa9 Mon Sep 17 00:00:00 2001 From: lsdkyu Date: Tue, 27 Oct 2026 21:30:36 +0530 Subject: [PATCH 1/2] Create updateImportsOnFileMove.ts --- vscode/src/updateImportsOnFileMove.ts | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 vscode/src/updateImportsOnFileMove.ts diff --git a/vscode/src/updateImportsOnFileMove.ts b/vscode/src/updateImportsOnFileMove.ts new file mode 100644 index 00000000..bc25027a --- /dev/null +++ b/vscode/src/updateImportsOnFileMove.ts @@ -0,0 +1,58 @@ +import * as vscode from "vscode"; +import * as path from "path"; + +export function activateUpdateImportsOnFileMove(context: vscode.ExtensionContext) { + const disposable = vscode.workspace.onDidRenameFiles(async (event) => { + for (const { oldUri, newUri } of event.files) { + if (!oldUri.fsPath.endsWith(".flyde")) continue; + + const flydeFiles = await vscode.workspace.findFiles( + "**/*.flyde", + "**/node_modules/**" + ); + + const oldPath = vscode.workspace.asRelativePath(oldUri, false); + const newPath = vscode.workspace.asRelativePath(newUri, false); + const oldBaseName = path.basename(oldUri.fsPath, ".flyde"); + const newBaseName = path.basename(newUri.fsPath, ".flyde"); + + for (const file of flydeFiles) { + if (file.fsPath === newUri.fsPath) continue; + + try { + const doc = await vscode.workspace.openTextDocument(file); + const text = doc.getText(); + + if (text.includes(oldPath) || text.includes(oldBaseName)) { + let updatedText = text; + updatedText = updatedText.split(oldPath).join(newPath); + if (oldBaseName !== newBaseName) { + updatedText = updatedText.split(oldBaseName).join(newBaseName); + } + + if (updatedText !== text) { + const edit = new vscode.WorkspaceEdit(); + edit.replace( + file, + new vscode.Range( + new vscode.Position(0, 0), + new vscode.Position(doc.lineCount, 0) + ), + updatedText + ); + await vscode.workspace.applyEdit(edit); + await doc.save(); + vscode.window.showInformationMessage( + `Updated imports in ${path.basename(file.fsPath)} after file move.` + ); + } + } + } catch (err) { + console.error(`Failed to update imports in ${file.fsPath}:`, err); + } + } + } + }); + + context.subscriptions.push(disposable); +} From bf5352129a8468ff4d32b8b470a48d7009ff142b Mon Sep 17 00:00:00 2001 From: lsdkyu Date: Tue, 27 Oct 2026 21:50:24 +0530 Subject: [PATCH 2/2] Update extension.ts --- vscode/src/extension.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vscode/src/extension.ts b/vscode/src/extension.ts index ea022727..503b4ebc 100644 --- a/vscode/src/extension.ts +++ b/vscode/src/extension.ts @@ -15,7 +15,8 @@ import { activateReporter, reportEvent, analytics } from "./analytics"; import { showFirstRunPrivacyNotice, showPrivacySettings } from "./privacyNotice"; import { Template, getTemplates, scaffoldTemplate } from "./templateUtils"; - +import { activateUpdateImportsOnFileMove } from "./updateImportsOnFileMove"; +import { activateUpdateImportsOnFileMove } from "./updateImportsOnFileMove"; // the application insights key (also known as instrumentation key) @@ -29,6 +30,7 @@ let process: execa.ExecaChildProcess | undefined; const FLYDE_DEFAULT_SERVER_PORT = 8545; export function activate(context: vscode.ExtensionContext) { + activateUpdateImportsOnFileMove(context); // eslint-disable-next-line @typescript-eslint/naming-convention const { Uri } = vscode; const { fs } = vscode.workspace;