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