requirement = WS? IDENTIFIER WS? extras WS? requirement_details
(tokenizer: Tokenizer)
| 65 | |
| 66 | |
| 67 | def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement: |
| 68 | """ |
| 69 | requirement = WS? IDENTIFIER WS? extras WS? requirement_details |
| 70 | """ |
| 71 | tokenizer.consume("WS") |
| 72 | |
| 73 | name_token = tokenizer.expect( |
| 74 | "IDENTIFIER", expected="package name at the start of dependency specifier" |
| 75 | ) |
| 76 | name = name_token.text |
| 77 | tokenizer.consume("WS") |
| 78 | |
| 79 | extras = _parse_extras(tokenizer) |
| 80 | tokenizer.consume("WS") |
| 81 | |
| 82 | url, specifier, marker = _parse_requirement_details(tokenizer) |
| 83 | tokenizer.expect("END", expected="end of dependency specifier") |
| 84 | |
| 85 | return ParsedRequirement(name, url, extras, specifier, marker) |
| 86 | |
| 87 | |
| 88 | def _parse_requirement_details( |
no test coverage detected