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

Method parse_lambda_params

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

Parse lambda parameters (simpler than def params)

(&mut self)

Source from the content-addressed store, hash-verified

369
370 /// Parse lambda parameters (simpler than def params)
371 fn parse_lambda_params(&mut self) -> crate::Result<Vec<Param>> {
372 let mut params = Vec::new();
373
374 loop {
375 if self.check(&TokenKind::FatArrow) {
376 break;
377 }
378
379 let implicit = self.check(&TokenKind::LBrace);
380
381 if implicit {
382 self.advance();
383 let name = self.parse_ident()?;
384 let type_ = if self.check(&TokenKind::Colon) {
385 self.advance();
386 Some(Box::new(self.parse_expr()?))
387 } else {
388 None
389 };
390 self.expect(TokenKind::RBrace)?;
391
392 params.push(Param {
393 span: name.span,
394 names: vec![name],
395 type_,
396 implicit: true,
397 });
398 } else if self.check(&TokenKind::LParen) {
399 self.advance();
400 let name = self.parse_ident()?;
401 let type_ = if self.check(&TokenKind::Colon) {
402 self.advance();
403 Some(Box::new(self.parse_expr()?))
404 } else {
405 None
406 };
407 self.expect(TokenKind::RParen)?;
408
409 params.push(Param {
410 span: name.span,
411 names: vec![name],
412 type_,
413 implicit: false,
414 });
415 } else {
416 // Simple name without parens
417 let name = self.parse_ident()?;
418 params.push(Param {
419 span: name.span,
420 names: vec![name],
421 type_: None,
422 implicit: false,
423 });
424 }
425 }
426
427 Ok(params)
428 }

Callers 1

parse_lambda_exprMethod · 0.80

Calls 6

parse_identMethod · 0.80
parse_exprMethod · 0.80
expectMethod · 0.80
checkMethod · 0.45
advanceMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected