Author: Ebuka Ezike
Date: 2025-05-20T23:29:34+01:00
New Revision: dfc65ef65e4e92fee244c0eed7ec9223fc943b65

URL: 
https://github.com/llvm/llvm-project/commit/dfc65ef65e4e92fee244c0eed7ec9223fc943b65
DIFF: 
https://github.com/llvm/llvm-project/commit/dfc65ef65e4e92fee244c0eed7ec9223fc943b65.diff

LOG: [lldb][lldb-dap] show modules pane if supported by the adapter (#140603)

Fixes #140589
Added logic to dynamically set the `lldb-dap.showModules` context based
on the presence of modules in the debug session.

Added: 
    

Modified: 
    lldb/tools/lldb-dap/package.json
    lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
    lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts

Removed: 
    


################################################################################
diff  --git a/lldb/tools/lldb-dap/package.json 
b/lldb/tools/lldb-dap/package.json
index d5ca604798799..7f90d5535b54b 100644
--- a/lldb/tools/lldb-dap/package.json
+++ b/lldb/tools/lldb-dap/package.json
@@ -787,7 +787,7 @@
         {
           "id": "lldb-dap.modules",
           "name": "Modules",
-          "when": "inDebugMode && debugType == 'lldb-dap'",
+          "when": "inDebugMode && debugType == 'lldb-dap' && 
lldb-dap.showModules",
           "icon": "$(symbol-module)"
         }
       ]

diff  --git a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts 
b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
index 1ce190938d9c7..50db1e1c3a7b0 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
@@ -35,14 +35,24 @@ export class DebugSessionTracker
    * The modules are kept in an array to maintain the load order of the 
modules.
    */
   private modules = new Map<vscode.DebugSession, DebugProtocol.Module[]>();
-  private modulesChanged = new vscode.EventEmitter<void>();
+  private modulesChanged = new vscode.EventEmitter<
+    vscode.DebugSession | undefined
+  >();
 
   /**
    * Fired when modules are changed for any active debug session.
    *
    * Use `debugSessionModules` to retieve the active modules for a given debug 
session.
    */
-  onDidChangeModules: vscode.Event<void> = this.modulesChanged.event;
+  onDidChangeModules: vscode.Event<vscode.DebugSession | undefined> =
+    this.modulesChanged.event;
+
+  constructor() {
+    this.onDidChangeModules(this.moduleChangedListener, this);
+    vscode.debug.onDidChangeActiveDebugSession((session) =>
+      this.modulesChanged.fire(session),
+    );
+  }
 
   dispose() {
     this.modules.clear();
@@ -70,7 +80,27 @@ export class DebugSessionTracker
   /** Clear information from the active session. */
   private onExit(session: vscode.DebugSession) {
     this.modules.delete(session);
-    this.modulesChanged.fire();
+    this.modulesChanged.fire(undefined);
+  }
+
+  private showModulesTreeView(showModules: boolean) {
+    vscode.commands.executeCommand(
+      "setContext",
+      "lldb-dap.showModules",
+      showModules,
+    );
+  }
+
+  private moduleChangedListener(session: vscode.DebugSession | undefined) {
+    if (!session) {
+      this.showModulesTreeView(false);
+      return;
+    }
+
+    if (session == vscode.debug.activeDebugSession) {
+      const sessionHasModules = this.modules.get(session) != undefined;
+      this.showModulesTreeView(sessionHasModules);
+    }
   }
 
   private onDidSendMessage(
@@ -103,7 +133,7 @@ export class DebugSessionTracker
           break;
       }
       this.modules.set(session, modules);
-      this.modulesChanged.fire();
+      this.modulesChanged.fire(session);
     }
   }
 }

diff  --git a/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts 
b/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts
index 091c1d69ac647..d0fb9270c734f 100644
--- a/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts
+++ b/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts
@@ -52,9 +52,6 @@ export class ModulesDataProvider implements 
vscode.TreeDataProvider<TreeData> {
 
   constructor(private readonly tracker: DebugSessionTracker) {
     tracker.onDidChangeModules(() => this.changeTreeData.fire());
-    vscode.debug.onDidChangeActiveDebugSession(() =>
-      this.changeTreeData.fire(),
-    );
   }
 
   getTreeItem(module: TreeData): vscode.TreeItem {


        
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to