agent

Finished
8686 variables and glob patterns.
8787 """
8888 paths: list[str] = []
89 for path in _csv_transformer(value):
89 for path in _split_regex_patterns(value):
9090 paths.extend(glob(_path_transformer(path), recursive=True))
9191 return paths
9292
114114def _regexp_csv_transfomer(value: str) -> Sequence[Pattern[str]]:
115115 """Transforms a comma separated list of regular expressions."""
116116 patterns: list[Pattern[str]] = []
117 for pattern in _csv_transformer(value):
117 for pattern in _split_regex_patterns(value):
118118 patterns.append(_regex_transformer(pattern))
119119 return patterns
120120
121def _split_regex_patterns(value: str) -> list[str]:
122 """Split a comma-separated list of regex patterns, respecting regex syntax.
123
124 This function handles commas within regex patterns (like {1,3}) by tracking
125 nesting levels of parentheses, brackets, and braces.
126 """
127 if not value:
128 return []
129
130 patterns: list[str] = []
131 current_pattern: list[str] = []
132 paren_level = 0 # Track parentheses nesting
133 bracket_level = 0 # Track square brackets nesting
134 brace_level = 0 # Track curly braces nesting
135 in_escape = False # Track escape sequences
136
137 for char in value:
138 if in_escape:
139 current_pattern.append(char)
140 in_escape = False
141 continue
142
143 if char == '\\':
144 current_pattern.append(char)
145 in_escape = True
146 continue
147
148 # Track nesting levels
149 if char == '(':
150 paren_level += 1
151 elif char == ')':
152 paren_level -= 1
153 elif char == '[':
154 bracket_level += 1
155 elif char == ']':
156 bracket_level -= 1
157 elif char == '{':
158 brace_level += 1
159 elif char == '}':
160 brace_level -= 1
161
162 # Split on commas only when not nested
163 elif char == ',' and paren_level == 0 and bracket_level == 0 and brace_level == 0:
164 pattern_str = ''.join(current_pattern).strip()
165 if pattern_str: # Only add non-empty patterns
166 patterns.append(pattern_str)
167 current_pattern = []
168 continue
169
170 current_pattern.append(char)
171
172 # Add the last pattern
173 pattern_str = ''.join(current_pattern).strip()
174 if pattern_str: # Only add non-empty patterns
175 patterns.append(pattern_str)
176
177 return patterns
178
121179
122180def _regexp_paths_csv_transfomer(value: str) -> Sequence[Pattern[str]]:
123181 """Transforms a comma separated list of regular expressions paths."""
124182 patterns: list[Pattern[str]] = []
125 for pattern in _csv_transformer(value):
183 for pattern in _split_regex_patterns(value):
126184 patterns.append(
127185 re.compile(
128186 str(pathlib.PureWindowsPath(pattern)).replace("\\", "\\\\")
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.