Coder Social home page Coder Social logo

grass's People

Contributors

chris-morgan avatar connorskees avatar greenwoodcm avatar johan-smits avatar josephling avatar keats avatar kketch avatar midaslamb avatar modprog avatar mqxx avatar paolobarbolini avatar pickfire avatar redzic avatar saolof avatar striezel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

grass's Issues

Comments in --var not removed

upd: I see that it's a common sass misfeature sass/sass#2770
so unlikely to expect grass to deviate

I'm using grass via zola SSG and I've noticed that comments in --var are not stripped from the output, thus breaking my ability to add comments with explanations for colors

// file.sass
:root.light
  --var:  	oklch(.87 0   90)	// comment not removed in the output

I see that CSS variables should include everything, notably comments https://github.com/connorskees/grass/pull/67 on #19, which is maybe related and implies this is intentional, but I don't understand the reason behind that, the comments like these aren't meant to be included
Although that example has foo: //; a semicolon, while the one I'm using is the cleaner sass version, so maybe this explains it?

(although some online dart sass tools strip the comments properly fro this format)

Using `auto` keyword with `min` function fails to compile

The below SCSS code should compile, verbatim, to CSS, but fails to compile with "auto is not a number".

div {
    width: min(200px, auto);
}

Expected: no change to file, because it is already valid and correct CSS.

Minimal example:

fn main() {
    let scss = r#" div { width: min(100px, auto); } "#;
    let css = grass::from_string(scss, &grass::Options::default());
    println!("{:#?}", css);
    assert!(css.is_ok(), "Failed to compile");
}

Same result is found using 100% or 100vw instead of 100px, or switching argument order.

I would assume that min is a SCSS function (as well as CSS), expecting literal or variable arguments, not auto keyword. The error can be bypassed by not including brackets in the function call, eg. width: min 100px, auto;.

I assume this is unintended behaviour, as I could not find an explaination online or in the documentation.

Exposing statements (`Vec<Stmt>`)

Hey!

I'm considering using grass for a project and would like to get access to some information that grass does not currently expose.

I saw in the README:

It offers a very limited API, currently exposing only 2 functions.

So if what I'm asking for goes against the project's goals that's totally fine and I can just fork.

Problem

I write my HTML in Rust and would like to prevent typos when dealing with CSS. For example:

// BAD: I don't want to do this
let _ = html! { <div class="cool-class"></div> };

