stylua 0.2.0

A code formatter for Lua
Documentation
use full_moon::ast::{punctuated::Punctuated, Assignment, LocalAssignment};
use full_moon::tokenizer::TokenReference;
use std::borrow::Cow;

use crate::formatters::CodeFormatter;

impl CodeFormatter {
    pub fn format_assignment<'ast>(&mut self, assignment: &Assignment<'ast>) -> Assignment<'ast> {
        let var_list = self.format_punctuated(assignment.var_list(), &CodeFormatter::format_var);
        let expr_list =
            self.format_punctuated(assignment.expr_list(), &CodeFormatter::format_expression);

        Assignment::new(var_list, expr_list)
            .with_equal_token(Cow::Owned(TokenReference::symbol(" = ").unwrap()))
    }

    pub fn format_local_assignment<'ast>(
        &mut self,
        assignment: &LocalAssignment<'ast>,
    ) -> LocalAssignment<'ast> {
        let local_token = crate::fmt_symbol!(self, assignment.local_token(), "local ");
        let name_list = self.format_punctuated(
            assignment.name_list(),
            &CodeFormatter::format_token_reference_mut,
        );

        #[cfg(feature = "luau")]
        let type_specifiers = assignment
            .type_specifiers()
            .map(|x| match x {
                Some(type_specifier) => Some(self.format_type_specifier(type_specifier)),
                None => None,
            })
            .collect();

        if assignment.expr_list().is_empty() {
            let local_assignment = LocalAssignment::new(name_list)
                .with_local_token(local_token)
                .with_equal_token(None)
                .with_expr_list(Punctuated::new());
            #[cfg(feature = "luau")]
            let local_assignment = local_assignment.with_type_specifiers(type_specifiers);
            local_assignment
        } else {
            let equal_token = crate::fmt_symbol!(self, assignment.equal_token().unwrap(), " = ");
            let expr_list =
                self.format_punctuated(assignment.expr_list(), &CodeFormatter::format_expression);

            let local_assignment = LocalAssignment::new(name_list)
                .with_local_token(local_token)
                .with_equal_token(Some(equal_token))
                .with_expr_list(expr_list);
            #[cfg(feature = "luau")]
            let local_assignment = local_assignment.with_type_specifiers(type_specifiers);

            local_assignment
        }
    }
}