vcapply <- function(X, FUN, ..., USE.NAMES = TRUE) { vapply( X = X, FUN = FUN, FUN.VALUE = character(1L), ..., USE.NAMES = USE.NAMES ) } astyle <- function(extra_args = character()) { astyle_cmd <- "astyle" if (Sys.which(astyle_cmd) == "") { testthat::skip("astyle not found") } astyle_args <- c( "-n", "--indent=spaces=2", "--indent-namespaces", "--indent-preproc-block", "--unpad-paren", "--pad-header", "--min-conditional-indent=0", "--align-pointer=type", "--align-reference=type" ) src_path <- normalizePath(vcapply( c("../../src", "../../inst/include"), testthat::test_path )) src_files <- dir( src_path, "[.](?:cpp|h)$", recursive = TRUE, full.names = TRUE ) astyle_files <- grep( "(?:RcppExports[.]cpp|static_assert[.]h)", src_files, value = TRUE, invert = TRUE ) output <- system2( astyle_cmd, c(astyle_args, astyle_files, extra_args), stdout = TRUE, stderr = TRUE ) unchanged <- grepl("^Unchanged", output) if (any(!unchanged)) { warning(paste(output[!unchanged], collapse = "\n")) } }