88# ' @example ./examples/redundancy.R
99# ' @param x [validate::validator()] object with the validation rules.
1010# ' @param ... not used.
11+ # ' @param verbose if `TRUE` print the redundant rule(s) to the console
1112# '
1213# ' @family redundancy
1314# '
1415# ' @export
15- detect_redundancy <- function (x , ... ){
16+ detect_redundancy <- function (x , ... , verbose = interactive() ){
1617 x <- check_validator(x )
1718 can_be_checked <- is_linear(x ) | is_categorical(x ) | is_conditional(x )
1819 vals <- to_exprs(x )
1920 dnf_set <- lapply(vals [can_be_checked ], as_dnf )
2021 are_redundant <- sapply(seq_along(dnf_set ), function (i ){
2122 is_redundant(dnf_set , i )
2223 })
23- idx <- which(can_be_checked )[are_redundant ]
2424
25+ idx <- which(can_be_checked )[are_redundant ]
2526 ret <- logical (length = length(vals ))
2627 names(ret ) <- names(vals )
2728 ret [idx ] <- TRUE
29+ if (isTRUE(verbose ) && any(ret )){
30+ v <- x [names(ret )[ret ]] | > to_exprs() | > lapply(deparse_all )
31+ message(
32+ " Redundant rule(s):\n " ,
33+ paste0(" " , names(v ), " : " , v , collapse = " \n " )
34+ )
35+ }
2836 ret
2937}
3038
@@ -35,22 +43,32 @@ detect_redundancy <- function(x, ...){
3543# ' @example ./examples/redundancy.R
3644# ' @param x [validate::validator()] object with validation rules.
3745# ' @param ... not used
46+ # ' @param verbose if `TRUE` print the remove rules to the console.
3847# '
3948# ' @family redundancy
4049# '
4150# ' @return simplified [validate::validator()] object, in which redundant rules are removed.
42- remove_redundancy <- function (x , ... ){
51+ remove_redundancy <- function (x , ... , verbose = interactive() ){
4352 x <- check_validator(x )
4453
4554 can_be_checked <- is_linear(x ) | is_categorical(x ) | is_conditional(x )
4655
4756 vals <- to_exprs(x )
4857 dnf_set <- lapply(vals [can_be_checked ], as_dnf )
58+ red <- character ()
4959 for (i in rev(seq_along(dnf_set ))){ # remove later rules before older rules
5060 if (is_redundant(dnf_set , i )){
61+ red <- c(red , names(dnf_set )[i ])
5162 dnf_set [[i ]] <- list ()
5263 }
5364 }
65+ if (length(red ) && isTRUE(verbose )){
66+ v <- x [red ] | > to_exprs() | > lapply(deparse_all )
67+ message(
68+ " Removed redundant rule(s):\n " ,
69+ paste0(" " , names(v ), " : " , v , collapse = " \n " )
70+ )
71+ }
5472 vals [can_be_checked ] <- lapply(dnf_set , as.expression )
5573 vals <- unlist(vals ) # this removes empty expressions
5674 do.call(validate :: validator , vals )
0 commit comments