reveal only when tree is visible

This commit is contained in:
Bruno Ortiz 2023-04-08 14:18:29 -03:00
parent a3081a6774
commit fe7874af90
3 changed files with 29 additions and 12 deletions

View file

@ -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));

View file

@ -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() {

View file

@ -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);