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

scala - 使用 Scala.meta 生成带有 Binding.scala Vars 的案例类会引发异常

我有一个 scala.js 项目。我对 Scala.Meta 和 Binding.scala 有一个奇怪的行为。

我想从案例类创建一个案例类:

应生成:

只要我有一个Vars,我就会收到以下错误:

没有(例如SimpleCaseClassFormData(Var[Int], Var[String]) )它可以工作。

在这里你可以找到整个项目:scala-adapters-form

0 投票
1 回答
81 浏览

scala - scala.meta.Lit.type 不带参数

当我运行以下命令时:

我得到 scala.meta.Lit.type 不带参数 val x = q"1"

scalameta_2.11:1.8.0

天堂_2.11.8:3.0.0-M7

我正在尝试使一些基本的宏示例正常工作,特别是在此处找到的“Hello”示例:

https://www.beyondthelines.net/computing/generating-protobuf-formats-with-scala-meta-macros/

我在“val hello ....”行上遇到同样的错误

任何想法/建议将不胜感激 - 我真的很高兴能玩宏!

0 投票
1 回答
815 浏览

scala - 为案例类自动生成案例对象

如何让 scala 编译器自动生成案例对象?

案例对象的所需属性

  • 为每个属性case class生成一个属性case object
  • 将每个对应案例对象的值设置为属性名称的字符串表示,并更改camelCasesnake_case对象属性名称,保留snake_case对象属性值
0 投票
1 回答
55 浏览

scala - 对象 contrib 不是包 meta 的成员

我正在尝试使用isEqualScalaMeta 中的方法。

导入不起作用:

我正在使用sbt,我的中有以下内容build.sbt

我在哪里可以找到isEqualScalaMeta 的方法?它似乎已被弃用。我正在关注本教程

0 投票
0 回答
65 浏览

scala - macroparadise 是否不再从命令行工作?

我正在尝试开始使用天堂宏插件,所以我一直从身份宏示例开始:

https://docs.scala-lang.org/overviews/macros/annotations.html

但是,当我尝试使用身份注释时,我得到

如您所料,如果未加载插件。但是,我正在按照

https://docs.scala-lang.org/overviews/macros/paradise.html

但是当我调用时:

我没有看到macroparadise阶段:

但是,如果我改为

我明白了

所以我真的很困惑我在这里错过了什么步骤?我缺少一些新的命令行参数吗?是否需要使用 sbt?

0 投票
0 回答
164 浏览

scala - ScalaMeta、ScalaFix 和 SemanticDB 之间的关系

我有以下信息:

  • Scalameta:能够从源文件生成 AST


  • SemanticDB:包含来自已解析源文件的符号信息

  • ScalaFix:基于 ScalaMeta 和 SemanticDB,因此它具有访问符号信息和遍历 AST 的能力。

使用 ScalaMeta 加载源文件非常简单,如下所示:

从上面的代码片段可以看出,ScalaMeta 将源文件解析为 type Source

现在考虑下面的代码片段,其中 ScalaFix 使用类型树SemanticDocument

检查上面的两个代码片段表明 ScalaMeta 可以将 Scala 源解析为 type Source。ScalaFix 似乎将其解析为implicit SemanticDocument. SemanticDocumenthas 字段由 ScalaMeta 实现,tree它生成一个可遍历的 AST 数据结构,就像将源文件解析为 type 所产生的一样Source。这显示了 ScalaMeta 和 ScalaFix 之间的关系。但是,我担心的是我需要加载 Scala 源代码并在其上使用 ScalaFix 来访问symbol.info,但ScalaFix文档没有显示如何执行此操作。

当我尝试SemanticDocument在第一个代码片段中加载源文件时,而不是Source

我得到一个错误no parameters found for parameter parse in parse[SemanticDocument]。另请注意,尝试symbol.info 在第一个代码片段中使用也会产生有关隐式类型的错误。第二个代码片段不是这种情况,因为加载的doc参数是implicit parameter of type SemanticDocument.

那么 ScalaFix 是如何加载源文件的SemanticDocument呢?

0 投票
1 回答
70 浏览

scala - 使用 ScalaFix 从 Scala 源文件中获取 SemanticDocument

将 Scala 源文件解析为SemanticDocumentusing的步骤是什么ScalaFix

0 投票
1 回答
99 浏览

scala - 如何使用准引号来获取值的类型?

我正在尝试编写以下内容:

本质上,我需要捕获value( Int) in的类型tpe并将其分配给U. 如何做到这一点?

0 投票
2 回答
129 浏览

scala - 如何获得 AST 所代表的值的类型?

我正在尝试编写以下内容:

我需要捕获由 AST 表示的值的类型value并将tpe其分配给U. 如何做到这一点?

编辑:在这里通过准引号为其提供类型注释value和匹配不是一个选项。用例是一个无形可扩展记录,它具有复杂的类型,String with labelled.KeyTag[1, String] :: Long with labelled.KeyTag[three, Long] :: HNil例如val ls = (1 ->> "two") :: ("three" ->> 4L) :: HNil. 此外,valueAST 是以编程方式生成的,而不是文字。

0 投票
2 回答
362 浏览

scala - 如何在 Scala 中获取表达式的(静态)类型?

Scala 是否有任何等效于 GCC 的typeof扩展?(或 C++ decltype?)

我正在生成引用一些外部代码(可能尚不可用)的代码,并且我需要一种方法来在方法定义中引用该代码的类型

对于单例对象,我可以使用Foo.type,但如果Foo是任意表达式,则不起作用。

更新:

这是一个显示问题的简化示例:

Foo我正在处理的代码除了它是 Scala 表达式的字符串表示之外一无所知。它将上述代码输出到一个.scala文件,该文件稍后将作为单独项目的一部分进行编译。

当然,这些typeof(Foo)位不起作用。Foo.type仅当Foo是单例时才使用。

基本上,我想知道是否有可以替代的东西可以typeof(Foo)用于任意 Scala 表达式。