问题标签 [scalafix]

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

scala - Scalameta 的语义 API

Scalameta 的教程中,它指出语义 API 可用于名称解析 ( println=> _root_.scala.Predef.println)。常见问题解答“如何使用语义 API?” scalafix的链接,但我找不到教程或具体示例。所以我还是不清楚。有人可以指出一些具体的例子或教程吗?

谢谢!

0 投票
2 回答
527 浏览

scala - 从 Scala 项目中排除特定的隐式

如何防止在我的 scala 代码中使用特定的隐式?

例如,我最近被https://github.com/scala/scala/blob/68bad81726d15d03a843dc476d52cbbaf52fb168/src/library/scala/io/Codec.scala#L76Codec提供的默认设置所困扰。有没有办法确保任何需要 an 的代码永远不会使用由 提供的代码?或者,是否可以阻止所有隐式编解码器?implicit codec: CodecfallbackSystemCodec

这是使用scalafix应该可行的吗?

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

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 规则文件的路径,但这不是我想要的。

0 投票
2 回答
139 浏览

scala - scala中基于包的自动修复目录结构

我有一个文件src/main/scala/foo.scala需要在 package 内bar。理想情况下,文件应该在里面src/main/scala/bar/foo.scala

如何在整个项目中自动修复此问题,以使文件夹结构与包结构匹配?

是否有任何 SBT 插件等可以帮助我解决此问题?

0 投票
2 回答
194 浏览

scala - 有没有办法防止使用依赖项提供的特定功能?

我的应用程序对库 A 有编译依赖项。我知道这个库中有一个特定的函数会导致性能问题。但它并没有被弃用,如果你没有这些先验信息,你会认为使用它是安全的。我正在寻找一种方法来以某种方式弃用此函数或阻止它被直接调用。

是否可以通过静态分析工具或内置编译器标志来实现这一点?

0 投票
1 回答
77 浏览

scala - Scalafix:解析对象应用方法

我有一个定义了一些应用方法的对象,然后使用它

使用 scalafix/scalameta 时,我无法找到获取实际apply方法句柄的方法(在我的情况下,我正在尝试检查参数名称和类型以查找 scalafix 规则)

当我匹配并打印解析的 SymbolInformation 时,我得到了对该对象的引用。所以这

印刷

但我希望它能够解决确切的apply方法。

(Scalafix 版本 0.9.20)

0 投票
0 回答
44 浏览

scala - 当代码库中存在可变参数时,scalafix 自动修复插件错误“错误:此处不允许重复参数”

我在我的代码库中使用如下的可变参数。

我在我的 sbt项目中使用自动修复插件。

我正在按照此处的步骤运行 scalafix 命令。

当我运行命令时,sbt> scalafixAll dependency:RenameDeprecatedPackage@org.scalatest:autofix:3.0.8-1我得到以下错误。

[错误] /Users/rajkumar.natarajan/Documents/Coding/misc/varargs-scalafix-error/src/main/scala/Utils.scala:3:错误:此处不允许重复参数[错误] def toVarArgs [T]( s: Seq[T]) = acceptVarargs(s: _*) [error] ^ [error] at scala.meta.internal.parsers.Reporter.syntaxError(Reporter.scala:16) [error] at scala.meta.internal .parsers.Reporter.syntaxError$(Reporter.scala:16) [error] at scala.meta.internal.parsers.Reporter$$anon$1.syntaxError(Reporter.scala:22) [error] at scala.meta.internal。 parser.Reporter.syntaxError(Reporter.scala:17) [error] at scala.meta.internal.parsers.Reporter.syntaxError$(Reporter.scala:17)

完整的错误堆栈跟踪在这里

我的代码库中的可变参数有什么问题?我该如何解决这个错误?

github中的项目在这里

其他详情 -

sbt 版本 - 1.5.2 scala 版本 - 2.12.10 java 版本 - 11.0.10-zulu

0 投票
0 回答
21 浏览

scala - scalafix.sbt.ScalafixFailed: TestError

我有一个使用 scalatest 编写的单元测试,并且在本地运行良好。但是在詹金斯上它失败了,没有具体的错误,就是这样:

痕迹中没有提到测试方法,因此没有暗示原因。

如何真正找到原因?