From a0210deaf4f71d921b485d562df0a7573cec7974 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 26 Jan 2021 17:08:32 -0700 Subject: [PATCH] fix kiss-vscode config hot-reloading --- projects/kiss-vscode/build.hxml | 1 + projects/kiss-vscode/package.json | 2 +- projects/kiss-vscode/src/Main.hx | 2 ++ projects/kiss-vscode/src/Main.kiss | 17 +++++++++++------ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/projects/kiss-vscode/build.hxml b/projects/kiss-vscode/build.hxml index d878e6f1..80f68ed6 100644 --- a/projects/kiss-vscode/build.hxml +++ b/projects/kiss-vscode/build.hxml @@ -1,6 +1,7 @@ -lib vscode -lib hxnodejs -lib kiss +-lib uuid -cp src -js bin/extension.js -D analyzer-optimize diff --git a/projects/kiss-vscode/package.json b/projects/kiss-vscode/package.json index 5ab67068..3e2650e4 100644 --- a/projects/kiss-vscode/package.json +++ b/projects/kiss-vscode/package.json @@ -2,7 +2,7 @@ "name": "kiss-vscode", "displayName": "kiss-vscode", "description": "Kiss language plugin", - "version": "0.0.3", + "version": "0.0.4", "engines": { "vscode": "^1.4.0" }, diff --git a/projects/kiss-vscode/src/Main.hx b/projects/kiss-vscode/src/Main.hx index f1587df3..0eb0644a 100644 --- a/projects/kiss-vscode/src/Main.hx +++ b/projects/kiss-vscode/src/Main.hx @@ -6,8 +6,10 @@ import kiss.Prelude; import haxe.io.Path; import js.Node; import js.node.ChildProcess; +import uuid.Uuid; using StringTools; +using uuid.Uuid; typedef Command = (String) -> Void; diff --git a/projects/kiss-vscode/src/Main.kiss b/projects/kiss-vscode/src/Main.kiss index 4bf7e7da..0c9830b4 100644 --- a/projects/kiss-vscode/src/Main.kiss +++ b/projects/kiss-vscode/src/Main.kiss @@ -30,11 +30,14 @@ (let [buildResult (ChildProcess.spawnSync "haxe" ["build.hxml"] (object cwd activeConfigDir))] (if (and !buildResult.error (= 0 buildResult.status)) - // Successful compilation! require the config.js package - (begin - // TODO Node.require() caches the module so re-opening vscode is still required: - // https://stackoverflow.com/questions/9210542/node-js-require-cache-possible-to-invalidate - (set config .KissConfig (Node.require (Path.join [activeConfigDir "config.js"]))) + // Successful compilation! require the config.js package. + // But since Node.require() caches modules by filename, + // copy it to a unique path first so hot-reloading works properly. + (let [activeConfigFile (Path.join [activeConfigDir "config.js"]) + uniqueConfigFile (Path.join [activeConfigDir "$(.toShort (Uuid.v4)).js"])] + (File.copy activeConfigFile uniqueConfigFile) + (set config .KissConfig (Node.require uniqueConfigFile)) + (FileSystem.deleteFile uniqueConfigFile) (.registerBuiltins (the KissConfig config)) (.registerCommand (the KissConfig config) "Reload Kiss config" tryLoadConfig) (.init (the KissConfig config)) @@ -64,6 +67,8 @@ (.runCommand (the KissConfig config)) (Vscode.window.showErrorMessage "Can't run commands! No config is loaded.")) (return)))) - + + // TODO overload Prelude.print to use showInformationMessage + (set activeConfigDir (Path.join [context.extensionPath "config"])) (tryLoadConfig))