From fe7874af90b9e1190b5aebcf3a6d5544177cf9b2 Mon Sep 17 00:00:00 2001 From: Bruno Ortiz Date: Sat, 8 Apr 2023 14:18:29 -0300 Subject: [PATCH] reveal only when tree is visible --- editors/code/src/commands.ts | 2 -- editors/code/src/ctx.ts | 34 +++++++++++++++++++++++++++++----- editors/code/src/util.ts | 5 ----- 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);