Perform various style checks related to placement and spacing of curly braces:
Details
Opening curly braces are never on their own line and are always followed by a newline.
Opening curly braces have a space before them.
Closing curly braces are on their own line unless they are followed by an
else
.Closing curly braces in
if
conditions are on the same line as the correspondingelse
.Either both or neither branch in
if
/else
use curly braces, i.e., either both branches use{...}
or neither does.Functions spanning multiple lines use curly braces.
See also
linters for a complete list of linters available in lintr.
Examples
# will produce lints
lint(
text = "f <- function() { 1 }",
linters = brace_linter()
)
#> ::warning file=<text>,line=1,col=17::file=<text>,line=1,col=17,[brace_linter] Opening curly braces should never go on their own line and should always be followed by a new line.
#> ::warning file=<text>,line=1,col=21::file=<text>,line=1,col=21,[brace_linter] Closing curly-braces should always be on their own line, unless they are followed by an else.
writeLines("if (TRUE) {\n return(1) }")
#> if (TRUE) {
#> return(1) }
lint(
text = "if (TRUE) {\n return(1) }",
linters = brace_linter()
)
#> ::warning file=<text>,line=2,col=12::file=<text>,line=2,col=12,[brace_linter] Closing curly-braces should always be on their own line, unless they are followed by an else.
# okay
writeLines("f <- function() {\n 1\n}")
#> f <- function() {
#> 1
#> }
lint(
text = "f <- function() {\n 1\n}",
linters = brace_linter()
)
writeLines("if (TRUE) { \n return(1) \n}")
#> if (TRUE) {
#> return(1)
#> }
lint(
text = "if (TRUE) { \n return(1) \n}",
linters = brace_linter()
)
# customizing using arguments
writeLines("if (TRUE) { return(1) }")
#> if (TRUE) { return(1) }
lint(
text = "if (TRUE) { return(1) }",
linters = brace_linter(allow_single_line = TRUE)
)