Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Polish quarto_create_project() #206

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 18 additions & 10 deletions R/create.R
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
#' Create a quarto project
#'
#' This function calls `quarto create project <type> <name>`. It will create a
#' new directory with the project name and add some skeletons files for the
#' project type chosen.
#' This function calls `quarto create project <type> <name>`. It creates a new
#' directory with the project name, inside the requested parent directory, and
#' adds some starter files that are appropriate to the project type.
#'
#' # Quarto version required
#'
#' This function require Quarto 1.4 or higher. Use [`quarto_version()`]to check
#' the version of Quarto detected.
#' This function requires Quarto 1.4 or higher. Use [quarto_version()] to see
#' your current Quarto version.
#'
#' @param type The type of project to create. As of 1.4, it can be one of
#' @param type The type of project to create. As of Quarto 1.4, it can be one of
#' `r paste0("\\code{", paste(quarto_project_type, collapse = "}, \\code{"),"}")`.
#' @param name The name of the project and the directory that will be created.
#' @param dir The directory where to create the new Quarto project.
#' @param dir The directory in which to create the new Quarto project, i.e. the
#' parent directory.
#'
#' @seealso Quarto documentation on [Quarto projects](https://quarto.org/docs/projects/quarto-projects.html)
#'
#' @inheritParams quarto_render
#' @inheritParams quarto_add_extension
#' @param no_prompt Do not prompt to approve the creation of the new project
#' folder.
Comment on lines +21 to +22
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the docs for no_prompt are inherited from quarto_add_extension() they don't really make sense here.

(In quarto_add_extension(), no_prompt means "Do not prompt to confirm approval to download external extension.")

#'
#' @examples
#' \dontrun{
#' quarto_create_project("my-first-quarto-project", dir = "~/tmp")
#' }
#'
#'
#' @export
quarto_create_project <- function(name, type = "default", dir = ".", no_prompt = FALSE, quiet = FALSE, quarto_args = NULL) {
Expand All @@ -32,14 +40,14 @@
"This will create a new Quarto {.emph {type}} project as a folder named {.strong {name}} in {.path {xfun::normalize_path(dir)}}."
))
prompt_value <- tolower(readline(sprintf("Do you want to proceed (Y/n)? ")))
if (!prompt_value %in% "y") {
if (!prompt_value %in% c("", "y")) {

Check warning on line 43 in R/create.R

View check run for this annotation

Codecov / codecov/patch

R/create.R#L43

Added line #L43 was not covered by tests
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I see (Y/n), I think it means that the default (just hitting "enter") is "Y" for "yes". I'm pretty certain that's how it behaves in other R packages that present such a choice. As it stands, if you just hit "enter", you get an error.

Best reference I can find for this: https://askubuntu.com/a/322601

cli::cli_abort("Operation aborted.")
}
}

quarto_bin <- find_quarto()

args <- c("project", type, name, "--no-prompt", "--no-open", if (is_quiet(quiet)) cli_arg_quiet(), quarto_args = NULL)
args <- c("project", type, name, name, "--no-prompt", "--no-open", if (is_quiet(quiet)) cli_arg_quiet(), quarto_args = NULL)
Copy link
Author

@jennybc jennybc Aug 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this, I always get a warning, coming from the quarto cli, with no way to suppress it.

> quarto_create_project("my-first-quarto-project", dir = "~/tmp")
This will create a new Quarto default project as a folder named my-first-quarto-project in [/Users/jenny/tmp](vscode-file://vscode-app/Applications/Positron.app/Contents/Resources/app/out/vs/code/electron-sandbox/workbench/workbench.html#).
Do you want to proceed (Y/n)? 
WARN: No 'title' for project provided in `quarto create project`. Using 'my-first-quarto-project' as default.
Creating project at /Users/jenny/tmp/my-first-quarto-project:
  - Created _quarto.yml
  - Created my-first-quarto-project.qmd


owd <- setwd(dir)
on.exit(setwd(owd), add = TRUE, after = FALSE)
Expand Down
25 changes: 17 additions & 8 deletions man/quarto_create_project.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 0 additions & 8 deletions tests/testthat/test-create.R
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
test_that("Create a quarto project", {
skip_if_no_quarto("1.4")
# TODO: Fix the test once issue solve upstream
# - https://github.com/quarto-dev/quarto-cli/issues/8809
# - https://github.com/quarto-dev/quarto-r/issues/153
skip_if_quarto("1.5")
Comment on lines -3 to -6
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With my change re: name, these tests pass for me with Quarto 1.5, so I think they can be unskipped?

expect_snapshot(
error = TRUE,
quarto_create_project()
Expand All @@ -16,10 +12,6 @@ test_that("Create a quarto project", {

test_that("Create a quarto project in another directory", {
skip_if_no_quarto("1.4")
# TODO: Fix the test once issue solve upstream
# - https://github.com/quarto-dev/quarto-cli/issues/8809
# - https://github.com/quarto-dev/quarto-r/issues/153
skip_if_quarto("1.5")
tempdir <- withr::local_tempdir()
curr_wd <- getwd()
expect_no_error(quarto_create_project(name = "test-project", dir = tempdir, quiet = TRUE))
Expand Down
Loading