Skip to content

Releases: r-lib/styler

styler 1.6.1 (2021-09-17)

17 Sep 08:54

Choose a tag to compare

  • Files with .Rmarkdown extension are now recognized as an R markdown files in
    style_file() and friends (#824).

  • Don't break line before comments in pipes (#822).

  • Ordinary comments (starting with #) that break a roxygen code example block
    (starting with #') are now recognized and preserved (#830).

  • @examplesIf conditions longer than one line after styling throw an error for
    compatibility with {roxygen2} (#833).

  • R Markdown chunk headers are no longer required to be parsable R code (#832).

  • Break the line between %>% and { inside and outside function calls (#825).

  • Add language server to third-party integration vignette (#835).

  • improved test setup with fixtures and similar (#798).

We'd like to thank all people who helped making this release possible:

@bersbersbers, @eutwt, @IndrajeetPatil, @j-mammen, @jennybc, @JohannesNE, @jonkeane, @lorenzwalthert, and @MichaelChirico.

styler 1.5.1 (2021-07-13)

13 Jul 10:06
138ff0f

Choose a tag to compare

Alignment detection

  • Code with left alignment after = in function calls is now recognized as
    aligned and won't be reformatted (#774, #777).

    # already detected previously
    call(
      x  = 12345,
      y2 =    17
    )
    
    # newly detected
    call(
      x  = 12345,
      y2 = 17
    )
    
  • Similarly, left aligned after comma is now detected (#785, #786).

    # previously detected
    call(
      x  = 12345, "It's old",
      y2 = 17,      "before"
    )
    
    tribble(
      ~x,             ~y,
      "another",     1:3,
      "b",       1211234
    )
    
    # newly detected
    call(
      x = 2,           p = "another",
      y = "hhjkjkbew", x = 3
    )
    
    
    tribble(
      ~x,        ~y,
      "another", 1:3,
      "b",       1211234
    )
    

    Also see vignette("detect-alignment").

Other new features

  • The base R pipe as introduced in R 4.1.0 is now styled the same way the
    magrittr pipe is (#803).
  • code chunks with explicit tidy = FALSE in an Rmd or Rnw code header are not
    styled anymore. This can be handy when the code can't be parsed, e.g.
    within a learnr tutorial (#790).
  • #> is recognized as an output marker and no space is added after # (#771).

Minor changes and fixes

  • No curly braces are added to else statements if they are within a pipe, as
    this can change evaluation logic of code involving the magrittr dot in rare
    cases (#816).
  • Line breaks between } and else are removed (#793).
  • In function calls, code after = #\n is indented correctly (#814).
  • Multi-expressions containing multiple assignments no longer remove line breaks
    if they are not causing blank lines (#809).
  • exclude_dirs in style_pkg() is now properly respected if it is a
    sub-directory of a directory that is scheduled for styling (e.g.
    test/testthat/some/dir) (#811).
  • The user is not prompted anymore to confirm the creation of a permanent cache
    as R.cache >= 0.15.0 uses a standard location in line with CRAN policies
    (#819).
  • R code chunks in nested non-R chunks in R markdown don't yield an error
    anymore when document is styled, chunks are still not styled (#788, #794).
  • cache_activate() and cache_deactivate() now respect the R
    option styler.quiet (#797).
  • multi_line attribute in parse table is now integer, not boolean (#782).
  • The style guide used in Addin is verified when set via R option (#789).
  • Improve pkgdown author URLs (#775).
  • Upgrade touchstone infra (#799, #805).
  • Don't test on R 3.3 anymore as tidyverse supports only four previous
    releases
    (#804).
  • Update Github Actions workflow (#810).

We’d like to thank everyone who has furthered the development of the latest release of styler through their contributions in issues and pull requests:

@ardydavari, @gadenbuie, @IndrajeetPatil, @jasonhan-vassar, @laresbernardo, @lorenzwalthert, @MichaelChirico, @Moohan, @njtierney, @pat-s, @psychelzh, @pvalders, @RoyalTS, and @russHyde.

styler 1.4.1 (2021-03-30)

30 Mar 16:15
fedf7a6

Choose a tag to compare

  • Fix interaction between cache and base_indention. This also fixes
    the Addin for styling a selection with base indention repeatedly (#764).
  • Add more examples to styler_* helpfiles (#762).
  • Hexadecimal integers now preserve the trailing L when styled (#761).
  • Add a pre-push hook to make sure news bullets are added to each PR (#765).

styler 1.4.0 (2021-03-23)

23 Mar 08:07
3668595

Choose a tag to compare

API Changes

new

  • 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, #692). The Addin for
    styling a selection picks that up, e.g. you can style a function body and
    indention is preserved (#725).

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

  • scope in tidyverse_style() can now be specified with higher granularity
    through I(), e.g. I(c('spaces', 'tokens')) allows us to style spaces and
    tokens without styling line breaks and indention. Previously, only a string
    was allowed and all less invasive scopes were included, e.g. if you wanted to
    style tokens, you had to always also style spaces, indention, line breaks as
    well (#705, #707).

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

  • New argument transformers_drop in create_style_guide() to be populated
    with new helper function specify_transformers_drop() for specifying
    conditions under which transformers are not going to be used and can therefore
    be omitted without effecting the result of styling (#711).

deprecated

  • The environment variable save_after_styling is deprecated in favor of the R
    option styler.save_after_styling to control if a file is saved after styling
    with the RStudio Addin. Note than in RStudio >= 1.3.0, you can auto-save edits
    in general (Code -> Saving -> Auto-Save), e.g. on idle editor or focus loss,
    so this feature becomes less relevant (#631, #726).

Major changes

  • styler is now distributed under the MIT license (#751).

  • Documentation overhaul: New README, new "Get started" pkgdown page, new
    vignettes on strict = FALSE, Adoption renamed to Third-party integrations
    (#741), adding search to pkgdown (#623), group functions in pkgdown reference
    page (#625), minor other doc improvements (#643, #618, #614, #677, #651,
    #667, #672, #687, #752, #754).

  • @exampleIsf roxygen tag for conditional examples is now supported (#743).

  • 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,
    #723).

  • speed improvements: 15% faster on new code, 70% on repeated styling of
    compliant code (The latter is not so relevant because it was almost
    instantaneous already). Most relevant contributions were #679, #691, #681,
    #711, #739.

  • #<< is now recognized as the xaringan marker and no space is added after#
    (#700).

Minor changes and fixes

  • style_dir() and style_pkg() now apply directory exclusion recursively with
    exclude_dirs (#676).

  • switch() now has line breaks after every argument to match the tidyverse
    style guide (#722, #727).

  • unary + before a function call does not give an error anymore, as before
    version 1.3.0 (#697).

  • certain combinations of stylerignore markers and cached expressions now
    don't give an error anymore (#738).

  • cache is now correctly invalidated when style guide arguments change (#647).

  • empty lines are now removed between pipes and assignments (#645, #710).

  • multiple @examples roxygen tags in a code block of #' are no longer
    squashed (#748).

  • roxygen code examples starting on the same line as the @examples tag are no
    longer moved to the next line (#748).

  • always strip trailing spaces and make cache insensitive to it (#626).

  • style_text() can now style all input that is.character(), not just if it
    inherits from classes character, utf8 or vertical (#693).

  • logical operators within square braces are now moved from the start of a line
    to the end of the previous line (#709).

  • spaces are now removed before [ and [[ (#713).

  • The internal create_tree() only used in testing of styler now works when the
    cache is activated (#688).

  • simplification of internals (#692).

Infrastructure changes

Thanks to all the people who made this release possible:

@assignUser, @ColmanHumphrey, @davidchall, @espinielli, @giko45, @hadley, @IndrajeetPatil, @intiben, @jamespeapen, @jthomasmock, @Kalaschnik, @kevinushey, @krlmlr, @lcolladotor, @MichaelChirico, @michaelquinn32, @mine-cetinkaya-rundel, @pat-s, @PMassicotte, @QuLogic, @renkun-ken, @RichardJActon, @seed-of-apricot, @select-id-from-users, @SimonDedman, @stefanoborini, @swsoyee, and @Winterstorm-j.

styler 1.3.2 (2020-02-23)

23 Feb 14:15
01a935d

Choose a tag to compare

Release upon request by the CRAN team.

Minor changes and fixes

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

13 Feb 17:21
c816d1c

Choose a tag to compare

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:

library(styler)
cache_activate()
#> Using cache 1.3.0 at ~/.Rcache/styler/1.3.0.
style_text("1")
#> 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.

The release will typically be available from CRAN mirrors within 24h.

styler 1.3.0 (2020-02-10)

10 Feb 23:39

Choose a tag to compare

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)

17 Oct 21:24
437efd2

Choose a tag to compare

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 kept as is 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 CONTRIBUTING.md was updated (#508).

Adaption

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

06 May 22:21
fc19c26

Choose a tag to compare

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-10-20)

20 Nov 20:14

Choose a tag to compare

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.