问题标签 [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.
scala - 使用 Scala.meta 生成带有 Binding.scala Vars 的案例类会引发异常
我有一个 scala.js 项目。我对 Scala.Meta 和 Binding.scala 有一个奇怪的行为。
我想从案例类创建一个案例类:
应生成:
只要我有一个Vars
,我就会收到以下错误:
没有(例如SimpleCaseClassFormData(Var[Int], Var[String])
)它可以工作。
在这里你可以找到整个项目:scala-adapters-form
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 ....”行上遇到同样的错误
任何想法/建议将不胜感激 - 我真的很高兴能玩宏!
scala - 为案例类自动生成案例对象
如何让 scala 编译器自动生成案例对象?
案例对象的所需属性
- 为每个属性
case class
生成一个属性case object
- 将每个对应案例对象的值设置为属性名称的字符串表示,并更改
camelCase
为snake_case
对象属性名称,保留snake_case
对象属性值
scala - 对象 contrib 不是包 meta 的成员
我正在尝试使用isEqual
ScalaMeta 中的方法。
导入不起作用:
我正在使用sbt
,我的中有以下内容build.sbt
我在哪里可以找到isEqual
ScalaMeta 的方法?它似乎已被弃用。我正在关注本教程
scala - macroparadise 是否不再从命令行工作?
我正在尝试开始使用天堂宏插件,所以我一直从身份宏示例开始:
https://docs.scala-lang.org/overviews/macros/annotations.html
但是,当我尝试使用身份注释时,我得到
如您所料,如果未加载插件。但是,我正在按照
https://docs.scala-lang.org/overviews/macros/paradise.html
但是当我调用时:
我没有看到macroparadise
阶段:
但是,如果我改为
我明白了
所以我真的很困惑我在这里错过了什么步骤?我缺少一些新的命令行参数吗?是否需要使用 sbt?
scala - ScalaMeta、ScalaFix 和 SemanticDB 之间的关系
我有以下信息:
Scalameta:能够从源文件生成 AST
SemanticDB:包含来自已解析源文件的符号信息ScalaFix:基于 ScalaMeta 和 SemanticDB,因此它具有访问符号信息和遍历 AST 的能力。
使用 ScalaMeta 加载源文件非常简单,如下所示:
从上面的代码片段可以看出,ScalaMeta 将源文件解析为 type Source
。
现在考虑下面的代码片段,其中 ScalaFix 使用类型树SemanticDocument
:
检查上面的两个代码片段表明 ScalaMeta 可以将 Scala 源解析为 type Source
。ScalaFix 似乎将其解析为implicit SemanticDocument
. SemanticDocument
has 字段由 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
呢?
scala - 使用 ScalaFix 从 Scala 源文件中获取 SemanticDocument
将 Scala 源文件解析为SemanticDocument
using的步骤是什么ScalaFix
?
scala - 如何使用准引号来获取值的类型?
我正在尝试编写以下内容:
本质上,我需要捕获value
( Int
) in的类型tpe
并将其分配给U
. 如何做到这一点?
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
. 此外,value
AST 是以编程方式生成的,而不是文字。
scala - 如何在 Scala 中获取表达式的(静态)类型?
Scala 是否有任何等效于 GCC 的typeof
扩展?(或 C++ decltype
?)
我正在生成引用一些外部代码(可能尚不可用)的代码,并且我需要一种方法来在方法定义中引用该代码的类型
对于单例对象,我可以使用Foo.type
,但如果Foo
是任意表达式,则不起作用。
更新:
这是一个显示问题的简化示例:
Foo
我正在处理的代码除了它是 Scala 表达式的字符串表示之外一无所知。它将上述代码输出到一个.scala
文件,该文件稍后将作为单独项目的一部分进行编译。
当然,这些typeof(Foo)
位不起作用。Foo.type
仅当Foo
是单例时才使用。
基本上,我想知道是否有可以替代的东西可以typeof(Foo)
用于任意 Scala 表达式。