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:
2026-02-14 09:28:20 +00:00
parent 6e3b35e68f
commit 25d59d6107
30 changed files with 8639 additions and 6536 deletions

View File

@@ -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,