about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--editors/code/src/commands.ts2
-rw-r--r--editors/code/src/ctx.ts34
-rw-r--r--editors/code/src/util.ts5
3 files changed, 29 insertions, 12 deletions
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index 4393d5fccbc..81d3b8da7f9 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -15,7 +15,6 @@ import {
     isRustEditor,
     RustEditor,
     RustDocument,
-    closeDocument,
 } from "./util";
 import { startDebugSession, makeDebugConfig } from "./debug";
 import { LanguageClient } from "vscode-languageclient/node";
@@ -324,7 +323,6 @@ async function revealParentChain(document: RustDocument, ctx: CtxInit) {
         if (parentChain.length >= maxDepth) {
             // this is an odd case that can happen when we change a crate version but we'd still have
             // a open file referencing the old version
-            await closeDocument(document);
             return;
         }
     } while (!ctx.dependencies?.contains(documentPath));
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index dd2373d5847..4e592823b04 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -285,14 +285,38 @@ export class Ctx {
         });
 
         this.pushExtCleanup(this._treeView);
-        vscode.window.onDidChangeActiveTextEditor((e) => {
+        vscode.window.onDidChangeActiveTextEditor(async (e) => {
             // we should skip documents that belong to the current workspace
-            if (e && isRustEditor(e) && !isDocumentInWorkspace(e.document)) {
-                execRevealDependency(e).catch((reason) => {
-                    void vscode.window.showErrorMessage(`Dependency error: ${reason}`);
-                });
+            if (this.shouldRevealDependency(e)) {
+                try {
+                    await execRevealDependency(e);
+                } catch (reason) {
+                    await vscode.window.showErrorMessage(`Dependency error: ${reason}`);
+                }
             }
         });
+
+        this.treeView?.onDidChangeVisibility(async (e) => {
+            if (e.visible) {
+                const activeEditor = vscode.window.activeTextEditor;
+                if (this.shouldRevealDependency(activeEditor)) {
+                    try {
+                        await execRevealDependency(activeEditor);
+                    } catch (reason) {
+                        await vscode.window.showErrorMessage(`Dependency error: ${reason}`);
+                    }
+                }
+            }
+        });
+    }
+
+    private shouldRevealDependency(e: vscode.TextEditor | undefined): e is RustEditor {
+        return (
+            e !== undefined &&
+            isRustEditor(e) &&
+            !isDocumentInWorkspace(e.document) &&
+            (this.treeView?.visible || false)
+        );
     }
 
     async restart() {
diff --git a/editors/code/src/util.ts b/editors/code/src/util.ts
index 0196b37b8b6..b6b779e2660 100644
--- a/editors/code/src/util.ts
+++ b/editors/code/src/util.ts
@@ -125,11 +125,6 @@ export function isDocumentInWorkspace(document: RustDocument): boolean {
     return false;
 }
 
-export async function closeDocument(document: RustDocument) {
-    await vscode.window.showTextDocument(document, { preview: true, preserveFocus: false });
-    await vscode.commands.executeCommand("workbench.action.closeActiveEditor");
-}
-
 export function isValidExecutable(path: string): boolean {
     log.debug("Checking availability of a binary at", path);