https://github.com/rmw-lib/coffee-label-patch
https://github.com/rmw-lib/coffee-label-patch
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/rmw-lib/coffee-label-patch
- Owner: rmw-lib
- Created: 2022-03-25T06:05:18.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-07-04T06:28:49.000Z (about 4 years ago)
- Last Synced: 2026-05-19T00:48:08.575Z (2 months ago)
- Language: Shell
- Size: 72.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# @rmw/coffee-label-patch
Make coffeescript support :label syntax (similar to [livescript](https://livescript.net)) so that it can be used for [svelte](https://svelte.dev).
It's too hard to modify the compiler based on lex, ast, and I did this based on string substitution.
This is just a crude hack, but it does work.
Expect coffee to officially add this syntax.
## Install
```yarn add @rmw/coffee-label-patch ``` or ``` npm install @rmw/coffee-label-patch```
## Use
```coffee
#!/usr/bin/env coffee
import CoffeeScript from "coffeescript"
import hack from '@rmw/coffee-label-patch'
hack CoffeeScript
console.log CoffeeScript.compile(
"""
y = 0
:$ x=y*2
:$ if y>2 then x+=y else x-=y
:$
if x > y
x = y/2
else
x = y+9
x += 1
do =>
+ a,b
:$ func = => 1
:$ func = ->
1
2
do =>
:out
for i in [1,2,3]
for j in [4,5,6]
console.log i,j
if i > 1
break out
return
< x
< x = 1
"""
bare:true
# sourceMap:true
)
```
output :
```js
var x, y;
y = 0;
$ : x = y * 2;
$ : y > 2 ? x += y : x -= y;
$ : {
if (x > y) {
x = y / 2;
} else {
x = y + 9;
}
x += 1;
}
(() => {
var i, j, k, l, len, len1, ref, ref1;
out : {
ref = [1, 2, 3];
for (k = 0, len = ref.length; k < len; k++) {
i = ref[k];
ref1 = [4, 5, 6];
for (l = 0, len1 = ref1.length; l < len1; l++) {
j = ref1[l];
console.log(i, j);
if (i > 1) {
break out;
}
}
}
}
})();
```
then `node test.out.js` , stdout is
```
1 4
1 5
1 6
2 4
```
## 中文说明
让 coffeescript 支持 :label 语法(类似 livescript),这样就可以用于 [svelte](https://svelte.dev) 。
基于 lex 、 ast 去修改编译器太难了,我基于字符串替换做到这个功能。
这只是一个粗糙的hack。但它的确能工作。
期待coffee正式加入此语法。
## 关于
本项目隶属于**人民网络([rmw.link](//rmw.link))** 代码计划。
