feat(type-system): implement concept_comparison with pattern matching
Added complete support for the new type system syntax including: - concept: Base type declarations - sub_concept: Enum and record sub-type definitions - concept_comparison: Compile-time pattern matching with conditional guards Parser changes: - Added VariantPattern, FieldCondition, and Condition AST nodes - Implemented "is" keyword for pattern matching (e.g., "CupType is Glass or CupType is Plastic") - Added Value::Any variant to support universal type matching - Disambiguated enum-like vs record-like sub_concept syntax LSP updates: - Added Value::Any match arms across code_actions, completion, hover, inlay_hints, and semantic_tokens - Type inference and formatting support for Any values Example fixes: - Fixed syntax error in baker-family behaviors (missing closing brace in nested if) - Removed deprecated core_enums.sb file
This commit is contained in:
@@ -29,7 +29,7 @@ behavior PrepKitchen {
|
||||
}
|
||||
|
||||
// type
|
||||
concept Vendor;
|
||||
concept Vendor
|
||||
|
||||
// type
|
||||
sub_concept VendorInventory {
|
||||
@@ -40,17 +40,17 @@ sub_concept VendorInventory {
|
||||
}
|
||||
|
||||
// type (but really just an enum lol)
|
||||
concept Cup;
|
||||
concept Cup
|
||||
|
||||
// enum
|
||||
sub_concept CupSize: {
|
||||
sub_concept CupSize {
|
||||
Small,
|
||||
Medium,
|
||||
Large
|
||||
}
|
||||
|
||||
// enum
|
||||
sub_concept CupType: {
|
||||
sub_concept CupType {
|
||||
Ceramic,
|
||||
Glass,
|
||||
Plastic
|
||||
@@ -83,7 +83,7 @@ concept_comparison CustomerInterestInCups {
|
||||
}
|
||||
|
||||
// type
|
||||
concept Plate;
|
||||
concept Plate
|
||||
|
||||
// enum
|
||||
sub_concept PlateColor {
|
||||
@@ -93,7 +93,7 @@ sub_concept PlateColor {
|
||||
}
|
||||
|
||||
// type
|
||||
concept Customer;
|
||||
concept Customer
|
||||
|
||||
// enum
|
||||
sub_concept CustomerInterest {
|
||||
@@ -113,9 +113,10 @@ behavior SellAtMarket {
|
||||
make_sale(Cup)
|
||||
}
|
||||
if(CustomerInterestInCups.Interested.CupSize is Small and CustomerInterestInCups.Interested.CupType is Ceramic and CustomerInterestInCups.Interested.CupColor is Green) {
|
||||
if (Plate.PlateColor is Blue or PlateColor is Green) {
|
||||
// variadic arguments
|
||||
make_sale(Cup, Plate)
|
||||
if (Plate.PlateColor is Blue or PlateColor is Green) {
|
||||
// variadic arguments
|
||||
make_sale(Cup, Plate)
|
||||
}
|
||||
}
|
||||
// or there can be generic fallthroughs too
|
||||
thank_customer
|
||||
@@ -144,7 +145,7 @@ behavior QuickPrep {
|
||||
}
|
||||
}
|
||||
|
||||
concept Hunger;
|
||||
concept Hunger
|
||||
|
||||
sub_concept HungerState {
|
||||
Hungry,
|
||||
|
||||
Reference in New Issue
Block a user