extras_list = identifier (wsp* ',' wsp* identifier)*
(tokenizer: Tokenizer)
| 176 | |
| 177 | |
| 178 | def _parse_extras_list(tokenizer: Tokenizer) -> List[str]: |
| 179 | """ |
| 180 | extras_list = identifier (wsp* ',' wsp* identifier)* |
| 181 | """ |
| 182 | extras: List[str] = [] |
| 183 | |
| 184 | if not tokenizer.check("IDENTIFIER"): |
| 185 | return extras |
| 186 | |
| 187 | extras.append(tokenizer.read().text) |
| 188 | |
| 189 | while True: |
| 190 | tokenizer.consume("WS") |
| 191 | if tokenizer.check("IDENTIFIER", peek=True): |
| 192 | tokenizer.raise_syntax_error("Expected comma between extra names") |
| 193 | elif not tokenizer.check("COMMA"): |
| 194 | break |
| 195 | |
| 196 | tokenizer.read() |
| 197 | tokenizer.consume("WS") |
| 198 | |
| 199 | extra_token = tokenizer.expect("IDENTIFIER", expected="extra name after comma") |
| 200 | extras.append(extra_token.text) |
| 201 | |
| 202 | return extras |
| 203 | |
| 204 | |
| 205 | def _parse_specifier(tokenizer: Tokenizer) -> str: |
no test coverage detected