// GOOD: I want to do this
let _ = html! { <div class=MyClassEnum::CoolClass></div>

In order to do this, my build script needs to be able to know every class that is defined in the sass so that it can generate the enum.

Where grass comes in

It looks like grass has a Stmt type which contains all of the information that I would need.

i.e. SimpleSelector::Id SimpleSelector::Class etc.


One way to enable this would be to expose a new function:

pub fn stmts_from_path (path: &str, options: &Options) -> Result<Vec<Stmt>> {
    todo!()
}

This would mean that I would have to not only run the parser once to get my CSS String, but also another time to get my statements.

In Closing

I've suggested one potential path forwards, but I'm pretty open to anything that allows me to do what I want to do.

I'm also happy to just find a new approach (i.e. fork, regex, something else) to get the information that I want if supporting this use case doesn't fit into grass' vision.

So, to me it just comes down to

EDIT

EDIT: Exposing statements would also be generally useful for other tooling. For example, a linter that enforces a naming schema.

Working WASM version for Browsers/Deno

Hello,

Today as I was looking for a way to compile Sass in my project, I was annoyed to not being able to use any npm module with Deno because of some breaking changes, so I decided to use Grass and compile it into wasm to use the WebAssembly module, turns out after many tries it worked,

I had to do some edit to the lib.rs file in order to compile it without error, but I am sure it's not breaking changes.

I just learned Rust only today, so my code might be just garbage! But if it can help, I just wanted to share this.

Here's a link to the Deno module https://github.com/hironichu/denosass (The updated Grass rust source code is not in there yet)

Edit : This module also runs in browsers, should work in nodejs as well but have not tried.

npm package is out-dated

I saw the npm version is 0.10.0 published two years ago. Can you publish the latest version for npm?

Investigate using IndexMap to represent SassMap

Currently, the map type is implemented as a vector of key-value pairs, which means that insertion, lookup, and removal are all O(n). In addition, construction of map literals is O(n^2).

I was initially planning to implement a better structure for the SassMap ad hoc, but it seems like this structure would be a good fit instead.

This issue is a reminder as I do not intend on touching this for a while. The performance of maps is not incredibly important for right now.

WASM build failing

Hey, nice project. When trying to compile for WASM with cargo build --features wasm-exports --release, I get these errors. Couldn't find it reported anywhere but sorry if already known.

   Compiling grass v0.11.0 (/home/goose/grass)
error[E0061]: this function takes 2 arguments but 1 argument was supplied
   --> src/lib.rs:368:5
    |
368 |     from_string(Options::default()).map_err(|e| e.to_string())
    |     ^^^^^^^^^^^ ------------------ supplied 1 argument
    |     |
    |     expected 2 arguments
    |
note: function defined here
   --> src/lib.rs:361:8
    |
361 | pub fn from_string(input: String, options: &Options) -> Result<String> {
    |        ^^^^^^^^^^^ -------------  -----------------

error[E0308]: mismatched types
   --> src/lib.rs:368:5
    |
367 | pub fn from_string_js(p: String) -> std::result::Result<String, JsValue> {
    |                                     ------------------------------------ expected `Result<String, wasm_bindgen::JsValue>` because of return type
368 |     from_string(Options::default()).map_err(|e| e.to_string())
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `wasm_bindgen::JsValue`, found struct `String`
    |
    = note: expected enum `Result<_, wasm_bindgen::JsValue>`
               found enum `Result<_, String>`

map.deep-merge() function unsupported?

Hi,

I'm using grass as part of Zola and it seems it can't compile sass that includes PicoCSS.

It looks like the map.deep-merge() function isn't implemented? It's marked 'since 1.27.0' so presume should be in the targeted dart-sass version?

Including Pico 2.0-alpha1 gives this error:

Error: Error: Undefined function.
40 │ $breakpoints: map.deep-merge(
   │               ^^^^^^^^^^^^^  

More flexibility in import resolution

For my usecase, I'm applying some additional preprocessing to the scss source. This works well with the from_string way of loading a file, but it does not allow me to apply the same preprocessing to files that are imported in that main scss file.

My proposed solution would be to add a trait, let's call it ImportLoader or whatever, which specifies a single function that takes a filepath and returns the file content as a String.
This could then be used to both apply arbitrary logic to the paths, thus allowing for more intricate file resolution in different usecases, as well as apply transformations to the file contents itself, as would be my usecase.

If this is something you would consider adding, or if you can think of any other, more fitting solution for my problem, I'd be more than happy to work on a PR for this!

Unnecessary use of `Path` objects in `Options` API (and makes the API significantly harder to use)

This api is kinda frustrating and the lifetimes are unnecessary, it should something akin to

pub fn load_paths<P: AsRef<Path>>(mut self, paths: &[P]) -> Self {}
pub fn load_path<P: AsRef<Path>>(mut self, path: P) -> Self {}

This is more akin to how APIs typically work in the rust std. The overhead is probably insignificant, and makes the Options API significantly easier to use, and lets your end-users pass in anything thats convertible to e.g. a Path (via reference) or a PathBuf (as an owned value).


Personally, regarding the Options struct over here, it'd be simpler to just store owned values (and so use PathBuf), e.g. instead of:

#[derive(Debug)]
pub struct Options<'a> {
    load_paths: Vec<&'a Path>,}

It should be

#[derive(Debug)]
pub struct Options<'a> {
    load_paths: Vec<PathBuf>,}

And just copy the values pass in VIA

pub fn load_paths<P: AsRef<Path>>(mut self, paths: &[P]) -> Self {}
pub fn load_path<P: AsRef<Path>>(mut self, path: P) -> Self {}

But, if you really wanna use Path objects and avoid copying, I'd use Cow<Path> pointers internally and then give the user the option of passing in owned values or references VIA e.g. P: AsRef<Path> or P: Into<PathBuf> (for passing in owned values specifically or just P: AsRef<Path> and clone it).

Importing .css files with @use

Should it be possible to import a plain css file with @use as described in the sass docs?

/* code.css */
code {
  padding: .25em;
  line-height: 0;
}
// style.scss
@use 'code';

Potentially solved by #46

Known Outstanding Issues Megathread

This issue serves as a way to keep track of all known compilation issues

Large features

  • @use and the module system (MVP)
  • @forward #67
  • indented syntax #67
  • compressed output
  • plain-CSS imports #67

Smaller features

These ideally come with minimal reproductions, though the reason why they're failing may be incorrect as they haven't been fully looked into

  • comma separated imports
    • @import "hey1.css", "cookie.css", url("hey2.css"), "fudge.css";
  • parens surrounding single word in media query
    • @media (color) {a {color: red;}}
  • min as arg to min/max
    • min(1, min(2))
  • special function as arg to min/max
    • min(1, env(--foo))
  • inequality sign inside interpolation in media query
    • @media (#{"100px < width < 500px"}) {a {interpolation: in-parens}}
  • invalid simple selector (should error, but panics)
    • simple-selectors(">")
  • vendor prefixed known at rules (one of @supports, @keyframes)
    • @-webkit-keyframes {}
  • styles can render at the toplevel, but they should not be able to #67
    • color: red; should error
  • zero divided by zero panics, but should return NaN
    • (0 / 0)
  • one divided by zero panics, but should return Infinity (this has been updated to return an error instead of crashing) #67
    • (1 / 0)
  • division should only occur when either of the operands is calculated or if they operation is in parens
    • 1 / 2 should be emitted as 1/2, but it currently gives 0.5
  • CSS variables should include everything, notably comments #67
    • --foo: //;
  • numbers should use fuzzy matching -- that is, they should be equal if they are the same to 10 decimal points #67
    • .9999999999999999999999999999999 == .99999999999999999999999999999998
  • we should allow a BOM at the start of files
  • all instances of @import should be moved to the top of the file
  • rgb(a) functions should allow / #67
    • rgba(1, 2, 3 / 4)
  • we dont retain empty parens inside url(...) #67
    • url((((())))) (this should actually produce an error, but it just emits url()
  • @import should include strings verbatim #67
    • @import "hux\ bux.css"; this should include the \, but it does not because we use normal string parsing
  • subtraction with no space between operands and rhs is interpolated
    • 10-#{10} should give 10 -10 but it gives 10-10
  • non-comparable inverse units #67
    • (1px / 1em)
  • !optional in @extend
  • deny content block being passed to @mixin without @content #67
  • @extend should not be possible between media query boundaries
  • @media query merging #67
  • inspect(...) does not properly preserve parens in some cases
  • @charset should only accept a string
    • @charset 1+1; should error
  • function names containing interpolation should always be evaluated as unknown functions #67
    • color: qu#{o}te(red) current returns "red", but should give quote(red)
  • unknown at rule with query but no curly braces
    • @foo "bar"; (we do parse this correctly, but we emit it with two semicolons)
  • unicode ranges
    • e.g. U+A2??
  • allow varargs to contain named arguments and support builtin fn keywords #67
  • feature complete parsing of @supports #67
  • support angle units other than deg to builtin fns, math.cos(1grad) #67

publish new release

The fix in e2c32a6 fixes an issue I was having with paths. Could you publish a new release with this to crates.io? Thanks much!

var(--global-var) not accepted as a color variable

I have this simplified example which fails:

$global-color: var(--global-var);
$icon-link-active-color: darken($global-color, 5%);

It fails with Error: $global-color: var(--global-var) is not a color.

While this indeed isn't it should know that css vars are or can be colors :)

(For a working example take a look at #26 (comment) )

`map.get` doesn't support `$keys...` argument

Dear Grass Team,

I hope this message finds you well. I wanted to bring to your attention an issue I encountered while using the Grass library to compile the Fontsource mixins.scss file. The issue pertains to the map.get function and its behavior when attempting to retrieve a nested value from a map.

Description:
When using the map.get function in Grass, I noticed that it works perfectly fine when retrieving a value from a top-level map. However, when trying to retrieve a value from a nested map using the same function, an error is thrown stating that only two arguments are allowed instead of three.

I encountered this issue specifically when compiling the Fontsource mixins.scss file, which relies on the map.get function to retrieve nested values from the metadata map.

For example, consider the following code snippet from mixins.scss:
...

$display: if($display, $display, swap);
$formats: if(not $formats or $formats == all, if($isVariable, woff2, (woff2, woff)), $formats);
$subsets: if(
$subsets,
if($subsets == all, map.get($metadata, subsets), $subsets),
map.get($metadata, defaults, subset)
);
$weights: if(
$weights,
if($weights == all, map.get($metadata, weights), $weights),
map.get($metadata, defaults, weight)
);
$styles: if(
$styles,
if($styles == all, map.get($metadata, styles), $styles),
map.get($metadata, defaults, style)
);
$axes: if(
$axes,
if($axes == all, full, $axes),
if($isVariable, if(map.has-key($metadata, axes, wght), wght, full), null)
);

...

In this case, the map.get function fails when attempting to retrieve the nested values from the $metadata map within the if statements.

Error Message:
Error: Only 2 arguments allowed, but 3 were passed.

48 │ map.get($metadata, defaults, subset)
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

./mixins.scss:48:5

Test to Replicate the Issue:
To replicate the issue, I have created a simple test case using Grass and Sass that demonstrates the problem with the map.get function. Here's the code snippet:

//nestedmap.scss
@use 'sass:map';
$colors: (
primary: (
text: #FF0000,
bg: #990000,
),
secondary: (
text: #00FF00,
bg: #009900,
),
);
.text-primary {
color: map.get($colors, primary);
}
.bg-primary {
background-color: map.get($colors, primary, bg); // Error occurs here
}
.text-secondary {
color: map.get($colors, secondary);
}
.bg-secondary {
background-color: map.get($colors, secondary, bg); // Error occurs here
}

grass nestedmap.scss nestedmap.css
Error: Only 2 arguments allowed, but 3 were passed.

19 │ background-color: map.get($colors, primary, bg); // Error occurs here
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

./nestedmap.scss:19:21

When attempting to compile the above Sass code using the Grass compiler, the same error occurs, indicating that only two arguments are allowed instead of three when using the map.get function to retrieve nested values.

Expected Behavior:
Ideally, the map.get function in Grass should support retrieving nested values from a map without any errors.

I hope this information helps in addressing the issue. If you need any further details or assistance, please let me know. Thank you for your attention to this matter, and I appreciate your efforts in maintaining the Grass library.

Best regards

API improvement for grass::from_path

Hey, once again I am very pleased with how far this project has come! Keep up the good work.

I wanted to suggest an API improvement to grass::from_path. There are definitely a few ways to do this, however in a use case of mine, I am dealing with a potentially cross-platform FS path. So, either a &Path or an AsRef<Path> might be a nice improvement here. Currently, the parameter just needs to be a &str. Which is obviously doable, but I think in many cases, the suggestion I'm making here will be an ergonomics improvement.

I should have time to pop a quick PR for this later today, but I at least wanted to open this up for some discussion.

compressed output is eliding zeros

Minimal Reproducible Example:

.box {
    box-shadow: 0 0.5em gray;
}

grass Output:
(with style set to compressed)

.box{box-shadow: .5em gray}

dart-sass Output:
(with style set to compressed)

.box{box-shadow:0 .5em gray}

the output does match dart-sass when they both have style set to expanded

Question: Breakdown of unimplemented features?

Hi there,

I saw there are a number of outstanding tests that aren't passing. As someone outside to the project, I would love to adopt the library and contribute, but I am wondering what the failing areas are, and what kind of work would be entailed to tackle the remaining parts of the test suite. Maybe the project can have some issues open for major areas of work to be done?

Thanks,
Phil

Imports not ordered correctly when using url

I notice that the readme mentions "css imports" still remaining. So this might just be a case that hasn't been implemented yet. However, I took a quick look at the imports test cases, and nothing jumped to my eye, so I thought I'd report it anyways.

The @import url("...") is not moved to the top after other @import "..."s have been resolved. The contents of the other imports thereby appear before the @import url("...") in the final output. Which the docs for @import on MDN mentions is not allowed.

Imported rules must precede all other types of rules, except @charset rules; as it is not a nested statement, @import cannot be used inside conditional group at-rules.

My specific case, was that I had an @import url which imported a font. Which resulted in the font never being loaded, given that it was not at the top of the style sheet.

Minimal Reproducible Example:

// style.scss
@import "foo";
@import url("...");

// foo.scss
span {
    color: red;
}

grass Output:

span {
  color: red;
}
@import url("...");

dart-sass Output:

@import url("...");
span {
  color: red;
}

Expose SassErrorKind as public

In my project (https://github.com/elkowar/eww), I already have a error reporting infrastructure and error rendering system which defines how errors for non-scss stuff looks. It'd be very nice if I could integrate grass errors into that code.

For this, the SassErrorKind field of SassError and the Type itself would need to be public. That way, I could access the Location and Span information of the error myself, and decide how to render the errors, rather than being restricted to the built-in rendering solution from grass.

Reducing size of Color

I want to give a try to reduce size of Color. Currently,

error: size: Size { raw: 216 }
  --> src/color/mod.rs:32:1
   |
32 | / pub(crate) struct Color {
33 | |     rgba: Rgba,
34 | |     hsla: Option<Hsla>,
35 | |     repr: String,
36 | | }
   | |_^

error: size: Size { raw: 96 }
  --> src/color/mod.rs:79:1
   |
79 | / struct Rgba {
80 | |     red: Number,
81 | |     green: Number,
82 | |     blue: Number,
83 | |     alpha: Number,
84 | | }
   | |_^

error: size: Size { raw: 32 }
  --> src/color/mod.rs:88:1
   |
88 | / struct Rgba2 {
89 | |     red: f64,
90 | |     green: f64,
91 | |     blue: f64,
92 | |     alpha: f64,
93 | | }
   | |_^

error: size: Size { raw: 24 }
  --> src/value/number/mod.rs:21:1
   |
21 | / pub(crate) enum Number {
22 | |     Small(Rational64),
23 | |     Big(Box<BigRational>),
24 | | }
   | |_^

Currently,

pub(crate) struct Color {
    rgba: Rgba,
    hsla: Option<Hsla>,
    repr: String,
}

struct Rgba {
    red: Number,
    green: Number,
    blue: Number,
    alpha: Number,
}

struct Hsla {
    hue: Number,
    saturation: Number,
    luminance: Number,
    alpha: Number,
}

It looks quite huge. I wonder if the following is possible.

pub(crate) struct Color {
    rgb: Rgb,
    // Do we really need an Option since usually I see either one of Rgba or Hsla can be specified?
    // Or can both be specified at the same time?
    // Or maybe just convert Hsla to Rgba and store only Rgba? Not sure if this works.
    hsl: Option<Hsl>,
    // I think we could probably follow libsass and use double precision here.
    alpha: f64,
    // I suggest using SmartString later on for this to allow small string optimization (23 bits could be stored in stack IIRC)
    // I wonder if it would be beneficial if this can be lazily calculated without keeping it in memory?
    repr: SmartString,
}

struct Rgb {
    // Since we are converting these to u8 later on, do we really need it to be Ratio or we can use u8?
    // Or is it used for those translate functions, I am not sure.
    // If u8 is not possible, I guess f64 would be a better choice.
    red: u8,
    green: u8,
    blue: u8,
}

// Have yet checked much on this yet, I bet u8 is not possible here.
struct Hsl {
    hue: f64,
    saturation: f64,
    luminance: f64,
}

This could probably get us to 64 bytes from 216. Or if we split out Hsla from a pointer (Box), we could probably get 32 bytes. I personally think it could be beneficial for cache lines to speed things up, not sure how true is this but we saw performance improvements last time for size reduction IIRC.

@connorskees What do you think?

Non-`Send` error type is restrictive

Having a non-sendable error type prevents composing it with type-erasing error carriers like anyhow:

error[E0277]: `Rc<std::io::Error>` cannot be sent between threads safely
   |
   |     grass::from_path(&path, &options)?;
   |                                      ^ `Rc<std::io::Error>` cannot be sent between threads safely
   |
   = help: within `grass::Error`, the trait `Send` is not implemented for `Rc<std::io::Error>`
   = note: required because it appears within the type `grass::error::SassErrorKind`
   = note: required because it appears within the type `grass::Error`
   = note: required because it appears within the type `Box<grass::Error>`
   = note: required because of the requirements on the impl of `From<Box<grass::Error>>` for `anyhow::Error`

broken colors in mixins

Minimal Reproducible Example (from Bootstrap 4.1.1):

@mixin mixin2($color) {
    background-color: $color;
}

@mixin mixin1($color) {
    color: $color;
    @include mixin2(lighten($color, 10%));
    color: $color;
}

body {
    @include mixin1(#29a846);
}

grass 0.10.2 Output:

body {
  color: #29a846;
  background-color: #36ce59;
  color: #36ce59;
}

dart-sass Output:

body {
  color: #29a846;
  background-color: #36ce59;
  color: #29a846;
}

Using grass as a sass parser without the transformation

I'm working on some tooling to do dependency analysis of my company's sass files.
In a nutshell I want to parse a sass file, extract the "imports" (eg @use, @include, etc) and build a dependency graph across our rather large codebase.

I was looking into the grass_compiler internals (correct me if I'm wrong) but it looks like most of the infra required to parse and traverse a sass file is pub(crate) - making it unusable externally.

I saw #77 mentions

AST traversal can be built through the internals crate grass_compiler.

Does this mean that you want to support this sort of usecase for 1.0?

[feature request] "Built-in" modules

Hi!
I would like to be able to specify fake module "load path", which just uses in-memory &str. My use case is generating syntax highlighting CSS via syntect and then embedding it into an SCSS file, but it could also be useful for providing "standard library"-like features when embedding SCSS compiler.

Compile Twitter Bootstrap 4

A 1.0 release of grass should be able to compile bootstrap identically to dart-sass. The features currently blocking Bootstrap from even compiling are

  • @extend
  • @keyframes
  • @supports
  • map as value in map
  • strange issue involving color functions and precision (this turned out to be due to a lack of rounding in the output of builtin functions red, green, and blue)
  • short circuiting of and operator
  • short circuiting of or operator
  • control flow inside style inside control flow
  • better handling of @import
  • self referential default function arguments

The places where grass and dart-sass differ in output are

  • attribute quoting is incorrect (e.g. output should be ["foo"] => [foo], but we retain quotes). dart-sass has complex rules for determining whether quotes should be emitted or not
  • newlines after multiline comments are retained for some reason in certain conditions. The newlines should be stripped.
  • extended selectors should be wrapped in Rc<RefCell<Selector>>
  • all sorts of media query features
    • variables are evaluated when inside parens
    • validation
    • we emit too many linebreaks inside @media
    • complex rules for emitting newlines around @media
  • line breaks after comments in selectors are not retained
  • division with / should only occur in special cases

`cargo doc` only works with nightly

Hi, when I run cargo doc on a crate that depends on grass 0.12.4 with stable Rust 1.70.0, I get the error:

error[E0554]: `#![feature]` may not be used on the stable release channel
  --> xxx/grass_compiler-0.12.4/src/lib.rs:35:18
   |
35 | #![cfg_attr(doc, feature(doc_cfg))]
   |                  ^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0554`.
error: could not document `grass_compiler`

Support `@use` and the module system

This serves as a tracking issue for everything that needs to be implemented in order to support @use in a feature-complete manner. This intentionally ignores @forward for the time being, though if it appears easy to implement then it will be included here at a later point.

The initial implementation is tracked in #28. With the current patch as is, grass is now passing 3,375 tests.

Builtin modules

  • sass:color
  • sass:list
  • sass:map
  • sass:math
    • clamp
    • hypot
    • log
    • pow
    • sqrt
    • cos
    • sin
    • tan
    • acos
    • asin
    • atan
    • atan2
    • constant pi
    • constant e
  • sass:meta
    • load-css
    • module-functions
    • module-variables
    • various meta functions should take an optional module parameter
      • get-function
      • global-variable-exists
      • mixin-exists
  • sass:selector
  • sass:string

General

  • user definable modules
  • module idempotency
  • variable declarations before loading modules
  • @include of module mixins
  • usage of module variables
  • usage of module functions
  • reassignment of user-defined module variables
  • @use ... as ...;
  • @use ... as *;
  • private members
  • @use ... with (...); (including load-css)

Any plan to add load_paths support when import path with `css`, `scss`, `sass` file extensions

I really like your grass project, I have previously used this library for some of my command line tools that deal with scss, with good results. In my recent project, I have some dependent code that uses @import "theme.scss" or @import "theme" to import scss files under load_paths.

However, when I try to use grass, I find that the former always fails to import.

I browsed through the source code and found that find_import function handles paths with scss, sass, css file extensions differently than paths without extensions, and that the former one does not attempt to use load_paths in the current version and has been marked as a TODO.

https://github.com/connorskees/grass/blob/f7f620e44d8655aac3514677f2d2dc6974f9d918/crates/compiler/src/evaluate/visitor.rs#L836C35-L836C35

// todo: consider load paths

Are there any plans to add this feature in the near future?

Improve devops

This implementation is at a point where it makes sense to

  • Setup CI (fixed in #10)
  • Focus on increasing code coverage (see grcov) to at least 85%
    • Ideally we would only increase coverage through the integration tests using SCSS as input
  • Implement better benchmarking with criterion and compare to other implementations

@include with non-relative paths

I've come across an issue with the library when trying to import paths that were non relative to the scss root file.

This illustrates the issue:

test-grass/
├─ src/
│  ├─ main.rs
├─ scss/
│  ├─ root.scss
├─ my/
│  ├─ susy/
│  │  ├─ susy.scss

This is the code that leads to the behavior:

tempfile!("scss/root.scss", "@import \"susy\";\na {\n color: $a;\n}");
tempfile!("my/susy/susy.scss", "$a: red;");

// not relative dir
assert_eq!(
    "a {\n  color: red;\n}\n",
    grass::from_path(
        "scss/root.scss",
        &grass::Options::default().load_path(std::path::Path::new("my/susy"))
    ).expect("susy")
);

So when trying to execute the former I run into:

Error: Can't find stylesheet to import.
  ╷
1 │ @import "susy";
  │         ^
  ╵
./scss/root.scss:1:9
', src/main.rs:31:19

Is this expected behavior?

Investigate into using itertools

Itertools provide MultiPeek, a peekable iterator but I don't think they have cursors or the sort. The good thing is that it provides a lot of good stuff like peeking_take_while. The downside is I don't see an alternative for truncate_iterator_to_cursor.

how mush faster ?

@for $i from 1 through 100000 {
  .font-#{$i} {
    font-size: 0.5346rem * $i;
  }
}

this sass code is complied in

Screenshot_6

how mush time does it takes with you sir

Towards 1.0

grass is very close to completion and is approaching a 1.0 release. The API is stable and there are very few deviations from the reference implementation.

That said, there is still a bit of work to be done before I would want to call grass fully feature-complete and having full parity with the reference implementation. In its current state I would argue that grass is suitable for virtually all users of Sass, though there are still a few pieces missing.

This is a rough outline of my thoughts for what to work on next for this project. A large part of the remaining work is to catch up with the new features dart-sass has added in the last year or so.

The Module System

@use and @forward have a really surprising level of depth and complexity. Right now very few Sass projects use the module system, but as people move away from libsass, I expect that number to increase. There are a large number of failing spec tests related to this and I'm aware of at least 1 project that fails to compile due to its mixing of @import, @use, and @forward. This bullet is just to solve all of the remaining failing spec tests

  • feature complete module system

API

grass hasn't had a breaking change to its rust API in well over 2 years, and the API that exists currently is resilient to breaking changes. I consider this section largely feature complete, and unless new features are requested, grass will retain the same API it has currently in a 1.0 version.

I may want to add the ability to further configure grass::include! output options, but it should be possible to do so in a backwards-compatible way.

Features that rely on the internals of grass, such as Sass functions written in rust or AST traversal can be built through the internals crate grass_compiler.

Cosmetics

We differ from dart-sass in a number of ways that don't affect the semantics of the output, but do affect the byte-for-byte equality of the output. For the purposes of automated diffing, it would be nice to resolve these differences. Additionally, there are some places where I think grass can improve on things like error messages and error spans.

  • emit loud comments declared on the same line as a statement on the same line as that statement in expanded mode
    • a { /**/ } should emit a { /**/ }. This is a feature dart-sass has added in the last few months
  • remove invalid combinators
    • a > > b {} should not be emitted. This is again a very recent addition to dart-sass
  • do not emit plain CSS @import rules above loud comments that were declared above them
  • preserve certain whitespace for custom-property style rules with newlines (e.g. --foo: ...)
  • our logic for deciding when to split media queries is intentionally simplified, and sometimes splits too often. this makes us differ at times from dart-sass, though does not affect semantics
  • for certain error messages involving unitful NaN, we do not print NaN's unit
  • dart-sass solved their @media indentation bug that we had been emulating, so we should update our code as well

Devops

  • As close to 100% code coverage as possible
  • bulma in CI
  • other large sass frameworks (carbon, duomo, a11ycolor, etc.) in CI
  • multiple versions of bootstrap in CI
  • dart-sass differential fuzzing. grass is already quite regularly fuzzed for crashes, but differential fuzzing would let us find other kinds of bugs

Performance

I've implemented benchmarking in connorskees/sass-perf. grass is ~2x faster than dart-sass for all but 1 benchmark. I have a branch currently that improves SassMaps to make them proper hash maps with amortized constant time lookup and insertion. This doesn't fully fix performance issues on this benchmark, but does bring us a little bit closer. The remaining work here is

  • improve performance of variable lookups by not cloning values or making them cheaper to clone through Rc/Arc
  • improve performance of builtin function calls by not cloning values or making them cheaper to clone through Rc/Arc
  • more robust module/file caching system

An exploration into using Arc/Rc for all values improved performance on bootstrap by about 20-50%.

General compatibility

These are real issues that can affect the semantics of the outputted CSS or cause errors/crashes on valid input. In general, these are extremely rare issues that do not come up very often in practice, but they should be resolved before a final release

Misc

  • Remove the random feature
  • Don't include commandline in default features. Unfortunately seems blocked on rust-lang/cargo#10409 in order to not make this a breaking change

Future dart-sass compatibility

This section is intended to grow as dart-sass adds new features. As part of maintaining grass, new features and bug fixes must be periodically translated from dart-sass.

  • Color spaces level 4 (not currently merged into dart-sass)
  • More special calc-like functions sass/dart-sass#1970

Why Grass & Rust framework integration

Hi @connorskees,

I'm a core member of the frontend framework Seed. I'm looking for a SASS library that I can integrate into Seed projects and yours looks like a good fit.
Could you answer these questions please:

  • What's the difference between Grass and other pure Rust SASS libs like rsass?
  • Do you plan to implement all SASS specs?
  • When do you think we will be able to use Grass to compile, for instance, Bootstrap (4)? (Just rough guess (weeks, months..))

Thank you very much!

P.S. You are very welcome to join our chat and forum (links on the Seed website), we can help at least with testing your library with WASM framework.

Bug in @use (idempotency)

Minimal Reproducible Example:

// common.scss

$color: #fff;
// sub.scss

@use "common";

body
{
   font-color: common.$color;
}
// super.scss

@use "common";
@use "sub";

div
{
   font-color: common.$color;
}

grass Output:

Error: There's already a module with namespace "common".
  ╷
1 │ @use "common";
  │       ^^^^^^^
  ╵
./sub:1:7

dart-sass Output:

body {
  font-color: #fff;
}

div {
  font-color: #fff;
}

/*# sourceMappingURL=super.css.map */

@use cannot be used for the same module within different modules

Minimal Reproducible Example:
Consider the three files, main.scss (the root module), utils.scss (which provides some utility variables/mixins), and other.scss (which also uses the utilities):

// main.scss
@use "utils";
@use "other";
.from-main { color: utils.$value; }

// utils.scss
$value: #fff;

// other.scss
@use "utils";
.from-other { color: utils.$value; }

grass Output:

Error: There's already a module with namespace "utils".
  ╷
1 │ @use "utils";
  │       ^^^^^^
  ╵
./other:1:7

dart-sass Output:

.from-other {
  color: #fff;
}

.from-main {
  color: #fff;
}

From what I can tell, in dart-sass, each module has its own scope for @use imports, but grass does not. As a user, the dart-sass implementation is what I would expect.

Fail to build in release mode

Log
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.0.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.1.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.10.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.11.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.12.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.13.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.14.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.15.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.2.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.3.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.4.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.5.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.6.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.7.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.8.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.9.rcgu.o" "-o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.so" "-Wl,--version-script=/tmp/rustcovBs9X/list" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass.406x5fboagaw4c7q.rcgu.o" "-Wl,--gc-sections" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/ivan/src/pickfire/rs/grass/target/release/deps" "-L" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libindexmap-272dfa54f275ebe9.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_rational-5b6727a0ab3f057e.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_bigint-0a8d817cd5b163f5.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_integer-6dee54ff6b762013.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/librand-388ff9cd82d0b82e.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/librand_chacha-f1c4bdbeb3400ecb.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libppv_lite86-ba722eb1c54d002c.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/librand_core-981207432e62a9e0.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libgetrandom-31e953732b193a03.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/liblibc-e2f92431c381dfcb.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libcfg_if-356719a0c851b556.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_traits-f16b11c1f8204c53.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libonce_cell-060e4a6cff902dc3.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libpeekmore-67158b3baacd8e71.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libsmallvec-7a2f48b407fdbffb.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libcodemap-9d2998489f91ef56.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libbeef-40489afbdced911f.rlib" "-Wl,--start-group" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-6640d3868fa846e8.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-48481e446108229f.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-bfdf9e1c331f914a.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-991e68a3d0300af6.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-74304cfed66bbabf.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-5db30a83f5489d12.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-a106c3f62654e72c.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-3d6b30695af38106.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-d8f11f6bb46ba3ee.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-60c81ab95e289dd1.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-fd1a416f10d6c43d.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-4a2bd2b60cccd1fb.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-7ea8ebc630055039.rlib" "-Wl,--end-group" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-f7cd12d3ecd59a89.rlib" "-Wl,-Bdynamic" "-lutil" "-ldl" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil" "-shared"
  = note: cc: error: /home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.2.rcgu.o: No such file or directory
          cc: error: /home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.3.rcgu.o: No such file or directory
          cc: error: /home/ivan/src/pickfire/rs/grass/target/release/deps/grass.grass.5ed2u8vo-cgu.6.rcgu.o: No such file or directory
          cc: error: /home/ivan/src/pickfire/rs/grass/target/release/deps/grass.406x5fboagaw4c7q.rcgu.o: No such file or directory
          

error: aborting due to previous error

   Compiling grass v0.9.4 (/home/ivan/src/pickfire/rs/grass)
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.0.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.1.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.10.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.11.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.12.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.13.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.14.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.15.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.2.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.3.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.4.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.5.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.6.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.7.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.8.rcgu.o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.9.rcgu.o" "-o" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486" "/home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.2sykgkkzrk6pgmzl.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/ivan/src/pickfire/rs/grass/target/release/deps" "-L" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libindexmap-40467740c29225af.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_rational-03f497498ff16dcf.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_bigint-91157aeb9b06104c.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_integer-6b65c12876849f73.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/librand-467ef675655a9201.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/librand_chacha-6ef1eb1ad79ef190.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libppv_lite86-9e86f41034dc3f8b.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/librand_core-ba93445cdf1e16b3.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libgetrandom-041cad6fc2685895.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libcfg_if-a59addd8999591a4.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libnum_traits-a448d22377fe3565.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libonce_cell-f2cbbf08aa09e553.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libpeekmore-707579d356fa23b4.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libsmallvec-4bac12e736f5739b.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libcodemap-6006131a3d97dec9.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libbeef-4e2456202d8850a6.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libclap-250ff29ac3050d1e.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libvec_map-e82667bf8f5da3b3.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libtextwrap-45813dc7a73b5c5e.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libunicode_width-0d87ff4517d83cc0.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libstrsim-b6b6062010211374.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libbitflags-1d6f3e2181b943c9.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libatty-c750b1f80fcff442.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/liblibc-a507ad065fe2d647.rlib" "/home/ivan/src/pickfire/rs/grass/target/release/deps/libansi_term-fb20393a4da1250f.rlib" "-Wl,--start-group" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-6640d3868fa846e8.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_abort-bef409d4599e726e.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-bfdf9e1c331f914a.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-991e68a3d0300af6.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-74304cfed66bbabf.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-5db30a83f5489d12.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-a106c3f62654e72c.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-3d6b30695af38106.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-d8f11f6bb46ba3ee.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-60c81ab95e289dd1.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-fd1a416f10d6c43d.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-4a2bd2b60cccd1fb.rlib" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-7ea8ebc630055039.rlib" "-Wl,--end-group" "/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-f7cd12d3ecd59a89.rlib" "-Wl,-Bdynamic" "-lutil" "-ldl" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil"
  = note: /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486.grass.dlr4bzj0-cgu.4.rcgu.o: in function `grass::from_path':
          /home/ivan/src/pickfire/rs/grass/src/lib.rs:140: undefined reference to `grass::parse::Parser::parse'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o):/home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: more undefined references to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807' follow
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `grass::output::Css::parse_stmt':
          /home/ivan/src/pickfire/rs/grass/src/output.rs:173: undefined reference to `<grass::parse::Stmt as core::fmt::Debug>::fmt'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/src/output.rs:172: undefined reference to `<grass::parse::Stmt as core::fmt::Debug>::fmt'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/src/output.rs:146: undefined reference to `<grass::parse::Stmt as core::fmt::Debug>::fmt'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17h90c78c13a22af883E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17h90c78c13a22af883E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h0fd809c3d2f3df42E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::IntoIter<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2711: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17h90c78c13a22af883E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17hd0896d94ce9d007fE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.12.rcgu.o): in function `<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:2382: undefined reference to `_ZN4core3ptr13drop_in_place17h2e62cb081e94e68eE.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `std::io::error::Error::new':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/io/error.rs:251: undefined reference to `anon.15b965a4fba59a3c05b1859a91574dda.1.llvm.12514866935107365344'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::result::Result<T,E>::unwrap_or_else':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/result.rs:853: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17h44f14550fe4b9c38E.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `alloc::raw_vec::RawVec<T,A>::try_reserve':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/raw_vec.rs:357: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$4grow17h78183caa615a7e27E.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::iter::traits::iterator::Iterator::try_fold':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/iter/traits/iterator.rs:1881: undefined reference to `_ZN4core3ptr13drop_in_place17h42a6a7620ecb945cE.llvm.3807353400474003484'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::result::Result<T,E>::unwrap_or_else':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/result.rs:853: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17h546adda3e4df47ffE.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::ops::function::FnMut::call_mut':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ops/function.rs:154: undefined reference to `_ZN78_$LT$grass..selector..simple..SimpleSelector$u20$as$u20$core..clone..Clone$GT$5clone17h3fa67f8f87a8bde3E.llvm.3807353400474003484'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::result::Result<T,E>::unwrap_or_else':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/result.rs:853: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17hdcfa35f3d883f66dE.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::iter::traits::iterator::Iterator::try_fold':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/iter/traits/iterator.rs:1881: undefined reference to `_ZN4core3ptr13drop_in_place17hd8ea7ba883a1f3bbE.llvm.3807353400474003484'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::result::Result<T,E>::unwrap_or_else':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/result.rs:853: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17h0e44400ab20d8beeE.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `alloc::raw_vec::RawVec<T,A>::try_reserve':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/raw_vec.rs:357: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$4grow17h4cd8d116e53ec2edE.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::result::Result<T,E>::unwrap_or_else':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/result.rs:853: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17h95dbc9be583059c2E.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::iter::traits::iterator::Iterator::try_fold':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/iter/traits/iterator.rs:1881: undefined reference to `_ZN4core3ptr13drop_in_place17h5b1f8c372836b422E.llvm.3807353400474003484'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `alloc::raw_vec::RawVec<T,A>::try_reserve':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/raw_vec.rs:357: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$4grow17h78183caa615a7e27E.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.3.rcgu.o): in function `core::result::Result<T,E>::unwrap_or_else':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/result.rs:853: undefined reference to `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17h8393c57a98a17d2fE.llvm.7415830645013885171'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:1981: undefined reference to `<alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:1981: undefined reference to `<alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:1981: undefined reference to `<alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:1981: undefined reference to `<alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:1981: undefined reference to `<alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.5.rcgu.o): in function `<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc/vec.rs:1981: undefined reference to `<alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.0.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.0.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/libgrass.rlib(grass.grass.5ed2u8vo-cgu.0.rcgu.o): in function `core::ptr::drop_in_place':
          /home/ivan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ptr/mod.rs:177: undefined reference to `_ZN4core3ptr13drop_in_place17ha63dbd2a90b9f086E.llvm.18168459070913568807'
          /usr/bin/ld: /home/ivan/src/pickfire/rs/grass/target/release/deps/grass-224607d083cb5486: hidden symbol `_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$11allocate_in28_$u7b$$u7b$closure$u7d$$u7d$17hdcfa35f3d883f66dE.llvm.7415830645013885171' isn't defined
          /usr/bin/ld: final link failed: bad value
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: could not compile `grass`.

To learn more, run the command again with --verbose.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.