knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
styler::cache_deactivate()
options(styler.colored_print.vertical = FALSE)

If you want to change the behavior of styler to match your desired style, there are multiple ways:

Once you are happy with your style guide, you might want to have a look at how to distribute it, which is described in vignette("distribute_custom_style_guides").

Theory

Here are the steps required to deactivate a rule you don't like

Practice

Lets assume you want to remove the rule that turns = into <- for assignment. That means you want

string = "hi there" 

to remain unchanged after applying styler. This is not the case if you use the default style guide of styler:

library(styler)
style_text("string = 'hi there'")

So you need to figure out which rule is responsible for this. Let's check the transformer categories used with the tidyverse style guide.

transformers <- tidyverse_style()
names(transformers)

From the aforementioned vignette:

We note that there are different types of transformer functions. initialize initializes some variables in the nested parse table (so it is not actually a transformer), and the other elements modify either spacing, line breaks or tokens. use_raw_indention is not a function, it is just an option.

Now, we can look at the names of the rules that are sub-elements of the transformer categories.

library(magrittr)
levels <- c("space", "line_break", "indention", "token")
purrr::map(
  levels,
  ~ names(transformers[[.x]])
) %>%
  purrr::set_names(levels)

Spotted the rule we want to get rid of? It's under token and it's called force_assignment_op. I agree, we could have chosen a better name. If you are not sure if you can guess from the name of the rule what it does you can also have a look at the function declaration of this (unexported) function.

styler:::force_assignment_op

Next, you simply set that element to NULL.

transformers$token$force_assignment_op <- NULL

And you can use the modified transformer list as input to style_text()

style_text("string = 'hi there'", transformers = transformers)

If you want to use it the same way as tidyverse_style(), here's the last step:

eq_assign_style <- function(...) {
  transformers <- tidyverse_style(...)
  transformers$token$force_assignment_op <- NULL
  transformers
}

style_text("string = 'hi there'", style = eq_assign_style)

That's it. Note that the transformer functions and how they are returned by tidyverse_style() is not part of the exposed API. This means that the order, the naming etc. may change. Also, remember we did not add a rule to replace <- with =, but we only removed a rule to replace = with <-, so <- won't be touched:

style_text("string <- 'hi there'", style = eq_assign_style)

If you want to turn <- into =, you need to add a rule as described in vignette("customizing_styler").

If you have trouble identifying a rule based on rule names,

code <- "
f <- function () {

return (1)
}"

is code that will have the first empty line in the function body removed by styler.

Some other rules and their transformers

I think you get the idea. I nevertheless recommend using the tidyverse style guide as is since

If you have questions, don't hesitate to create an issue in the GitHub repo.



krlmlr/styler documentation built on April 8, 2024, 7:53 p.m.