biome_js_formatter 0.0.2

Biome's JavaScript formatter
Documentation
use biome_formatter::token::string::ToAsciiLowercaseCow;
use biome_formatter::write;
use std::borrow::Cow;

use crate::prelude::*;

use crate::parentheses::NeedsParentheses;
use biome_js_syntax::JsBigintLiteralExpressionFields;
use biome_js_syntax::{JsBigintLiteralExpression, JsSyntaxNode};

#[derive(Debug, Clone, Default)]
pub(crate) struct FormatJsBigintLiteralExpression;

impl FormatNodeRule<JsBigintLiteralExpression> for FormatJsBigintLiteralExpression {
    fn fmt_fields(
        &self,
        node: &JsBigintLiteralExpression,
        f: &mut JsFormatter,
    ) -> FormatResult<()> {
        let JsBigintLiteralExpressionFields { value_token } = node.as_fields();
        let value_token = value_token?;

        let original = value_token.text_trimmed();
        match original.to_ascii_lowercase_cow() {
            Cow::Borrowed(_) => write![f, [value_token.format()]],
            Cow::Owned(lowercase) => {
                write!(
                    f,
                    [format_replaced(
                        &value_token,
                        &dynamic_text(&lowercase, value_token.text_trimmed_range().start())
                    )]
                )
            }
        }
    }

    fn needs_parentheses(&self, item: &JsBigintLiteralExpression) -> bool {
        item.needs_parentheses()
    }
}

impl NeedsParentheses for JsBigintLiteralExpression {
    #[inline(always)]
    fn needs_parentheses(&self) -> bool {
        false
    }

    #[inline(always)]
    fn needs_parentheses_with_parent(&self, _parent: &JsSyntaxNode) -> bool {
        false
    }
}