问题标签 [sweet.js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
85 浏览

javascript - sweet.js 宏名称中的转义括号

我想编写一个扩展宏,但为了做到这一点,我需要重写函数的调用方式,如下所示:

someFn(..>someArray)

需要输出:

someFn.apply(null, someArray)

我已经尝试通过创建一个名为(. 我已经看到您不需要在宏主体中转义括号,并且括号用于转义多令牌名称......但到目前为止,我在尝试使用该名称创建宏时遇到问题。

使用该名称,使用 . 解析宏时会出错Error: Line 16: Unexpected end of input。是否有我可以使用的转义字符,或者这是需要在 Github 中报告的内容?

0 投票
2 回答
105 浏览

javascript - sweet.js 如何将函数语句与中缀匹配

我似乎找不到比赛

宏在没有 var 的情况下工作正常。

我知道表达式位置允许使用 1 个非表达式术语,但var $name:ident $[=]不起作用。

如果使用中缀这是不可能的,是否有另一种方法来匹配函数语句并捕获函数的名称?

0 投票
1 回答
113 浏览

sweet.js - 从另一个引用一个 sweet.js 宏的正确方法是什么?

tl;dr

当我在单独的文件中有宏时出现错误,但如果宏在同一个文件中,它似乎可以工作。

test-macro-1.js:

test-macro-2.js:

test.js:

results:

但是...如果我将宏放在同一个文件中,如下所示:

test-macro-1.js:

results:

那么有一些经验的人对将宏安排到文件中以实现模块化和功能的正确方法有任何指导吗?

0 投票
1 回答
28 浏览

sweet.js - 在 Sweet.js 中干掉宏的一些技术是什么?

假设我有这两个宏,除了宏名之外是相同的:

我在这里有哪些代码重用选项?我可以让宏生成宏吗?

或者我可以将主体部分(以 开头letstx...)放在它自己的“内部”宏中吗?:

0 投票
0 回答
61 浏览

visual-studio-2013 - 使用 Visual Studio Web Essentials 在 sweetjs 文件中出现“未知错误”

刚刚开始了解Sweet.JS,并且很高兴地意识到它已经内置到 Visual Studio 2013 Web Essentials 中。

我决定首先制作一个宏来将匿名functions 缩短为fn.

在在线 sweet.js 编辑器中输入这个给我:

sweet.js 编辑器输出

然而,Visual Studio 给了我一个有用的“未知错误”错误消息:

有用的错误信息:

我尝试过的任何输入都会出现同样的错误,包括一个空文件,这对我来说很奇怪。我不知道从哪里开始解决这个问题。

目前,我不知道哪些信息是相关的,但我很乐意编辑这个问题以提供你们需要帮助的任何信息!

谢谢!

0 投票
2 回答
130 浏览

javascript - Sweet.js 的惰性求值宏

我刚接触 JavaScript,发现这种语言不直接支持惰性求值。本机代码变成了这样的样板地狱:

但是我找到了 Sweet.js 并相信它可以让代码变得像这样简单:

所以我测试了Edit Sweet.js

它与单个 expr 一起工作。但是有些情况lazy需要像这样的 expr 块:

所以我把上面的代码安排成这样:

而且由于某种原因它不起作用。我相信第一个模式$($expr) (;) ...不应该与 匹配(3 + 3),但显然它正在这样做。

我为此工作了一个小时,最后放弃了。你如何让这两种模式同时工作?

如果不可能这样做,我想对单个 expr 采取另一种方式:

而且我也不知道该怎么做。

0 投票
1 回答
130 浏览

macros - SweetJS:为特定库编写宏

我目前正在做一个小项目,其中包括为 Ramda 编写宏。这是一个例子:

我尝试编译这个简单的代码示例作为开始:

由于卫生原因,编译后的代码如下所示:

我的问题是我不知道如何引用 ramda。

有没有人尝试为特定库编写宏并遇到此问题?

0 投票
1 回答
44 浏览

sweet.js - Sweet.js 宏参数扩展为正文中的另一个宏,这是不想要的

我正在尝试编写一个甜蜜的宏,但遇到了一些麻烦。

foo(a, b) 应该扩展为

它按预期工作。

但是如果其中一个参数是另一个宏,就会出现一些错误。

例如,有一个名为 'bar' 的宏,那么 foo(a, bar) 将导致以下错误:

我该如何解决这个问题?谢谢

0 投票
2 回答
324 浏览

typescript - sweet.js 在 Typescript 输出中重命名顶级变量怎么办?

打字稿编译

我通过 sweet.js 运行该 JS 代码,即使没有定义宏,也会产生如下内容:

ClassName我知道如果不使用顶层var,或者如果构造函数使用了不同的名称,sweet.js 不会重命名第一次出现的,但它是 Typescript 编译器做这些事情,而不是我。

为什么这是一个问题

  1. 我不能再ClassName在 HTML 文件中使用。这不是我经常想做的事情,当然我可以在没有能力的情况下做,但我仍然想念拥有它。
  2. 到目前为止我想使用的宏不需要任何卫生的重命名。然而现在看来我必须用我自己的脚本撤消重命名。源映射不会轻易提供帮助,因为我已经需要一个用于 typescript --> javascript 转换的源映射。

我的问题

有没有办法在 sweet.js 中禁用卫生重命名?有没有更好的方法来处理这个问题?

0 投票
1 回答
89 浏览

javascript - 如何打破局部变量的 SweetJS 卫生?

我正在尝试在我的项目中使用 SweetJS。为了更好地理解和学习 SweetJS,我想我会从一个简单的“类”宏开始(我知道存在一些,只是在这里玩......)。但是,我似乎无法让 SweetJS 停止弄乱我的局部变量“self”和“superCall”。任何想法我做错了什么?我想var self=this留下var self=this来而不是被破坏。

这扩展为:

如您所见,var self=this已变成var self$2 = this. 我怎样才能防止这种情况?我曾尝试使用makeIdent,但我认为我做错了什么。有任何想法吗?谢谢!