This commit is contained in:
ConnorSkees 2020-01-06 19:23:52 -05:00
parent 1d80b00c20
commit 46a6fd90f6
4 changed files with 34 additions and 8 deletions

View File

@ -6,16 +6,22 @@ use std::io;
#[derive(Debug)] #[derive(Debug)]
pub struct SassError { pub struct SassError {
message: String, message: String,
pos: Pos pos: Pos,
} }
impl SassError { impl SassError {
pub fn new<S: Into<String>>(message: S, pos: Pos) -> Self { pub fn new<S: Into<String>>(message: S, pos: Pos) -> Self {
SassError { message: message.into(), pos } SassError {
message: message.into(),
pos,
}
} }
pub fn unexpected_eof(pos: Pos) -> Self { pub fn unexpected_eof(pos: Pos) -> Self {
SassError { message: String::from("unexpected eof"), pos } SassError {
message: String::from("unexpected eof"),
pos,
}
} }
} }
@ -27,7 +33,10 @@ impl Display for SassError {
impl From<io::Error> for SassError { impl From<io::Error> for SassError {
fn from(error: io::Error) -> Self { fn from(error: io::Error) -> Self {
SassError{ pos: Pos::new(), message: format!("{}", error) } SassError {
pos: Pos::new(),
message: format!("{}", error),
}
} }
} }

View File

@ -99,7 +99,8 @@ mod test_scss {
#[test] #[test]
fn $func() { fn $func() {
let mut buf = Vec::new(); let mut buf = Vec::new();
StyleSheet::new($input).expect(concat!("failed to parse on ", $input)) StyleSheet::new($input)
.expect(concat!("failed to parse on ", $input))
.pretty_print(&mut buf) .pretty_print(&mut buf)
.expect(concat!("failed to pretty print on ", $input)); .expect(concat!("failed to pretty print on ", $input));
assert_eq!( assert_eq!(
@ -112,7 +113,8 @@ mod test_scss {
#[test] #[test]
fn $func() { fn $func() {
let mut buf = Vec::new(); let mut buf = Vec::new();
StyleSheet::new($input).expect(concat!("failed to parse on ", $input)) StyleSheet::new($input)
.expect(concat!("failed to parse on ", $input))
.pretty_print(&mut buf) .pretty_print(&mut buf)
.expect(concat!("failed to pretty print on ", $input)); .expect(concat!("failed to pretty print on ", $input));
assert_eq!( assert_eq!(
@ -216,6 +218,11 @@ mod test_scss {
"$a: 1px;\n$b: $a; $a: 2px;\na {\n height: $b;\n}\n", "$a: 1px;\n$b: $a; $a: 2px;\na {\n height: $b;\n}\n",
"a {\n height: 1px;\n}\n" "a {\n height: 1px;\n}\n"
); );
test!(
variable_shadowing_val_does_not_change_complex,
"a {\n}\n$y: before;\n$x: 1 2 $y;\n$y: after;\nfoo {\n a: $x;\n}",
"a {\n}\nfoo {\n a: 1 2 before;\n}\n"
);
test!( test!(
variable_whitespace, variable_whitespace,
"$a : 1px ;\na {\n height: $a;\n}\n", "$a : 1px ;\na {\n height: $a;\n}\n",
@ -237,12 +244,22 @@ mod test_scss {
"a {\n height: 1 1px;\n}\n" "a {\n height: 1 1px;\n}\n"
); );
test!(
removes_single_line_comment,
"// a { color: red }\na {\n height: 1 1px;\n}\n",
"a {\n height: 1 1px;\n}\n"
);
test!(keyword_important, "a {\n height: 1 !important;\n}\n"); test!(keyword_important, "a {\n height: 1 !important;\n}\n");
test!( test!(
keyword_important_uppercase, keyword_important_uppercase,
"a {\n height: 1 !IMPORTANT;\n}\n", "a {\n height: 1 !IMPORTANT;\n}\n",
"a {\n height: 1 !important;\n}\n" "a {\n height: 1 !important;\n}\n"
); );
test!(
keyword_important_not_at_end,
"a {\n height: !important 1;\n}\n"
);
test!( test!(
combines_hyphens, combines_hyphens,

View File

@ -1,8 +1,8 @@
use crate::common::Symbol; use crate::common::Symbol;
use crate::{Token, TokenKind}; use crate::{Token, TokenKind};
use std::fmt::{self, Display};
use std::iter::Peekable; use std::iter::Peekable;
use std::slice::Iter; use std::slice::Iter;
use std::fmt::{self, Display};
#[derive(Clone, Debug, Eq, PartialEq)] #[derive(Clone, Debug, Eq, PartialEq)]
pub enum Selector { pub enum Selector {