2020-01-19 22:58:25 -05:00
|
|
|
# grass
|
|
|
|
|
2020-06-20 06:31:43 -04:00
|
|
|
This crate aims to provide a high level interface for compiling Sass into
|
|
|
|
plain CSS. It offers a very limited API, currently exposing only 2 functions.
|
2020-01-20 12:42:06 -05:00
|
|
|
|
2020-04-21 04:59:03 -04:00
|
|
|
In addition to a library, also included is a binary that is intended to act as an invisible
|
2020-06-20 06:31:43 -04:00
|
|
|
replacement to the Sass commandline executable.
|
2020-04-19 16:38:42 -04:00
|
|
|
|
2020-06-20 06:31:43 -04:00
|
|
|
This crate aims to achieve complete feature parity with the `dart-sass` reference
|
|
|
|
implementation. A deviation from the `dart-sass` implementation can be considered
|
2020-04-19 16:38:42 -04:00
|
|
|
a bug except for in the following situations:
|
2020-04-24 18:38:52 -04:00
|
|
|
|
|
|
|
- Error messages
|
|
|
|
- Error spans
|
|
|
|
- Certain aspects of the indented syntax
|
|
|
|
- Potentially others in the future
|
2020-04-19 16:38:42 -04:00
|
|
|
|
2020-04-20 12:15:07 -04:00
|
|
|
[Documentation](https://docs.rs/grass/)
|
2020-04-19 16:38:42 -04:00
|
|
|
[crates.io](https://crates.io/crates/grass)
|
2020-01-20 12:42:06 -05:00
|
|
|
|
2020-04-24 18:38:52 -04:00
|
|
|
## Status
|
|
|
|
|
2020-03-22 15:44:47 -04:00
|
|
|
The large features remaining are
|
2020-04-24 18:38:52 -04:00
|
|
|
|
2020-03-22 15:44:47 -04:00
|
|
|
```
|
2020-06-22 10:11:30 -04:00
|
|
|
indented syntax
|
2020-04-26 01:45:30 -04:00
|
|
|
css imports
|
2020-08-07 02:26:59 -04:00
|
|
|
@forward
|
2020-07-06 10:24:29 -04:00
|
|
|
compressed output
|
2020-03-22 15:44:47 -04:00
|
|
|
```
|
|
|
|
|
2020-06-23 04:36:15 -04:00
|
|
|
This is in addition to dozens of smaller features, edge cases, and miscompilations.
|
2020-07-06 10:24:29 -04:00
|
|
|
|
|
|
|
Starting from `grass v0.9.4`, it is possible to compile Twitter Bootstrap 4 as well as bulma-scss.
|
|
|
|
|
|
|
|
The output is not exact byte-for-byte, and the remaining differences in output are tracked [here](https://github.com/connorskees/grass/issues/4).
|
|
|
|
|
|
|
|
## Web Assembly
|
|
|
|
|
|
|
|
`grass` experimentally releases a
|
|
|
|
[WASM version of the library to npm](https://www.npmjs.com/package/@connorskees/grass),
|
|
|
|
compiled using wasm-bindgen. To use `grass` in your JavaScript projects, just run
|
|
|
|
`npm install @connorskees/grass` to your package.json. Better documentation
|
|
|
|
for this version will be provided when the library becomes more stable.
|
2020-06-22 10:11:30 -04:00
|
|
|
|
2020-05-29 18:40:53 -04:00
|
|
|
## Features
|
|
|
|
|
|
|
|
### commandline
|
2020-06-23 04:36:15 -04:00
|
|
|
|
2020-05-29 18:40:53 -04:00
|
|
|
(enabled by default): build a binary using clap
|
|
|
|
|
|
|
|
### random
|
2020-06-23 04:36:15 -04:00
|
|
|
|
2020-05-29 18:40:53 -04:00
|
|
|
(enabled by default): enable the builtin functions `random([$limit])` and `unique-id()`
|
|
|
|
|
|
|
|
In the future this feature will be removed when it is no longer necessary to rely on `rand` for
|
|
|
|
random numbers.
|
|
|
|
|
2020-04-24 18:38:52 -04:00
|
|
|
## Testing
|
|
|
|
|
|
|
|
As much as possible this library attempts to follow the same [philosophy for testing as
|
|
|
|
`rust-analyzer`](https://internals.rust-lang.org/t/experience-report-contributing-to-rust-lang-rust/12012/17).
|
|
|
|
Namely, all one should have to do is run `cargo test` to run all its tests.
|
|
|
|
This library maintains a test suite distinct from the `sass-spec`, though it
|
|
|
|
does include some spec tests verbatim. This has the benefit of allowing tests
|
|
|
|
to be run without ruby as well as allowing the tests more granular than they
|
|
|
|
are in the official spec.
|
|
|
|
|
|
|
|
Having said that, to run the official test suite,
|
2020-04-19 16:38:42 -04:00
|
|
|
|
|
|
|
```bash
|
2020-04-28 15:08:01 -04:00
|
|
|
git clone https://github.com/connorskees/grass --recursive
|
2020-04-19 16:38:42 -04:00
|
|
|
cd grass
|
|
|
|
cargo b --release
|
|
|
|
./sass-spec/sass-spec.rb -c './target/release/grass'
|
|
|
|
```
|
2020-10-09 05:58:32 +02:00
|
|
|
Note: you will have to install [ruby](https://www.ruby-lang.org/en/downloads/),
|
|
|
|
[bundler](https://bundler.io/) and run `bundle install` in `./sass-spec/`.
|
|
|
|
This might also require you to install the requirements separately
|
|
|
|
for [curses](https://github.com/ruby/curses).
|
2020-04-19 16:38:42 -04:00
|
|
|
|
2020-06-20 06:31:43 -04:00
|
|
|
These numbers come from a default run of the Sass specification as shown above.
|
2020-07-02 10:51:49 -04:00
|
|
|
|
2020-08-15 22:25:11 -04:00
|
|
|
```
|
|
|
|
2020-08-15
|
|
|
|
PASSING: 3384
|
|
|
|
FAILING: 1703
|
|
|
|
TOTAL: 5093
|
|
|
|
```
|
|
|
|
|
2020-08-07 02:24:17 -04:00
|
|
|
```
|
2020-08-12 16:27:16 -04:00
|
|
|
2020-08-12
|
|
|
|
PASSING: 3387
|
|
|
|
FAILING: 1706
|
2020-08-07 02:24:17 -04:00
|
|
|
TOTAL: 5093
|
|
|
|
```
|
|
|
|
|
2020-07-02 10:51:49 -04:00
|
|
|
```
|
2020-07-24 23:49:26 -04:00
|
|
|
2020-07-24
|
|
|
|
PASSING: 2935
|
|
|
|
FAILING: 2158
|
2020-06-16 20:33:09 -04:00
|
|
|
TOTAL: 5093
|
|
|
|
```
|
|
|
|
|
2020-06-08 00:42:41 -04:00
|
|
|
```
|
|
|
|
2020-06-07
|
|
|
|
PASSING: 2442
|
|
|
|
FAILING: 2651
|
|
|
|
TOTAL: 5093
|
|
|
|
```
|
|
|
|
|
2020-05-05 19:01:40 -04:00
|
|
|
```
|
|
|
|
2020-05-01
|
|
|
|
PASSING: 2193
|
|
|
|
FAILING: 2900
|
|
|
|
TOTAL: 5093
|
|
|
|
```
|
|
|
|
|
2020-04-01 17:53:47 -04:00
|
|
|
```
|
|
|
|
2020-04-01
|
|
|
|
PASSING: 1711
|
|
|
|
FAILING: 3382
|
|
|
|
TOTAL: 5093
|
|
|
|
```
|
2020-02-09 22:48:55 -05:00
|
|
|
|
2020-03-24 10:53:21 -04:00
|
|
|
|
2020-03-20 21:00:27 -04:00
|
|
|
```
|
2020-03-22 15:44:47 -04:00
|
|
|
2020-03-22
|
|
|
|
PASSING: 1442
|
|
|
|
FAILING: 3651
|
2020-03-20 21:00:27 -04:00
|
|
|
TOTAL: 5093
|
2020-03-20 21:10:58 -04:00
|
|
|
```
|
|
|
|
|
2020-02-09 22:48:55 -05:00
|
|
|
|
2020-02-03 08:49:47 -05:00
|
|
|
```
|
|
|
|
2020-02-03
|
|
|
|
PASSING: 242
|
|
|
|
FAILING: 4851
|
2020-01-27 16:57:12 -05:00
|
|
|
TOTAL: 5093
|
2020-02-03 08:49:47 -05:00
|
|
|
```
|
2020-01-27 16:57:12 -05:00
|
|
|
|
2020-02-03 08:49:47 -05:00
|
|
|
```
|
|
|
|
2020-01-20
|
|
|
|
PASSING: 143
|
|
|
|
FAILING: 4950
|
|
|
|
TOTAL: 5093
|
|
|
|
```
|