inktree 0.1.0

An incremental syntax tree engine for fast, expressive language tooling in Rust
Documentation
use syn::Ident;

use crate::{
    derive::{parser::FromMeta, properties::Property},
    language::{ElementError, Language},
};

#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
pub struct Extra;

impl FromMeta for Extra {
    fn from_path(_: &syn::Path, _name: Option<&Ident>) -> Result<Self, ElementError> {
        Ok(Self)
    }
}

pub(crate) fn try_handle_extra(name: &Ident, property: &Property, language: &mut Language) -> bool {
    if let Some(_) = property.try_as_extra() {
        language.extras.push(name.clone());
        true
    } else {
        false
    }
}