No description
Find a file
Robin Malfait 55daf8e0f5
Ensure the oxide parser has feature parity with the stable RegEx parser (#11389)
* WIP

* use `parse` instead of `defaultExtractor`

* skip `Vue` describe block

* add a few more dedicated arbitrary values/properties tests

* use parallel parsing

* splitup Vue tests

* add some Rust specific tests

* setup parse candidate strings test system

These tests will run against the `Regex` and `Rust` based parsers. We
have groups of classes of various shapes and forms + variants and
rendered in various template situation (plain, html, Vue, ...)

+ enable all skipped tests

* ensure we also validate the classes with variants

The classes with variants are built in the `templateTable` function, so
we get them out again by using the potional arguments of the `test.each`
cb function.

* cleanup test suite

* add "anti-test" tests

To make sure that we are _not_ parsing out certain values given a
certain input.

* Add ParseAction enum

* Restart parsing following an arbitrary parse failure

* Split variants off before validating the uility part

* Collapse candidate from the end when validation fails

* Support `<`, and `>` in variant position

* fix error

* format parser.rs

* Refactor

* Update editorconfig

* wip

* wip

* Refactor

* Refactor

* Simplify

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* run `cargo clippy --fix`

* run `cargo fmt`

* implement `cargo clippy` suggestions

These were not applied using `cargo clippy --fix`

* only allow `.` in the candidate part when surrounded by 0-9

This is only in the candidate part, not the arbitrary part.

* % characters can only appear at the end after digits

* > and < should only be part of variants (start OR end)

It can technically be inside the candidate when we have stacked
variants:
```
dark:<sm:underline
dark:md>:underline
```

* handle parsing utilities within quotes, parans or brackets

* mark `pt-1.5` as an expected value sliced out from `["pt-1.5"]`

* Add cursor abstraction

* wip

* disable the oxideParser if using a custom `prefix` or `separator`

* update tests

* Use cursor abstraction

* Refactor more code toward use of global cursor

* wip

* simplify

* Simplify

* Simplify

* Simplify

* Cleanup

* wip

* Simplify

* wip

* Simplify

* Handle candidates ending with % sign

* Tweak code a bit

* fmt

* Simplify

* Add cursor details to trace

* cargo fmt

* use preferred `zoom-0.5` name instead of `zoom-.5`

* drop over-extracted utilities in oxide parser

The RegEx parser does extract `underline` from

```html
<div class="peer-aria-[labelledby='a_b']:underline"></div>
```
... but that's not needed and is not happening in the oxide parser

This means that we have to make the output check a little bit different
but they are explicit based on the feature flag.

* allow extracting variants+utilities inside `{}` for the oxide parser

* characters in candidates such as `group-${id}` should not be allowed

* do not extract any of the following candidate `w-[foo-bar]w-[bar-baz]`

* ensure we can consume the full candidate and discard it

* Add fast skipping of whitespace

* Use fast skipping whenever possible

* Add fast skipping to benchmark

* Hand-tune to generate more optimized assembly

* Move code around a bit

This makes sure all the fancy SIMD stuff is as early as possible. This results in an extremely minor perf increase.

* Undo tweak

no meaningful perf difference in real world scenarios

* Disable fast skipping for now

It needs to be done in a different spot so it doesn’t affect how things are returned

* Change test names

* Fix normalize config error

* cleanup a bit

* Cleanup

* Extract validation result enum

* Cleanup comments

* Simplify

* Fix formatting

* Run clippy

* wip

* add `md>` under the special characters test set

---------

Co-authored-by: Adam Wathan <4323180+adamwathan@users.noreply.github.com>
Co-authored-by: Jordan Pittman <jordan@cryptica.me>
2023-06-07 17:44:35 +02:00
.github Bump Rust version to 1.70.0 (#11344) 2023-06-02 15:24:40 +02:00
integrations Bump lightningcss dependency (#11388) 2023-06-07 15:56:32 +02:00
jest Bump lightningcss dependency (#11388) 2023-06-07 15:56:32 +02:00
nesting Ensure to transpile the PostCSS Nesting plugin (tailwindcss/nesting) (#7080) 2022-01-15 16:07:20 +01:00
oxide Ensure the oxide parser has feature parity with the stable RegEx parser (#11389) 2023-06-07 17:44:35 +02:00
perf Performance improvements + memory leak fix (#3032) 2020-12-11 15:03:49 +01:00
scripts Merge engines (#11275) 2023-05-24 22:10:00 -04:00
src Ensure the oxide parser has feature parity with the stable RegEx parser (#11389) 2023-06-07 17:44:35 +02:00
standalone-cli Update test 2023-04-25 17:45:45 -04:00
stubs Add svh, lvh, and dvh values to default theme (#11317) 2023-05-30 11:58:16 -04:00
tests Ensure the oxide parser has feature parity with the stable RegEx parser (#11389) 2023-06-07 17:44:35 +02:00
types Update the types for the safelist config (#10901) 2023-03-29 22:54:57 +02:00
.editorconfig Ensure the oxide parser has feature parity with the stable RegEx parser (#11389) 2023-06-07 17:44:35 +02:00
.eslintignore Separate stable and oxide engines (#10359) 2023-01-19 11:58:25 -05:00
.eslintrc.json Remove duplicate prettier.config.js settings from .eslintrc.json (#5087) 2021-09-01 17:41:43 +02:00
.gitignore Add script for running integration tests 2023-01-21 11:28:24 -05:00
.swcrc Disable SWC “unused” minification 2023-04-25 17:42:58 -04:00
base.css Remove preflight CSS export in favor of base 2019-02-11 12:38:46 -05:00
CHANGELOG.md Fallback to RegEx based parser when using custom transformers or extractors (#11335) 2023-06-01 22:37:12 +02:00
colors.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
colors.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
components.css Move CSS files to root for easier imports 2018-03-13 10:05:24 -04:00
defaultConfig.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
defaultConfig.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
defaultTheme.d.ts Add more explicit types for the default theme (#8780) 2022-07-07 09:05:38 -04:00
defaultTheme.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
index.css Support @import "tailwindcss" using top-level index.css file (#11205) 2023-05-12 18:49:35 +02:00
LICENSE Update LICENSE 2022-02-05 15:22:47 -05:00
loadConfig.d.ts Enable ESM and TS based config files (#10785) 2023-03-15 17:04:18 -04:00
loadConfig.js Enable ESM and TS based config files (#10785) 2023-03-15 17:04:18 -04:00
package-lock.json Bump lightningcss dependency (#11388) 2023-06-07 15:56:32 +02:00
package.json Bump lightningcss dependency (#11388) 2023-06-07 15:56:32 +02:00
plugin.d.ts Make Config completely optional for plugins (#9502) 2022-10-07 10:45:22 -04:00
plugin.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
prettier.config.js Add Prettier configuration file (prettier.config.js) (#3713) 2021-05-13 09:07:24 -04:00
README.md fix CI badge in README 2023-05-25 12:01:03 +02:00
resolveConfig.d.ts Improve return value of resolveConfig, unwrap ResolvableTo (#9972) 2022-11-30 14:26:15 +01:00
resolveConfig.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
screens.css Add screen.css file for postcss-import convenience 2019-05-12 10:36:59 -04:00
tailwind.css Undo accidental changes to CDN build process 2019-12-25 13:54:09 -05:00
turbo.json Merge engines (#11275) 2023-05-24 22:10:00 -04:00
utilities.css Move CSS files to root for easier imports 2018-03-13 10:05:24 -04:00
variants.css JIT: Replace @tailwind screens with @tailwind variants (#4356) 2021-05-14 13:58:52 -04:00

Tailwind CSS

A utility-first CSS framework for rapidly building custom user interfaces.

Build Status Total Downloads Latest Release License


Documentation

For full documentation, visit tailwindcss.com.

Community

For help, discussion about best practices, or any other conversation that would benefit from being searchable:

Discuss Tailwind CSS on GitHub

For casual chit-chat with others using the framework:

Join the Tailwind CSS Discord Server

Contributing

If you're interested in contributing to Tailwind CSS, please read our contributing docs before submitting a pull request.