replace def = value with def: value, and let a = b with a = b

in the name of terseness

i'm also slipping in a new brush preset that i made

closes #125
This commit is contained in:
りき萌 2025-06-30 23:54:50 +02:00
parent 8fcf71661e
commit 9de4a8aecd
5 changed files with 67 additions and 45 deletions

View file

@ -306,7 +306,7 @@ enum Tighter {
fn tighter(left: TokenKind, right: TokenKind) -> Tighter {
fn tightness(kind: TokenKind) -> Option<usize> {
match kind {
TokenKind::Equal => Some(0),
TokenKind::Equal | TokenKind::Colon => Some(0),
TokenKind::EqualEqual
| TokenKind::NotEqual
| TokenKind::Less
@ -590,7 +590,6 @@ const PREFIX_TOKENS: TokenKindSet = TokenKindSet::new(&[
TokenKind::LParen,
TokenKind::Backslash,
TokenKind::If,
TokenKind::Let,
TokenKind::LBrack,
]);
@ -606,7 +605,6 @@ fn prefix(p: &mut Parser) -> Closed {
TokenKind::LParen => paren(p),
TokenKind::Backslash => lambda(p),
TokenKind::If => if_expr(p),
TokenKind::Let => let_expr(p),
_ => {
assert!(
@ -637,7 +635,9 @@ fn infix(p: &mut Parser, op: TokenKind) -> NodeKind {
| TokenKind::LessEqual
| TokenKind::Greater
| TokenKind::GreaterEqual
| TokenKind::Equal => infix_binary(p, op),
| TokenKind::Colon => infix_binary(p, op),
TokenKind::Equal => infix_let(p, op),
_ if PREFIX_TOKENS.contains(op) => infix_call(p),
@ -666,6 +666,31 @@ fn infix_call(p: &mut Parser) -> NodeKind {
NodeKind::Call
}
fn infix_let(p: &mut Parser, op: TokenKind) -> NodeKind {
p.advance();
if p.peek() == TokenKind::Newline {
p.advance();
}
precedence_parse(p, op);
if p.peek() == TokenKind::Newline {
p.advance();
} else {
let span = p.span();
p.emit(Diagnostic::error(
span,
"new line expected after variable definition `a = b`",
));
p.advance_with_error();
}
expr(p);
NodeKind::Let
}
pub fn expr(p: &mut Parser) {
precedence_parse(p, TokenKind::Eof)
}