MCPcopy Create free account
hub / github.com/agenticsorg/lean-agentic / parse_structure

Method parse_structure

leanr-syntax/src/parser.rs:211–254  ·  view source on GitHub ↗

Parse structure declaration

(&mut self)

Source from the content-addressed store, hash-verified

209
210 /// Parse structure declaration
211 fn parse_structure(&mut self) -> crate::Result<StructureDecl> {
212 let start = self.expect(TokenKind::Structure)?.span;
213
214 let name = self.parse_ident()?;
215 let universe_params = self.parse_universe_params()?;
216 let params = self.parse_params()?;
217
218 let extends = Vec::new(); // TODO: Parse extends
219
220 self.expect(TokenKind::Where)?;
221
222 let mut fields = Vec::new();
223 while !self.is_eof() && !self.check(&TokenKind::RBrace) {
224 let field_name = self.parse_ident()?;
225 self.expect(TokenKind::Colon)?;
226 let field_type = Box::new(self.parse_expr()?);
227
228 fields.push(Field {
229 span: field_name.span.to(field_type.span()),
230 name: field_name,
231 type_: field_type,
232 });
233
234 if !self.check(&TokenKind::Comma) {
235 break;
236 }
237 self.advance();
238 }
239
240 let end = if let Some(last) = fields.last() {
241 last.span
242 } else {
243 name.span
244 };
245
246 Ok(StructureDecl {
247 span: start.to(end),
248 name,
249 universe_params,
250 params,
251 extends,
252 fields,
253 })
254 }
255
256 /// Parse universe parameters: .{u v}
257 fn parse_universe_params(&mut self) -> crate::Result<Vec<Ident>> {

Callers 1

parse_declMethod · 0.80

Calls 11

expectMethod · 0.80
parse_identMethod · 0.80
parse_universe_paramsMethod · 0.80
parse_paramsMethod · 0.80
parse_exprMethod · 0.80
toMethod · 0.80
spanMethod · 0.80
is_eofMethod · 0.45
checkMethod · 0.45
pushMethod · 0.45
advanceMethod · 0.45

Tested by

no test coverage detected