(self)
| 171 | return name, value |
| 172 | |
| 173 | def parse_enum(self) -> ProtoEnum: |
| 174 | start = self.current() |
| 175 | self.consume(TokenType.ENUM, "Expected 'enum'") |
| 176 | name = self.consume(TokenType.IDENT, "Expected enum name").value |
| 177 | self.consume(TokenType.LBRACE, "Expected '{' after enum name") |
| 178 | |
| 179 | values: List[ProtoEnumValue] = [] |
| 180 | options = {} |
| 181 | |
| 182 | while not self.check(TokenType.RBRACE): |
| 183 | if self.check(TokenType.OPTION): |
| 184 | opt_name, opt_value = self.parse_option_statement() |
| 185 | options[opt_name] = opt_value |
| 186 | elif self.check(TokenType.RESERVED): |
| 187 | self.parse_reserved() |
| 188 | else: |
| 189 | values.append(self.parse_enum_value()) |
| 190 | |
| 191 | self.consume(TokenType.RBRACE, "Expected '}' after enum") |
| 192 | return ProtoEnum( |
| 193 | name=name, |
| 194 | values=values, |
| 195 | options=options, |
| 196 | line=start.line, |
| 197 | column=start.column, |
| 198 | ) |
| 199 | |
| 200 | def parse_enum_value(self) -> ProtoEnumValue: |
| 201 | name_token = self.consume(TokenType.IDENT, "Expected enum value name") |
no test coverage detected