The goal of styler is to provide non-invasive pretty-printing of R source code while adhering to the tidyverse formatting rules. styler can be customized to format code according to other style guides too.
You can install the package from CRAN:
install.packages("styler")
Or get the development version from GitHub:
# install.packages("remotes")
remotes::install_github("r-lib/styler")
You can style a simple character vector of code with style_text()
:
library("styler")
ugly_code <- "a=function( x){1+1} "
style_text(ugly_code)
#> a <- function(x) {
#> 1 + 1
#> }
There are a few variants of style_text()
:
-
style_file()
styles .R, .Rmd .Rnw and .Rprofile, files. -
style_dir()
styles all .R and/or .Rmd files in a directory. -
style_pkg()
styles the source files of an R package. -
RStudio Addins for styling the active file, styling the current package and styling the highlighted code region.
-
style roxygen2 code examples.
-
do not re-style deliberate code alignment.
-
ignore some lines for styling (GitHub development version).
-
cache styled expressions for speed (GitHub development version).
You can decide on the level of invasiveness with the scope argument. You can style:
-
just spaces.
-
spaces and indention.
-
spaces, indention and line breaks.
-
spaces, indention, line breaks and tokens.
ugly_code <- "a=function( x){1+1} "
style_text(ugly_code, scope = "spaces")
#> a = function(x) {1 + 1}
Note that compared to the default used above scope = "tokens"
:
-
no line breaks were added.
-
<-
was not replaced with=
.
While spaces still got styled (around =
in (x)
).
This was just the tip of the iceberg. To learn more about customization options with the tidyverse style guide, see the help file for `tidyverse_style for a quick overview or the introductory vignette.
styler functionality is made available through other tools, most notably
-
as a pre-commit hook
style-files
in https://github.com/lorenzwalthert/precommit -
usethis::use_tidy_style()
styles your project according to the tidyverse style guide. -
via commenting a PR on GitHub with
\style
when the GitHub Action Tidyverse CI is used. The most convenient way to set this up is viausethis::use_github_actions_tidy()
. -
reprex::reprex(style = TRUE)
to prettify reprex code before printing. To permanently usestyle = TRUE
without specifying it every time, you can add the following line to your.Rprofile
(viausethis::edit_r_profile()
):options(reprex.styler = TRUE)
. -
you can pretty-print your R code in RMarkdown reports without having styler modifying the source. This feature is implemented as a code chunk option in knitr. use
tidy = "styler"
in the header of a code chunks (e.g.```{r name-of-the-chunk, tidy = "styler"}
), orknitr::opts_chunk$set(tidy = "styler")
at the top of your RMarkdown script. -
Adding styler as a fixer to the ale Plug-in for VIM.
-
pretty-printing of drake workflow data frames with
drake::drake_plan_source()
. -
Adding styler with emacs-format-all-the-code for Emacs.
-
The official web documentation of styler, containing various vignettes function documentation as well as a change-log.
-
Blog post about how you can customize styler without being an expert.
-
A tidyverse.org blog post introducing the functionality of styler and a follow-up post that introduces the new features since release 1.0.0.
-
The wiki of Google Summer of Code 2017 or the pkgdown page contain information related to the initial development phase during Google Summer of Code 2017.