future

Finished
112112
113113
114114def _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 Commas that are not inside regex metacharacters (parentheses, brackets, braces)
118 are treated as separators between different regex patterns.
119
120 This allows patterns containing commas in regex syntax (like "(foo{1,3})" or "[a,b]")
121 to work correctly while still supporting multiple comma-separated patterns.
122 """
116123 patterns: list[Pattern[str]] = []
117 for pattern in _csv_transformer(value):
118 patterns.append(_regex_transformer(pattern))
124
125 # Split on commas that are not inside regex metacharacters
126 parts = []
127 current_part = ""
128 paren_count = 0 # Count of parentheses
129 bracket_count = 0 # Count of square brackets
130 brace_count = 0 # Count of curly braces
131 i = 0
132 while i < len(value):
133 char = value[i]
134
135 if char == '\\' and i + 1 < len(value):
136 # Escaped character - add both characters
137 current_part += char + value[i + 1]
138 i += 2
139 continue
140
141 if char == '(':
142 paren_count += 1
143 current_part += char
144 elif char == ')':
145 paren_count -= 1
146 current_part += char
147 elif char == '[':
148 bracket_count += 1
149 current_part += char
150 elif char == ']':
151 bracket_count -= 1
152 current_part += char
153 elif char == '{':
154 brace_count += 1
155 current_part += char
156 elif char == '}':
157 brace_count -= 1
158 current_part += char
159 elif char == ',' and paren_count == 0 and bracket_count == 0 and brace_count == 0:
160 # Comma not inside any regex metacharacters - treat as separator
161 parts.append(current_part)
162 current_part = ""
163 else:
164 current_part += char
165
166 i += 1
167
168 parts.append(current_part) # Add the last part
169
170 # Compile each part
171 for pattern_str in parts:
172 if pattern_str.strip(): # Skip empty patterns
173 patterns.append(_regex_transformer(pattern_str.strip()))
174
119175 return patterns
120176
121177
Test NameStatus
tests/config/test_config.py::test_csv_regex_error
Fail
tests/config/test_config.py::test_can_read_toml_env_variable
Pass
tests/config/test_config.py::test_unknown_message_id
Pass
tests/config/test_config.py::test_unknown_option_name
Pass
tests/config/test_config.py::test_unknown_short_option_name
Pass
tests/config/test_config.py::test_unknown_confidence
Pass
tests/config/test_config.py::test_empty_confidence
Pass
tests/config/test_config.py::test_unknown_yes_no
Pass
tests/config/test_config.py::test_unknown_py_version
Pass
tests/config/test_config.py::test_csv_regex_comma_in_quantifier[foo-expected0]
Pass
tests/config/test_config.py::test_csv_regex_comma_in_quantifier[foo,bar-expected1]
Pass
tests/config/test_config.py::test_csv_regex_comma_in_quantifier[foo,
Pass
tests/config/test_config.py::test_regex_error
Pass
tests/config/test_config.py::test_short_verbose
Pass
tests/config/test_config.py::test_argument_separator
Pass
tests/config/test_config.py::test_clear_cache_post_run
Pass
tests/config/test_config.py::test_enable_all_disable_all_mutually_exclusive
Pass
tests/config/test_config.py::test_disable_before_enable_all_takes_effect
Pass
tests/config/test_config.py::test_enable_before_disable_all_takes_effect
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.