(self)
| 344 | |
| 345 | @memoize |
| 346 | def named_item(self) -> Optional[NamedItem]: |
| 347 | # named_item: NAME annotation '=' ~ item | NAME '=' ~ item | item | forced_atom | lookahead |
| 348 | mark = self._mark() |
| 349 | cut = False |
| 350 | if ( |
| 351 | (name := self.name()) |
| 352 | and |
| 353 | (annotation := self.annotation()) |
| 354 | and |
| 355 | (literal := self.expect('=')) |
| 356 | and |
| 357 | (cut := True) |
| 358 | and |
| 359 | (item := self.item()) |
| 360 | ): |
| 361 | return NamedItem ( name . string , item , annotation ) |
| 362 | self._reset(mark) |
| 363 | if cut: return None |
| 364 | cut = False |
| 365 | if ( |
| 366 | (name := self.name()) |
| 367 | and |
| 368 | (literal := self.expect('=')) |
| 369 | and |
| 370 | (cut := True) |
| 371 | and |
| 372 | (item := self.item()) |
| 373 | ): |
| 374 | return NamedItem ( name . string , item ) |
| 375 | self._reset(mark) |
| 376 | if cut: return None |
| 377 | if ( |
| 378 | (item := self.item()) |
| 379 | ): |
| 380 | return NamedItem ( None , item ) |
| 381 | self._reset(mark) |
| 382 | if ( |
| 383 | (forced := self.forced_atom()) |
| 384 | ): |
| 385 | return NamedItem ( None , forced ) |
| 386 | self._reset(mark) |
| 387 | if ( |
| 388 | (it := self.lookahead()) |
| 389 | ): |
| 390 | return NamedItem ( None , it ) |
| 391 | self._reset(mark) |
| 392 | return None |
| 393 | |
| 394 | @memoize |
| 395 | def forced_atom(self) -> Optional[Forced]: |
no test coverage detected