Unnamed repository; edit this file 'description' to name the repository.
reveal only when tree is visible
Bruno Ortiz 2023-05-02
parent a3081a6 · commit fe7874a
-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 4393d5fccb..81d3b8da7f 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 dd2373d584..4e592823b0 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 0196b37b8b..b6b779e266 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);