rshtml_core 0.5.0

RsHtml: A Template Engine for Seamless HTML and Rust Integration.
Documentation
use crate::{analyzer::Analyzer, diagnostic::Level, position::Position};
use syn::{Ident, Type, parse_str};

pub struct TemplateParamsAnalyzer;

impl TemplateParamsAnalyzer {
    pub fn analyze(
        analyzer: &mut Analyzer,
        params: &Vec<(String, String, Position)>,
        _position: &Position,
    ) {
        analyzer.component.parameters.extend(
            params
                .iter()
                .map(|p| p.0.to_owned())
                .collect::<Vec<String>>(),
        );

        for (param_name, param_type, param_position) in params {
            if parse_str::<Ident>(param_name).is_err() {
                analyzer.diagnostic(
                    param_position,
                    "attempt to use invalid identifier",
                    &[],
                    &format!("invalid parameter name `{param_name}`"),
                    param_name.len(),
                    Level::Caution,
                );
            }

            if parse_str::<Type>(param_type).is_err() {
                analyzer.diagnostic(
                    param_position,
                    "attempt to use invalid type",
                    &[],
                    &format!("invalid parameter type `{param_type}`"),
                    param_name.len(),
                    Level::Caution,
                );
            }
        }
    }
}