此文档页面专门针对 Scala 2 中提供的功能,这些功能已在 Scala 3 中删除或被替代功能所取代。除非另有说明,此页面中的所有代码示例均假定你使用的是 Scala 2。
简介
Scala 编译器 scalac
提供了各种编译器选项或标志,它们可以更改编译器的默认行为。一些选项只是以诊断或警告的形式生成更多编译器输出,而另一些选项则会更改编译结果。
Scala 命令 scala
(用于运行脚本或已编译代码)接受与 scalac
编译器相同的选项,以及更多用于确定如何运行程序的选项。
可以在命令行中为 scalac
指定选项,或在构建工具或 IDE 的配置中指定选项。
Scala 发行版包含一个 man
页面。如果 Scala 已作为系统命令安装,则可以通过 man scalac
获得该文档。
如何使用编译器选项
使用 scalac 的编译器选项
scalac [ <options> ] <source files>
布尔标志以通常的方式指定
scalac -Werror -Xlint Hello.scala
需要参数的选项使用“冒号”语法
scalac -Vprint:parser,typer
仅接受单个参数的选项接受传统语法
scalac -d /tmp
按照惯例,如果选项显示“详细”输出,则选项具有前缀 -V
;-W
用于管理警告;-X
用于修改工具行为的扩展选项;-Y
用于支持有限的私有选项,其中 Y
可能建议分叉行为。一些选项具有历史别名,例如 -Xfatal-warnings
适用于 -Werror
。
在 Scala 2 中,可以通过在发行版中运行工具来列出默认路径
scala scala.tools.util.PathResolver [ <options> ]
这有助于调试选项中的错误,例如 --classpath
。
使用 sbt 的编译器选项
以下是 sbt
中 scalacOptions
设置的典型配置
scalacOptions ++= Seq( // use ++= to add to existing options
"-encoding", "utf8", // if an option takes an arg, supply it on the same line
"-feature", // then put the next option on a new line for easy editing
"-language:implicitConversions",
"-language:existentials",
"-unchecked",
"-Werror",
"-Xlint", // exploit "trailing comma" syntax so you can add an option without editing this line
) // for "trailing comma", the closing paren must be on the next line
惯例是始终使用 ++=
追加到设置,并每行提供一个选项。
通常,最后一个选项将带有尾随逗号,以便在添加选项时 git diff
更简洁一些。
标准设置
当前开发环境中支持且将在未来版本中支持的一组标准选项。
-
-Dproperty=value
-
将 -Dproperty=value 直接传递到运行时系统。
-
-J<flag>
-
将标志直接传递到运行时系统。
-
-P PLUGIN:OPT1,PLUGIN:OPT2
-
向插件传递选项
-
-V
-
打印冗余选项的概要。
-
-W
-
打印警告选项的概要。
-
-Werror
或-Xfatal-warnings
-
如果存在任何警告,则编译失败。
-
-X
-
打印高级选项的概要。
-
-Y
-
打印私有选项的概要。
-
-bootclasspath PATH
或--boot-class-path PATH
-
覆盖引导类文件的路径。
-
-classpath PATH
或-cp PATH
或--class-path PATH
-
指定查找用户类文件的位置。
默认值:.
-
-d DIRECTORY|JAR
-
生成类文件的目标位置。
默认值:.
-
-dependencyfile FILE
或--dependency-file FILE
-
设置依赖项跟踪文件。
默认值:.scala_dependencies
-
-deprecation
或--deprecation
-
针对已弃用 API 的用法发出警告并指出位置。
-
-encoding ENCODING
或--encoding ENCODING
-
指定源文件使用的字符编码。
默认值:UTF-8
-
-explaintypes
或--explain-types
-
更详细地解释类型错误。
-
-extdirs PATH
或--extension-directories PATH
-
覆盖已安装扩展的位置。
-
-feature
或--feature
-
针对应显式导入的功能的用法发出警告并指出位置。
-
-g:LEVEL
-
设置生成调试信息的级别。(none、source、line、[vars]、notailcalls)
默认值:vars
-
-g:none
-g:source
-g:line
-g:vars
-g:notailcalls
-
-help
或--help
-
打印标准选项的概要
-
-javabootclasspath PATH
或--java-boot-class-path PATH
-
覆盖 Java 引导类路径。
默认值:
-
-javaextdirs PATH
或--java-extension-directories PATH
-
覆盖 Java extdirs 类路径。
-
-language:FEATURE1,FEATURE2
或--language:FEATURE1,FEATURE2
-
启用或禁用语言功能
-
-language:dynamics
允许 scala.Dynamic 的直接或间接子类
-language:existentials
可以编写和推断存在类型(除了通配符类型)
-language:higherKinds
允许更高阶类型
-language:implicitConversions
允许定义名为视图的隐式函数
-language:postfixOps
允许后缀运算符表示法,例如
1 to 10 toList
(不推荐)-language:reflectiveCalls
允许对结构类型成员进行反射访问
-language:experimental.macros
允许宏定义(除了实现和应用)
-
-no-specialization
或--no-specialization
-
忽略 @specialize 注释。
-
-nobootcp
或--no-boot-class-path
-
不要为 Scala jar 使用引导类路径。
-
-nowarn
或--no-warnings
-
不生成任何警告。
-
-opt:OPTIMIZATION1,OPTIMIZATION2
-
启用优化
-
-opt:unreachable-code
消除无法到达的代码、不保护任何指令的异常处理程序、冗余元数据(调试信息、行号)。
-opt:simplify-jumps
简化分支指令,消除不必要的指令。
-opt:compact-locals
消除局部变量序列中的空槽。
-opt:copy-propagation
消除冗余的局部变量和未使用的值(包括闭包)。启用无法到达的代码。
-opt:redundant-casts
使用类型传播分析消除冗余的强制类型转换。
-opt:box-unbox
消除同一方法中的装箱-拆箱对(还包括元组、xRef、值类实例)。启用无法到达的代码。
-opt:nullness-tracking
跟踪局部变量的空值/非空值并应用优化。
-opt:closure-invocations
将闭包调用重写为实现方法。
-opt:allow-skip-core-module-init
允许消除标准库的核心模块的未使用的模块加载(例如 Predef、ClassTag)。
-opt:assume-modules-non-null
假设加载模块绝不会导致空值(如果在模块的超级构造函数中访问该模块,则会发生这种情况)。
-opt:allow-skip-class-loading
允许可以跳过或延迟类加载的优化。
-opt:inline
根据 -Yopt-inline-heuristics 和 -opt-inline-from 内联方法调用。
-opt:l:none
禁用优化。优先级:
-opt:l:none,+box-unbox
/-opt:l:none -opt:box-unbox
不会启用 box-unbox。-opt:l:default
启用默认优化:无法到达的代码。
-opt:l:method
启用方法内优化:无法到达的代码、简化跳转、紧凑局部变量、复制传播、冗余强制类型转换、装箱-拆箱、空值跟踪、闭包调用、允许跳过核心模块初始化、假设模块非空、允许跳过类加载。
-opt:l:inline
启用跨方法优化(注意:内联需要 -opt-inline-from):l:method、inline。
-
-opt-inline-from PATTERNS1,PATTERNS2
-
允许内联的类文件名的模式,
help
了解详情。 -
-opt-warnings:WARNING1,WARNING2
-
启用优化器警告
-
-opt-warnings:none
无优化器警告。
-opt-warnings:at-inline-failed-summary
如果存在无法内联的 @inline 方法调用,则提供一行摘要。
-opt-warnings:at-inline-failed
对于无法内联的每个 @inline 方法调用,都会显示一条详细的警告。
-opt-warnings:any-inline-failed
对于启发式算法选择内联的每个调用站点,但无法内联的,都会显示一条详细的警告。
-opt-warnings:no-inline-mixed
在混合编译中,在 java 源代码中定义的方法的调用站点发出警告(无法在没有字节码的情况下做出内联决策)。
-opt-warnings:no-inline-missing-bytecode
如果无法在编译类路径中找到类或成员的字节码,则发出警告,因为无法做出内联决策。
-opt-warnings:no-inline-missing-attribute
如果 Scala 类文件没有 ScalaInlineInfo 属性,则发出警告,因为无法做出内联决策。
-
-optimize
或-optimise
-
启用优化。
-
-print
或--print
-
打印已移除 Scala 特定功能的程序。
-
-release RELEASE
或--release RELEASE
-
针对特定版本的 Java 平台进行编译。支持的目标:6、7、8、9
-
-sourcepath PATH
或--source-path PATH
-
指定源文件的位置。
-
-target:TARGET
或--target:TARGET
-
对象文件的目标平台。([8]、9、10、11、12)
默认值:8
-
-target:8
-target:9
-target:10
-target:11
-target:12
-
-toolcp PATH
或--tool-class-path PATH
-
添加到运行器类路径。
-
-unchecked
或--unchecked
-
启用附加警告,其中生成代码依赖于假设。
-
-uniqid
或--unique-id
-
在调试输出中唯一标记所有标识符。
-
-usejavacp
或--use-java-class-path
-
在类路径解析中使用 java.class.path。
-
-usemanifestcp
或--use-manifest-class-path
-
在类路径解析中使用清单。
-
-verbose
或--verbose
-
输出有关编译器正在执行的操作的消息。
-
-version
或--version
-
打印产品版本并退出。
-
@<file>
-
包含编译器参数(选项和源文件)的文本文件
高级设置
-
-Xcheckinit
-
包装字段访问器,以便在未初始化访问时抛出异常。
-
-Xdev
-
表示用户是开发人员 - 对任何看起来不妥当的事项发出警告
-
-Xdisable-assertions
-
不生成任何断言或假设。
-
-Xelide-below ARG
-
如果方法优先级低于参数,则忽略对 @elidable 方法的调用
默认值:-2147483648
-
-Xexperimental
-
语言分叉扩展的旧坟场。
-
-Xfuture
-
已被 -Xsource 替换。
-
-Xgenerate-phase-graph FILE
-
将阶段图(输出 .dot 文件)生成到 fileX.dot。
-
-Xlint:WARNING1,WARNING2
-
启用推荐的警告
-
-Xlint:adapted-args
如果修改参数列表以匹配接收器,则发出警告。
-Xlint:nullary-unit
当空元方法返回 Unit 时发出警告。
-Xlint:inaccessible
对方法签名中不可访问的类型发出警告。
-Xlint:nullary-override
当非空元的
def f()
覆盖空元的def f
时发出警告。-Xlint:infer-any
当类型参数推断为
Any
时发出警告。-Xlint:missing-interpolator
字符串文字似乎缺少插值器 ID。
-Xlint:doc-detached
Scaladoc 注释似乎与其元素分离。
-Xlint:private-shadow
私有字段(或类参数)遮盖了超类的字段。
-Xlint:type-parameter-shadow
局部类型参数遮盖了已在范围内的类型。
-Xlint:poly-implicit-overload
参数化重载隐式方法不可作为视图边界显示。
-Xlint:option-implicit
Option.apply 使用了隐式视图。
-Xlint:delayedinit-select
选择 DelayedInit 的成员。
-Xlint:package-object-classes
在包对象中定义的类或对象。
-Xlint:stars-align
模式序列通配符必须与序列组件对齐。
-Xlint:constant
常量算术表达式的求值导致错误。
-Xlint:unused
启用 -Wunused:imports,privates,locals,implicits。
-Xlint:nonlocal-return
返回语句将异常用于流程控制。
-Xlint:implicit-not-found
检查 @implicitNotFound 和 @implicitAmbiguous 消息。
-Xlint:serial
特质和不可序列化的类上的 @SerialVersionUID。
-Xlint:valpattern
启用 val 定义中的模式检查。
-Xlint:eta-zero
对零元方法的 eta 扩展(而不是自动应用)发出警告。
-Xlint:eta-sam
对 eta 扩展发出警告,以满足未显式用 @FunctionalInterface 注释的 Java 定义的功能接口。
-Xlint:deprecation
启用已弃用的 lint。
-
-Xmacro-settings OPTION1,OPTION2
-
宏的自定义设置。
-
-Xmain-class PATH
-
清单的 Main-Class 条目的类(仅与 -d jar 一起使用时有用)
-
-Xmaxerrs ARG
-
要打印的最大错误数
默认值:100
-
-Xmaxwarns ARG
-
要打印的最大警告数
默认值:100
-
-Xmigration VERSION
-
对自版本以来行为可能已更改的构造发出警告。
默认值:none
-
-Xmixin-force-forwarders:MODE
-
在从特质继承具体方法的类中生成转发器方法。默认值:
默认值:true
,help
可列出选项。true
-
-Xmixin-force-forwarders:true
始终生成 mixin 转发器。
-Xmixin-force-forwarders:junit
为 JUnit 注释的方法生成 mixin 转发器(JUnit 4 不支持默认方法)。
-Xmixin-force-forwarders:false
仅生成程序正确性所需的 mixin 转发器。
-
-Xno-forwarders
-
在镜像类中不生成静态转发器。
-
-Xno-patmat-analysis
-
不执行穷尽性/不可达性分析。此外,忽略 @switch 注释。
-
-Xno-uescape
-
禁用对 \u unicode 转义的处理。
-
-Xnojline
-
不使用 JLine 进行编辑。
-
-Xplugin PATHS1,PATHS2
-
从每个类路径加载插件。
-
-Xplugin-disable PLUGIN1,PLUGIN2
-
按名称禁用插件。
-
-Xplugin-list
-
打印已加载插件的概要。
-
-Xplugin-require PLUGIN1,PLUGIN2
-
如果未加载命名的插件,则中止。
-
-Xpluginsdir PATH
-
搜索插件存档的路径。
默认值:
-
-Xprompt
-
在每个错误后显示提示(调试选项)。
-
-Xreporter CLASSNAME
-
为编译器消息指定自定义报告器。
默认值:scala.tools.nsc.reporters.ConsoleReporter
-
-Xresident
-
编译器保持驻留:从标准输入读取源文件名。
-
-Xscript OBJECT
-
将源文件视为脚本并将其包装在 main 方法中。
-
-Xsource VERSION
-
将编译器输入视为指定版本的 Scala 源,请参阅 scala/bug#8126。
默认值:2.13.0
-
-Xsource-reader CLASSNAME
-
指定用于读取源文件的方法。
-
-Xverify
-
验证生成的字节码中的泛型签名。
-
-Xxml:PROPERTY1,PROPERTY2
-
配置 XML 解析。
-
-Xxml:coalescing
将 PCData 转换为 Text 并合并同级节点
详细设置
-
-Vbrowse ARG
或-Ybrowse ARG
-
在阶段后浏览抽象语法树
-
-Vclasspath
或-Ylog-classpath
-
输出正在应用的类路径相关信息。
-
-Vdebug
或-Ydebug
-
增加调试输出量。
-
-Vdoc
或-Ydoc-debug
-
跟踪 Scaladoc 活动。
-
-Vfree-terms
或-Xlog-free-terms
-
当实体化创建自由项时打印一条消息。
-
-Vfree-types
或-Xlog-free-types
-
当实体化诉诸于生成自由类型时打印一条消息。
-
-Vhot-statistics
或-Yhot-statistics
-
启用
-Vstatistics
以打印热统计信息。 -
-Vide
或-Yide-debug
-
使用交互式编译器生成、验证和输出树。
-
-Vimplicit-conversions
或-Xlog-implicit-conversions
-
每当插入隐式转换时打印一条消息。
-
-Vimplicits
或-Xlog-implicits
-
打印依赖的缺失隐式项。
-
-Vimplicits-verbose-tree
-
显示链中所有中间隐式项。
-
-Vimplicits-max-refined ARG
-
用于打印精炼类型的最大字符数,缩写为
默认值:F {...}
0
-
-Vtype-diffs
-
将找到/需要的错误消息打印为彩色差异。
-
-Vinline PACKAGE/CLASS.METHOD
或-Yopt-log-inline PACKAGE/CLASS.METHOD
-
打印内联程序活动的摘要;
_
打印全部,前缀匹配进行选择。 -
-Vissue
或-Yissue-debug
-
当上下文发出错误时打印堆栈跟踪。
-
-Vlog ARG
或-Ylog ARG
-
在阶段期间记录操作
-
-Vmacro
或-Ymacro-debug-verbose
-
跟踪宏活动:编译、生成合成、类加载、扩展、异常。
-
-Vmacro-lite
或-Ymacro-debug-lite
-
跟踪宏活动,输出较少。
-
-Vopt PACKAGE/CLASS.METHOD
或-Yopt-trace PACKAGE/CLASS.METHOD
-
跟踪方法的优化器进度;
_
打印全部,前缀匹配进行选择。 -
-Vpatmat
或-Ypatmat-debug
-
跟踪模式匹配转换。
-
-Vphases
或-Xshow-phases
-
打印编译器阶段的概要。
-
-Vpos
或-Ypos-debug
-
跟踪位置验证。
-
-Vprint ARG
或-Xprint ARG
-
在阶段后打印程序
-
-Vprint-args FILE
或-Xprint-args FILE
-
将所有编译器参数打印到指定位置。使用 - 向报告器回显。
默认值:-
-
-Vprint-pos
或-Xprint-pos
-
打印树位置,作为偏移量。
-
-Vprint-types
或-Xprint-types
-
打印树类型(调试选项)。
-
-Vquasiquote
或-Yquasiquote-debug
-
跟踪准引号。
-
-Vreflective-calls
或-Xlog-reflective-calls
-
在生成反射方法调用时打印消息
-
-Vreify
或-Yreify-debug
-
跟踪具体化。
-
-Vshow ARG
或-Yshow ARG
-
(需要 -Xshow-class 或 -Xshow-object)在阶段后显示
-
-Vshow-class CLASS
或-Xshow-class CLASS
-
显示类的内部表示。
-
-Vshow-member-pos OUTPUT STYLE
或-Yshow-member-pos OUTPUT STYLE
-
显示成员的开始和结束位置(暗示 -Yrangepos)
-
-Vshow-object OBJECT
或-Xshow-object OBJECT
-
显示对象的内部表示。
-
-Vshow-symkinds
或-Yshow-symkinds
-
在符号名称旁边打印缩写的符号种类。
-
-Vshow-symowners
或-Yshow-symowners
-
在符号名称旁边打印所有者标识符。
-
-Vstatistics ARG
或-Ystatistics ARG
-
打印特定阶段的编译器统计信息(默认值:parser、typer、patmat、erasure、cleanup、jvm)
默认值:parser,typer,patmat,erasure,cleanup,jvm
-
-Vsymbols
或-Yshow-syms
-
在每个阶段后打印 AST 符号层次结构。
-
-Vtyper
或-Ytyper-debug
-
跟踪类型分配。
私有设置
-
-Ybackend-parallelism ARG
-
后端的最大工作线程
默认值:1
最小值:1
最大值:16
-
-Ybackend-worker-queue ARG
-
后端线程工作队列大小
默认值:0
最小值:0
最大值:1000
-
-Ybreak-cycles
-
尝试打破在类型化过程中遇到的循环
-
-Ycache-macro-class-loader:POLICY
-
动态加载的宏的类加载器缓存策略。默认值:
默认值:none
,help
可列出选项。none
-
-Ycache-macro-class-loader:none
不缓存类加载器
-Ycache-macro-class-loader:last-modified
缓存类加载器,使用文件上次修改时间来失效
-Ycache-macro-class-loader:always
缓存类加载器,不失效
-
-Ycache-plugin-class-loader:POLICY
-
动态加载的编译器插件的类加载器缓存策略。默认:
默认值:none
,help
列出选项。none
-
-Ycache-plugin-class-loader:none
不缓存类加载器
-Ycache-plugin-class-loader:last-modified
缓存类加载器,使用文件上次修改时间来失效
-Ycache-plugin-class-loader:always
缓存类加载器,不失效
-
-Ycheck ARG
-
在阶段结束时检查树
-
-Ycompact-trees
-
显示树时使用紧凑型树打印机。
-
-Ydelambdafy:STRATEGY
-
用于将 lambda 转换为 JVM 代码的策略。(inline、[method])
默认:method
-
-Ydelambdafy:inline
-Ydelambdafy:method
-
-Ydump-classes DIR
-
将生成的字节码转储到 .class 文件(对于利用内存中类加载器的反射编译很有用)。
-
-Ygen-asmp DIR
-
生成 .asmp 文件的并行输出目录(即 ASM Textifier 输出)。
-
-Yimports IMPORT1,IMPORT2
-
自定义根导入,默认是
java.lang,scala,scala.Predef
。 -
-Yjar-compression-level ARG
-
写入 jar 文件时使用的压缩级别
默认:-1
最小:-1
最大:9
-
-Ymacro-annotations
-
启用对宏注释的支持,以前在宏天堂中。
-
-Ymacro-classpath PATH
-
用于反射加载宏实现的类路径,默认是编译类路径。
-
-Ymacro-expand:POLICY
-
控制宏的扩展,对 scaladoc 和演示编译器很有用。([normal]、none、discard)
默认:normal
-
-Ymacro-expand:normal
-Ymacro-expand:none
-Ymacro-expand:discard
-
-Ymacro-global-fresh-names
-
宏中的新名称是否在所有编译单元中都是唯一的
-
-Yno-completion
-
在 REPL 中禁用 tab 补全。
-
-Yno-flat-classpath-cache
或-YdisableFlatCpCaching
-
不要跨编译器实例缓存 jar 中类路径元素的扁平类路径表示。
-
-Yno-generic-signatures
-
禁止为 Java 生成泛型签名。
-
-Yno-imports
-
在不导入 scala.、java.lang. 或 Predef 的情况下进行编译。
-
-Yno-predef
-
在不导入 Predef 的情况下进行编译。
-
-Yopt-inline-heuristics:STRATEGY
-
设置内联决策的启发式方法。(at-inline-annotated、everything、[default])
默认:default
-
-Yopt-inline-heuristics:at-inline-annotated
-Yopt-inline-heuristics:everything
-Yopt-inline-heuristics:default
-
-Ypatmat-exhaust-depth ARG
-
关闭
默认值:20
最小值:10
最大值:2147483647
-
-Yprint-trees:STYLE
-
启用 -Vprint 时打印树的方式。([text],compact,format,text+format)
默认值:text
-
-Yprint-trees:text
-Yprint-trees:compact
-Yprint-trees:format
-Yprint-trees:text+format
-
-Yprofile-destination FILE
-
分析输出 - 指定一个文件或
-
表示控制台。 -
-Yprofile-enabled
-
启用分析。
-
-Yprofile-external-tool ARG
-
使用外部工具挂钩为某个阶段启用分析。通常仅对单个阶段有用(默认值:typer)
默认值:typer
-
-Yprofile-run-gc ARG
-
在阶段之间运行 GC - 这可以让堆大小准确,但会花费更多时间。指定阶段列表或所有阶段(默认值:_)
默认值:_
-
-Yprofile-trace FILE
-
以 Chrome Trace 格式捕获编译跟踪
默认值:profile.trace
-
-Yrangepos
-
对语法树使用范围位置。
-
-Yrecursion ARG
-
锁定符号时设置使用的递归深度。
默认值:0
最小值:0
最大值:2147483647
-
-Yreify-copypaste
-
以可复制表示形式转储具体化树。
-
-Yrepl-class-based
-
使用类来包装 REPL 片段,而不是对象
-
-Yrepl-outdir PATH
-
将 REPL 生成的类文件写入给定的输出目录(使用 “” 生成临时目录)
-
-Yresolve-term-conflict:STRATEGY
-
解决术语冲突。(package、object、[error])
默认值:error
-
-Yresolve-term-conflict:package
-Yresolve-term-conflict:object
-Yresolve-term-conflict:error
-
-Yscriptrunner CLASSNAME
-
指定一个 scala.tools.nsc.ScriptRunner(default、resident、shutdown 或一个类名)。
默认:default
-
-Yskip ARG
-
跳过阶段
-
-Ystop-after ARG
或-stop ARG
-
在阶段后停止
-
-Ystop-before ARG
-
在阶段前停止
-
-Yvalidate-pos ARG
-
在给定阶段后验证位置(暗示 -Yrangepos)阶段
警告设置
-
-Wdead-code
或-Ywarn-dead-code
-
识别出死代码时发出警告。
-
-Wextra-implicit
或-Ywarn-extra-implicit
-
定义了多个隐式参数部分时发出警告。
-
-Wmacros:MODE
或-Ywarn-macros:MODE
-
启用宏扩展的 lint 警告。默认值:
默认值:before
,help
可列出选项。before
-
-Wmacros:none
生成未使用符号警告时,不要检查展开或其原始树。
-Wmacros:before
仅检查未展开的用户编写代码,以查找未使用符号。
-Wmacros:after
生成未使用符号警告时,仅检查展开树。
-Wmacros:both
生成未使用符号警告时,检查用户编写代码和展开树。
-
-Wnumeric-widen
或-Ywarn-numeric-widen
-
在数字加宽时发出警告。
-
-Woctal-literal
或-Ywarn-octal-literal
-
对过时的八进制语法发出警告。
-
-Wself-implicit
或-Ywarn-self-implicit
-
当一个隐式解析为封闭的自我定义时发出警告。
-
-Wunused:WARNING1,WARNING2
或-Ywarn-unused:WARNING1,WARNING2
-
启用或禁用特定的
unused
警告 -
-Wunused:imports
如果导入选择器未被引用,则发出警告。
-Wunused:patvars
如果模式中绑定的变量未被使用,则发出警告。
-Wunused:privates
如果私有成员未被使用,则发出警告。
-Wunused:locals
如果本地定义未被使用,则发出警告。
-Wunused:explicits
如果显式参数未被使用,则发出警告。
-Wunused:implicits
如果隐式参数未被使用,则发出警告。
-Wunused:params
启用 -Wunused:explicits,implicits。
-Wunused:linted
-Xlint:unused。
-
-Wvalue-discard
或-Ywarn-value-discard
-
当非 Unit 表达式结果未被使用时发出警告。
-
-Xlint:WARNING1,WARNING2
-
启用推荐的警告
-
-Xlint:adapted-args
如果修改参数列表以匹配接收器,则发出警告。
-Xlint:nullary-unit
当空元方法返回 Unit 时发出警告。
-Xlint:inaccessible
对方法签名中不可访问的类型发出警告。
-Xlint:nullary-override
当非空元的
def f()
覆盖空元的def f
时发出警告。-Xlint:infer-any
当类型参数推断为
Any
时发出警告。-Xlint:missing-interpolator
字符串文字似乎缺少插值器 ID。
-Xlint:doc-detached
Scaladoc 注释似乎与其元素分离。
-Xlint:private-shadow
私有字段(或类参数)遮盖了超类的字段。
-Xlint:type-parameter-shadow
局部类型参数遮盖了已在范围内的类型。
-Xlint:poly-implicit-overload
参数化重载隐式方法不可作为视图边界显示。
-Xlint:option-implicit
Option.apply 使用了隐式视图。
-Xlint:delayedinit-select
选择 DelayedInit 的成员。
-Xlint:package-object-classes
在包对象中定义的类或对象。
-Xlint:stars-align
模式序列通配符必须与序列组件对齐。
-Xlint:constant
常量算术表达式的求值导致错误。
-Xlint:unused
启用 -Wunused:imports,privates,locals,implicits。
-Xlint:nonlocal-return
返回语句将异常用于流程控制。
-Xlint:implicit-not-found
检查 @implicitNotFound 和 @implicitAmbiguous 消息。
-Xlint:serial
特质和不可序列化的类上的 @SerialVersionUID。
-Xlint:valpattern
启用 val 定义中的模式检查。
-Xlint:eta-zero
对零元方法的 eta 扩展(而不是自动应用)发出警告。
-Xlint:eta-sam
对 eta 扩展发出警告,以满足未显式用 @FunctionalInterface 注释的 Java 定义的功能接口。
-Xlint:deprecation
启用已弃用的 lint。
特定于 IDE 的设置
-
-Ypresentation-any-thread
-
允许从任何线程使用演示编译器
-
-Ypresentation-debug
-
为演示编译器启用调试输出。
-
-Ypresentation-delay ARG
-
在开始类型检查之前等待键入后的毫秒数
默认值:0
最小值:0
最大值:999
-
-Ypresentation-log FILE
-
将演示编译器事件记录到文件中
-
-Ypresentation-replay FILE
-
从文件中重播演示编译器事件
-
-Ypresentation-strict
-
不报告语法错误源中的类型错误。
-
-Ypresentation-verbose
-
打印有关演示编译器任务的信息。
针对 JVM 的版本
针对 JVM 的应用程序或库可能希望指定目标版本。
-release
选项指定目标版本,例如“8”或“18”。
与 javac
的选项类似,它允许针对较早版本的 JDK 构建。它将针对该版本的 API 编译,并输出该版本的类文件。
弃用的选项 -target
不针对所需的 API 进行编译,而只指定目标类文件格式。
其他资源
编译阶段
- 解析器
- 将源代码解析为 AST,执行简单的去糖
- 命名器
- 解析名称,将符号附加到命名树
- 包对象
- 加载包对象
- 类型器
- 核心内容:对树进行类型化
- 超级访问器
- 在特质和嵌套类中添加超级访问器
- 扩展方法
- 为内联类添加扩展方法
- 腌制器
- 序列化符号表
- 引用检查
- 引用/覆盖检查,转换嵌套对象
- 模式匹配
- 转换匹配表达式
- 去柯里化
- 去柯里化,将函数值转换为匿名类
- 字段
- 合成访问器和字段,为惰性值添加位图
- 尾调用
- 用跳转替换尾调用
- 特化
- @specialized 驱动的类和方法特化
- 显式外部
- 此引用指向外部指针
- 擦除
- 擦除类型,为特质添加接口
- 后擦除
- 清理擦除的内联类
- lambda 提升
- 将嵌套函数移动到顶级
- 构造函数
- 将字段定义移动到构造函数中
- 扁平化
- 消除内部类
- 混合
- 混合组合
- 清理
- 特定于平台的清理,生成反射调用
- 去 lambda 化
- 移除 lambda
- jvm
- 生成 JVM 字节码
- 终端
- 编译运行期间的最后一个阶段