Path: blob/main/src/command/dev-call/show-ast-trace/cmd.ts
3589 views
/*1* cmd.ts2*3* Copyright (C) 2025 Posit Software, PBC4*/56import { Command } from "cliffy/command/mod.ts";7import { quartoCacheDir } from "../../../core/appdirs.ts";8import { quartoConfig } from "../../../core/quarto.ts";9import {10ensureDir,11moveSync,12safeRemoveDirSync,13} from "../../../deno_ral/fs.ts";14import { basename, dirname, join } from "../../../deno_ral/path.ts";15import { copy } from "fs/copy";16import { resourcePath } from "../../../core/resources.ts";17import { execProcess } from "../../../core/process.ts";1819const ensureTracingToolsCopied = async () => {20const cacheDir = quartoCacheDir();21const tracingDir = `${cacheDir}/ast-tracing`;22await ensureDir(tracingDir);23safeRemoveDirSync(join(tracingDir, "qmd"), cacheDir);24await copy(25resourcePath(join("tools", "ast-tracing")),26join(tracingDir, "qmd"),27);28return join(tracingDir, "qmd");29};3031export const showAstTraceCommand = new Command()32.name("show-ast-trace")33.hidden()34.arguments("<arguments...>")35.description(36"Renders the document with AST tracing enabled and then shows the debugging output.\n\n",37)38.action(async (_options: unknown, input: string, ...args: string[]) => {39const toolsPath = await ensureTracingToolsCopied();4041const dir = dirname(input);42const base = basename(input, ".qmd");43const traceName = join(dir, `${base}-quarto-ast-trace.json`);4445const renderOpts = {46cmd: quartoConfig.cliPath(),47env: {48"QUARTO_TRACE_FILTERS": traceName,49},50args: [51"render",52input,53...args,54"--quiet",55],56};57const _renderResult = await execProcess(renderOpts);58// we don't check for errors here because we want to show the trace even if59// the render fails6061moveSync(traceName, join(toolsPath, basename(traceName)));6263const _previewResult = await execProcess({64cmd: quartoConfig.cliPath(),65cwd: toolsPath,66args: [67"preview",68"trace-viewer.qmd",69"-M",70`trace_1:${basename(traceName)}`,71],72});73});747576