diff --git a/R/object-from-call.R b/R/object-from-call.R index dc4d5955..8bde28ae 100644 --- a/R/object-from-call.R +++ b/R/object-from-call.R @@ -289,6 +289,10 @@ s7_class_name <- function(cls, block) { unlist(lapply(cls$classes, s7_class_name, block = block)) } else if (inherits(cls, "S7_S3_class")) { cls$class + } else if (inherits(cls, "S7_any")) { + "any" + } else if (inherits(cls, "S7_missing")) { + "missing" } else { warn_roxy_block(block, "Unknown S7 class type") paste0(deparse(cls), collapse = " ") diff --git a/tests/testthat/test-object-from-call.R b/tests/testthat/test-object-from-call.R index b10ec09d..253b97d6 100644 --- a/tests/testthat/test-object-from-call.R +++ b/tests/testthat/test-object-from-call.R @@ -327,6 +327,13 @@ test_that("S7 method on S3 generic includes package prefix in class name", { expect_equal(obj$value$generic, "print") }) +test_that("S7 method with special classes any and missing", { + skip_unless_r(">= 4.3.0") + block <- roxy_block(tags = list(), file = "test.R", line = 1, call = quote(x)) + expect_equal(s7_class_name(S7::class_any, block), "any") + expect_equal(s7_class_name(S7::class_missing, block), "missing") +}) + test_that("S7 method with unknown class type warns", { skip_unless_r(">= 4.3.0") block <- roxy_block(tags = list(), file = "test.R", line = 1, call = quote(x))