メインコンテンツにスキップ

dart fix

dart fix コマンドは、2 種類の問題を特定して修正します。

  • dart analyze によって特定された、自動修正(「クイックフィックス」または「コードアクション」とも呼ばれます)が関連付けられている分析上の問題。

  • Dart および Flutter SDK の新しいリリースに更新した際の、古い API の使用箇所。

修正を適用する

#

提案されている変更をプレビューするには、--dry-run フラグを使用します。

dart fix --dry-run

提案されている変更を適用するには、--apply フラグを使用します。

dart fix --apply

動作をカスタマイズする

#

dart fix コマンドは、「問題」(診断によって識別される)がある場合にのみ修正を適用します。コンパイルエラーなどの一部の診断は暗黙的に有効になりますが、リンティングなどのその他の診断は、個々の設定が異なるため、analysis options ファイルで明示的に有効にする必要があります。

追加のリンティングを有効にすることで、適用できる修正の数を増やすことができる場合があります。すべての診断に修正が関連付けられているわけではないことに注意してください。

#

以下のようなコードがあるとします。

dart
class Vector2d {
  final double x, y;
  Vector2d(this.x, this.y);
}

class Vector3d extends Vector2d {
  final double z;
  Vector3d(final double x, final double y, this.z) : super(x, y);
}

Dart 2.17 では、スーパーイニシャライザと呼ばれる新しい言語機能が導入されました。これにより、Vector3d のコンストラクタをよりコンパクトなスタイルで記述できるようになります。

dart
class Vector3d extends Vector2d {
  final double z;
  Vector3d(super.x, super.y, this.z);
}

dart fix がこの機能を使用するように既存のコードをアップグレードできるようにし、後でこの機能の使用を忘れた場合にアナライザが警告するようにするには、analysis_options.yaml ファイルを次のように設定します。

yaml
linter:
  rules:
    - use_super_parameters

また、コードが必要な言語バージョンを有効にしていることを確認する必要があります。スーパーイニシャライザは Dart 2.17 で導入されたため、pubspec.yaml を更新して、SDK 制約の下限を少なくともそれ以降に設定してください。

yaml
environment:
  sdk: ">=2.17.0 <4.0.0"

次に、提案された変更を表示する際に、以下が表示されるはずです。

dart fix --dry-run
Computing fixes in myapp (dry run)... 9.0s

1 proposed fixes in 1 files.

lib/myapp.dart
  use_super_parameters • 1 fix

分析結果と動作のカスタマイズの詳細については、静的分析のカスタマイズを参照してください。

VS Code のサポート

#

VS Code でプロジェクトを開くと、Dart プラグインは、dart fix で修正できる問題がないかプロジェクトをスキャンします。修正できる問題が見つかった場合、VS Code はリマインダーとしてプロンプトを表示します。

VS Code notification about 'dart fix'

dart pub get または dart pub upgrade を実行した後、パッケージの変更によって dart fix で修正できる問題が追加された場合、VS Code はこのプロンプトを表示することもあります。

dart fix を実行する前に、すべてのファイルを保存してください。これにより、Dart がファイルの最新バージョンを使用することが保証されます。