From 26090d6819473ae35865cc627d9415a4a00b0dd3 Mon Sep 17 00:00:00 2001 From: object-Object Date: Wed, 25 Feb 2026 23:56:32 -0500 Subject: [PATCH] Improve hexdoc handling of duplicate patterns when allow_duplicates is enabled --- doc/src/hexdoc_hexcasting/metadata.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/src/hexdoc_hexcasting/metadata.py b/doc/src/hexdoc_hexcasting/metadata.py index a042d74c2..44eef303f 100644 --- a/doc/src/hexdoc_hexcasting/metadata.py +++ b/doc/src/hexdoc_hexcasting/metadata.py @@ -187,15 +187,19 @@ def _add_patterns_0_10( def _add_pattern(self, pattern: PatternInfo, signatures: dict[str, PatternInfo]): logger.log(TRACE, f"Load pattern: {pattern.id}") - # check for duplicates, because why not - if duplicate := ( - self.patterns.get(pattern.id) or signatures.get(pattern.signature) - ): - message = f"pattern {pattern.id}\n{pattern}\n{duplicate}" + # always raise an error for duplicate pattern ids, even with allow_duplicates + if duplicate := self.patterns.get(pattern.id): + raise ValueError( + f"Duplicate pattern id: {pattern.id}\n{pattern}\n{duplicate}" + ) + + if duplicate := signatures.get(pattern.signature): + message = f"Duplicate pattern signature: {pattern.signature}\n{pattern}\n{duplicate}" if self.hex_props.allow_duplicates: - logger.warning("Ignoring duplicate " + message) - return - raise ValueError("Duplicate" + message) + logger.warning(message) + # no early return - we still need to add the id to the lookup + else: + raise ValueError(message) self.patterns[pattern.id] = pattern signatures[pattern.signature] = pattern