PreProcessor Class — tailwindcss Architecture
Architecture documentation for the PreProcessor class in pre_processor.rs from the tailwindcss codebase.
Entity Profile
Dependency Diagram
graph TD e1768bee_1354_a08a_9601_96218360264b["PreProcessor"] c9eebb75_dc3f_0649_0b9f_ee56e4ee9c1c["pre_processor.rs"] e1768bee_1354_a08a_9601_96218360264b -->|defined in| c9eebb75_dc3f_0649_0b9f_ee56e4ee9c1c
Relationship Graph
Source Code
crates/oxide/src/extractor/pre_processors/pre_processor.rs lines 1–162
pub trait PreProcessor: Sized + Default {
fn process(&self, content: &[u8]) -> Vec<u8>;
#[cfg(test)]
fn test(input: &str, expected: &str) {
use pretty_assertions::assert_eq;
let input = input.as_bytes();
let expected = expected.as_bytes();
let processor = Self::default();
let actual = processor.process(input);
// Convert to strings for better error messages.
let input = String::from_utf8_lossy(input);
let actual = String::from_utf8_lossy(&actual);
let expected = String::from_utf8_lossy(expected);
// The input and output should have the exact same length.
assert_eq!(input.len(), actual.len());
assert_eq!(actual.len(), expected.len());
assert_eq!(actual, expected);
}
#[cfg(test)]
fn test_extract_exact(input: &str, expected: Vec<&str>) {
use crate::extractor::{Extracted, Extractor};
let input = input.as_bytes();
let processor = Self::default();
let transformed = processor.process(input);
let extracted = Extractor::new(&transformed).extract();
// Extract all candidates and css variables.
let candidates = extracted
.iter()
.filter_map(|x| match x {
Extracted::Candidate(bytes) => std::str::from_utf8(bytes).ok(),
Extracted::CssVariable(bytes) => std::str::from_utf8(bytes).ok(),
})
.collect::<Vec<_>>();
if candidates != expected {
dbg!(&candidates, &expected);
panic!("Extracted candidates do not match expected candidates");
}
}
#[cfg(test)]
fn test_extract_contains(input: &str, expected: Vec<&str>) {
use crate::extractor::{Extracted, Extractor};
let input = input.as_bytes();
let processor = Self::default();
let transformed = processor.process(input);
let extracted = Extractor::new(&transformed).extract();
// Extract all candidates and css variables.
let candidates = extracted
.iter()
.filter_map(|x| match x {
Extracted::Candidate(bytes) => std::str::from_utf8(bytes).ok(),
Extracted::CssVariable(bytes) => std::str::from_utf8(bytes).ok(),
})
.collect::<Vec<_>>();
// Ensure all items are present in the candidates.
let mut missing = vec![];
for item in &expected {
if !candidates.contains(item) {
missing.push(item);
}
}
if !missing.is_empty() {
Source
Frequently Asked Questions
What is the PreProcessor class?
PreProcessor is a class in the tailwindcss codebase, defined in crates/oxide/src/extractor/pre_processors/pre_processor.rs.
Where is PreProcessor defined?
PreProcessor is defined in crates/oxide/src/extractor/pre_processors/pre_processor.rs at line 1.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free