feat(ast): add type system declaration nodes

Added AST structures for new type system:
- ConceptDecl: Base type definition
- SubConceptDecl: Enum or record subtype with SubConceptKind
- ConceptComparisonDecl: Compile-time enum mapping
- ConceptMapping: Individual mapping entry

Added Declaration enum variants and stubs throughout codebase
for LSP, resolve, and semantic analysis modules.
This commit is contained in:
2026-02-13 22:41:03 +00:00
parent f258a526e3
commit 6e3b35e68f
8 changed files with 81 additions and 0 deletions

View File

@@ -1704,6 +1704,9 @@ fn get_declaration_name(decl: &crate::syntax::ast::Declaration) -> String {
| Declaration::Schedule(s) => s.name.clone(),
| Declaration::Behavior(b) => b.name.clone(),
| Declaration::Use(_) => "use".to_string(),
| Declaration::Concept(c) => c.name.clone(),
| Declaration::SubConcept(sc) => sc.name.clone(),
| Declaration::ConceptComparison(cc) => cc.name.clone(),
}
}
@@ -1722,6 +1725,9 @@ fn get_declaration_type_name(decl: &crate::syntax::ast::Declaration) -> &'static
| Declaration::Schedule(_) => "Schedule",
| Declaration::Behavior(_) => "Behavior",
| Declaration::Use(_) => "Use",
| Declaration::Concept(_) => "Concept",
| Declaration::SubConcept(_) => "Sub Concept",
| Declaration::ConceptComparison(_) => "Concept Comparison",
}
}
@@ -1953,6 +1959,9 @@ fn get_declaration_span(decl: &crate::syntax::ast::Declaration) -> Span {
| Declaration::Schedule(s) => s.span.clone(),
| Declaration::Behavior(b) => b.span.clone(),
| Declaration::Use(u) => u.span.clone(),
| Declaration::Concept(c) => c.span.clone(),
| Declaration::SubConcept(sc) => sc.span.clone(),
| Declaration::ConceptComparison(cc) => cc.span.clone(),
}
}

View File

@@ -179,6 +179,9 @@ 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
}
}
@@ -196,6 +199,9 @@ fn format_declaration_hover(decl: &Declaration, _kind: &DeclKind) -> Hover {
| Declaration::Schedule(s) => format_schedule_hover(s),
| Declaration::Behavior(b) => format_behavior_hover(b),
| 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(),
};
Hover {

View File

@@ -407,6 +407,12 @@ pub fn get_semantic_tokens(doc: &Document) -> Option<SemanticTokensResult> {
}
}
},
| Declaration::Concept(_) |
Declaration::SubConcept(_) |
Declaration::ConceptComparison(_) => {
// TODO: Implement semantic highlighting for type system
// declarations
},
}
}

View File

@@ -96,6 +96,9 @@ fn extract_declaration_symbol(
extract_variant_symbols(&e.variants, 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
};
let (start_line, start_col) = positions.offset_to_position(span.start);