feat(lang): rename concept_comparison to definition (v0.3.2)
Renames the `concept_comparison` keyword to `definition` across the entire codebase for better readability and conciseness. Changes: - Tree-sitter grammar: `concept_comparison` node → `definition` - Tree-sitter queries: highlights, outline, and indents updated - Zed extension highlights.scm updated to match - Lexer: `Token::ConceptComparison` → `Token::Definition` - Parser: `ConceptComparisonDecl` rule → `DefinitionDecl` - AST: `Declaration::ConceptComparison` → `Declaration::Definition`, `ConceptComparisonDecl` struct → `DefinitionDecl` - All Rust source files updated (validate, names, convert, references, semantic_tokens, symbols, code_actions, hover, completion) - `validate_concept_comparison_patterns` → `validate_definition_patterns` - Example file and test corpus updated - Spec docs: created SBIR-v0.3.2-SPEC.md, updated TYPE-SYSTEM.md, README.md, SBIR-CHANGELOG.md, SBIR-v0.3.1-SPEC.md
This commit is contained in:
@@ -1701,7 +1701,7 @@ fn get_declaration_name(decl: &crate::syntax::ast::Declaration) -> String {
|
||||
| Declaration::Use(_) => "use".to_string(),
|
||||
| Declaration::Concept(c) => c.name.clone(),
|
||||
| Declaration::SubConcept(sc) => sc.name.clone(),
|
||||
| Declaration::ConceptComparison(cc) => cc.name.clone(),
|
||||
| Declaration::Definition(cc) => cc.name.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1721,7 +1721,7 @@ fn get_declaration_type_name(decl: &crate::syntax::ast::Declaration) -> &'static
|
||||
| Declaration::Use(_) => "Use",
|
||||
| Declaration::Concept(_) => "Concept",
|
||||
| Declaration::SubConcept(_) => "Sub Concept",
|
||||
| Declaration::ConceptComparison(_) => "Concept Comparison",
|
||||
| Declaration::Definition(_) => "Definition",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1954,7 +1954,7 @@ fn get_declaration_span(decl: &crate::syntax::ast::Declaration) -> Span {
|
||||
| Declaration::Use(u) => u.span.clone(),
|
||||
| Declaration::Concept(c) => c.span.clone(),
|
||||
| Declaration::SubConcept(sc) => sc.span.clone(),
|
||||
| Declaration::ConceptComparison(cc) => cc.span.clone(),
|
||||
| Declaration::Definition(cc) => cc.span.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -685,7 +685,7 @@ fn top_level_keyword_completions() -> Vec<CompletionItem> {
|
||||
keyword_item("use", "Import declarations", "use ${1:path::to::item};"),
|
||||
keyword_item("concept", "Define an algebraic data type", "concept ${1:Name};"),
|
||||
keyword_item("sub_concept", "Define a sub-type", "sub_concept ${1:Parent}.${2:Name} {\n $0\n}"),
|
||||
keyword_item("concept_comparison", "Pattern match on concepts", "concept_comparison ${1:Name} {\n $0\n}"),
|
||||
keyword_item("definition", "Pattern match on concepts", "definition ${1:Name} {\n $0\n}"),
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@@ -269,8 +269,8 @@ character Bob {}"#;
|
||||
"Should have sub_concept keyword"
|
||||
);
|
||||
assert!(
|
||||
items.iter().any(|item| item.label == "concept_comparison"),
|
||||
"Should have concept_comparison keyword"
|
||||
items.iter().any(|item| item.label == "definition"),
|
||||
"Should have definition keyword"
|
||||
);
|
||||
|
||||
// Check snippets have correct format
|
||||
|
||||
@@ -177,9 +177,7 @@ fn get_declaration_name(decl: &Declaration) -> Option<String> {
|
||||
| Declaration::Schedule(s) => Some(s.name.clone()),
|
||||
| Declaration::Behavior(b) => Some(b.name.clone()),
|
||||
| Declaration::Use(_) => None,
|
||||
| Declaration::Concept(_) |
|
||||
Declaration::SubConcept(_) |
|
||||
Declaration::ConceptComparison(_) => None, // TODO: Implement hover for type system
|
||||
| Declaration::Concept(_) | Declaration::SubConcept(_) | Declaration::Definition(_) => None, /* TODO: Implement hover for type system */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +196,7 @@ fn format_declaration_hover(decl: &Declaration, _kind: &DeclKind) -> Hover {
|
||||
| Declaration::Use(_) => "**use** declaration".to_string(),
|
||||
| Declaration::Concept(_) => "**concept** declaration".to_string(),
|
||||
| Declaration::SubConcept(_) => "**sub_concept** declaration".to_string(),
|
||||
| Declaration::ConceptComparison(_) => "**concept_comparison** declaration".to_string(),
|
||||
| Declaration::Definition(_) => "**definition** declaration".to_string(),
|
||||
};
|
||||
|
||||
Hover {
|
||||
|
||||
@@ -453,7 +453,7 @@ pub fn get_semantic_tokens(doc: &Document) -> Option<SemanticTokensResult> {
|
||||
},
|
||||
}
|
||||
},
|
||||
| Declaration::ConceptComparison(comparison) => {
|
||||
| Declaration::Definition(comparison) => {
|
||||
// Highlight comparison name as TYPE
|
||||
builder.add_token(
|
||||
comparison.span.start_line,
|
||||
|
||||
@@ -109,9 +109,9 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_concept_comparison_semantic_tokens() {
|
||||
fn test_definition_semantic_tokens() {
|
||||
// LALRPOP parser: FieldCondition uses simple Ident, not dotted path
|
||||
let source = r#"concept_comparison BakeryType {
|
||||
let source = r#"definition BakeryType {
|
||||
Bakery: {
|
||||
Size: any
|
||||
},
|
||||
|
||||
@@ -90,9 +90,9 @@ fn extract_declaration_symbol(
|
||||
extract_field_symbols(&s.fields, positions),
|
||||
),
|
||||
| Declaration::Use(_) => return None, // Use statements don't create symbols
|
||||
| Declaration::Concept(_) |
|
||||
Declaration::SubConcept(_) |
|
||||
Declaration::ConceptComparison(_) => return None, // TODO: Implement symbols for type system
|
||||
| Declaration::Concept(_) | Declaration::SubConcept(_) | Declaration::Definition(_) => {
|
||||
return None
|
||||
}, // TODO: Implement symbols for type system
|
||||
};
|
||||
|
||||
let (start_line, start_col) = positions.offset_to_position(span.start);
|
||||
|
||||
@@ -97,7 +97,7 @@ pub fn convert_file_with_all_files(
|
||||
},
|
||||
| ast::Declaration::Concept(_) |
|
||||
ast::Declaration::SubConcept(_) |
|
||||
ast::Declaration::ConceptComparison(_) => {
|
||||
ast::Declaration::Definition(_) => {
|
||||
// TODO: Implement conversion for type system declarations
|
||||
},
|
||||
}
|
||||
|
||||
@@ -139,8 +139,8 @@ impl NameTable {
|
||||
| Declaration::Species(s) => (s.name.clone(), DeclKind::Species, s.span.clone()),
|
||||
| Declaration::Concept(_) |
|
||||
Declaration::SubConcept(_) |
|
||||
Declaration::ConceptComparison(_) => continue, /* TODO: Implement name resolution
|
||||
* for type system */
|
||||
Declaration::Definition(_) => continue, /* TODO: Implement name resolution
|
||||
* for type system */
|
||||
};
|
||||
|
||||
// For now, qualified path is just the name
|
||||
|
||||
@@ -186,9 +186,7 @@ fn find_references_in_declaration(
|
||||
| Declaration::Use(_) => {
|
||||
// Use statements are handled separately
|
||||
},
|
||||
| Declaration::Concept(_) |
|
||||
Declaration::SubConcept(_) |
|
||||
Declaration::ConceptComparison(_) => {
|
||||
| Declaration::Concept(_) | Declaration::SubConcept(_) | Declaration::Definition(_) => {
|
||||
// TODO: Implement reference finding for type system
|
||||
},
|
||||
}
|
||||
|
||||
@@ -542,30 +542,27 @@ pub fn validate_species_type_invariance(file: &File, collector: &mut ErrorCollec
|
||||
}
|
||||
}
|
||||
|
||||
/// Validate concept_comparison patterns against the concept registry
|
||||
/// Validate definition patterns against the concept registry
|
||||
///
|
||||
/// Checks:
|
||||
/// 1. The concept_comparison name references an existing concept
|
||||
/// 1. The definition name references an existing concept
|
||||
/// 2. All variant names in patterns exist in the concept's enum sub-concepts
|
||||
/// 3. Patterns are exhaustive (all variants are covered)
|
||||
pub fn validate_concept_comparison_patterns(
|
||||
pub fn validate_definition_patterns(
|
||||
file: &File,
|
||||
registry: &crate::resolve::types::ConceptRegistry,
|
||||
collector: &mut ErrorCollector,
|
||||
) {
|
||||
for decl in &file.declarations {
|
||||
if let Declaration::ConceptComparison(comp) = decl {
|
||||
if let Declaration::Definition(comp) = decl {
|
||||
// Check that the concept exists
|
||||
let concept = match registry.lookup_concept(&comp.name) {
|
||||
| Some(c) => c,
|
||||
| None => {
|
||||
collector.add(ResolveError::ValidationError {
|
||||
message: format!(
|
||||
"Concept '{}' not found for concept_comparison",
|
||||
comp.name
|
||||
),
|
||||
message: format!("Concept '{}' not found for definition", comp.name),
|
||||
help: Some(format!(
|
||||
"Add 'concept {}' before defining a concept_comparison for it.",
|
||||
"Add 'concept {}' before defining a definition for it.",
|
||||
comp.name
|
||||
)),
|
||||
});
|
||||
@@ -646,7 +643,7 @@ pub fn validate_concept_comparison_patterns(
|
||||
sorted.sort();
|
||||
collector.add(ResolveError::ValidationError {
|
||||
message: format!(
|
||||
"concept_comparison '{}' is not exhaustive: missing variants {}",
|
||||
"definition '{}' is not exhaustive: missing variants {}",
|
||||
comp.name,
|
||||
sorted
|
||||
.iter()
|
||||
@@ -680,7 +677,7 @@ pub fn validate_file(file: &File, action_registry: &HashSet<String>) -> Result<(
|
||||
validate_sub_concept_parents(file, &mut collector);
|
||||
validate_species_type_invariance(file, &mut collector);
|
||||
let concept_registry = crate::resolve::types::ConceptRegistry::from_file(file);
|
||||
validate_concept_comparison_patterns(file, &concept_registry, &mut collector);
|
||||
validate_definition_patterns(file, &concept_registry, &mut collector);
|
||||
|
||||
for decl in &file.declarations {
|
||||
match decl {
|
||||
@@ -1189,7 +1186,7 @@ mod tests {
|
||||
|
||||
use crate::resolve::types::ConceptRegistry;
|
||||
|
||||
fn make_concept_comparison_file() -> File {
|
||||
fn make_definition_file() -> File {
|
||||
File {
|
||||
declarations: vec![
|
||||
Declaration::Concept(ConceptDecl {
|
||||
@@ -1213,10 +1210,10 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_concept_comparison_valid_exhaustive() {
|
||||
let mut file = make_concept_comparison_file();
|
||||
fn test_definition_valid_exhaustive() {
|
||||
let mut file = make_definition_file();
|
||||
file.declarations
|
||||
.push(Declaration::ConceptComparison(ConceptComparisonDecl {
|
||||
.push(Declaration::Definition(DefinitionDecl {
|
||||
name: "Cup".to_string(),
|
||||
variants: vec![
|
||||
VariantPattern {
|
||||
@@ -1240,15 +1237,15 @@ mod tests {
|
||||
|
||||
let registry = ConceptRegistry::from_file(&file);
|
||||
let mut collector = ErrorCollector::new();
|
||||
validate_concept_comparison_patterns(&file, ®istry, &mut collector);
|
||||
validate_definition_patterns(&file, ®istry, &mut collector);
|
||||
assert!(!collector.has_errors());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_concept_comparison_not_exhaustive() {
|
||||
let mut file = make_concept_comparison_file();
|
||||
fn test_definition_not_exhaustive() {
|
||||
let mut file = make_definition_file();
|
||||
file.declarations
|
||||
.push(Declaration::ConceptComparison(ConceptComparisonDecl {
|
||||
.push(Declaration::Definition(DefinitionDecl {
|
||||
name: "Cup".to_string(),
|
||||
variants: vec![
|
||||
VariantPattern {
|
||||
@@ -1263,15 +1260,15 @@ mod tests {
|
||||
|
||||
let registry = ConceptRegistry::from_file(&file);
|
||||
let mut collector = ErrorCollector::new();
|
||||
validate_concept_comparison_patterns(&file, ®istry, &mut collector);
|
||||
validate_definition_patterns(&file, ®istry, &mut collector);
|
||||
assert!(collector.has_errors());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_concept_comparison_unknown_variant() {
|
||||
let mut file = make_concept_comparison_file();
|
||||
fn test_definition_unknown_variant() {
|
||||
let mut file = make_definition_file();
|
||||
file.declarations
|
||||
.push(Declaration::ConceptComparison(ConceptComparisonDecl {
|
||||
.push(Declaration::Definition(DefinitionDecl {
|
||||
name: "Cup".to_string(),
|
||||
variants: vec![
|
||||
VariantPattern {
|
||||
@@ -1300,14 +1297,14 @@ mod tests {
|
||||
|
||||
let registry = ConceptRegistry::from_file(&file);
|
||||
let mut collector = ErrorCollector::new();
|
||||
validate_concept_comparison_patterns(&file, ®istry, &mut collector);
|
||||
validate_definition_patterns(&file, ®istry, &mut collector);
|
||||
assert!(collector.has_errors());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_concept_comparison_missing_concept() {
|
||||
fn test_definition_missing_concept() {
|
||||
let file = File {
|
||||
declarations: vec![Declaration::ConceptComparison(ConceptComparisonDecl {
|
||||
declarations: vec![Declaration::Definition(DefinitionDecl {
|
||||
name: "NonExistent".to_string(),
|
||||
variants: vec![],
|
||||
span: Span::new(0, 100),
|
||||
@@ -1316,15 +1313,15 @@ mod tests {
|
||||
|
||||
let registry = ConceptRegistry::from_file(&file);
|
||||
let mut collector = ErrorCollector::new();
|
||||
validate_concept_comparison_patterns(&file, ®istry, &mut collector);
|
||||
validate_definition_patterns(&file, ®istry, &mut collector);
|
||||
assert!(collector.has_errors());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_concept_comparison_with_field_conditions() {
|
||||
let mut file = make_concept_comparison_file();
|
||||
fn test_definition_with_field_conditions() {
|
||||
let mut file = make_definition_file();
|
||||
file.declarations
|
||||
.push(Declaration::ConceptComparison(ConceptComparisonDecl {
|
||||
.push(Declaration::Definition(DefinitionDecl {
|
||||
name: "Cup".to_string(),
|
||||
variants: vec![
|
||||
VariantPattern {
|
||||
@@ -1356,7 +1353,7 @@ mod tests {
|
||||
|
||||
let registry = ConceptRegistry::from_file(&file);
|
||||
let mut collector = ErrorCollector::new();
|
||||
validate_concept_comparison_patterns(&file, ®istry, &mut collector);
|
||||
validate_definition_patterns(&file, ®istry, &mut collector);
|
||||
assert!(!collector.has_errors());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ pub enum Declaration {
|
||||
Species(Species),
|
||||
Concept(ConceptDecl),
|
||||
SubConcept(SubConceptDecl),
|
||||
ConceptComparison(ConceptComparisonDecl),
|
||||
Definition(DefinitionDecl),
|
||||
}
|
||||
|
||||
/// Use statement for importing definitions
|
||||
@@ -442,9 +442,9 @@ pub enum SubConceptKind {
|
||||
Record { fields: Vec<Field> },
|
||||
}
|
||||
|
||||
/// Concept comparison - compile-time pattern matching for concept variants
|
||||
/// Definition - compile-time pattern matching for concept variants
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct ConceptComparisonDecl {
|
||||
pub struct DefinitionDecl {
|
||||
pub name: String,
|
||||
pub variants: Vec<VariantPattern>,
|
||||
pub span: Span,
|
||||
|
||||
@@ -34,8 +34,8 @@ pub enum Token {
|
||||
Concept,
|
||||
#[token("sub_concept")]
|
||||
SubConcept,
|
||||
#[token("concept_comparison")]
|
||||
ConceptComparison,
|
||||
#[token("definition")]
|
||||
Definition,
|
||||
#[token("any")]
|
||||
Any,
|
||||
#[token("requires")]
|
||||
@@ -521,7 +521,7 @@ Second prose block content.
|
||||
|
||||
#[test]
|
||||
fn test_type_system_keywords() {
|
||||
let input = "concept sub_concept concept_comparison any";
|
||||
let input = "concept sub_concept definition any";
|
||||
let lexer = Lexer::new(input);
|
||||
let tokens: Vec<Token> = lexer.map(|(_, tok, _)| tok).collect();
|
||||
|
||||
@@ -530,7 +530,7 @@ Second prose block content.
|
||||
vec![
|
||||
Token::Concept,
|
||||
Token::SubConcept,
|
||||
Token::ConceptComparison,
|
||||
Token::Definition,
|
||||
Token::Any,
|
||||
]
|
||||
);
|
||||
|
||||
@@ -22,7 +22,7 @@ Declaration: Declaration = {
|
||||
<sp:Species> => Declaration::Species(sp),
|
||||
<concept:ConceptDecl> => Declaration::Concept(concept),
|
||||
<sub:SubConceptDecl> => Declaration::SubConcept(sub),
|
||||
<comp:ConceptComparisonDecl> => Declaration::ConceptComparison(comp),
|
||||
<comp:DefinitionDecl> => Declaration::Definition(comp),
|
||||
};
|
||||
|
||||
// ===== Use declarations =====
|
||||
@@ -803,8 +803,8 @@ SubConceptDecl: SubConceptDecl = {
|
||||
},
|
||||
};
|
||||
|
||||
ConceptComparisonDecl: ConceptComparisonDecl = {
|
||||
<start:@L> "concept_comparison" <name:Ident> "{" <variants:Comma<VariantPattern>> "}" <end:@R> => ConceptComparisonDecl {
|
||||
DefinitionDecl: DefinitionDecl = {
|
||||
<start:@L> "definition" <name:Ident> "{" <variants:Comma<VariantPattern>> "}" <end:@R> => DefinitionDecl {
|
||||
name,
|
||||
variants,
|
||||
span: Span::new(start, end),
|
||||
@@ -976,7 +976,7 @@ extern {
|
||||
"species" => Token::Species,
|
||||
"concept" => Token::Concept,
|
||||
"sub_concept" => Token::SubConcept,
|
||||
"concept_comparison" => Token::ConceptComparison,
|
||||
"definition" => Token::Definition,
|
||||
"any" => Token::Any,
|
||||
"requires" => Token::Requires,
|
||||
"state" => Token::State,
|
||||
|
||||
@@ -75,7 +75,7 @@ mod __parse__File {
|
||||
Variant45(Vec<String>),
|
||||
Variant46(Vec<Value>),
|
||||
Variant47(Vec<VariantPattern>),
|
||||
Variant48(ConceptComparisonDecl),
|
||||
Variant48(DefinitionDecl),
|
||||
Variant49(ConceptDecl),
|
||||
Variant50(Declaration),
|
||||
Variant51(alloc::vec::Vec<Declaration>),
|
||||
@@ -2734,7 +2734,7 @@ mod __parse__File {
|
||||
r###""species""###,
|
||||
r###""concept""###,
|
||||
r###""sub_concept""###,
|
||||
r###""concept_comparison""###,
|
||||
r###""definition""###,
|
||||
r###""any""###,
|
||||
r###""requires""###,
|
||||
r###""state""###,
|
||||
@@ -2949,7 +2949,7 @@ mod __parse__File {
|
||||
Token::Species if true => Some(9),
|
||||
Token::Concept if true => Some(10),
|
||||
Token::SubConcept if true => Some(11),
|
||||
Token::ConceptComparison if true => Some(12),
|
||||
Token::Definition if true => Some(12),
|
||||
Token::Any if true => Some(13),
|
||||
Token::Requires if true => Some(14),
|
||||
Token::State if true => Some(15),
|
||||
@@ -6674,7 +6674,7 @@ mod __parse__File {
|
||||
fn __pop_Variant48<
|
||||
>(
|
||||
__symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>
|
||||
) -> (usize, ConceptComparisonDecl, usize)
|
||||
) -> (usize, DefinitionDecl, usize)
|
||||
{
|
||||
match __symbols.pop() {
|
||||
Some((__l, __Symbol::Variant48(__v), __r)) => (__l, __v, __r),
|
||||
@@ -9948,7 +9948,7 @@ mod __parse__File {
|
||||
_: core::marker::PhantomData<()>,
|
||||
) -> (usize, usize)
|
||||
{
|
||||
// ConceptComparisonDecl = "concept_comparison", Ident, "{", Comma<VariantPattern>, "}" => ActionFn(418);
|
||||
// DefinitionDecl = "definition", Ident, "{", Comma<VariantPattern>, "}" => ActionFn(418);
|
||||
assert!(__symbols.len() >= 5);
|
||||
let __sym4 = __pop_Variant0(__symbols);
|
||||
let __sym3 = __pop_Variant47(__symbols);
|
||||
@@ -10225,7 +10225,7 @@ mod __parse__File {
|
||||
_: core::marker::PhantomData<()>,
|
||||
) -> (usize, usize)
|
||||
{
|
||||
// Declaration = ConceptComparisonDecl => ActionFn(14);
|
||||
// Declaration = DefinitionDecl => ActionFn(14);
|
||||
let __sym0 = __pop_Variant48(__symbols);
|
||||
let __start = __sym0.0;
|
||||
let __end = __sym0.2;
|
||||
@@ -13896,8 +13896,8 @@ fn __action13((_, sub, _): (usize, SubConceptDecl, usize)) -> Declaration {
|
||||
clippy::needless_lifetimes,
|
||||
clippy::just_underscores_and_digits
|
||||
)]
|
||||
fn __action14((_, comp, _): (usize, ConceptComparisonDecl, usize)) -> Declaration {
|
||||
Declaration::ConceptComparison(comp)
|
||||
fn __action14((_, comp, _): (usize, DefinitionDecl, usize)) -> Declaration {
|
||||
Declaration::Definition(comp)
|
||||
}
|
||||
|
||||
#[allow(
|
||||
@@ -15888,8 +15888,8 @@ fn __action138(
|
||||
(_, variants, _): (usize, Vec<VariantPattern>, usize),
|
||||
(_, _, _): (usize, Token, usize),
|
||||
(_, end, _): (usize, usize, usize),
|
||||
) -> ConceptComparisonDecl {
|
||||
ConceptComparisonDecl {
|
||||
) -> DefinitionDecl {
|
||||
DefinitionDecl {
|
||||
name,
|
||||
variants,
|
||||
span: Span::new(start, end),
|
||||
@@ -19031,7 +19031,7 @@ fn __action374(
|
||||
__3: (usize, Vec<VariantPattern>, usize),
|
||||
__4: (usize, Token, usize),
|
||||
__5: (usize, usize, usize),
|
||||
) -> ConceptComparisonDecl {
|
||||
) -> DefinitionDecl {
|
||||
let __start0 = __0.0;
|
||||
let __end0 = __0.0;
|
||||
let __temp0 = __action228(&__start0, &__end0);
|
||||
@@ -19945,7 +19945,7 @@ fn __action418(
|
||||
__2: (usize, Token, usize),
|
||||
__3: (usize, Vec<VariantPattern>, usize),
|
||||
__4: (usize, Token, usize),
|
||||
) -> ConceptComparisonDecl {
|
||||
) -> DefinitionDecl {
|
||||
let __start0 = __4.2;
|
||||
let __end0 = __4.2;
|
||||
let __temp0 = __action227(&__start0, &__end0);
|
||||
|
||||
@@ -61,7 +61,7 @@ fn valid_ident() -> impl Strategy<Value = String> {
|
||||
// Type system keywords (v0.3.0)
|
||||
"concept" |
|
||||
"sub_concept" |
|
||||
"concept_comparison" |
|
||||
"definition" |
|
||||
"any"
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user