Non-Invasive Pretty Printing of R Code

Pretty-prints R code without changing the user's formatting intent.

BuildStatus AppVeyor BuildStatus stability-stable codecov cranversion

The goal of styler is to provide non-invasive pretty-printing of R source code while adhering to the tidyverse formatting rules. Support for custom style guides is planned.

You can install the package from CRAN:


Or get the development version from GitHub:

# install.packages("remotes")

You can style a simple character vector of code with style_text():

ugly_code <- "a<-function( x){1+1}           "
#> a <- function(x) {
#>   1 + 1
#> }

There are a few variants of style_text():

  • style_file() styles .R and/or .Rmd files.
  • style_dir() styles all .R 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.

You can find more information on the wiki of Google Summer of Code 2017 or check out the pkgdown page.


styler 1.0.2 (2018-06-10)

This is a maintenance release without any breaking API changes.

Major Changes

  • Fixed indention for named multi-line function calls (#372).
  • Non-R code chunks in .Rmd files are now respected and won't get styled (#386).

Minor Changes

  • Fixing an edge case in which, if very long strings were present in the code, tokens could be replaced with wrong text (#384).
  • Spacing around tilde in formulas depends now on whether there is a LHS in the formula (#379).
  • Spaces are now also added around EQ_SUB (=) (#380).
  • Added to outline guidelines for contributing to styler.
  • More informative error messages for parsing problems (#401, #400).
  • Improved documentation (#387).

Thanks to all contributors for patches, issues and the like: @katrinleinweber, @krlmlr, @dchiu911, @ramnathv, @aedobbyn, @Bio7, @tonytonov, @samhinshaw, @fny, @vnijs, @martin-mfg, @NGaffney, @dchiu911.

styler 1.0.1 (2018-03-02)

This is a maintenance release without any breaking API changes.

Major & dependency related changes

  • Removed implicit dplyr dependency via purrr:::map_dfr() (thanks @jimhester, #324).
  • Added required minimal version dependency for purr (>= 0.2.3) (#338).
  • We rely on the tibble package which was optimized for speed in v1.4.2 so styler should run ~2x as fast (#348). For that reason, styler now depends on tibble >= 1.4.2.
  • In the dependency enc, a bug was fixed that removed/changed non-ASCII characters. Hence, styler now depends on enc >= 0.2 (#348).

Minor changes

  • We're now recognizing and respecting more DSLs used in R comments: rplumber (#*, #306), shebang #/! (#345), knitr chunk headers for spinning (#+ / #-, #362).
  • Named arguments can stay on the first line if call is multi-line (#318).
  • No space anymore with tidyverse_style() after !! since with rlang 0.2, !! now binds tighter (#322), spacing around ~ (#316), no space anymore around ^ (#308).
  • Code chunks in Rmd documents that don't use the R engine are no longer formatted (#313).
  • Various bug fixes and edge case improvements.

Thanks to all contributors for patches, issues and the like: @devSJR, @klrmlr, @yutannihilation, @samhinshaw, @martin-mfg, @jjramsey, @RMHogervorst, @wlandau, @llrs, @aaronrudkin, @crew102, @jkgrain, @jennybc, @joranE.

styler 1.0.0 (2017-12-05)

Initial release.


These are functions used to style code. They style a directory, a whole package, a file or a string.

style_dir(path = ".", 
  ..., style = tidyverse_style, transformers = style(...), 
  filetype = "R", recursive = TRUE, exclude_files = NULL

style_pkg(pkg = ".", 
  ..., style = tidyverse_style, transformers = style(...), filetype = "R", 
  exclude_files = "R/RcppExports.R"

  ..., style = tidyverse_style, transformers = style(...)

style_text(text, ..., style = tidyverse_style, transformers = style(...))

style guides

These functions are the style guides implemented.

  scope = "tokens", 
  strict = TRUE, 
  indent_by = 2, 
  start_comments_with_one_space = FALSE, 
  reindention = tidyverse_reindention(), 
  math_token_spacing = tidyverse_math_token_spacing()

style guide creators

This function is used to create a style guide.

  initialize = default_style_guide_attributes, 
  line_break = NULL, 
  space = NULL, 
  token = NULL, 
  indention = NULL, 
  use_raw_indention = FALSE, 
  reindention = tidyverse_reindention()


These are helper functions used to specify the style guides in use.

  zero = NULL, 
  one = c("'+'", "'-'", "'*'", "'/'", "'^'")

  regex_pattern = NULL, 
  indention = 0, 
  comments_only = TRUE

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.1.0 by Lorenz Walthert, 2 months ago

Report a bug at

Browse source code at

Authors: Kirill Müller [aut] , Lorenz Walthert [cre, aut]

Documentation:   PDF Manual  

GPL-3 license

Imports backports, cli, magrittr, purrr, rematch2, rlang, rprojroot, tibble, tools, withr, xfun

Suggests data.tree, dplyr, here, knitr, prettycode, rmarkdown, rstudioapi, testthat

Imported by exampletestr, languageserver.

Suggested by autothresholdr, crunch, detrendr, drake, knitr, nandb, reprex, shinydashboardPlus, usethis.

See at CRAN