-
Notifications
You must be signed in to change notification settings - Fork 56
sweet.js
Geza Kovacs edited this page Feb 4, 2017
·
3 revisions
sweet.js allows us to write macros that implement functionality such as require_package or require_css (the below is designed for sweet.js 2.2.1)
syntax require_css = function(ctx) {
let delim = ctx.next().value;
let arr = []
let dummy = #`dummy`.get(0)
let remap = {
'bar': '/path/to/bar.css',
'foo': '/even/longer/path/to/foo.css'
};
let item_val;
for (let item of delim.inner()) {
item_val = item.val()
if (remap[item_val]) {
item_val = remap[item_val]
}
arr.push(dummy.fromString(item_val))
break
}
return #`
require('libs_common/content_script_utils').load_css_file(${arr})
`
}
syntax require_package = function(ctx) {
let delim = ctx.next().value;
let arr = []
let dummy = #`dummy`.get(0)
let remap = {
'bar': 'bazz'
};
for (let item of delim.inner()) {
arr.push(dummy.fromString(item.val()))
break
}
return #`
require(${arr});
require_css(${arr})
`
}
var x = require_package('bar');
var y = require_package('foo');
var y = require_package('buz');If we run the above code with the command sjs foo.js, it compiles to the following
var x_14 = require("bar");
require("libs_common/content_script_utils").load_css_file("/path/to/bar.css");
var y_15 = require("foo");
require("libs_common/content_script_utils").load_css_file("/even/longer/path/to/foo.css");
var y_15 = require("buz");
require("libs_common/content_script_utils").load_css_file("buz");