Skip to content

Commit c70bd25

Browse files
committed
Fix parser: system blocks, guidance decls, for each, block-level if, with filter, wildcard types; bump to 0.1.6
1 parent 6a0926a commit c70bd25

10 files changed

Lines changed: 554 additions & 9 deletions

File tree

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ resolver = "2"
33
members = ["crates/allium-parser", "crates/allium"]
44

55
[workspace.package]
6-
version = "0.1.5"
6+
version = "0.1.6"
77
edition = "2021"
88
license = "MIT"
99
repository = "https://github.com/juxt/allium-tools"

crates/allium-parser/src/ast.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub enum Decl {
3232
Use(UseDecl),
3333
ModuleDecl(ModuleDecl),
3434
Block(BlockDecl),
35+
Guidance(GuidanceDecl),
3536
Default(DefaultDecl),
3637
Variant(VariantDecl),
3738
Deferred(DeferredDecl),
@@ -74,6 +75,7 @@ pub enum BlockKind {
7475
Rule,
7576
Surface,
7677
Actor,
78+
System,
7779
}
7880

7981
/// `default [Type] name = value`
@@ -101,6 +103,13 @@ pub struct DeferredDecl {
101103
pub path: Expr,
102104
}
103105

106+
/// `guidance: value` at module level
107+
#[derive(Debug, Clone)]
108+
pub struct GuidanceDecl {
109+
pub span: Span,
110+
pub value: Expr,
111+
}
112+
104113
/// `open question "text"`
105114
#[derive(Debug, Clone)]
106115
pub struct OpenQuestionDecl {
@@ -141,6 +150,11 @@ pub enum BlockItemKind {
141150
filter: Option<Expr>,
142151
items: Vec<BlockItem>,
143152
},
153+
/// `if condition: ... else if ...: ... else: ...` at block level
154+
IfBlock {
155+
branches: Vec<CondBlockBranch>,
156+
else_items: Option<Vec<BlockItem>>,
157+
},
144158
/// `open question "text"` (nested within a block)
145159
OpenQuestion { text: StringLiteral },
146160
}
@@ -462,6 +476,14 @@ pub struct CondBranch {
462476
pub body: Expr,
463477
}
464478

479+
/// A branch of a block-level `if`/`else if` chain.
480+
#[derive(Debug, Clone)]
481+
pub struct CondBlockBranch {
482+
pub span: Span,
483+
pub condition: Expr,
484+
pub items: Vec<BlockItem>,
485+
}
486+
465487
// ---------------------------------------------------------------------------
466488
// Shared types
467489
// ---------------------------------------------------------------------------

crates/allium-parser/src/lexer.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub enum TokenKind {
3333
Use,
3434
As,
3535
Module,
36+
System,
3637

3738
// Clause / expression keywords
3839
When,
@@ -126,6 +127,7 @@ impl std::fmt::Display for TokenKind {
126127
TokenKind::Use => write!(f, "'use'"),
127128
TokenKind::As => write!(f, "'as'"),
128129
TokenKind::Module => write!(f, "'module'"),
130+
TokenKind::System => write!(f, "'system'"),
129131
TokenKind::When => write!(f, "'when'"),
130132
TokenKind::Requires => write!(f, "'requires'"),
131133
TokenKind::Ensures => write!(f, "'ensures'"),
@@ -206,6 +208,7 @@ impl TokenKind {
206208
| TokenKind::Use
207209
| TokenKind::As
208210
| TokenKind::Module
211+
| TokenKind::System
209212
| TokenKind::When
210213
| TokenKind::Requires
211214
| TokenKind::Ensures
@@ -564,6 +567,7 @@ fn classify_keyword(text: &str) -> TokenKind {
564567
"use" => TokenKind::Use,
565568
"as" => TokenKind::As,
566569
"module" => TokenKind::Module,
570+
"system" => TokenKind::System,
567571
"when" => TokenKind::When,
568572
"requires" => TokenKind::Requires,
569573
"ensures" => TokenKind::Ensures,

0 commit comments

Comments
 (0)