# $schema: ./ast.schema.yaml # Top-level constructs CompilationUnit: children: - parent_mod - use_statements: rule: UseStatement vec: true - module_level_declarations: rule: ModuleLevelDeclaration vec: true ParentMod: children: - mod_kw: rule: Mod skip: true - fqn: rule: FullyQualifiedName UseStatement: children: - use_kw: rule: Use skip: true - prefixes: rule: UseStatementPrefix vec: true - suffix: rule: UseStatementSuffix UseStatementPrefix: children: - identifier UseStatementSuffix: rules: - Identifier - rule: Star build: UseStatementStarSuffix - UseList UseList: children: - identifiers: rule: Identifier vec: true # Level declarations ModuleLevelDeclaration: rules: - Module - Interface - Class - Function - PlatformFunction InterfaceLevelDeclaration: rules: - CompanionModule - Interface - Class - InterfaceFunction - InterfaceDefaultFunction - InterfaceOperatorFunction - InterfaceDefaultOperatorFunction ClassLevelDeclaration: children: - CompanionModule - Interface - Class - Function - OperatorFunction - PlatformFunction # Main organizational constructs Module: children: - is_public: rule: Pub build: type: boolean on: rule_present - mod_kw: rule: Mod skip: true - identifier: rule: Identifier - declarations: rule: ModuleLevelDeclaration vec: true - end_kw: rule: End skip: true CompanionModule: children: - companion_kw: rule: Companion skip: true - mod_kw: rule: Mod skip: true - declarations: rule: ModuleLevelDeclaration vec: true - end_kw: rule: End skip: true Interface: children: - is_public: rule: Pub build: type: boolean on: rule_present - int_kw: rule: IntKw skip: true - identifier - generic_parameters: build: or_else_default: true - implements_list: build: or_else_default: true - declarations: rule: InterfaceLevelDeclaration vec: true - end_kw: rule: End skip: true Class: children: - is_public: rule: Pub build: type: boolean on: rule_present - class_kw: rule: ClassKw skip: true - identifier - generic_parameters: build: or_else_default: true - class_constructor: build: or_else_default: true - implements_list: build: or_else_default: true - class_level_declarations: rule: ClassLevelDeclaration vec: true # Function constructs Function: children: - is_public: rule: Pub build: type: boolean on: rule_present - fn_kw: rule: Fn skip: true - generics: rule: GenericParameters - identifier - parameters - return_type: build: or_else: void - function_body OperatorFunction: children: - is_public: rule: Pub build: type: boolean on: rule_present - op_kw: rule: Op skip: true - generics: rule: GenericParameters build: or_else_default: true - operator - parameters - return_type: build: or_else: void - function_body PlatformFunction: children: - is_public: rule: Pub build: type: boolean on: rule_present - platform_kw: rule: Platform skip: true - fn_kw: rule: Fn skip: true - generics: rule: GenericParameters build: or_else_default: true - identifier - parameters - return_type InterfaceFunction: children: - fn_kw: rule: Fn skip: true - generics: rule: GenericParameters build: or_else_default: true - identifier - parameters - return_type InterfaceDefaultFunction: children: - def_kw: rule: Def skip: true - fn_kw: rule: Fn skip: true - generics: rule: GenericParameters build: or_else_default: true - identifier - parameters - return_type: build: or_else: void - function_body InterfaceOperatorFunction: children: - op_kw: rule: Op skip: true - generics: rule: GenericParameters build: or_else_default: true - operator - parameters - return_type InterfaceDefaultOperatorFunction: children: - def_kw: rule: Def skip: true - op_kw: rule: Op skip: true - generics: rule: GenericParameters build: or_else_default: true - operator - parameters - return_type: build: or_else: void - function_body # Function Bodies FunctionBody: rules: - FunctionAliasBody - FunctionEqualsBody - FunctionBlockBody FunctionEqualsBody: children: - expression FunctionAliasBody: children: - alias_kw: rule: Alias skip: true - identifier FunctionBlockBody: children: - statements: rule: Statement vec: true - end_kw: rule: End skip: true # Class constructs ClassConstructor: children: - members: rule: Member vec: true Member: children: - is_public: rule: Pub build: type: boolean on: rule_present - is_mut: rule: Mut build: type: boolean on: rule_present - identifier - type_use