[Lldb-commits] [lldb] [lldb-dap] show dialog when executable is not found (PR #104711)

via lldb-commits lldb-commits at lists.llvm.org
Fri Aug 23 13:02:15 PDT 2024


https://github.com/Da-Viper updated https://github.com/llvm/llvm-project/pull/104711

>From 2cda519a06d46bd6a5ae02e8be8daacb39a49b3e Mon Sep 17 00:00:00 2001
From: Ezike Ebuka <yerimyah1 at gmail.com>
Date: Thu, 22 Aug 2024 01:42:17 +0100
Subject: [PATCH 1/3] Rebase and add check dap path on config change

---
 .../lldb-dap/src-ts/debug-adapter-factory.ts  | 42 ++++++++++++++++++
 lldb/tools/lldb-dap/src-ts/extension.ts       | 43 ++++++++++++++-----
 2 files changed, 74 insertions(+), 11 deletions(-)

diff --git a/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts b/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
index 01c671f41ff782..8a8f441581b29e 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
@@ -14,10 +14,52 @@ export class LLDBDapDescriptorFactory
     this.lldbDapOptions = lldbDapOptions;
   }
 
+  public static async validateDebugAdapterPath(pathUri: vscode.Uri) {
+    try {
+      const fileStats = await vscode.workspace.fs.stat(pathUri);
+      if (!(fileStats.type & vscode.FileType.File)) {
+        this.showErrorMessage(pathUri.path);
+      }
+    } catch (err) {
+      this.showErrorMessage(pathUri.path);
+    }
+  }
+
   async createDebugAdapterDescriptor(
     session: vscode.DebugSession,
     executable: vscode.DebugAdapterExecutable | undefined,
   ): Promise<vscode.DebugAdapterDescriptor | undefined> {
+    const config = vscode.workspace.getConfiguration(
+      "lldb-dap",
+      session.workspaceFolder,
+    );
+    const customPath = config.get<string>("executable-path");
+    const path: string = customPath ? customPath : executable!!.command;
+
+    await LLDBDapDescriptorFactory.validateDebugAdapterPath(
+      vscode.Uri.file(path),
+    );
     return this.lldbDapOptions.createDapExecutableCommand(session, executable);
   }
+
+  /**
+   * Shows a message box when the debug adapter's path is not found
+   */
+  private static showErrorMessage(path: string) {
+    const openSettingsAction = "Open Settings";
+    vscode.window
+      .showErrorMessage(
+        `Debug adapter path: ${path} is not a valid file`,
+        { modal: false },
+        openSettingsAction,
+      )
+      .then((callBackValue) => {
+        if (openSettingsAction === callBackValue) {
+          vscode.commands.executeCommand(
+            "workbench.action.openSettings",
+            "lldb-dap.executable-path",
+          );
+        }
+      });
+  }
 }
diff --git a/lldb/tools/lldb-dap/src-ts/extension.ts b/lldb/tools/lldb-dap/src-ts/extension.ts
index 7df09f7a29dad7..12565a8fbe9a0a 100644
--- a/lldb/tools/lldb-dap/src-ts/extension.ts
+++ b/lldb/tools/lldb-dap/src-ts/extension.ts
@@ -14,26 +14,32 @@ function createDefaultLLDBDapOptions(): LLDBDapOptions {
       session: vscode.DebugSession,
       packageJSONExecutable: vscode.DebugAdapterExecutable | undefined,
     ): Promise<vscode.DebugAdapterExecutable | undefined> {
-      const config = vscode.workspace
-        .getConfiguration("lldb-dap", session.workspaceFolder);
+      const config = vscode.workspace.getConfiguration(
+        "lldb-dap",
+        session.workspaceFolder,
+      );
       const path = config.get<string>("executable-path");
       const log_path = config.get<string>("log-path");
 
-      let env : { [key: string]: string } = {};
+      let env: { [key: string]: string } = {};
       if (log_path) {
         env["LLDBDAP_LOG"] = log_path;
       }
 
       if (path) {
-        return new vscode.DebugAdapterExecutable(path, [], {env});
+        return new vscode.DebugAdapterExecutable(path, [], { env });
       } else if (packageJSONExecutable) {
-        return new vscode.DebugAdapterExecutable(packageJSONExecutable.command, packageJSONExecutable.args, {
-          ...packageJSONExecutable.options,
-          env: {
-            ...packageJSONExecutable.options?.env,
-            ...env
-          }
-        });
+        return new vscode.DebugAdapterExecutable(
+          packageJSONExecutable.command,
+          packageJSONExecutable.args,
+          {
+            ...packageJSONExecutable.options,
+            env: {
+              ...packageJSONExecutable.options?.env,
+              ...env,
+            },
+          },
+        );
       } else {
         return undefined;
       }
@@ -58,6 +64,21 @@ export class LLDBDapExtension extends DisposableContext {
         new LLDBDapDescriptorFactory(this.lldbDapOptions),
       ),
     );
+
+    this.pushSubscription(
+      vscode.workspace.onDidChangeConfiguration((event) => {
+        if (event.affectsConfiguration("lldb-dap.executable-path")) {
+          const dapPath = vscode.workspace
+            .getConfiguration("lldb-dap")
+            .get<string>("executable-path");
+          if (dapPath) {
+            LLDBDapDescriptorFactory.validateDebugAdapterPath(
+              vscode.Uri.file(dapPath),
+            );
+          }
+        }
+      }),
+    );
   }
 }
 

>From 443c71a4af2fa03eb911deb9b086a2e7e6f1daf1 Mon Sep 17 00:00:00 2001
From: Ezike Ebuka <yerimyah1 at gmail.com>
Date: Thu, 22 Aug 2024 18:54:03 +0100
Subject: [PATCH 2/3] Resolve review changes

