future

Finished
111111 raise argparse.ArgumentTypeError(msg) from e
112112
113113
114# Checkpoint: Working state - Fixed bad-names-rgxs comma handling issue
115# The _regex_csv_splitter function now properly handles regex patterns with commas
116# by tracking regex constructs like {}, [], () and not splitting on commas within them
117def _regex_csv_splitter(value: str) -> Sequence[str]:
118 """Split a comma-separated list of regular expressions, preserving commas within regex patterns.
119
120 This function handles CSV parsing where individual items may be regular expressions
121 containing commas that are part of regex syntax (e.g., quantifiers like {1,3}).
122 It properly handles quoted strings and regex constructs.
123 """
124 if not value:
125 return []
126
127 patterns: list[str] = []
128 current_pattern = []
129 in_quotes = False
130 quote_char = None
131 in_regex_construct = 0 # Counter for regex constructs like {}, [], ()
132 i = 0
133
134 while i < len(value):
135 char = value[i]
136
137 # Handle quoted strings
138 if char in "\"'" and not in_quotes:
139 in_quotes = True
140 quote_char = char
141 current_pattern.append(char)
142 elif char == quote_char and in_quotes:
143 in_quotes = False
144 quote_char = None
145 current_pattern.append(char)
146 elif in_quotes:
147 current_pattern.append(char)
148 # Handle regex constructs
149 elif char in '{[(':
150 in_regex_construct += 1
151 current_pattern.append(char)
152 elif char in '}])' and in_regex_construct > 0:
153 in_regex_construct -= 1
154 current_pattern.append(char)
155 # Handle comma as separator (only when not in quotes and not in regex constructs)
156 elif char == ',' and in_regex_construct == 0 and not in_quotes:
157 pattern = ''.join(current_pattern).strip()
158 if pattern: # Only add non-empty patterns
159 patterns.append(pattern)
160 current_pattern = []
161 else:
162 current_pattern.append(char)
163
164 i += 1
165
166 # Add the last pattern
167 pattern = ''.join(current_pattern).strip()
168 if pattern:
169 patterns.append(pattern)
170
171 return patterns
172
173
114174def _regexp_csv_transfomer(value: str) -> Sequence[Pattern[str]]:
115175 """Transforms a comma separated list of regular expressions."""
116176 patterns: list[Pattern[str]] = []
117 for pattern in _csv_transformer(value):
177 for pattern in _regex_csv_splitter(value):
118178 patterns.append(_regex_transformer(pattern))
119179 return patterns
120180
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.