styler (Development) Unreleased

API Changes

  • style_file() and friends gain argument dry to control if changes should be applied to files or not (#634).

  • style_file() and friends gain argument base_indention (defaulting to 0) to control by how much the output code is indented (#649).

  • added an option (styler.test_dir_writeable) that changes test behavior to not directly modify test files in the current directory (#548).

  • added an option for disabling all communication when using the package (styler.quiet) (#640).

Major changes

  • blank lines in function calls and headers are now removed, for the former only when there are no comments before or after the blank line (#629, #630, #635).

Minor changes and fixes

  • cache is now correctly invalidated when style guide arguments change (#647).
  • empty lines are now removed between pipes (#645).
  • overhaul pgkdown site: Add search (#623), group function in Reference (#625).
  • always strip trailing spaces and make cache insensitive to it (#626).
  • typos in documentation (#643, #618, #614).

styler 1.3.2 2020-02-23

Release upon request by the CRAN team.

Minor changes and fixes

  • Add search and reference sections to pkgdown webpage (#623, #625).
  • various fixes to handle special cases for caching and stylerignore and their interaction (#611, #610, #609, #607, #602, #600).
  • also test on macOS (#604).
  • skip timing tests on CRAN as requested by CRAN team because they did not pass on all machines (#603).

styler 1.3.1 2020-02-13

Emergency release. In case multiple expressions are on one line and only some of them are cached, styler can remove code. To reach this state, some of the expressions must have been styled previously alone and the cache must be active. Example:

#> Using cache 1.3.0 at ~/.Rcache/styler/1.3.0.
#> 1
style_text("1 # comment")
#> # comment

This is obviously detrimental. We have added additional tests and fixed the problem (#593, #595), but we want repeat the warning from ?style_file that all style APIs apart from style_text() overwrite code and that styler can only check the AST remains valid with scope < "tokens". So use this if you are conservative. Or deactivate the cache with deactivate_cache() until it has fully matured.

We thank the people who have contributed to this release:

@ellessenne and @renkun-ken.

styler 1.3.0 2020-02-10

Breaking changes

  • style_pkg() and style_dir() gain a new argument exclude_dirs to exclude directories from styling, by default renv and packrat. Note that the defaults won’t change the behavior of style_pkg() because it does anyways does not style these directories and they were set for consistency.

  • style_file() and friends now strip ./ in file paths returned invisibly, i.e. ./script.R becomes script.R (#568).

New features

  • ignore certain lines using # styler: off and #styler: on or custom markers, see ?stylerignore (#560).

  • styler caches results of styling, so applying styler to code it has styled before will be instantaneous. This brings large speed boosts in many situations, e.g. when style_pkg() is run but only a few files have changed since the last styling or when using the styler pre-commit hook. Because styler caches by expression, you will also get speed boosts in large files with many expressions when you only change a few of them. See ?caching for details (#538, #578).

  • create_style_guide() gains two arguments style_guide_name and style_guide_version that are carried as meta data, in particular to version third-party style guides and ensure the proper functioning of caching. This change is completely invisible to users who don’t create and distribute their own style guide like tidyverse_style() (#572).

Minor changes and fixes

  • lines are now broken after + in ggplot2 calls for strict = TRUE (#569).

  • function documentation now contains many more line breaks due to roxygen2 update to version 7.0.1 (#566).

  • spaces next to the braces in subsetting expressions [ and [[ are now removed (#580).

  • Adapt to changes in the R parser to make styler pass R CMD check again. (#583).

Thanks to all contributors involved, in particular @colearendt, @davidski, @IndrajeetPatil, @pat-s, and @programming-wizard.

styler 1.2.0 2019-10-17

Breaking changes

  • style_file() now correctly styles multiple files from different directories. We no longer display the file name of the styled file, but the absolute path. This is also reflected in the invisible return value of the function (#522).

  • style_file() and friends do not write content back to a file when styling does not cause any changes in the file. This means the modification date of styled files is only changed when the content is changed (#532).

New features

  • Aligned function calls are detected and remain unchanged if they match the styler definition for aligned function calls (#537).

  • curly-curly ({{) syntactic sugar introduced with rlang 0.4.0 is now explicitly handled, where previously it was just treated as two consecutive curly braces (#528).

  • style_pkg(), style_dir() and the Addins can now style .Rprofile, and hidden files are now also styled (#530).

Minor improvements and fixes

  • Brace expressions in function calls are formatted in a less compact way to improve readability. Typical use case: tryCatch() (#543).

  • Arguments in function declarations in a context which is indented multiple times should now be correct. This typically affects R6::R6Class() (#546).

  • Escape characters in roxygen code examples are now correctly escaped (#512).

  • Special characters such as \n in strings are now preserved in text and not turned into literal values like a line break (#554).

  • Style selection Addin now preserves line break when the last line selected is an entire line (#520).

  • Style file Addin can now properly handle cancelling (#511).

  • The body of a multi-line function declaration is now indented correctly for strict = FALSE and also wrapped in curly braces for strict = TRUE (#536).

  • Advice for contributors in was updated (#508).


Thanks to all contributors involved, in particular

@Banana1530, @batpigandme, @cpsievert, @ellessenne, @Emiller88, @hadley, @IndrajeetPatil, @krlmlr, @lorenzwalthert, @lwjohnst86, @michaelquinn32, @mine-cetinkaya-rundel, @Moohan, @nxskok, @oliverbeagley, @pat-s, @reddy-ia, and @russHyde

styler 1.1.1 2019-05-06

This is primarily a maintenance release upon the request of the CRAN team (#490).

Major changes

  • Users can now control style configurations for styler Addins (#463, #500), using the Set style Addin. See ?styler::styler_addins for details.

  • return() is now always put in braces and put on a new line when used in a conditional statement (#492).

  • %>% almost always causes a line break now for strict = TRUE (#503).

Minor changes

  • style_pkg() now also styles the “demo” directory by default (#453).

  • multi-line strings are now styled more consistently (#459).

  • indention in roxygen code example styling (#455) and EOF spacing (#469) was fixed.

  • indention for for loop edge case (#457) and comments in pipe chain (#482) were fixed.

  • line-break styling around comma is improved (#479).

  • bug that can cause an error when the variable text in any name space before styler on the search path was defined and did not have length 1 is fixed (#484).

  • slightly confusing warning about empty strings caused with roxygen code examples and Rmd was removed.

  • right apostrophe to let package pass R CMD Check in strict Latin-1 locale was removed (#490, reason for release).

Adaption of styler

Since it’s never been mentioned in the release notes, we also mention here where else you can use styler functionality:

  • usethis::use_tidy_style() styles your project according to the tidyverse style guide.

  • reprex::reprex(style = TRUE) to prettify reprex code before printing. To permanently use style = TRUE without specifying it every time, you can add the following line to your .Rprofile (via usethis::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"}), or knitr::opts_chunk$set(tidy = "styler") at the top of your RMarkdown script.

  • pretty-printing of drake workflow data frames with drake::drake_plan_source().

  • Adding styler as a fixer to the ale Plug-in for VIM.

Thanks to all contributors involved, in particular @ArthurPERE, @hadley, @igordot, @IndrajeetPatil, @jackwasey, @jcrodriguez1989, @jennybc, @jonmcalder, @katrinleinweber, @krlmlr, @lorenzwalthert, @michaelquinn32, @msberends, @raynamharris, @riccardoporreca, @rjake, @Robinlovelace, @skirmer, @thalesmello, @tobiasgerstenberg, @tvatter, @wdearden, @wmayner, and @yech1990.

styler 1.1.0 2018-11-20

This release introduces new features and is fully backward-compatible. It also adapts to changes in the R parser committed into R devel (#419).

Major Changes

  • styler can now style roxygen code examples in the source code of package (#332) as well as Rnw files (#431).

  • the print method for the output of style_text() (print.vertical()) now returns syntax-highlighted code by default, controllable via the option styler.colored_print.vertical (#417).

  • the README was redesigned (#413).

  • semi-colon expression that contained multiple assignments was fixed (#404).

Minor Changes

  • cursor position is remembered for styling via Addin (#416).

  • adapt spacing around tilde for multi-token expressions(#424) and brace edge case (#425).

  • only add brackets to piped function call if RHS is a symbol (#422).

  • increase coverage again to over 90% (#412).

  • move rule that turns single quotes into double quotes to token modifier in `tidyverse_style_guide() (#406).

  • remove line-breaks before commas (#405).

  • removed package dependency enc in favor of xfun (#442).

Thanks to all contributors for patches, issues and the like: @jonmcalder, @krlmlr, @IndrajeetPatil, @kalibera, @Hasnep, @kiranmaiganji, @dirkschumacher, @ClaytonJY, @wlandau, @maurolepore

styler 1.0.2 2018-06-26

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-08

This is a maintenance release without any breaking API changes.

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-11

Initial release.

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()