styler icon indicating copy to clipboard operation
styler copied to clipboard

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

Open MichaelChirico opened this issue 2 years ago • 2 comments
trafficstars

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

MichaelChirico avatar Aug 05 '23 11:08 MichaelChirico

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")
})

lorenzwalthert avatar Nov 29 '23 15:11 lorenzwalthert