问题标签 [semanticdb]
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 - Scalameta 的语义 API
在Scalameta 的教程中,它指出语义 API 可用于名称解析 ( println
=> _root_.scala.Predef.println
)。常见问题解答“如何使用语义 API?” scalafix的链接,但我找不到教程或具体示例。所以我还是不清楚。有人可以指出一些具体的例子或教程吗?
谢谢!
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 - 如果 decltpe 为空,如何使用 scalameta 获取变量的类型?
如果我有以下类型
在 Scalameta 中,可能会发生这样的变量 decltype 设置None
为:
我仍然想知道x
Scala 推断出的变量的确切类型,而无需自己检查赋值表达式的类型。我知道我可以得到 10 是一个 Int 文字的信息,但是对于更复杂的表达式,为该类型提供一些辅助函数可能会有所帮助。scalameta 中是否有任何函数可以为您提供推断类型?
scala - 如何将一个或多个 SemanticRules 与 scalafix 一起使用,类似于 scalameta 的 Transformer?
在教程https://scalacenter.github.io/scalafix/docs/developers/tutorial.html中,我看到了如何SemanticRule
为 scalafix 实现 a。我想直接在我从磁盘读取的 Scala 文件的源代码中调用它并转换文件。
在 scalameta 中,我可以执行以下操作:
我想对 scalafix 做同样的事情,但使用SemanticRule
. 如果我读到这个:https :
//scalacenter.github.io/scalafix/docs/developers/tutorial.html#run-the-rule-from-source-code 它只向我展示了如何使用文件启动 scalafix 程序Scala 规则文件的路径,但这不是我想要的。
scala - 是否可以使用宏来修改生成的结构化类型实例调用代码?
例如如下代码:
我用反编译器查看字节码,并注意到编译生成一个 java 接口“Test.Class”作为伪代码:
和一个实现'Test.Class'的类'Test$$anon$1',伪代码为:
然后编译器将变量“c”初始化为:
然后调用成员'f1'作为正常调用:
但它使用反射调用'f2':
在这里,由于匿名类'Test$$anon$1'的定义在同一范围内可见,是否可以使用宏更改生成的代码以调用'f2'作为普通字段避免反射?
我只想更改同一范围内的调用代码,不想跨范围更改反射代码,例如将结构类型实例作为函数调用中的参数。所以我觉得理论上是可以的。但我不熟悉 scala 宏,建议和代码示例表示赞赏。谢谢!
scala - 如何为 SemanticDB 使用 Scala 绑定?
scalameta 网站在这里说“semanticdb 库包含与 SemanticDB protobuf 模式的 ScalaPB 绑定。使用这个库,可以将 SemanticDB 实体建模为 Scala 案例类,并将它们序列化/反序列化为字节和流。”
伟大的。那么我该怎么做呢?
我尝试过浏览 scaladocs,但我永远找不到外部 API 或我应该使用的任何顶级对象。如果这只是我对如何使用 scaladocs 的不熟悉,请原谅我,但我几乎可以找到关于如何实际使用 SemanticDB 工具的零文档)。
(我的目标是获取与调用图相关的信息,例如 IDE 中的“转到”,但以编程方式完成)