detect existing config.js
This commit is contained in:
@@ -182,7 +182,6 @@
|
|||||||
(let [existingKey (dictGet prefixMap firstKey)
|
(let [existingKey (dictGet prefixMap firstKey)
|
||||||
conflictMessage "Keyboard shortcut for $description conflicts with $existingKey"]
|
conflictMessage "Keyboard shortcut for $description conflicts with $existingKey"]
|
||||||
(if keys
|
(if keys
|
||||||
// TODO if the existing node is Final, not a branch, throw conflicting message
|
|
||||||
(case existingKey
|
(case existingKey
|
||||||
((Final _)
|
((Final _)
|
||||||
(warningMessage conflictMessage))
|
(warningMessage conflictMessage))
|
||||||
|
@@ -23,13 +23,7 @@
|
|||||||
// If there's a build error at runtime, tell the user
|
// If there's a build error at runtime, tell the user
|
||||||
(Vscode.window.showErrorMessage errorMessage))
|
(Vscode.window.showErrorMessage errorMessage))
|
||||||
}]
|
}]
|
||||||
// If a backup exists, delete it
|
|
||||||
(when (FileSystem.exists lastConfigDir)
|
|
||||||
(FileSystem.deleteDirectory lastConfigDir))
|
|
||||||
// Backup currently active config
|
|
||||||
// TODO maybe also expose that backup to the user via a "rollback .kiss" command so they can rollback their config without using Git?
|
|
||||||
(when (FileSystem.exists activeConfigDir)
|
|
||||||
(FileSystem.rename activeConfigDir lastConfigDir))
|
|
||||||
// Choose where to find the custom config
|
// Choose where to find the custom config
|
||||||
(let [customConfigDir
|
(let [customConfigDir
|
||||||
(#if test
|
(#if test
|
||||||
@@ -40,6 +34,28 @@
|
|||||||
(userConfigDir)
|
(userConfigDir)
|
||||||
// Supply the default (empty) config if the user doesn't have one
|
// Supply the default (empty) config if the user doesn't have one
|
||||||
(joinPath builtinConfigDir "default")))]
|
(joinPath builtinConfigDir "default")))]
|
||||||
|
// If a backup exists, delete it
|
||||||
|
(when (FileSystem.exists lastConfigDir)
|
||||||
|
(FileSystem.deleteDirectory lastConfigDir))
|
||||||
|
// TODO maybe also expose that backup to the user via a "rollback .kiss" command so they can rollback their config without using Git?
|
||||||
|
(when (FileSystem.exists activeConfigDir)
|
||||||
|
// If there is an active config folder from a previous session, that is still up-to-date,
|
||||||
|
// skip re-compilation and just use it
|
||||||
|
(#unless test
|
||||||
|
(let [oldConfigFile (joinPath activeConfigDir "config.js")]
|
||||||
|
(when (let [mTime
|
||||||
|
->file (.getTime .mtime (FileSystem.stat file))
|
||||||
|
oldFileMTime
|
||||||
|
(mTime oldConfigFile)
|
||||||
|
userConfigMTime
|
||||||
|
(apply max (map (readDirectory (userConfigDir)) mTime))]
|
||||||
|
(> oldFileMTime userConfigMTime))
|
||||||
|
(requireConfigJs oldConfigFile)
|
||||||
|
(Vscode.window.showInformationMessage "Config loaded successfully!")
|
||||||
|
(return))))
|
||||||
|
// Backup currently active config
|
||||||
|
(FileSystem.rename activeConfigDir lastConfigDir))
|
||||||
|
|
||||||
(FileSystem.createDirectory activeConfigDir)
|
(FileSystem.createDirectory activeConfigDir)
|
||||||
// Copy the boilerplate config files to the active config directory
|
// Copy the boilerplate config files to the active config directory
|
||||||
(doFor file (FileSystem.readDirectory builtinConfigDir)
|
(doFor file (FileSystem.readDirectory builtinConfigDir)
|
||||||
@@ -74,19 +90,21 @@
|
|||||||
// Require the config.js package that was generated.
|
// Require the config.js package that was generated.
|
||||||
// But since Node.require() caches modules by filename,
|
// But since Node.require() caches modules by filename,
|
||||||
// copy it to a unique path first so hot-reloading works properly.
|
// copy it to a unique path first so hot-reloading works properly.
|
||||||
(let [activeConfigFile (joinPath activeConfigDir "config.js")
|
(let [activeConfigFile (joinPath activeConfigDir "config.js")]
|
||||||
uniqueConfigFile (joinPath activeConfigDir "$(.toShort (Uuid.v4)).js")]
|
(requireConfigJs activeConfigFile)
|
||||||
(File.copy activeConfigFile uniqueConfigFile)
|
|
||||||
(set config (the KissConfig .KissConfig (Node.require uniqueConfigFile)))
|
|
||||||
// (FileSystem.deleteFile uniqueConfigFile)
|
|
||||||
(set Prelude.printStr ->:Void s (Vscode.window.showInformationMessage s))
|
|
||||||
(set config.tryLoadConfig tryLoadConfig)
|
|
||||||
(config.prepareInterp)
|
|
||||||
// User-defined init:
|
|
||||||
(config.init)
|
|
||||||
(Vscode.window.showInformationMessage "Config loaded successfully!"))))))
|
(Vscode.window.showInformationMessage "Config loaded successfully!"))))))
|
||||||
|
|
||||||
(#unless test
|
(function requireConfigJs [file]
|
||||||
|
(let [uniqueConfigFile (joinPath activeConfigDir "$(.toShort (Uuid.v4)).js")]
|
||||||
|
(File.copy file uniqueConfigFile)
|
||||||
|
(set config (the KissConfig .KissConfig (Node.require uniqueConfigFile)))
|
||||||
|
(set Prelude.printStr ->:Void s (Vscode.window.showInformationMessage s))
|
||||||
|
(set config.tryLoadConfig tryLoadConfig)
|
||||||
|
(config.prepareInterp)
|
||||||
|
// User-defined init:
|
||||||
|
(config.init)))
|
||||||
|
|
||||||
|
(#unless test
|
||||||
(function _activate [:ExtensionContext context]
|
(function _activate [:ExtensionContext context]
|
||||||
(context.subscriptions.push
|
(context.subscriptions.push
|
||||||
(Vscode.commands.registerCommand
|
(Vscode.commands.registerCommand
|
||||||
@@ -129,8 +147,6 @@
|
|||||||
(set activeConfigDir (joinPath (userHome) ".kiss-vscode" "activeConfig"))
|
(set activeConfigDir (joinPath (userHome) ".kiss-vscode" "activeConfig"))
|
||||||
(set lastConfigDir (joinPath (userHome) ".kiss-vscode" "lastActiveConfig"))
|
(set lastConfigDir (joinPath (userHome) ".kiss-vscode" "lastActiveConfig"))
|
||||||
|
|
||||||
// TODO for some reason the custom ktxt2 editor is not available until this completes, even if it is
|
|
||||||
// invoked asynchronously:
|
|
||||||
(tryLoadConfig)))
|
(tryLoadConfig)))
|
||||||
|
|
||||||
// Manually define main so it will exist when test is not defined:
|
// Manually define main so it will exist when test is not defined:
|
||||||
|
Reference in New Issue
Block a user