Scala中如何用Scalafix自动修复"discarded non-Unit value of type"警告?
能否用Scalafix自动修复Scala 2.13的这些lint警告?
你遇到的是Scala 2.13新增的lint规则警告,其中多数可以通过Scalafix自动修复,以下是分类型的解决方案:
你遇到的警告明细:
[Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/Same.scala:165:27: discarded non-Unit value of type Option[(ai.acyclic.prover.commons.function.Thunk[V], Long)] [Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/diff/StringDiff.scala:159:16: discarded non-Unit value of type Any [Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/function/HasMorphism.scala:94:24: Top-level wildcard is not allowed [Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/graph/local/Local.scala:18:15: discarded non-Unit value of type example._Arrow <:< ai.acyclic.prover.commons.graph.local.Local.Tree._Arrow [Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/graph/local/Local.scala:7:15: private method compileTimeCheck in object Local is never used [Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/graph/local/ops/AnyGraphUnary.scala:78:52: private default argument in object DepthFirst is never used [Warn] /home/peng/git/shapesafe/prover-commons/module/core/src/main/scala/ai/acyclic/prover/commons/graph/local/ops/UpperSemilatticeUnary.scala:54:12: discarded non-Unit value of type ai.acyclic.prover.commons.graph.local.LocalEngine._GraphK[UpperSemilatticeUnary.this.ArgLaw]{type Value = UpperSemilatticeUnary.this.ArgV}
分类型修复方案
1. discarded non-Unit value 警告
这类警告源于代码中直接丢弃了非Unit类型的表达式结果,Scalafix的RemoveUnusedExpressions内置规则可自动修复:
- 规则会为丢弃的非Unit值自动添加
_(Scala显式丢弃值的标准语法),或在合理场景下调整表达式为语句形式。 - 注意:若表达式是为了执行副作用(如IO操作),添加
_是安全的;若属于遗漏使用结果的情况,规则会保留表达式并提示,需手动确认逻辑。
2. Top-level wildcard is not allowed 警告
Scalafix的OrganizeImports规则可处理这类导入问题:
- 规则会自动将顶层通配符导入替换为具体的类/对象导入,或调整导入结构以满足Scala 2.13的lint规范。
3. private method/argument never used 警告
这类冗余代码警告可通过Scalafix的RemoveUnused规则自动清理:
- 规则会检测并删除未被任何代码引用的私有方法、私有默认参数等冗余内容,直接消除这类警告。
注意事项
- 涉及宏或动态生成代码的复杂场景,可能无法完全自动修复,需手动检查调整。
- 运行Scalafix前建议备份代码或通过版本控制系统管理,避免自动修复引入意外问题。
- 确保使用Scalafix 0.10及以上版本,该版本对Scala 2.13的兼容性更佳。
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

