Skip to content

[API] equal_mode « normalized » est un bouton sans effet (4 paramètres *_equal_mode inertes dans write_rules_template) #27

Description

@VincentGuyader

Contexte

Le champ YAML equal_mode n'est lu qu'à un seul endroit (R/preprocessing.R:49-54), où identical(eq_mode, "normalized") active une branche qui appelle normalize_text(case_insensitive = FALSE, trim = FALSE) — c'est-à-dire l'identité. Et pour date/datetime/logical, le garde is.character() court-circuite de toute façon. La normalisation ne dépend en réalité que de case_insensitive et trim.

Conséquences :

  • character_equal_mode, date_equal_mode, datetime_equal_mode, logical_equal_mode de write_rules_template() sont des paramètres sans aucun effet sur le verdict ;
  • un utilisateur écrivant equal_mode: normalized seul dans son YAML croit activer une normalisation et n'obtient rien — comportement même verrouillé par un test (test-utils.R:50-59) ;
  • la doc laisse croire que equal_mode pilote quelque chose.

Reprex

library(datadiff)
ref  <- data.frame(id = 1:2, s = c("A", " b"))
cand <- data.frame(id = 1:2, s = c("a", "b"))

path <- tempfile(fileext = ".yaml")
writeLines('
version: 1
defaults: {keys: [id], na_equal: true}
row_validation: {check_count: false}
by_type:
  character: {equal_mode: normalized}   # "normalized" seul
', path)

res <- compare_datasets_from_yaml(ref, cand, key = "id", path = path)
res$all_passed  # FALSE : aucune normalisation appliquée malgré equal_mode: normalized

Critères de succès

  • Décision tranchée : soit equal_mode: normalized implique des défauts documentés (ex. trim = TRUE, case_insensitive = TRUE sauf override), soit le champ et les 4 paramètres *_equal_mode sont supprimés (avec dépréciation et migration du template).
  • Le reprex a un comportement documenté et intuitif.
  • test-utils.R:50-59 mis à jour pour verrouiller le nouveau comportement (et non plus l'inertie).
  • Vignette et template YAML générés cohérents avec la décision.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions