问题标签 [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 回答
749 浏览

scala - Scala 宏:使用选项类型创建新类

鉴于此,我想编写一个宏:

生成以下代码:

我在这里取得了不错的进展:https ://github.com/pathikrit/metarest

这是我的尝试:https ://github.com/pathikrit/metarest/blob/master/src/main/scala/com/github/pathikrit/MetaRest.scala

测试在这里:https ://github.com/pathikrit/metarest/blob/master/src/test/scala/com/github/pathikrit/MetaRestSpec.scala

通过注释干净地对字段进行分组并生成Get/Post类的最佳方法是什么?此外,对于Patch班级 - 我如何将所有字段转换为Option[original.type]

0 投票
1 回答
569 浏览

scala - Scala递归宏?

我想知道 Scala 是否支持递归宏扩展,例如我正在尝试编写一个带有镜头宏的镜头库来执行此操作:

鉴于lens(a)(_.b.c.d)(f),我想将其转换为a.copy(b = lens(a.b)(_.c.d)(f))

编辑: 我在这里取得了一些不错的进展

List[TermName]但是,对于上面的示例,我无法找出创建访问器的通用方法,因为我有List(TermName('b'), TermName('c'), TermName('d'))),我想生成一个匿名函数,_.b.c.d(x: A) => x.b.c.d。我怎么做?

基本上,我怎样才能以通用的方式编写这些行?

0 投票
1 回答
2113 浏览

scala - 使用 Scala 宏生成方法

我想在 Scala 2.11+ 中使用注释宏生成方法的别名。我什至不确定这是否可能。如果是,如何?

示例 - 鉴于以下情况,我希望注释宏扩展为

我希望上面生成同义词方法存根,如下所示:

上面当然是一个有趣的例子,但我可以看到这种技术对于自动生成 API 的同步/异步版本或在具有大量同义词的 DSL 中很有用。是否也可以在 Scaladoc 中公开这些生成的方法?使用 Scala 元这可能吗?

注意:我的要求与:https ://github.com/ktoso/scala-macro-method-alias 完全不同

另外请不要将此标记为重复,因为问题有点不同,并且在过去 3 年中,Scala 宏领域发生了很大变化。

0 投票
2 回答
343 浏览

scala - 用于覆盖 Scala 函数的 toString 的宏注释

如何编写看起来像用法的宏注释@named("+2") _ + 2并产生:

0 投票
3 回答
1663 浏览

scala - Scala工具删除所有未使用的代码

我正在为我使用的编辑器编写一个 Scala 插件,它会突出显示所有未使用的代码路径(可能是未使用defs的 、和) vals,并为用户提供将它们从文件中拉出的选项。classesimplicits.scala

我怎样才能做到这一点?为了简化问题,假设我们只有一个.scala文件,没有外部依赖库或任何其他代码文件。

理想情况下,我希望这是一个 SBT 插件,给定一个这样的Foo.scala文件,它会吐出Foo_min.Scala文件并删除所有未使用的代码。

0 投票
3 回答
649 浏览

scala - 使用 scala-meta 注释案例类

我有一个使用 scala-meta 的真正初学者问题

我想根据字段的名称向案例类字段的子集添加注释。要注释的类和字段定义如下:

前:

后:

我的问题与树转换中所需的准引号的语法有关:

  1. 选择指定的字段;和
  2. 插入注释

您能否参考任何可以为我指明正确方向的示例?

0 投票
1 回答
168 浏览

scala - 用 scala.meta 替换 scala.reflect,ClassTags 和 TypeTags 会发生什么?

或者这甚至相关吗?

我想到的是使用ClassTagorTypeTag注释,如下所示:

结果是 :

如您TypeTag所见,编译器可以看到它添加了一个隐式参数。中是否有等价物scala.meta?这将如何工作,处理擦除的方式是否会有任何变化?

0 投票
1 回答
106 浏览

scala - 如何在宏注释(内联元)中保留糖、格式和空格?

我正在将 Scala 函数导出为外部格式。为此,我使用scala.meta和一个StaticAnnotation. 就像是:

ExportFunctions extends StaticAnnotation函数体的实现中表示为一棵脱糖树:x.max(y).

但是,出于文档目的,拥有实际的源代码会更好。或者至少是糖(x max y)。

有没有办法保留原始格式/糖?

0 投票
1 回答
344 浏览

scala - 如何使用 Scala-Meta 解析对象?

我正在尝试使用 Scala Meta 编写注释,以便可以从现有对象生成另一个案例类。

但是当我尝试这样做时:

我收到了这个错误:

错误:(5、20)方法解析的参数不足:(隐式转换:scala.meta.common.Convert[domain.MyObject.type,scala.meta.inputs.Input],隐式解析:scala.meta.parsers。 Parse[scala.meta.Source],隐式方言:scala.meta.Dialect)scala.meta.parsers.Parsed[scala.meta.Source]。未指定值参数转换、解析、方言。MyObject.parse[源].show[结构];} ^

我很困惑,因为根据他们的教程,这就是我需要从 http://scalameta.org/tutorial/#.parse[T]开始

我怎样才能反映这个对象循环遍历所有属性?

谢谢

0 投票
1 回答
1049 浏览

scala - 将类型参数传递给 scala 元宏/注释

我想修改上面的宏并添加类型参数[A]。我尝试了以下但它没有编译