此文件頁面特定於 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>
-
將 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
消除同一個方法中的 box-unbox 配對(也包含 tuple、xRef、值類別實例)。啟用無法到達的程式碼。
-opt:nullness-tracking
追蹤局部變數的 nullness/non-nullness 並套用最佳化。
-opt:closure-invocations
將封閉呼叫改寫為實作方法。
-opt:allow-skip-core-module-init
允許消除標準函式庫核心模組(例如 Predef、ClassTag)的未使用的模組載入。
-opt:assume-modules-non-null
假設載入模組永遠不會導致 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
啟用預設最佳化:unreachable-code。
-opt:l:method
啟用方法內最佳化:unreachable-code、simplify-jumps、compact-locals、copy-propagation、redundant-casts、box-unbox、nullness-tracking、closure-invocations、allow-skip-core-module-init、assume-modules-non-null、allow-skip-class-loading。
-opt:l:inline
啟用跨方法最佳化(注意:內聯需要 -opt-inline-from):l:method、inline。
-
-opt-inline-from PATTERNS1,PATTERNS2
-
允許內聯的類別檔名稱範本,詳情請參閱
說明
。 -
-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
當 nullary 方法傳回 Unit 時發出警告。
-Xlint:inaccessible
針對方法簽章中無法存取的類型發出警告。
-Xlint:nullary-override
當非 nullary
def f()
取代 nullarydef f
時發出警告。-Xlint:infer-any
當類型參數推論為
Any
時發出警告。-Xlint:missing-interpolator
字串文字似乎缺少內插程式識別碼。
-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 展開以符合 Java 定義的功能介面時發出警告,該介面並未明確註解為 @FunctionalInterface。
-Xlint:deprecation
啟用已標記為過時的項目。
-
-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
總是產生混合轉發器。
-Xmixin-force-forwarders:junit
為 JUnit 註解方法產生混合轉發器(JUnit 4 不支援預設方法)。
-Xmixin-force-forwarders:false
僅產生程式正確性所需的混合轉發器。
-
-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 轉換為文字,並合併同層節點
詳細設定
-
-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
-
-Yopt-inline-heuristics:at-inline-annotated
-Yopt-inline-heuristics:everything
-Yopt-inline-heuristics:default
-
-Ypatmat-exhaust-depth ARG
-
off
預設: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
-
解決術語衝突。(套件、物件、[錯誤])
預設值:error
-
-Yresolve-term-conflict:package
-Yresolve-term-conflict:object
-Yresolve-term-conflict:error
-
-Yscriptrunner CLASSNAME
-
指定 scala.tools.nsc.ScriptRunner(預設值、常駐、關閉或類別名稱)。
預設: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
-
啟用巨集擴充的程式碼檢查警告。預設值:
預設值: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
-
當未使用的非單位表達式結果時警告。
-
-Xlint:WARNING1,WARNING2
-
啟用建議的警告
-
-Xlint:adapted-args
如果修改參數清單以符合接收器,則發出警告。
-Xlint:nullary-unit
當 nullary 方法傳回 Unit 時發出警告。
-Xlint:inaccessible
針對方法簽章中無法存取的類型發出警告。
-Xlint:nullary-override
當非 nullary
def f()
取代 nullarydef f
時發出警告。-Xlint:infer-any
當類型參數推論為
Any
時發出警告。-Xlint:missing-interpolator
字串文字似乎缺少內插程式識別碼。
-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 展開以符合 Java 定義的功能介面時發出警告,該介面並未明確註解為 @FunctionalInterface。
-Xlint:deprecation
啟用已標記為過時的項目。
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 編譯,而僅指定目標類別檔案格式。
其他資源
編譯階段
- parser
- 將來源程式碼解析為 AST,執行簡單的去糖
- namer
- 解析名稱,將符號附加至已命名樹
- packageobjects
- 載入套件物件
- typer
- 核心部分:鍵入樹
- superaccessors
- 在特質和巢狀類別中新增超級存取器
- extmethods
- 為內嵌類別新增擴充方法
- pickler
- 序列化符號表
- refchecks
- 參考/覆寫檢查,轉譯巢狀物件
- patmat
- 轉譯比對運算式
- uncurry
- 解除柯里化,將函式值轉譯為匿名類別
- fields
- 綜合存取器和欄位,為惰性值新增位元圖
- tailcalls
- 以跳躍取代尾端呼叫
- specialize
- 由 @specialized 驅動的類別和方法專門化
- explicitouter
- 此參照指向外部指標
- erasure
- 清除類型,為特質新增介面
- posterasure
- 清除已清除的內嵌類別
- lambdalift
- 將巢狀函式移至頂層
- constructors
- 將欄位定義移至建構函式中
- 扁平化
- 消除內部類別
- 混合
- 混合組成
- 清理
- 特定於平台的清理,產生反射呼叫
- 刪除 lambda
- 移除 lambda
- jvm
- 產生 JVM 位元組碼
- 終端
- 編譯執行期間的最後階段