From 711013bf18e208ef3255df060afd1d453f0c3c41 Mon Sep 17 00:00:00 2001 From: Jonathan Keane Date: Sat, 24 Jul 2021 08:46:01 -0500 Subject: [PATCH 1/4] strip assignments from the middle of S3 classes as well --- R/object_name_linters.R | 1 + tests/testthat/dummy_packages/clean/R/clean_generics.R | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/R/object_name_linters.R b/R/object_name_linters.R index 29077af85..08c109935 100644 --- a/R/object_name_linters.R +++ b/R/object_name_linters.R @@ -112,6 +112,7 @@ check_style <- function(nms, style, generics = character()) { strip_names <- function(x) { x <- re_substitutes(x, rex(start, some_of(".", quote, "`", "%", "$", "@")), "") x <- re_substitutes(x, rex(some_of(quote, "`", "<", "-", "%", "$", "@"), end), "") + x <- re_substitutes(x, rex(some_of("<-"), "."), ".") x } diff --git a/tests/testthat/dummy_packages/clean/R/clean_generics.R b/tests/testthat/dummy_packages/clean/R/clean_generics.R index 1578cb0d2..192d2ce15 100644 --- a/tests/testthat/dummy_packages/clean/R/clean_generics.R +++ b/tests/testthat/dummy_packages/clean/R/clean_generics.R @@ -31,3 +31,9 @@ drink_me.data.frame <- function(x, ...) { head.my_s3_object <- function(x, ...) { NULL } + +#' assign names for my_custom_class +#' @export +`names<-.my_custom_class` <- function(x, value) { + NULL +} From 6f66ec279ab72d7400098bc0d21716eb2e866a38 Mon Sep 17 00:00:00 2001 From: Jonathan Keane Date: Sat, 24 Jul 2021 09:05:00 -0500 Subject: [PATCH 2/4] Remove extraneous `some_of()` --- R/object_name_linters.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/object_name_linters.R b/R/object_name_linters.R index 08c109935..13ff1ecd1 100644 --- a/R/object_name_linters.R +++ b/R/object_name_linters.R @@ -112,7 +112,7 @@ check_style <- function(nms, style, generics = character()) { strip_names <- function(x) { x <- re_substitutes(x, rex(start, some_of(".", quote, "`", "%", "$", "@")), "") x <- re_substitutes(x, rex(some_of(quote, "`", "<", "-", "%", "$", "@"), end), "") - x <- re_substitutes(x, rex(some_of("<-"), "."), ".") + x <- re_substitutes(x, rex("<-", "."), ".") x } From a1795f51ac693925c3db4e79b3d8e1199274cc1a Mon Sep 17 00:00:00 2001 From: Jonathan Keane Date: Mon, 28 Mar 2022 13:09:29 -0500 Subject: [PATCH 3/4] Strip strip_names --- NEWS.md | 1 + R/object_name_linters.R | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index 87f39ae12..e7a43e57c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -127,6 +127,7 @@ function calls. (#850, #851, @renkun-ken) * * `object_length_linter()` correctly detects generics and only counts the implementation class towards the length. This prevents false positive lints in the case of long generic names, e.g. `very_very_very_long_generic_name.short_class` no longer produces a lint (#871, @AshesITR) +* Assignment generics on custom classes (#843, @jonkeane) # lintr 2.0.1 diff --git a/R/object_name_linters.R b/R/object_name_linters.R index 13ff1ecd1..05b60f2b1 100644 --- a/R/object_name_linters.R +++ b/R/object_name_linters.R @@ -62,11 +62,11 @@ object_name_linter <- function(styles = c("snake_case", "symbols")) { xml2::xml_text(assignments) ) - generics <- strip_names(c( + generics <- c( declared_s3_generics(xml), imported_s3_generics(namespace_imports(find_package(source_file$filename)))$fun, .base_s3_generics - )) + ) generics <- unique(generics[nzchar(generics)]) style_matches <- lapply(styles, function(style) { @@ -112,7 +112,6 @@ check_style <- function(nms, style, generics = character()) { strip_names <- function(x) { x <- re_substitutes(x, rex(start, some_of(".", quote, "`", "%", "$", "@")), "") x <- re_substitutes(x, rex(some_of(quote, "`", "<", "-", "%", "$", "@"), end), "") - x <- re_substitutes(x, rex("<-", "."), ".") x } From 5b9aa355f3528ac6a8e59bbccad29ebcebafadb4 Mon Sep 17 00:00:00 2001 From: Jonathan Keane Date: Mon, 28 Mar 2022 15:11:06 -0500 Subject: [PATCH 4/4] Update NEWS.md --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 4b509f39b..d6a1fc124 100644 --- a/NEWS.md +++ b/NEWS.md @@ -130,7 +130,7 @@ function calls. (#850, #851, @renkun-ken) * * `object_length_linter()` correctly detects generics and only counts the implementation class towards the length. This prevents false positive lints in the case of long generic names, e.g. `very_very_very_long_generic_name.short_class` no longer produces a lint (#871, @AshesITR) -* Assignment generics on custom classes (#843, @jonkeane) +* `object_name_linter()` now correctly detects assignment generics (#843, @jonkeane) # lintr 2.0.1