---
 .../lldb-dap/src-ts/debug-adapter-factory.ts  | 31 +++++++++----------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts b/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
index 8a8f441581b29e..c8cbca13b7446c 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
@@ -18,10 +18,10 @@ export class LLDBDapDescriptorFactory
     try {
       const fileStats = await vscode.workspace.fs.stat(pathUri);
       if (!(fileStats.type & vscode.FileType.File)) {
-        this.showErrorMessage(pathUri.path);
+        this.showLLDBDapNotFoundMessage(pathUri.path);
       }
     } catch (err) {
-      this.showErrorMessage(pathUri.path);
+      this.showLLDBDapNotFoundMessage(pathUri.path);
     }
   }
 
@@ -45,21 +45,18 @@ export class LLDBDapDescriptorFactory
   /**
    * Shows a message box when the debug adapter's path is not found
    */
-  private static showErrorMessage(path: string) {
+  private static async showLLDBDapNotFoundMessage(path: string) {
     const openSettingsAction = "Open Settings";
-    vscode.window
-      .showErrorMessage(
-        `Debug adapter path: ${path} is not a valid file`,
-        { modal: false },
-        openSettingsAction,
-      )
-      .then((callBackValue) => {
-        if (openSettingsAction === callBackValue) {
-          vscode.commands.executeCommand(
-            "workbench.action.openSettings",
-            "lldb-dap.executable-path",
-          );
-        }
-      });
+    const callbackValue = await vscode.window.showErrorMessage(
+      `Debug adapter path: ${path} is not a valid file`,
+      openSettingsAction,
+    );
+
+    if (openSettingsAction === callbackValue) {
+      vscode.commands.executeCommand(
+        "workbench.action.openSettings",
+        "lldb-dap.executable-path",
+      );
+    }
   }
 }

>From 2bdbcdee26a4b04302de900d46bef86bddbe1d54 Mon Sep 17 00:00:00 2001
From: Ezike Ebuka <yerimyah1 at gmail.com>
Date: Fri, 23 Aug 2024 21:01:02 +0100
Subject: [PATCH 3/3] Resolve review changes

---
 .../lldb-dap/src-ts/debug-adapter-factory.ts  | 20 +++++++++++--------
 lldb/tools/lldb-dap/src-ts/extension.ts       | 13 ++++++++----
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts b/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
index c8cbca13b7446c..2be21bfdf0dd69 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-adapter-factory.ts
@@ -14,15 +14,18 @@ export class LLDBDapDescriptorFactory
     this.lldbDapOptions = lldbDapOptions;
   }
 
-  public static async validateDebugAdapterPath(pathUri: vscode.Uri) {
+  static async isValidDebugAdapterPath(
+    pathUri: vscode.Uri,
+  ): Promise<Boolean> {
     try {
       const fileStats = await vscode.workspace.fs.stat(pathUri);
       if (!(fileStats.type & vscode.FileType.File)) {
-        this.showLLDBDapNotFoundMessage(pathUri.path);
+        return false;
       }
     } catch (err) {
-      this.showLLDBDapNotFoundMessage(pathUri.path);
+      return false;
     }
+    return true;
   }
 
   async createDebugAdapterDescriptor(
@@ -34,18 +37,19 @@ export class LLDBDapDescriptorFactory
       session.workspaceFolder,
     );
     const customPath = config.get<string>("executable-path");
-    const path: string = customPath ? customPath : executable!!.command;
+    const path: string = customPath || executable!!.command;
 
-    await LLDBDapDescriptorFactory.validateDebugAdapterPath(
-      vscode.Uri.file(path),
-    );
+    const fileUri = vscode.Uri.file(path);
+    if (!(await LLDBDapDescriptorFactory.isValidDebugAdapterPath(fileUri))) {
+      LLDBDapDescriptorFactory.showLLDBDapNotFoundMessage(fileUri.path);
+    }
     return this.lldbDapOptions.createDapExecutableCommand(session, executable);
   }
 
   /**
    * Shows a message box when the debug adapter's path is not found
    */
-  private static async showLLDBDapNotFoundMessage(path: string) {
+  static async showLLDBDapNotFoundMessage(path: string) {
     const openSettingsAction = "Open Settings";
     const callbackValue = await vscode.window.showErrorMessage(
       `Debug adapter path: ${path} is not a valid file`,
diff --git a/lldb/tools/lldb-dap/src-ts/extension.ts b/lldb/tools/lldb-dap/src-ts/extension.ts
index 12565a8fbe9a0a..fdc4f47b238b5a 100644
--- a/lldb/tools/lldb-dap/src-ts/extension.ts
+++ b/lldb/tools/lldb-dap/src-ts/extension.ts
@@ -66,16 +66,21 @@ export class LLDBDapExtension extends DisposableContext {
     );
 
     this.pushSubscription(
-      vscode.workspace.onDidChangeConfiguration((event) => {
+      vscode.workspace.onDidChangeConfiguration(async (event) => {
         if (event.affectsConfiguration("lldb-dap.executable-path")) {
           const dapPath = vscode.workspace
             .getConfiguration("lldb-dap")
             .get<string>("executable-path");
+
           if (dapPath) {
-            LLDBDapDescriptorFactory.validateDebugAdapterPath(
-              vscode.Uri.file(dapPath),
-            );
+            const fileUri = vscode.Uri.file(dapPath);
+            if (
+              await LLDBDapDescriptorFactory.isValidDebugAdapterPath(fileUri)
+            ) {
+              return;
+            }
           }
+          LLDBDapDescriptorFactory.showLLDBDapNotFoundMessage(dapPath || "");
         }
       }),
     );



More information about the lldb-commits mailing list