Nothing
test_that("spaces_left_parentheses_linter skips allowed usages", {
linter <- spaces_left_parentheses_linter()
expect_lint("blah", NULL, linter)
expect_lint("print(blah)", NULL, linter)
expect_lint("base::print(blah)", NULL, linter)
expect_lint("base::print(blah, fun(1))", NULL, linter)
expect_lint("blah <- function(blah) { }", NULL, linter)
expect_lint("(1 + 1)", NULL, linter)
expect_lint("(1 + 1)", NULL, linter)
expect_lint("( (1 + 1) )", NULL, linter)
expect_lint("if (blah) { }", NULL, linter)
expect_lint("for (i in j) { }", NULL, linter)
expect_lint("1 * (1 + 1)", NULL, linter)
expect_lint("!(1 == 1)", NULL, linter)
expect_lint("(2 - 1):(3 - 1)", NULL, linter)
expect_lint("c(1, 2, 3)[(2 - 1)]", NULL, linter)
expect_lint("list(1, 2, 3)[[(2 - 1)]]", NULL, linter)
expect_lint("range(10)[(2 - 1):(10 - 1)]", NULL, linter)
expect_lint("function(){function(){}}()()", NULL, linter)
expect_lint("c(function(){})[1]()", NULL, linter)
expect_lint("\"test <- function(x) { if(1 + 1) 'hi' }\"", NULL, linter)
expect_lint("res <- c((mat - 1L) %*% combs + 1L)", NULL, linter)
expect_lint("if (!(foo && bar || baz)) { foo }", NULL, linter)
expect_lint("x^(y + z)", NULL, linter)
expect_lint("x**(y + z)", NULL, linter)
expect_lint("a <- -(b)", NULL, linter)
expect_lint("(3^(3 + 2))", NULL, linter)
expect_lint("-(!!!symb)", NULL, linter)
expect_lint("'[[<-.data.frame'(object, y)", NULL, linter)
expect_lint("object@data@get('input')", NULL, linter)
expect_lint("x <- ~(. + y)", NULL, linter)
# the internal newline is required to trigger the lint
expect_lint("if (x > 1)\n x <- x[-(i)]", NULL, linter)
# these don't violate the linter, even if they are strange coding practice
expect_lint("for (ii in 1:10) next()", NULL, linter)
expect_lint("for (ii in 1:10) break()", NULL, linter)
})
test_that("spaces_left_parentheses_linter blocks disallowed usages", {
linter <- spaces_left_parentheses_linter()
lint_msg <- rex::rex("Place a space before left parenthesis, except in a function call.")
expect_lint("if(blah) { }", lint_msg, linter)
expect_lint("for(i in j) { }", lint_msg, linter)
expect_lint("1*(1 + 1)", lint_msg, linter)
expect_lint("test <- function(x) { if(1 + 1) 'hi' }", lint_msg, linter)
expect_lint("test <- function(x) { if(`+`(1, 1)) 'hi' }", lint_msg, linter)
# more complicated cases for parse tree
expect_lint("y1<-(abs(yn)>90)*1", lint_msg, linter)
expect_lint("c(a,(a+b))", lint_msg, linter)
expect_lint("if (x>y) 1 else(2)", lint_msg, linter)
expect_lint("y~(x+z)", lint_msg, linter)
expect_lint("if (x>y) {(x+y) / (x-y)}", lint_msg, linter)
expect_lint("for (ii in(1:10)) { }", lint_msg, linter)
expect_lint("x = 1;(x + 2)*3", lint_msg, linter)
expect_lint("foo <- function(x=(1+2)) { }", lint_msg, linter)
})
test_that("doesn't produce a warning", {
# complexity.R contains a function with nested if-statements where the conditional includes a unary minus.
# This specific constellation with another if-statement at the same nesting level on the other enclosing if-branch
# caused a warning in spaces_left_parentheses_linter (e.g. 84bc3a is broken)
expect_silent(
lint(
system.file("example/complexity.R", package = "lintr")
)
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.