问题标签 [scalameta]

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 回答
260 浏览

scala - 使用 scala meta 和 quasiquotes 定义隐式编码器

我正在尝试使用 Circe 创建一个隐式编码器。然而,这个编码器将使用注释创建,因此我使用的是 Scalameta。这是我的代码。但是,编译器抱怨在 quasiquotes 中有一个覆盖语句。

构建文件如下:

结果我仍然得到: 无法扩展宏注释(最常见的原因是您需要启用宏天堂插件;另一种可能性是您尝试在定义它的同一编译运行中使用宏注释)

0 投票
1 回答
544 浏览

scala - 新式(“内联”)宏需要 scala.meta

我刚刚更新到 scala meta 2.0.0-M1 和最新的 scala 2.12.3,现在宏不再编译。我所做的唯一更改是将元版本从 1.8.0 更改为 2.0.0-M1。

错误:新式(“内联”)宏需要 scala.meta

有人知道是否有快速解决此问题的方法吗?

我希望开始尝试一些语义改进。

0 投票
1 回答
493 浏览

scala - 使用代码生成(如 Scala Meta)来抓取样板文件

我使用 Shapeless 的标记类型来获得很好的类型安全原语来通过我的业务逻辑。定义这些类型从一个简单的开始:

但是我为此添加了一些很好的辅助逻辑,现在我的定义看起来更像:

因此,每个定义都有很多样板。我真的很希望能够通过执行以下操作来生成它:

有没有办法用 Scala Meta 或其他代码生成工具来做这样的事情?

0 投票
1 回答
77 浏览

scalameta - 解析一个方法定义字符串,不知道怎么解析成scala.meta.Decl.Def

我希望能够将字符串解析为 Decl.Def 但代码无法编译:

错误:(39, 52) 不知道如何解析成 scala.meta.Decl.Def

我需要做什么来解析它?使用 Scalameta 2.0.0

0 投票
0 回答
74 浏览

scala - 如何运行scalameta生成的Defn

我在玩 Scalameta。这是我的 build.sbt

在我的宏项目中。我有以下代码

现在在我的主要项目中我写

我希望我能够执行由我的宏生成的方法。

编辑:我也试过

0 投票
1 回答
78 浏览

scala - 用于仪器的 Scala-meta

我注意到 scala-meta 提供转换函数,但不提供插入附加代码的函数(例如,导入语句,或在函数的每个开始处调用方法)。

由于所有结构(scala.meta.Tree 及其子结构)都是不可变的,我不确定它是否可能以及如何实现这一点?

0 投票
1 回答
77 浏览

scala - How to match methods which return a Future and have multiple arguments or multiple arguments list (curried)?

I am playing with scalameta and I want to have a generic measurement annotation which sends measurements about how long the method execution took.

I used Qing Wei's cache annotation demo. https://www.cakesolutions.net/teamblogs/scalameta-tut-cache

It works for non async methods but my attribute doesn't match on methods which return Future due to the ExecutionContext argument list.

My annotation looks like this:

I use the annotation like this:

I would like to use it with async methods like this:

but I get the following error:

I assume the issue is MeasureMacroImpl matching but I am not sure how to match on multiple argument groups. Could you guys help me? Any ideas or sample code would be greatly appreciated. I am pretty new to scala and scala meta so apologies if I asked a trivial question.

0 投票
1 回答
63 浏览

scala - scala-meta:在类构造函数中解析可变参数

如何解析 Term 如下所示并提取解析到类应用方法的参数。类 apply 方法接受一个变量参数,因此不知道类构造函数中有多少个参数。

我需要解析并提取传递给TestClassapply 方法的两个参数(数量将在运行时更改),该方法采用可变数量的参数(vararg)

0 投票
1 回答
307 浏览

scala - intellij 无法识别使用 scalameta 生成的代码

我正在尝试创建一个 scalameta 注释,它将在现有对象中定义一个新的案例类。

我的目标是改造:

进入:

为此,我创建了以下注释:

和这个主要的类来测试它:

当我编译并运行主类时,代码的行为符合预期。
在编译期间它打印:

并在运行代码后:


我的问题是当我尝试使用 intellij 使用此代码时。
代码从 intellij 编译和运行,但新类B无法识别,因此代码完成和提示都不起作用

在此处输入图像描述

我正在使用最新的 intellij 和 scala 插件


我已将完整项目上传到 git: https ://github.com/lev112/scalameta_intellij/tree/master

这是我第一次尝试使用 scalameta,我试图了解它是否是 intellij 中的错误,或者我做错了什么

0 投票
1 回答
329 浏览

scala - 将参数传递给 scalameta 天堂宏

我正在尝试创建一个宏注释,但我需要传递它的参数。

用作

上面代码的问题是,注释已经Entity被剥离了 - 因此我无法从那里获取参数。此外,由于内联,该方法也无法访问and字段。applydefnparam1param2apply

您能否指出使用 scala meta 克服此问题的最简单方法?我考虑过使用两个注释

但那是hacky和丑陋的。

非常感谢