Parses a dotted name. A dotted name is a sequence of identifiers separated by a single dot.
(&mut self)
| 826 | /// |
| 827 | /// A dotted name is a sequence of identifiers separated by a single dot. |
| 828 | fn parse_dotted_name(&mut self) -> ast::Identifier { |
| 829 | let start = self.node_start(); |
| 830 | |
| 831 | let first = self.parse_identifier(); |
| 832 | if !self.at(TokenKind::Dot) { |
| 833 | return first; |
| 834 | } |
| 835 | |
| 836 | let snapshot = self.name_buffer.len(); |
| 837 | self.name_buffer.push_str(&first.id); |
| 838 | let mut progress = ParserProgress::default(); |
| 839 | |
| 840 | while self.eat(TokenKind::Dot) { |
| 841 | progress.assert_progressing(self); |
| 842 | |
| 843 | // test_err dotted_name_multiple_dots |
| 844 | // import a..b |
| 845 | // import a...b |
| 846 | self.name_buffer.push('.'); |
| 847 | let identifier = self.parse_identifier(); |
| 848 | self.name_buffer.push_str(&identifier.id); |
| 849 | } |
| 850 | |
| 851 | let id = self.name_interner.intern(&self.name_buffer[snapshot..]); |
| 852 | self.name_buffer.truncate(snapshot); |
| 853 | |
| 854 | // test_ok dotted_name_normalized_spaces |
| 855 | // import a.b.c |
| 856 | // import a . b . c |
| 857 | ast::Identifier { |
| 858 | id, |
| 859 | range: self.node_range(start), |
| 860 | node_index: AtomicNodeIndex::NONE, |
| 861 | } |
| 862 | } |
| 863 | |
| 864 | /// Parses a `pass` statement. |
| 865 | /// |
no test coverage detected