diff --git a/CHANGELOG.md b/CHANGELOG.md index 23cd3eac166d..ba47afa1cabd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Ensure utilities are sorted based on their actual property order ([#16995](https://github.com/tailwindlabs/tailwindcss/pull/16995)) - Ensure strings in Pug and Slim templates are handled correctly ([#17000](https://github.com/tailwindlabs/tailwindcss/pull/17000)) - Ensure `}` and `{` are valid boundary characters when extracting candidates ([#17001](https://github.com/tailwindlabs/tailwindcss/pull/17001)) +- Add `razor`/`cshtml` pre processing ([#17027](https://github.com/tailwindlabs/tailwindcss/pull/17027)) ## [4.0.11] - 2025-03-06 diff --git a/crates/oxide/src/extractor/pre_processors/mod.rs b/crates/oxide/src/extractor/pre_processors/mod.rs index a65da1774d88..8a3c4da10124 100644 --- a/crates/oxide/src/extractor/pre_processors/mod.rs +++ b/crates/oxide/src/extractor/pre_processors/mod.rs @@ -1,11 +1,13 @@ pub mod pre_processor; pub mod pug; +pub mod razor; pub mod ruby; pub mod slim; pub mod svelte; pub use pre_processor::*; pub use pug::*; +pub use razor::*; pub use ruby::*; pub use slim::*; pub use svelte::*; diff --git a/crates/oxide/src/extractor/pre_processors/razor.rs b/crates/oxide/src/extractor/pre_processors/razor.rs new file mode 100644 index 000000000000..d77644b12e1f --- /dev/null +++ b/crates/oxide/src/extractor/pre_processors/razor.rs @@ -0,0 +1,27 @@ +use crate::extractor::pre_processors::pre_processor::PreProcessor; +use bstr::ByteSlice; + +#[derive(Debug, Default)] +pub struct Razor; + +impl PreProcessor for Razor { + fn process(&self, content: &[u8]) -> Vec { + content.replace("@@", " @") + } +} + +#[cfg(test)] +mod tests { + use super::Razor; + use crate::extractor::pre_processors::pre_processor::PreProcessor; + + #[test] + fn test_razor_pre_processor() { + let (input, expected) = ( + r#"
"#, + r#"
"#, + ); + Razor::test(input, expected); + Razor::test_extract_contains(input, vec!["@sm:text-red-500"]); + } +} diff --git a/crates/oxide/src/lib.rs b/crates/oxide/src/lib.rs index de1d06d31e2c..93155b02ea4f 100644 --- a/crates/oxide/src/lib.rs +++ b/crates/oxide/src/lib.rs @@ -468,6 +468,7 @@ pub fn pre_process_input(content: &[u8], extension: &str) -> Vec { use crate::extractor::pre_processors::*; match extension { + "cshtml" | "razor" => Razor.process(content), "pug" => Pug.process(content), "rb" | "erb" => Ruby.process(content), "slim" => Slim.process(content),