---
title: "Current pkgcheck checks"
author: 
  - "Mark Padgham"
date: "`r Sys.Date()`"
vignette: >
  %\VignetteIndexEntry{Current checks}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set (
    collapse = TRUE,
    warning = TRUE,
    message = TRUE,
    width = 120,
    comment = "#>",
    fig.retina = 2,
    fig.path = "README-"
)
options (repos = c (
    ropenscireviewtools = "https://ropensci-review-tools.r-universe.dev",
    CRAN = "https://cloud.r-project.org"
))
library (pkgcheck)
requireNamespace ("roxygen2")
```

The following checks are currently implemented in the `pkgcheck` package.
Several of these are by default only shown when they fail; absence from a
resultant checklist may be interpreted to indicate successful checks.

```{r list-checks, results = 'asis', echo = FALSE}
base_dir <- rprojroot::find_root (rprojroot::is_r_package)
flist <- list.files (file.path (base_dir, "R"), full.names = TRUE, pattern = "\\.R$")
blocks <- lapply (flist, function (i) roxygen2::parse_file (i, env = NULL))
blocks <- do.call (c, blocks) # flatten embedded lists

fn_names <- vapply (blocks, function (i) {
    pd <- utils::getParseData (parse (
        text = deparse (i$call),
        keep.source = TRUE,
        encoding = "UTF-8"
    ))
    if (!any (pd$token == "SYMBOL")) {
        return ("")
    } else {
        pd$text [which (pd$token == "SYMBOL") [1]]
    }},
character (1L),
USE.NAMES = FALSE
)

index <- grep ("^pkgchk\\_", fn_names)
blocks <- blocks [index]
fn_names <- fn_names [index]

block_docs <- lapply (seq_along (blocks), function (i) {
    list (
        fn_name = paste0 (i, ". ", fn_names [i]),
        title = roxygen2::block_get_tag (blocks [[i]], "title")$val,
        desc = roxygen2::block_get_tag (blocks [[i]], "description")$val,
        details = roxygen2::block_get_tag (blocks [[i]], "details")$val,
        notes = unlist (roxygen2::block_get_tags (blocks [[i]], "note"))
    )
})
# notes are not listed, only title, description, and detail fields.

block_str <- unlist (lapply (block_docs, function (i) {
    ret <- c (
        paste0 ("## *", i$fn_name, "*"),
        "",
        i$title,
        "",
        i$desc
    )

    if (!is.null (i$details)) {
        ret <- c (ret, "", i$details)
    }

    c (ret, "")
}))

cat (paste0 (block_str, collapse = "\n"))
```
