0%

【文章翻譯】Dart diagnostic messages

【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】

Dart 診斷訊息

您是否曾經看到一條錯誤訊息,卻不知道它的含義以及您應該如何處理?實際上,可能比您想像的更多資訊可以幫助您回答這些問題。

讓我們舉一個相當常見的例子。以下程式碼中存在一個問題:

一個簡單的類別,在 `values.length` 中的 “length” 下方有一條紅色波浪線

在 IntelliJ IDEA 中,該訊息顯示在 Dart Analysis 視圖中:

IntelliJ IDEA 螢幕截圖,顯示錯誤訊息:屬性 `length` 無法無條件存取,因為接收器可以是 `null`。

在 Visual Studio Code 中,問題訊息顯示在「問題」面板中:

Visual Studio Code 中顯示與 IntelliJ IDEA 螢幕截圖相同的錯誤訊息

看起來很奇怪,因為我們剛剛在上一行檢查了 values 不是 null

該訊息告訴我們出了什麼問題,但並沒有真正幫助我們理解為什麼檢查不充分或如何回應錯誤。這些額外資訊實際上是可用的;只是可能不清楚如何找到它。本文的其餘部分將向您展示如何在 IntelliJ IDEA、Visual Studio Code 和 dart analyze 命令列工具的輸出中找到這些額外資訊的位置。

IntelliJ IDEA

如果您將滑鼠懸停在突出顯示的文字上,您可以獲得更多資訊:

IntelliJ IDEA 的螢幕截圖,其中包含以下文字中描述的內容

懸停包含我們上面看到的訊息(我們稱之為 問題訊息),但也包含其他有用的資訊:

  • 指向有關診斷的外部文件的連結
  • 一條 上下文訊息,解釋為什麼 null 比較不足以將屬性的類型提升為非空類型
  • 一條 修正訊息,描述您可以採取的一些措施來修正程式碼

上下文訊息包含與類型提升相關的額外文件的 URL,並告訴您欄位定義的行和檔案。遺憾的是,您無法從懸停導航到上下文位置,但您可以從 Dart Analysis 視圖導航。

雖然 Dart Analysis 視圖僅顯示問題訊息,但雙擊該訊息會將您導航到報告問題的帶有紅色波浪線的文字。對於其他有用的功能,請顯示上下文選單:

錯誤訊息的上下文選單的螢幕截圖

使用上下文選單,您可以導航到報告診斷的位置(使用 跳轉到來源,其工作方式與雙擊問題訊息相同)或導航到 values 的宣告(使用上下文訊息標記的選單項)。選擇 打開文件 將打開有關診斷的外部文件。

Visual Studio Code

在 Visual Studio Code 中,有兩種方法可以查看額外資訊。第一種是展開「問題」面板中的條目:

VS Code 的「問題」面板的螢幕截圖

第一行是我們之前看到的訊息(我們稱之為 問題訊息)。雙擊第一行或第二行會將您導航到出現問題的帶有紅色波浪線的文字。

第二行是一條 修正訊息,描述您可以採取的一些措施來修正程式碼。它還包含一個由診斷 ID 標記的連結,該連結會打開有關診斷的外部文件

第三行是一條 上下文訊息,解釋為什麼 null 比較不足以將類型提升為非空類型。雙擊上下文訊息會將您導航到 values 的宣告。上下文訊息包含與類型提升相關的額外文件的 URL。

您也可以透過將滑鼠懸停在突出顯示的文字上來查看此資訊,這會導致打開懸停文字:

VS Code 懸停文字的螢幕截圖

懸停文字包含與「問題」面板相同的資訊。它包含一個連結,可將您帶到外部文件,以及另一個連結,可導航到 values 的宣告。

dart analyze

命令列分析器 dart analyze 可以顯示與 IDE 相同的資訊,但您需要使用 --verbose 旗標才能查看所有資訊。

`dart analyze --verbose demo.dart` 輸出的螢幕截圖

總結

我希望本文能幫助您更輕鬆地找到理解分析器診斷所需的資訊。

如果您發現仍然難以理解的診斷訊息(因為訊息不清楚、需要上下文訊息來幫助您找到其他相關程式碼位置,或者文件不夠完整),請透過建立 dart-lang/sdk 議題告知我們。我們一直有興趣改進工具。


Dart 診斷訊息 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。