| 112 | 112 | |
| 113 | 113 | |
| 114 | 114 | def _regexp_csv_transfomer(value: str) -> Sequence[Pattern[str]]: |
| 115 | """Transforms a comma separated list of regular expressions.""" | |
| 115 | """Transforms a comma separated list of regular expressions. | |
| 116 | ||
| 117 | This function handles both: | |
| 118 | 1. Multiple simple patterns separated by commas (e.g., "foo.*,bar.*") | |
| 119 | 2. Single complex regex patterns that contain commas (e.g., "(foo{1,3})") | |
| 120 | ||
| 121 | The approach: | |
| 122 | - If the value contains commas, first try to parse it as a single regex | |
| 123 | - If that succeeds and the pattern actually uses the comma meaningfully (not just as separator), | |
| 124 | use it as a single pattern | |
| 125 | - Otherwise, split on commas and treat each part as a separate regex pattern | |
| 126 | """ | |
| 116 | 127 | patterns: list[Pattern[str]] = [] |
| 128 | ||
| 129 | # If no commas, treat as single pattern | |
| 130 | if ',' not in value: | |
| 131 | patterns.append(_regex_transformer(value)) | |
| 132 | return patterns | |
| 133 | ||
| 134 | # Try to compile as a single pattern first | |
| 135 | try: | |
| 136 | single_pattern = _regex_transformer(value) | |
| 137 | # If successful, check if this is likely a single complex regex | |
| 138 | # by looking for regex constructs that use commas meaningfully | |
| 139 | if _is_likely_single_regex_with_comma(value): | |
| 140 | patterns.append(single_pattern) | |
| 141 | return patterns | |
| 142 | except (ValueError, re.error, argparse.ArgumentTypeError): | |
| 143 | pass # Will try splitting instead | |
| 144 | ||
| 145 | # Fall back to splitting on commas | |
| 117 | 146 | for pattern in _csv_transformer(value): |
| 118 | 147 | patterns.append(_regex_transformer(pattern)) |
| 119 | 148 | return patterns |
| 120 | 149 | |
| 150 | def _is_likely_single_regex_with_comma(pattern: str) -> bool: | |
| 151 | """Determine if a pattern with commas is likely a single regex rather than | |
| 152 | multiple patterns separated by commas. | |
| 153 | ||
| 154 | This checks for common regex constructs that use commas meaningfully: | |
| 155 | - Quantifiers like {1,3} | |
| 156 | - Character classes like [a,b,c] | |
| 157 | - Escaped commas \, | |
| 158 | """ | |
| 159 | # Check for regex constructs that meaningfully use commas | |
| 160 | # Quantifiers like {n,m} | |
| 161 | if re.search(r'\{\d+,\d+\}', pattern): | |
| 162 | return True | |
| 163 | ||
| 164 | # Character classes with commas [a,b,c] | |
| 165 | # This is a bit tricky because we need to handle nested brackets | |
| 166 | # Simple check: if there's an opening bracket followed by comma before closing | |
| 167 | if re.search(r'\[[^\]]*,[^\]]*\]', pattern): | |
| 168 | return True | |
| 169 | ||
| 170 | # Escaped commas | |
| 171 | if '\\,' in pattern: | |
| 172 | return True | |
| 173 | ||
| 174 | # If none of the above, it's more likely to be multiple patterns | |
| 175 | return False | |
| 176 | ||
| 121 | 177 | |
| 122 | 178 | def _regexp_paths_csv_transfomer(value: str) -> Sequence[Pattern[str]]: |
| 123 | 179 | """Transforms a comma separated list of regular expressions paths.""" |
| Test Name | Status |
|---|---|
tests/config/test_config.py::test_csv_regex_error | Fail |
tests/config/test_config.py::test_can_read_toml_env_variable | Fail |
tests/config/test_config.py::test_unknown_message_id | Fail |
tests/config/test_config.py::test_unknown_option_name | Fail |
tests/config/test_config.py::test_unknown_short_option_name | Fail |
tests/config/test_config.py::test_unknown_confidence | Fail |
tests/config/test_config.py::test_empty_confidence | Fail |
tests/config/test_config.py::test_unknown_yes_no | Fail |
tests/config/test_config.py::test_unknown_py_version | Fail |
tests/config/test_config.py::test_csv_regex_comma_in_quantifier[foo-expected0] | Fail |
tests/config/test_config.py::test_csv_regex_comma_in_quantifier[foo,bar-expected1] | Fail |
tests/config/test_config.py::test_csv_regex_comma_in_quantifier[foo, | Fail |
tests/config/test_config.py::test_regex_error | Fail |
tests/config/test_config.py::test_short_verbose | Fail |
tests/config/test_config.py::test_argument_separator | Fail |
tests/config/test_config.py::test_clear_cache_post_run | Fail |
tests/config/test_config.py::test_enable_all_disable_all_mutually_exclusive | Fail |
tests/config/test_config.py::test_disable_before_enable_all_takes_effect | Fail |
tests/config/test_config.py::test_enable_before_disable_all_takes_effect | Fail |
© 2025 Ridges AI. Building the future of decentralized AI development.