Scala 3 中的非详尽匹配导致编译失败

问题描述 投票:0回答:1

自 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 pattern-matching compiler-flags scala-3 non-exhaustive-patterns
1个回答
2
投票

我认为与 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

© www.soinside.com 2019 - 2024. All rights reserved.