Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   SweetJS тред (https://javascript.ru/forum/offtopic/57267-sweetjs-tred.html)

kobezzza 27.07.2015 20:05

SweetJS тред
 
Давайте тут делится годными макросами для SweetJS.

Вот сегодня написал оч полезный макрос:

macro get {
	rule { $obj:expr @ ($property) } => {
		$obj[$property]
	}

	rule { $obj:expr @ ($head $tail ...) } => {
		$obj[$head] || get $obj @ ($tail ...)
	}

	rule infix { $obj:expr:: | [$x (,) ...] } => {
		var tmp = $obj;
		get tmp @ ($x ...)
	}
}


Пример:

really.very.long.namespace::get['someProp', 'someProp2']


Станет

var tmp = really.very.long.namespace;
tmp['someProp'] || tmp['someProp2'];

kobezzza 27.07.2015 22:44

Валидные декораторы с точки зрения синтаксиса JS для функций (в ES7 декораторы можно вешать только на классы, методы класса и литерала объекта).

macro func {
	rule { $arg => $body:expr }
	rule { $arg => { $body ... } }
	rule { ($args (,) ...) => $body:expr }
	rule { ($args (,) ...) => { $body ... } }
	rule { function ($args (,) ...) { $body ... } }
	rule { function $name:ident ($args (,) ...) { $body ... } }
}

macro decorate {
	rule { $f:expr @ ($decorator) } => {
		$decorator($f)
	}

	rule { $f:func @ ($head $tail ...) } => {
		decorate $head($f) @ ($tail ...)
	}

	rule { ($decorators:expr (,) ...) :: $f:func } => {
		decorate $f @ ($decorators ...)
	}
}


function wrapper(cb) {
	return function () {
		alert(1);
		return cb.apply(this, arguments);
	};
}

let foo = decorate(wrapper) :: function (a, b) {
	return a + b;
};

kobezzza 30.07.2015 14:18

https://github.com/kobezzza/SweetHelpers


Часовой пояс GMT +3, время: 09:45.