From a81486809df99f9a0234ae4165ba2702f6555ac9 Mon Sep 17 00:00:00 2001 From: "Elian H. Thiele-Evans" <60372411+ElianHugh@users.noreply.github.com> Date: Tue, 14 Dec 2021 14:13:55 +1100 Subject: [PATCH 1/2] RMD - don't set undefined wd - Prevents setting the workspace rmd if the value is undefined - Fall back to document directory when workspace folder does not exist --- R/rmarkdown/knit.R | 4 +++- R/rmarkdown/preview.R | 4 +++- src/rmarkdown/knit.ts | 2 +- src/rmarkdown/manager.ts | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/R/rmarkdown/knit.R b/R/rmarkdown/knit.R index 734bd91a7..3594bb166 100644 --- a/R/rmarkdown/knit.R +++ b/R/rmarkdown/knit.R @@ -11,7 +11,9 @@ knit_command <- Sys.getenv("VSCR_KNIT_COMMAND") # set the knitr chunk eval directory # mainly affects source calls -knitr::opts_knit[["set"]](root.dir = knit_dir) +if (!is.null(eval(parse(text = knit_dir)))) { + knitr::opts_knit[["set"]](root.dir = knit_dir) +} # render and get file output location for use in extension cat( diff --git a/R/rmarkdown/preview.R b/R/rmarkdown/preview.R index 87bdea362..86bb3f80a 100644 --- a/R/rmarkdown/preview.R +++ b/R/rmarkdown/preview.R @@ -29,7 +29,9 @@ set_html <- tryCatch( # set the knitr chunk eval directory # mainly affects source calls -knitr::opts_knit[["set"]](root.dir = knit_dir) +if (!is.null(eval(parse(text = knit_dir)))) { + knitr::opts_knit[["set"]](root.dir = knit_dir) +} # render and get file output location for use in extension cat( diff --git a/src/rmarkdown/knit.ts b/src/rmarkdown/knit.ts index bc40e2688..3f4fd9a42 100644 --- a/src/rmarkdown/knit.ts +++ b/src/rmarkdown/knit.ts @@ -150,8 +150,8 @@ export class RMarkdownKnitManager extends RMarkdownManager { // the definition of what constitutes an R Markdown site differs // depending on the type of R Markdown site (i.e., "simple" vs. blogdown sites) private async findSiteParam(): Promise { - const rootFolder = vscode.workspace.workspaceFolders[0].uri.fsPath; const wad = vscode.window.activeTextEditor.document.uri.fsPath; + const rootFolder = vscode.workspace.workspaceFolders?.[0]?.uri?.fsPath ?? path.dirname(wad); const indexFile = (await vscode.workspace.findFiles(new vscode.RelativePattern(rootFolder, 'index.{Rmd,rmd, md}'), null, 1))?.[0]; const siteRoot = path.join(path.dirname(wad), '_site.yml'); diff --git a/src/rmarkdown/manager.ts b/src/rmarkdown/manager.ts index 490eb039c..de4f761e8 100644 --- a/src/rmarkdown/manager.ts +++ b/src/rmarkdown/manager.ts @@ -40,12 +40,12 @@ export abstract class RMarkdownManager { switch (knitDir) { // the directory containing the R Markdown document case KnitWorkingDirectory.documentDirectory: { - return path.dirname(docPath).replace(/\\/g, '/').replace(/['"]/g, '\\"'); + return path.dirname(docPath)?.replace(/\\/g, '/')?.replace(/['"]/g, '\\"') ?? undefined; } // the root of the current workspace case KnitWorkingDirectory.workspaceRoot: { const currentDocumentWorkspace = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(docPath) ?? vscode.window.activeTextEditor?.document?.uri)?.uri?.fsPath ?? undefined; - return currentDocumentWorkspace.replace(/\\/g, '/').replace(/['"]/g, '\\"'); + return currentDocumentWorkspace?.replace(/\\/g, '/')?.replace(/['"]/g, '\\"') ?? undefined; } // the working directory of the attached terminal, NYI // case 'current directory': { From 4f2c7cab80a387c2d46ae2b5d8d2e1cce38f4895 Mon Sep 17 00:00:00 2001 From: Kun Ren Date: Tue, 14 Dec 2021 12:31:45 +0800 Subject: [PATCH 2/2] Fix checking knit_dir --- R/rmarkdown/knit.R | 4 ++-- R/rmarkdown/preview.R | 4 ++-- src/rmarkdown/knit.ts | 2 +- src/rmarkdown/preview.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/R/rmarkdown/knit.R b/R/rmarkdown/knit.R index 3594bb166..0e12b7a4a 100644 --- a/R/rmarkdown/knit.R +++ b/R/rmarkdown/knit.R @@ -11,7 +11,7 @@ knit_command <- Sys.getenv("VSCR_KNIT_COMMAND") # set the knitr chunk eval directory # mainly affects source calls -if (!is.null(eval(parse(text = knit_dir)))) { +if (nzchar(knit_dir)) { knitr::opts_knit[["set"]](root.dir = knit_dir) } @@ -21,4 +21,4 @@ cat( eval(parse(text = knit_command)), lim, sep = "" -) \ No newline at end of file +) diff --git a/R/rmarkdown/preview.R b/R/rmarkdown/preview.R index 86bb3f80a..7f20ee938 100644 --- a/R/rmarkdown/preview.R +++ b/R/rmarkdown/preview.R @@ -29,7 +29,7 @@ set_html <- tryCatch( # set the knitr chunk eval directory # mainly affects source calls -if (!is.null(eval(parse(text = knit_dir)))) { +if (nzchar(knit_dir)) { knitr::opts_knit[["set"]](root.dir = knit_dir) } @@ -44,4 +44,4 @@ cat( ), lim, sep = "" -) \ No newline at end of file +) diff --git a/src/rmarkdown/knit.ts b/src/rmarkdown/knit.ts index 3f4fd9a42..5c28ebc65 100644 --- a/src/rmarkdown/knit.ts +++ b/src/rmarkdown/knit.ts @@ -29,7 +29,7 @@ export class RMarkdownKnitManager extends RMarkdownManager { private async renderDocument(rDocumentPath: string, docPath: string, docName: string, yamlParams: IYamlFrontmatter, outputFormat?: string): Promise { const openOutfile: boolean = util.config().get('rmarkdown.knit.openOutputFile') ?? false; const knitWorkingDir = this.getKnitDir(knitDir, docPath); - const knitWorkingDirText = knitWorkingDir ? `${knitWorkingDir}` : `NULL`; + const knitWorkingDirText = knitWorkingDir ? `${knitWorkingDir}` : ''; const knitCommand = await this.getKnitCommand(yamlParams, rDocumentPath, outputFormat); this.rPath = await util.getRpath(); diff --git a/src/rmarkdown/preview.ts b/src/rmarkdown/preview.ts index 4b62cbc85..8d972334d 100644 --- a/src/rmarkdown/preview.ts +++ b/src/rmarkdown/preview.ts @@ -291,7 +291,7 @@ export class RMarkdownPreviewManager extends RMarkdownManager { private async previewDocument(filePath: string, fileName?: string, viewer?: vscode.ViewColumn, currentViewColumn?: vscode.ViewColumn): Promise { const knitWorkingDir = this.getKnitDir(knitDir, filePath); - const knitWorkingDirText = knitWorkingDir ? `${knitWorkingDir}` : `NULL`; + const knitWorkingDirText = knitWorkingDir ? `${knitWorkingDir}` : ''; this.rPath = await getRpath(); const lim = '<<>>';