dart-fix-runtime-errors
`get_runtime_errors`とLSPを使用してアクティブなスタックトレースを取得し、エラーが発生している行を特定してコードを修正し、`hot_reload`で解決を確認するスキルです。Dartアプリの実行時エラーを自動的に検出・修正したい場合に活用できます。
description の原文を見る
Uses get_runtime_errors and lsp to fetch an active stack trace, locate the failing line, apply a fix, and verify resolution via hot_reload.
SKILL.md 本文
Dart 静的解析エラーの解決
目次
コア コンセプトとガイドライン
型システムと健全性
Dart の健全な型システムを適用して、実行時の無効な状態を防止します。
- メソッドのオーバーライド: 健全な戻り値の型(共変)とパラメータの型(反変)を維持してください。
covariantキーワードで明示的にマークされていない限り、サブクラスのパラメータ型を限定しないでください。 - ジェネリクスとコレクション: ジェネリッククラスに明示的な型アノテーションを追加してください(例:
List<T>、Map<K, V>)。型付きリストにList<dynamic>を割り当てないでください(例:List<Cat>)。 - ダウンキャスト:
dynamicからの暗黙的なダウンキャストを避けてください。必要な場合は明示的なキャスト(例:as List<Cat>)を使用しますが、TypeError例外を防ぐため、基になるランタイム型が一致することを確認してください。 - 厳密なキャスト:
analysis_options.yamlのanalyzer: language:の下でstrict-casts: trueを有効にして、明示的なキャストを強制し、暗黙的なダウンキャストエラーをコンパイル時にキャッチしてください。
Null セーフティ
変数の初期化と null 許容性を正しく管理することで、null セーフティに関連する静的エラーを排除します。
- 修飾子: null 許容型に
?を、null アサーションに!を、null にできない名前付きパラメータにrequiredを適用してください。 - 遅延初期化:
lateキーワードを使用して、使用前に初期化が保証される null 非許容変数に対して適用してください。これを特にトップレベルまたはインスタンス変数に適用してください。Dart の制御フロー分析が初期化を確実に証明できない場合に限ります。 - ワイルドカード:
_ワイルドカード変数(Dart 3.7 以上)をローカル変数またはパラメータが非バインディングの場合に使用して、未使用変数の警告を避けてください。
エラー処理
回復可能な例外と回復不可能なエラーを区別します。
- キャッチ: 回復可能な障害に対して
Exceptionサブタイプをキャッチしてください。 - エラー:
Errorまたはそのサブタイプ(例:TypeError、ArgumentError)を明示的にキャッチしないでください。エラーはプログラミングのバグを示し、キャッチされるべきではなく修正されるべきです。avoid_catching_errorsリンタルルールを有効にして、この規則を強制してください。 - 再スロー:
catchブロック内でrethrowを使用して、元のスタックトレースを保持したまま例外を伝播させてください。
ワークフロー
ワークフロー: 静的解析エラーの解決
このシーケンシャルワークフローを使用して、Dart プロジェクトの静的解析エラーを特定、修正、検証してください。チェックリストをコピーして進捗を追跡してください。
タスク進捗:
- 1. 静的アナライザを実行します。
- 2. 自動修正を適用します。
- 3. 残りのエラーを手動で解決します。
- 4. 修正を検証します(フィードバックループ)。
1. 静的アナライザを実行します Dart アナライザを実行して、ターゲット ディレクトリまたはファイル内のすべての静的エラーを特定します。
dart analyze . --fatal-infos
2. 自動修正を適用します
dart fix ツールを使用して、標準的なリント処理と分析の問題を自動的に解決します。
# 変更をプレビュー
dart fix --dry-run
# 変更を適用
dart fix --apply
3. 残りのエラーを手動で解決します 残りのアナライザ出力を確認して、エラーの種類に基づいて条件付きロジックを適用します:
- エラーが Null セーフティの問題の場合(例:「Property cannot be accessed on a nullable receiver」):
- 変数が論理的に null になる可能性があるかを確認してください。
- はい の場合、オプショナルチェーニング(
?.)を使用するか、フォールバック(??)を提供してください。 - いいえ の場合、別の場所で初期化が保証されていれば、宣言を
lateでマークしてください。
- エラーが型の不一致の場合(例:「The argument type 'List<dynamic>' can't be assigned...」):
- 変数の初期化をトレースしてください。
- インスタンス化に明示的なジェネリック型アノテーションを追加してください(例:
[]の代わりに<int>[])。
- エラーが無効なオーバーライドの場合(例:「The parameter type doesn't match the overridden method」):
- パラメータ型をスーパークラスと一致するように拡張してください、または
- 型を限定することが意図的にドメイン ロジックで必要な場合は、パラメータに
covariantキーワードを追加してください。
4. 修正を検証します(フィードバックループ) バリデータを実行します。エラーを確認します。修正します。
dart analyze .
dart test
dart analyzeがエラーを報告する場合: ステップ 3 に戻ってください。dart testがTypeErrorで失敗する場合: 無効な明示的なキャスト(as T)を導入したか、初期化されていないlate変数にアクセスしました。実行時の障害を特定して、型の階層または初期化の順序を修正してください。
例
例: 動的リストの割り当ての修正
入力(静的解析に失敗):
void printInts(List<int> a) => print(a);
void main() {
final list = []; // List<dynamic> として推論される
list.add(1);
list.add(2);
printInts(list); // エラー: List<dynamic> を List<int> に割り当てられません
}
出力(静的解析に成功):
void printInts(List<int> a) => print(a);
void main() {
final list = <int>[]; // 明示的に型付け
list.add(1);
list.add(2);
printInts(list);
}
例: メソッドのオーバーライドの修正(反変性)
入力(静的解析に失敗):
class Animal {
void chase(Animal a) {}
}
class Cat extends Animal {
@override
void chase(Mouse a) {} // エラー: パラメータ型を限定
}
出力(静的解析に成功):
class Animal {
void chase(Animal a) {}
}
class Cat extends Animal {
@override
void chase(covariant Mouse a) {} // 明示的に共変としてマーク
}
例: late による Null セーフティの修正
入力(静的解析に失敗):
class Thermometer {
String temperature; // エラー: null 非許容インスタンス フィールドは初期化する必要があります
void read() {
temperature = '20C';
}
}
出力(静的解析に成功):
class Thermometer {
late String temperature; // 初期化チェックをランタイムに遅延
void read() {
temperature = '20C';
}
}
ライセンス: BSD-3-Clause(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dart-lang
- リポジトリ
- dart-lang/skills
- ライセンス
- BSD-3-Clause
- 最終更新
- 不明
Source: https://github.com/dart-lang/skills / ライセンス: BSD-3-Clause
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。