From d6d8c7d8654839c2094eca2a749472142c5dd452 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Tue, 20 Sep 2022 14:44:51 +0800
Subject: [PATCH] add support for `Lua.misc.executablePath`

---
 client/out/languageserver.js | 28 ++++++++++++++-------
 client/src/languageserver.ts | 49 +++++++++++++++++++++---------------
 2 files changed, 48 insertions(+), 29 deletions(-)

diff --git a/client/out/languageserver.js b/client/out/languageserver.js
index 6c7429c..15fc874 100644
--- a/client/out/languageserver.js
+++ b/client/out/languageserver.js
@@ -67,6 +67,24 @@ class LuaClient {
             };
             let config = vscode_1.workspace.getConfiguration(undefined, (_a = vscode.workspace.workspaceFolders) === null || _a === void 0 ? void 0 : _a[0]);
             let commandParam = config.get("Lua.misc.parameters");
+            let command = yield this.getCommand(config);
+            let serverOptions = {
+                command: command,
+                args: commandParam,
+            };
+            this.client = new node_1.LanguageClient('Lua', 'Lua', serverOptions, clientOptions);
+            //client.registerProposedFeatures();
+            yield this.client.start();
+            this.onCommand();
+            this.statusBar();
+        });
+    }
+    getCommand(config) {
+        return __awaiter(this, void 0, void 0, function* () {
+            let executablePath = config.get("Lua.misc.executablePath");
+            if (executablePath && executablePath != "") {
+                return executablePath;
+            }
             let command;
             let platform = os.platform();
             let binDir;
@@ -86,15 +104,7 @@ class LuaClient {
                     yield fs.promises.chmod(command, '777');
                     break;
             }
-            let serverOptions = {
-                command: command,
-                args: commandParam,
-            };
-            this.client = new node_1.LanguageClient('Lua', 'Lua', serverOptions, clientOptions);
-            //client.registerProposedFeatures();
-            yield this.client.start();
-            this.onCommand();
-            this.statusBar();
+            return command;
         });
     }
     stop() {
diff --git a/client/src/languageserver.ts b/client/src/languageserver.ts
index 5d11ecf..cf31da0 100644
--- a/client/src/languageserver.ts
+++ b/client/src/languageserver.ts
@@ -72,6 +72,31 @@ class LuaClient {
 
         let config = Workspace.getConfiguration(undefined, vscode.workspace.workspaceFolders?.[0]);
         let commandParam: string[] = config.get("Lua.misc.parameters");
+        let command: string = await this.getCommand(config);
+
+        let serverOptions: ServerOptions = {
+            command: command,
+            args:    commandParam,
+        };
+
+        this.client = new LanguageClient(
+            'Lua',
+            'Lua',
+            serverOptions,
+            clientOptions
+        );
+
+        //client.registerProposedFeatures();
+        await this.client.start();
+        this.onCommand();
+        this.statusBar();
+    }
+
+    private async getCommand(config: vscode.WorkspaceConfiguration) {
+        let executablePath: string = config.get("Lua.misc.executablePath");
+        if (executablePath && executablePath != "") {
+            return executablePath;
+        }
         let command: string;
         let platform: string = os.platform();
         let binDir: string;
@@ -96,7 +121,7 @@ class LuaClient {
                         'lua-language-server'
                     )
                 );
-                await fs.promises.chmod(command, '777')
+                await fs.promises.chmod(command, '777');
                 break;
             case "darwin":
                 command = this.context.asAbsolutePath(
@@ -106,28 +131,12 @@ class LuaClient {
                         'lua-language-server'
                     )
                 );
-                await fs.promises.chmod(command, '777')
+                await fs.promises.chmod(command, '777');
                 break;
         }
-
-        let serverOptions: ServerOptions = {
-            command: command,
-            args:    commandParam,
-        };
-
-        this.client = new LanguageClient(
-            'Lua',
-            'Lua',
-            serverOptions,
-            clientOptions
-        );
-
-        //client.registerProposedFeatures();
-        await this.client.start();
-        this.onCommand();
-        this.statusBar();
+        return command;
     }
-   
+
     async stop() {
         this.client.stop();
         for (const disposable of this.disposables) {
-- 
GitLab