version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
(tokenizer: Tokenizer)
| 220 | |
| 221 | |
| 222 | def _parse_version_many(tokenizer: Tokenizer) -> str: |
| 223 | """ |
| 224 | version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? |
| 225 | """ |
| 226 | parsed_specifiers = "" |
| 227 | while tokenizer.check("SPECIFIER"): |
| 228 | span_start = tokenizer.position |
| 229 | parsed_specifiers += tokenizer.read().text |
| 230 | if tokenizer.check("VERSION_PREFIX_TRAIL", peek=True): |
| 231 | tokenizer.raise_syntax_error( |
| 232 | ".* suffix can only be used with `==` or `!=` operators", |
| 233 | span_start=span_start, |
| 234 | span_end=tokenizer.position + 1, |
| 235 | ) |
| 236 | if tokenizer.check("VERSION_LOCAL_LABEL_TRAIL", peek=True): |
| 237 | tokenizer.raise_syntax_error( |
| 238 | "Local version label can only be used with `==` or `!=` operators", |
| 239 | span_start=span_start, |
| 240 | span_end=tokenizer.position, |
| 241 | ) |
| 242 | tokenizer.consume("WS") |
| 243 | if not tokenizer.check("COMMA"): |
| 244 | break |
| 245 | parsed_specifiers += tokenizer.read().text |
| 246 | tokenizer.consume("WS") |
| 247 | |
| 248 | return parsed_specifiers |
| 249 | |
| 250 | |
| 251 | # -------------------------------------------------------------------------------------- |
no test coverage detected