r-lib / styler

Non-invasive pretty printing of R code
https://styler.r-lib.org
Other
713 stars 70 forks source link

Don't add braces to function bodies specifically for S4 generics #1141

Open MichaelChirico opened 1 year ago

MichaelChirico commented 1 year ago

Per Advanced R:

It is bad practice to use {} in the generic as it triggers a special case that is more expensive, and generally best avoided.

# Don't do this!
 setGeneric("myGeneric", function(x) {
 standardGeneric("myGeneric")
})

https://github.com/hadley/adv-r/blob/dc49c3872c3530ac08716fd4f4c235b01266a4ce/S4.Rmd#L345-L352

Companion issue for {lintr}: https://github.com/r-lib/lintr/issues/1968

lorenzwalthert commented 9 months ago

This is a bit more complex with current code since the rule is implemented to check if there is a function token and If yes, add the braces, without knowing about the fact that we are inside setGeneric. Can you identify we are inside setGeneric if standardGeneric is in the function body or is that not true? If it is mostly true, we could avoid adding the curly braces based on a condition where stadnardGeneric() is called inside the function. That would still add braces to a situation like this:

 setGeneric("myGeneric", function(x) {
  othergeneric("myGeneric")
})