问题标签 [ppx]

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 投票
2 回答
898 浏览

ocaml - OCaml ppx_xml_conv 模块是否有任何使用示例

我正在寻找来自 janestreet 的 ppx_xml_conv 模块的简单示例。我对(相对)新的 ppx 东西不是很熟悉,也无法从源代码中真正弄清楚。最终,我正在尝试为旧的 SOAP 服务编写客户端,并希望将 xsd(来自 wsdl)转换为类型和序列化器/反序列化器。

0 投票
1 回答
253 浏览

ocaml - OCaml code transformed through my PPX syntax extension can't find other packages

So, I've written a simple PPX for OCaml that transforms a silly DSL into some library calls

Becomes something like

However, whenever I attempt to compile it, I get 'Unbound value ReactJS.create_element'. Strangely, though, if I get it to output the transformed code, then copy that code directly into the file, it compiles fine.

Do PPX syntax extensions need to be linked to any libraries their generated AST references? Am I missing something really silly?

I'm building my project with the following simple ocamlbuild command:

And the PPX is generated/installed via oasis.

Anybody have any clues?

0 投票
1 回答
596 浏览

ocaml - 如何在 OCaml 中使用 ppx.metaquot?

README.md中写的命令不起作用(显示了ocamlfind的用法。)我理解ppx_metaquot执行文件是一种重写文件,所以我可以通过这种方式使用准引号翻译我的代码:

但这可能不是一种假设的方式,所以请告诉我正确的用法。

0 投票
2 回答
645 浏览

ocaml - OCaml 属性

我正在查看手册,发现 OCaml 中有一些属性用于将事物声明为已弃用(请参阅http://caml.inria.fr/pub/docs/manual-ocaml/extn.html),但我无法弄清楚如何让它们被编译器识别。

这是我写的程序:

(我也尝试过[@@deprecated ...]而不是[@@ocaml.deprecated ...]相同的结果)。我运行时没有收到任何警告:

我需要在我的_tags文件中设置什么吗?还有什么我在这里想念的吗?

0 投票
1 回答
863 浏览

ocaml - 使兼容ocaml、camlp4、ppx、node、js_of_ocaml、ocamlbuild

安装npmand后node,编译 OCaml 文件时js_of_ocaml出现错误,因此我这样做了opam switch reinstall system

然后,我意识到ocamlfind不再工作了:

PS:node --versionv6.1.0npm --version3.8.6; ocaml -versionThe OCaml toplevel, version 4.03.0. js_of_ocaml --version2.7,但在之后opam swtich reinstall system,它给了-bash: /Users/softtimur/.opam/system/bin/js_of_ocaml: No such file or directory

有谁知道如何使所有这些软件包兼容?


早些时候:这是安装npmand之后node和之前的编译错误opam switch reinstall system

另一种方式也报错:


最初: 我最初的目标是编写和编译cubes.ml这样 1)它包装一个 OCaml 函数来制作一个可以在 Web 中调用的 JS 函数;2)OCaml函数和字节码可以在Linux下用命令行测试。

cubes.ml如下:

然后,ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T应该生成T这样./T应该返回hello的。并且js_of_ocaml T -o cubes.js应该生成cubes.js这样的函数jsOneArgument可以cubes.js很好地被其他JS或HTML文件调用。

在我弄乱包裹之前,./T返回Unimplemented Javascript primitive caml_pure_js_expr!,这就是我安装的原因npmnode等等......

0 投票
1 回答
816 浏览

ocaml - 使用 ppx 和扩展点在 OCaml 中为 DSL 编写解析器

最近在OCaml官方github上公布了Camlp4被替换为ppx rewriters and extension pointshttps://github.com/ocaml/camlp4):

在 4.01.0 版本之前,Camlp4 是官方 OCaml 发行版的一部分。从那时起,它已被更易于维护和学习的更简单系统所取代:ppx 重写器和扩展点。

我一直在Camlp4为 DSL 编写解析器(与 OCaml 分离的语法)。

所以,我想问一下这个ppx rewriters工具是否可以做同样的事情?

感谢您花时间阅读我的问题!

0 投票
2 回答
628 浏览

ocaml - 如何设置 ocamlinit 以使 ppx 工作?

这是我的 ocamlinit:

正是有了这个,我在 utop 中得到了这个

#ppx如果我使用以代替开头的行#require "ppx_jane",我会收到此错误

我应该如何设置 ocamlinit 来使用[@@deriving show]

0 投票
1 回答
122 浏览

ocaml - 使用 ppx 时启用有关未使用/无效属性的警告

我正在尝试使用一些 ppx 扩展,但我刚刚发现 OCaml 不会对未使用/无效的属性发出警告。例如,如果我写类似:

即使使用-w +A,OCaml 也不会说明从未使用过的事实@blaa,并且可能输入错误。

当尝试使用 ppx 重写器并错误键入给定属性(例如,@blaa而不是@bla)并且无法找到它时,这尤其令人沮丧。或者当一个给定的 ppx 重写器根本没有被启用时,所有的属性都被默默地忽略了。

有没有办法为这种情况启用警告?

注意:我用 4.03.0 和 4.04.0 都试过了,在这两种情况下都没有收到任何警告。

0 投票
3 回答
201 浏览

comments - 词法分析器/过滤器评论

是否有允许过滤源文件中的注释的 OCaml 工具,类似于gcc -E

理想情况下,我正在寻找可以删除除评论之外的所有内容的东西,但反过来也很有用。

例如,如果有一种方法可以使用camlp4/campl5/ppx 来获取OCaml 注释(包括用单个星号定义的非OCamldoc 注释),我想知道。我在 Camlp4 的 AST 中寻找注释节点并没有取得多大成功(尽管我知道它必须存在,因为甚至存在与 Camlp4 修改它们的位置有关的错误)。

这是一个示例:在以下文件中:

我想理想地获得:

它们之间的空格和是否存在(* *)大多无关紧要,但它应该保留各种评论。我的直接目的是能够将其过滤到拼写检查器中,但清理评论(即有一个只删除评论的过滤器)也很有用:我可以清理评论,然后使用它diff来获取已删除的内容。

0 投票
1 回答
372 浏览

ocaml - OCaml:如何一起使用电池和 ppx_deriving.*?

目前我正在尝试使用Batterieswithppx_deriving.show或类似的东西。
我想知道如何有效地一起使用它们。

要创建转储函数,我觉得 ppx_deriving.show 很有用。但是我在使用它们时遇到了一些麻烦,如下所示。

nowMap.pp没有定义,所以无法编译。

我的临时修复是我创建module Map了包含Batteries.Map和定义函数pp

它有效,但对我来说适应所有数据结构很痛苦......
Corewithppx_deriving.sexp是另一种选择,但我更喜欢Batterieswith ppx_deriving.show。有谁知道如何解决这个问题?