refactor: use single unified syntax shim type instead of many
This commit is contained in:
parent
ae5645492d
commit
4ef34e344e
2 changed files with 102 additions and 92 deletions
|
|
@ -1,24 +1,30 @@
|
|||
use ostrta::OneSyntaxToRuleThemAll;
|
||||
use raffia::{
|
||||
ast::{
|
||||
ClassSelector, CompoundSelector, IdSelector, NestingSelector, SimpleSelector, Statement,
|
||||
Stylesheet, TypeSelector,
|
||||
},
|
||||
ParserBuilder, Syntax,
|
||||
ParserBuilder,
|
||||
};
|
||||
|
||||
pub mod ostrta;
|
||||
|
||||
/// Convenience wrapper for [Stylesheet]
|
||||
pub struct StylesheetAdapter<'s> {
|
||||
pub syntax: Syntax,
|
||||
pub syntax: OneSyntaxToRuleThemAll,
|
||||
source: &'s str,
|
||||
stylesheet: Stylesheet<'s>,
|
||||
}
|
||||
|
||||
impl<'s> StylesheetAdapter<'s> {
|
||||
pub fn new(source: &'s str, syntax: Syntax) -> Result<Self, raffia::error::Error> {
|
||||
pub fn new(
|
||||
source: &'s str,
|
||||
syntax: OneSyntaxToRuleThemAll,
|
||||
) -> Result<Self, raffia::error::Error> {
|
||||
Ok(Self {
|
||||
stylesheet: ParserBuilder::new(source)
|
||||
.ignore_comments()
|
||||
.syntax(syntax)
|
||||
.syntax(syntax.into())
|
||||
.build()
|
||||
.parse()?,
|
||||
syntax,
|
||||
|
|
@ -103,6 +109,8 @@ mod test {
|
|||
|
||||
use raffia::Spanned;
|
||||
|
||||
use crate::syntax::ostrta::OneSyntaxToRuleThemAll;
|
||||
|
||||
use super::StylesheetAdapter;
|
||||
|
||||
#[test]
|
||||
|
|
@ -157,7 +165,7 @@ div#id2
|
|||
let expect_tags = HashSet::from(["ul", "div", "span"]);
|
||||
|
||||
//scss
|
||||
let adp = StylesheetAdapter::new(source_scss, raffia::Syntax::Scss).unwrap();
|
||||
let adp = StylesheetAdapter::new(source_scss, OneSyntaxToRuleThemAll::Scss).unwrap();
|
||||
|
||||
let classes = adp
|
||||
.class_selectors()
|
||||
|
|
@ -183,7 +191,7 @@ div#id2
|
|||
assert_eq!(expect_tags, tags);
|
||||
|
||||
//sass
|
||||
let adp = StylesheetAdapter::new(source_sass, raffia::Syntax::Sass).unwrap();
|
||||
let adp = StylesheetAdapter::new(source_sass, OneSyntaxToRuleThemAll::Sass).unwrap();
|
||||
|
||||
let classes = adp
|
||||
.class_selectors()
|
||||
|
|
@ -215,7 +223,7 @@ div#id2
|
|||
let newname = "cls203-jg7ihgjhftyfhjh";
|
||||
let expect = ".cls1{color:red; .cls203-jg7ihgjhftyfhjh{color:green;}}";
|
||||
|
||||
let adp = StylesheetAdapter::new(scss, raffia::Syntax::Scss).unwrap();
|
||||
let adp = StylesheetAdapter::new(scss, OneSyntaxToRuleThemAll::Scss).unwrap();
|
||||
let classes = adp.class_selectors();
|
||||
let target_class = classes[0].clone();
|
||||
|
||||
|
|
|
|||
64
sabry_intrnl/src/syntax/ostrta.rs
Normal file
64
sabry_intrnl/src/syntax/ostrta.rs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
/// Convenience unification entrypoint
|
||||
/// to make friends with all the different syntax-consumers
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum OneSyntaxToRuleThemAll {
|
||||
Sass,
|
||||
Scss
|
||||
}
|
||||
|
||||
impl Default for OneSyntaxToRuleThemAll {
|
||||
fn default() -> Self {
|
||||
Self::Scss
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&str> for OneSyntaxToRuleThemAll {
|
||||
type Error = ();
|
||||
fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
"sass" => Ok(Self::Sass),
|
||||
"scss" => Ok(Self::Scss),
|
||||
_ => Err(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<raffia::Syntax> for OneSyntaxToRuleThemAll {
|
||||
type Error = ();
|
||||
fn try_from(value: raffia::Syntax) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
raffia::Syntax::Sass => Ok(Self::Sass),
|
||||
raffia::Syntax::Scss => Ok(Self::Scss),
|
||||
_ => Err(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<grass::InputSyntax> for OneSyntaxToRuleThemAll {
|
||||
type Error = ();
|
||||
fn try_from(value: grass::InputSyntax) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
grass::InputSyntax::Sass => Ok(Self::Sass),
|
||||
grass::InputSyntax::Scss => Ok(Self::Scss),
|
||||
_ => Err(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<OneSyntaxToRuleThemAll> for raffia::Syntax {
|
||||
fn from(value: OneSyntaxToRuleThemAll) -> Self {
|
||||
match value {
|
||||
OneSyntaxToRuleThemAll::Sass => Self::Sass,
|
||||
OneSyntaxToRuleThemAll::Scss => Self::Scss
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<OneSyntaxToRuleThemAll> for grass::InputSyntax {
|
||||
fn from(value: OneSyntaxToRuleThemAll) -> Self {
|
||||
match value {
|
||||
OneSyntaxToRuleThemAll::Scss => Self::Scss,
|
||||
OneSyntaxToRuleThemAll::Sass => Self::Sass
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue