use rowan::ast::{AstNode, support};
use super::nodes::{
ArgList, Block, CallExpr, CatchClause, Condition, CurlyExpr, DotCallExpr, ElseClause,
ElseifClause, FinallyClause, ForExpr, FunctionDef, IfExpr, IndexExpr, LetExpr, MacroCall,
MacroDef, ModuleDef, StructDef, WhileExpr,
};
use crate::syntax::JuliaLanguage;
pub trait HasArgList: AstNode<Language = JuliaLanguage> {
fn arg_list(&self) -> Option<ArgList> {
support::child(self.syntax())
}
}
pub trait HasBody: AstNode<Language = JuliaLanguage> {
fn body(&self) -> Option<Block> {
support::child(self.syntax())
}
}
pub trait HasCondition: AstNode<Language = JuliaLanguage> {
fn condition(&self) -> Option<Condition> {
support::child(self.syntax())
}
}
impl HasArgList for CallExpr {}
impl HasArgList for IndexExpr {}
impl HasArgList for DotCallExpr {}
impl HasArgList for CurlyExpr {}
impl HasArgList for MacroCall {}
impl HasBody for FunctionDef {}
impl HasBody for MacroDef {}
impl HasBody for StructDef {}
impl HasBody for ModuleDef {}
impl HasBody for WhileExpr {}
impl HasBody for ForExpr {}
impl HasBody for LetExpr {}
impl HasBody for ElseifClause {}
impl HasBody for ElseClause {}
impl HasBody for CatchClause {}
impl HasBody for FinallyClause {}
impl HasCondition for IfExpr {}
impl HasCondition for ElseifClause {}
impl HasCondition for WhileExpr {}