1context("semicolon_terminator_linter")
2
3trail_msg <- "Trailing semicolons are not needed."
4comp_msg <- "Compound semicolons are not needed. Replace them by a newline."
5
6test_that("Lint all semicolons", {
7  linter <- semicolon_terminator_linter()
8
9  # No semicolon
10  expect_lint("", NULL, linter)
11  expect_lint("a <- 1", NULL, linter)
12  expect_lint("function() {a <- 1}", NULL, linter)
13  expect_lint("a <- \"foo;bar\"", NULL, linter)
14  expect_lint("function() {a <- \"foo;bar\"}", NULL, linter)
15  expect_lint("a <- FALSE # ok; cool!", NULL, linter)
16  expect_lint("function() {\na <- FALSE # ok; cool!\n}", NULL, linter)
17
18  # Trailing semicolons
19  expect_lint("a <- 1;",
20              list(message=trail_msg, line_number=1L, column_number=7L),
21              linter)
22  expect_lint("function(){a <- 1;}",
23              list(message=trail_msg, line_number=1L, column_number=18L),
24              linter)
25  expect_lint("a <- 1; \n",
26              list(message=trail_msg, line_number=1L, column_number=7L),
27              linter)
28  expect_lint("function(){a <- 1; \n}",
29              list(message=trail_msg, line_number=1L, column_number=18L),
30              linter)
31
32  # Compound semicolons
33  expect_lint("a <- 1;b <- 2",
34              list(message=comp_msg, line_number=1L, column_number=7L),
35              linter)
36  expect_lint("function() {a <- 1;b <- 2}\n",
37              list(message=comp_msg, line_number=1L, column_number=19L),
38              linter)
39  expect_lint("foo <-\n   1 ; foo <- 1.23",
40              list(message=comp_msg, line_number=2L, column_number=6L),
41              linter)
42  expect_lint("function(){\nfoo <-\n   1 ; foo <- 1.23\n}",
43              list(message=comp_msg, line_number=3L, column_number=6L),
44              linter)
45
46  # Multiple, mixed semicolons", {
47  expect_lint("a <- 1 ; b <- 2;\nc <- 3;",
48              list(
49                list(message=comp_msg, line_number=1L, column_number=8L),
50                list(message=trail_msg, line_number=1L, column_number=16L),
51                list(message=trail_msg, line_number=2L, column_number=7L)
52              ),
53              linter)
54  expect_lint("function() { a <- 1 ; b <- 2;\nc <- 3;}",
55              list(
56                list(message=comp_msg, line_number=1L, column_number=21L),
57                list(message=trail_msg, line_number=1L, column_number=29L),
58                list(message=trail_msg, line_number=2L, column_number=7L)
59              ),
60              linter)
61})
62
63
64test_that("Compound semicolons only", {
65  linter <- semicolon_terminator_linter(semicolon = "compound")
66  expect_lint("a <- 1;", NULL, linter)
67  expect_lint("function(){a <- 1;}", NULL, linter)
68  expect_lint("a <- 1; \n", NULL, linter)
69  expect_lint("function(){a <- 1; \n}", NULL, linter)
70})
71
72
73test_that("Trailing semicolons only", {
74  linter <- semicolon_terminator_linter(semicolon = "trailing")
75  expect_lint("a <- 1;b <- 2", NULL, linter)
76  expect_lint("function() {a <- 1;b <- 2}\n", NULL, linter)
77  expect_lint("f <-\n 1 ;f <- 1.23", NULL, linter)
78  expect_lint("function(){\nf <-\n 1 ;f <- 1.23\n}", NULL, linter)
79})
80