feat!: use macro call name for scss module name in usey
This commit is contained in:
parent
fe984a9348
commit
a379035f79
5 changed files with 95 additions and 4 deletions
84
sabry_procmacro/tests/macros.rs
Normal file
84
sabry_procmacro/tests/macros.rs
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
use std::{collections::HashSet, fs};
|
||||
|
||||
use sabry_procmacro::{sassy, usey};
|
||||
|
||||
sassy!(scmod:scss {"
|
||||
@mixin abc(){
|
||||
color: red;
|
||||
}
|
||||
.sel1{
|
||||
@include abc;
|
||||
}
|
||||
"});
|
||||
sassy!(samod:sass {"
|
||||
@mixin abc()
|
||||
color: green
|
||||
.sel1
|
||||
@include abc
|
||||
"});
|
||||
|
||||
sassy!(scmicromod:scss "sabry_procmacro/tests/scmicro.scss");
|
||||
sassy!(samicromod:sass "sabry_procmacro/tests/samicro.sass");
|
||||
|
||||
#[test]
|
||||
fn sassy_contract() {
|
||||
assert_eq!(scmod!(syntax), "scss");
|
||||
assert_eq!(
|
||||
scmod!(),
|
||||
"
|
||||
@mixin abc(){
|
||||
color: red;
|
||||
}
|
||||
.sel1{
|
||||
@include abc;
|
||||
}
|
||||
"
|
||||
);
|
||||
|
||||
assert_eq!(scmicromod!(syntax), "scss");
|
||||
assert_eq!(
|
||||
scmicromod!(),
|
||||
fs::read_to_string("tests/scmicro.scss").unwrap()
|
||||
);
|
||||
|
||||
assert_eq!(samod!(syntax), "sass");
|
||||
assert_eq!(
|
||||
samod!(),
|
||||
"
|
||||
@mixin abc()
|
||||
color: green
|
||||
.sel1
|
||||
@include abc
|
||||
"
|
||||
);
|
||||
|
||||
assert_eq!(samicromod!(syntax), "sass");
|
||||
assert_eq!(
|
||||
samicromod!(),
|
||||
fs::read_to_string("tests/samicro.sass").unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn usey_contract() {
|
||||
use samicromod as aliasedmod;
|
||||
|
||||
let _usey = usey!(aliasedmod!(), scmicromod!());
|
||||
let expect_modules =
|
||||
HashSet::from(["aliasedmod.sass".to_string(), "scmicromod.scss".to_string()]);
|
||||
let expect_codes = HashSet::from([
|
||||
fs::read_to_string("tests/samicro.sass").unwrap(),
|
||||
fs::read_to_string("tests/scmicro.scss").unwrap(),
|
||||
]);
|
||||
|
||||
let mut real_modules = HashSet::new();
|
||||
let mut real_codes = HashSet::new();
|
||||
|
||||
_usey.iter().for_each(|(module, code)| {
|
||||
real_modules.insert(module.clone());
|
||||
real_codes.insert(code.clone());
|
||||
});
|
||||
|
||||
assert_eq!(expect_modules, real_modules);
|
||||
assert_eq!(expect_codes, real_codes)
|
||||
}
|
||||
2
sabry_procmacro/tests/samicro.sass
Normal file
2
sabry_procmacro/tests/samicro.sass
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
.sel1
|
||||
color: red
|
||||
3
sabry_procmacro/tests/scmicro.scss
Normal file
3
sabry_procmacro/tests/scmicro.scss
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.sel1 {
|
||||
color: red;
|
||||
}
|
||||
|
|
@ -28,7 +28,6 @@ pub fn sassy_macro_impl(input: TokenStream) -> TokenStream {
|
|||
}
|
||||
|
||||
let sourcesass = code.to_string();
|
||||
let identname = ident.to_string();
|
||||
let macro_doc = format!("Arbitrary {:?} code declared with `sassy!`. Pretty usable in tandem with `usey!` and `magic()` at build time", mode);
|
||||
|
||||
quote! {
|
||||
|
|
@ -36,7 +35,6 @@ pub fn sassy_macro_impl(input: TokenStream) -> TokenStream {
|
|||
#[macro_export]
|
||||
macro_rules! #ident {
|
||||
() => {#sourcesass};
|
||||
(module) => {#identname};
|
||||
(syntax) => {#mode};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,11 @@ impl StyleCall {
|
|||
let call_bang = &self.call.bang_token;
|
||||
// the following calls are expected by macro genereted by `sassy!`
|
||||
let call_syntax = quote! {#call_path #call_bang (syntax)};
|
||||
let call_file = quote! {#call_path #call_bang (module)};
|
||||
|
||||
let module_name = call_path
|
||||
.get_ident()
|
||||
.expect("BUG: failed to get identifier for macro call")
|
||||
.to_string();
|
||||
|
||||
if self.vis_pub {
|
||||
quote! {
|
||||
|
|
@ -42,7 +46,7 @@ impl StyleCall {
|
|||
}
|
||||
} else {
|
||||
quote! {
|
||||
(format!("{}.{}", #call_file, #call_syntax), #call_code .to_string())
|
||||
(format!("{}.{}", #module_name, #call_syntax), #call_code .to_string())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue