Merge branch 'master' of https://github.com/connorskees/grass
This commit is contained in:
commit
25301f8dd1
91
.github/workflows/tests.yml
vendored
Normal file
91
.github/workflows/tests.yml
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
name: CI
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: version info
|
||||||
|
run: rustc --version; cargo --version;
|
||||||
|
|
||||||
|
- name: Run all tests
|
||||||
|
run: cargo test
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
|
||||||
|
clippy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: -- -D warnings
|
||||||
|
|
||||||
|
|
||||||
|
sass-spec:
|
||||||
|
continue-on-error: true
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: version info
|
||||||
|
run: rustc --version; cargo --version;
|
||||||
|
|
||||||
|
- name: Build binary
|
||||||
|
run: cargo b --release
|
||||||
|
|
||||||
|
- name: Get sass-spec
|
||||||
|
run: git submodule init && git submodule update
|
||||||
|
|
||||||
|
- name: Install whatever Ruby needs
|
||||||
|
run: |
|
||||||
|
sudo apt-get install libncurses5-dev libncursesw5-dev
|
||||||
|
sudo gem install bundler
|
||||||
|
cd sass-spec && bundler install
|
||||||
|
|
||||||
|
- name: Run Sass spec
|
||||||
|
run: ./sass-spec/sass-spec.rb -c './target/release/grass'
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,3 +4,5 @@
|
|||||||
Cargo.lock
|
Cargo.lock
|
||||||
coverage
|
coverage
|
||||||
pkg
|
pkg
|
||||||
|
.idea/
|
||||||
|
!input.scss
|
3
input.scss
Normal file
3
input.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
body {
|
||||||
|
background: red;
|
||||||
|
}
|
@ -64,9 +64,7 @@ impl Media {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if super_selector.is_empty() {
|
if !super_selector.is_empty() {
|
||||||
body.append(&mut rules);
|
|
||||||
} else {
|
|
||||||
body = vec![Spanned {
|
body = vec![Spanned {
|
||||||
node: Stmt::RuleSet(RuleSet {
|
node: Stmt::RuleSet(RuleSet {
|
||||||
selector: super_selector.clone(),
|
selector: super_selector.clone(),
|
||||||
@ -75,8 +73,8 @@ impl Media {
|
|||||||
}),
|
}),
|
||||||
span: kind_span,
|
span: kind_span,
|
||||||
}];
|
}];
|
||||||
body.append(&mut rules);
|
|
||||||
}
|
}
|
||||||
|
body.append(&mut rules);
|
||||||
|
|
||||||
Ok(Media {
|
Ok(Media {
|
||||||
super_selector: Selector::new(),
|
super_selector: Selector::new(),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use std::iter::Iterator;
|
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
|
use std::iter::Iterator;
|
||||||
|
|
||||||
use codemap::{Span, Spanned};
|
use codemap::{Span, Spanned};
|
||||||
|
|
||||||
|
@ -324,7 +324,9 @@ impl Value {
|
|||||||
format!("{}{}", self.to_css_string(span)?, s),
|
format!("{}{}", self.to_css_string(span)?, s),
|
||||||
QuoteKind::Quoted,
|
QuoteKind::Quoted,
|
||||||
),
|
),
|
||||||
Self::Null => Value::String(self.to_css_string(span)?.into_owned(), QuoteKind::None),
|
Self::Null => {
|
||||||
|
Value::String(self.to_css_string(span)?.into_owned(), QuoteKind::None)
|
||||||
|
}
|
||||||
_ => Value::String(
|
_ => Value::String(
|
||||||
format!(
|
format!(
|
||||||
"{}{}",
|
"{}{}",
|
||||||
|
@ -431,6 +431,12 @@ fn single_value<I: Iterator<Item = Token>>(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_i64(s: String) -> i64 {
|
||||||
|
s.as_bytes()
|
||||||
|
.iter()
|
||||||
|
.fold(0, |total, this| total * 10 + i64::from(this - b'0'))
|
||||||
|
}
|
||||||
|
|
||||||
impl Value {
|
impl Value {
|
||||||
pub fn from_tokens<I: Iterator<Item = Token>>(
|
pub fn from_tokens<I: Iterator<Item = Token>>(
|
||||||
toks: &mut PeekMoreIterator<I>,
|
toks: &mut PeekMoreIterator<I>,
|
||||||
@ -735,7 +741,7 @@ impl Value {
|
|||||||
|
|
||||||
let n = if val.dec_len == 0 {
|
let n = if val.dec_len == 0 {
|
||||||
if val.num.len() <= 18 && val.times_ten.is_empty() {
|
if val.num.len() <= 18 && val.times_ten.is_empty() {
|
||||||
let n = Rational64::new_raw(val.num.parse::<i64>().unwrap(), 1);
|
let n = Rational64::new_raw(parse_i64(val.num), 1);
|
||||||
return Some(Ok(IntermediateValue::Value(Value::Dimension(
|
return Some(Ok(IntermediateValue::Value(Value::Dimension(
|
||||||
Number::new_machine(n),
|
Number::new_machine(n),
|
||||||
unit,
|
unit,
|
||||||
@ -745,8 +751,7 @@ impl Value {
|
|||||||
BigRational::new_raw(val.num.parse::<BigInt>().unwrap(), BigInt::one())
|
BigRational::new_raw(val.num.parse::<BigInt>().unwrap(), BigInt::one())
|
||||||
} else {
|
} else {
|
||||||
if val.num.len() <= 18 && val.times_ten.is_empty() {
|
if val.num.len() <= 18 && val.times_ten.is_empty() {
|
||||||
let n =
|
let n = Rational64::new(parse_i64(val.num), pow(10, val.dec_len));
|
||||||
Rational64::new(val.num.parse::<i64>().unwrap(), pow(10, val.dec_len));
|
|
||||||
return Some(Ok(IntermediateValue::Value(Value::Dimension(
|
return Some(Ok(IntermediateValue::Value(Value::Dimension(
|
||||||
Number::new_machine(n),
|
Number::new_machine(n),
|
||||||
unit,
|
unit,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user