自 Scala 2.13 起,
-Wconf
编译器标志允许精确控制哪些警告应作为错误处理。然而,迁移到 Scala 3 时,-Wconf
的配置字符串并不总是相同。
特别是,我正在努力寻找如何使 Scala 3 中的非详尽模式匹配编译失败。在 Scala 2.13 中,我习惯于依赖
-Wconf:cat=other-match-analysis:error
但是 Scala 3 中无法识别相同的字符串:
Failed to parse `-Wconf` configuration: cat=other-match-analysis:error
文档https://docs.scala-lang.org/scala3/guides/migration/options-lookup.html似乎没有涵盖这种情况,除非我错过了。
将所有警告转变为错误总是有可能的,但如果能拥有与 Scala 2.13 提供的相同程度的粒度那就太好了。
有人能告诉我如何配置 Scala 3 编译器,使其在模式匹配不完全时编译失败,而不会将所有其他警告变成错误吗?
Scala 2.13 的类似问题Make Compile Fail on Non-Exhaustive Match in SBT
我认为与 Scala 2.13 相比,Scala 3 在检测警告和对警告进行分类方面远远落后。我找不到 scala 3 的确切文档来引用它,但以下内容可能有用。
这是 scala 2.13 如何以-Wconf
格式显示它支持的内容
-Wconf
它会生成帮助消息,其中以下部分与错误/警告类别相关
scala -Wconf help
相同的命令在 scala 3.3 中不起作用,我能找到的最接近的某种文档如下
Full list of message categories:
- deprecation
- feature, feature-dynamics, feature-existentials, feature-higher-kinds, feature-implicit-conversions, feature-macros, feature-postfix-ops, feature-reflective-calls
- java-source
- lint, lint-adapted-args, lint-byname-implicit, lint-constant, lint-delayedinit-select, lint-deprecation, lint-doc-detached, lint-eta-sam, lint-eta-zero, lint-implicit-not-found, lint-inaccessible, lint-infer-any, lint-int-div-to-float, lint-missing-interpolator, lint-multiarg-infix, lint-nonlocal-return, lint-nullary-unit, lint-numeric-methods, lint-option-implicit, lint-package-object-classes, lint-performance, lint-poly-implicit-overload, lint-private-shadow, lint-recurse-with-default, lint-serial, lint-stars-align, lint-type-parameter-shadow, lint-unit-specialization, lint-universal-methods
- optimizer
- other, other-debug, other-implicit-type, other-match-analysis, other-migration, other-non-cooperative-equals, other-nullary-override, other-pure-statement, other-shadowing
- scaladoc
- unchecked
- unused, unused-imports, unused-locals, unused-nowarn, unused-params, unused-pat-vars, unused-privates
- w-flag, w-flag-dead-code, w-flag-extra-implicit, w-flag-numeric-widen, w-flag-self-implicit, w-flag-value-discard
警告配置的一个有趣部分如下
scala -W