Home / File/ modifier_machine.rs — tailwindcss Source File

modifier_machine.rs — tailwindcss Source File

Architecture documentation for modifier_machine.rs, a rust file in the tailwindcss codebase. 8 imports, 0 dependents.

File rust Oxide Extractor 8 imports 4 functions

Entity Profile

Dependency Diagram

graph LR
  b783b7fd_efe2_8b73_5f61_5830aab9391d["modifier_machine.rs"]
  23460b98_1cba_7361_027e_724761c5265e["super::ModifierMachine"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 23460b98_1cba_7361_027e_724761c5265e
  96a36755_a007_15e1_ec6c_526c02d24b9b["crate::cursor"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 96a36755_a007_15e1_ec6c_526c02d24b9b
  ec3c2d9b_617f_ce45_34ee_554128afd65f["crate::extractor::arbitrary_value_machine::ArbitraryValueMachine"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> ec3c2d9b_617f_ce45_34ee_554128afd65f
  9827a250_2729_b49f_1d1f_5a8965ab90ba["crate::extractor::arbitrary_variable_machine::ArbitraryVariableMachine"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 9827a250_2729_b49f_1d1f_5a8965ab90ba
  05907c18_a40e_a5a9_c7c3_5faba98e1e87["crate::extractor::machine::"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 05907c18_a40e_a5a9_c7c3_5faba98e1e87
  7a907858_c7d2_db19_0e89_e3d1d2242e48["classification_macros::ClassifyBytes"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 7a907858_c7d2_db19_0e89_e3d1d2242e48
  4d153f79_f78b_b66c_1e8a_11a0eb99bd41["crate::extractor::machine::Machine"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 4d153f79_f78b_b66c_1e8a_11a0eb99bd41
  433675ca_8d0e_feff_42a5_b3f666878cca["pretty_assertions::assert_eq"]
  b783b7fd_efe2_8b73_5f61_5830aab9391d --> 433675ca_8d0e_feff_42a5_b3f666878cca
  style b783b7fd_efe2_8b73_5f61_5830aab9391d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

use crate::cursor;
use crate::extractor::arbitrary_value_machine::ArbitraryValueMachine;
use crate::extractor::arbitrary_variable_machine::ArbitraryVariableMachine;
use crate::extractor::machine::{Machine, MachineState};
use classification_macros::ClassifyBytes;

/// Extract modifiers from an input including the `/`.
///
/// E.g.:
///
/// ```text
/// bg-red-500/20
///           ^^^
///
/// bg-red-500/[20%]
///           ^^^^^^
///
/// bg-red-500/(--my-opacity)
///           ^^^^^^^^^^^^^^^
/// ```
#[derive(Debug, Default)]
pub struct ModifierMachine {
    arbitrary_value_machine: ArbitraryValueMachine,
    arbitrary_variable_machine: ArbitraryVariableMachine,
}

impl Machine for ModifierMachine {
    #[inline(always)]
    fn reset(&mut self) {}

    #[inline]
    fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState {
        // A modifier must start with a `/`, everything else is not a valid start of a modifier
        if Class::Slash != cursor.curr.into() {
            return MachineState::Idle;
        }

        let start_pos = cursor.pos;
        cursor.advance();

        match cursor.curr.into() {
            // Start of an arbitrary value:
            //
            // ```
            // bg-red-500/[20%]
            //            ^^^^^
            // ```
            Class::OpenBracket => match self.arbitrary_value_machine.next(cursor) {
                MachineState::Idle => self.restart(),
                MachineState::Done(_) => self.done(start_pos, cursor),
            },

            // Start of an arbitrary variable:
            //
            // ```
            // bg-red-500/(--my-opacity)
            //            ^^^^^^^^^^^^^^
            // ```
            Class::OpenParen => match self.arbitrary_variable_machine.next(cursor) {
                MachineState::Idle => self.restart(),
// ... (108 more lines)

Domain

Subdomains

Dependencies

  • classification_macros::ClassifyBytes
  • crate::cursor
  • crate::extractor::arbitrary_value_machine::ArbitraryValueMachine
  • crate::extractor::arbitrary_variable_machine::ArbitraryVariableMachine
  • crate::extractor::machine::
  • crate::extractor::machine::Machine
  • pretty_assertions::assert_eq
  • super::ModifierMachine

Frequently Asked Questions

What does modifier_machine.rs do?
modifier_machine.rs is a source file in the tailwindcss codebase, written in rust. It belongs to the Oxide domain, Extractor subdomain.
What functions are defined in modifier_machine.rs?
modifier_machine.rs defines 4 function(s): next, reset, test_modifier_extraction, test_modifier_machine_performance.
What does modifier_machine.rs depend on?
modifier_machine.rs imports 8 module(s): classification_macros::ClassifyBytes, crate::cursor, crate::extractor::arbitrary_value_machine::ArbitraryValueMachine, crate::extractor::arbitrary_variable_machine::ArbitraryVariableMachine, crate::extractor::machine::, crate::extractor::machine::Machine, pretty_assertions::assert_eq, super::ModifierMachine.
Where is modifier_machine.rs in the architecture?
modifier_machine.rs is located at crates/oxide/src/extractor/modifier_machine.rs (domain: Oxide, subdomain: Extractor, directory: crates/oxide/src/extractor).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free