dart fix

dart fix

분석이 알려주는 문제를 자동으로 고치고, 새 SDK 버전에 맞춰 오래된 API 사용 방식을 옮겨 주는 커맨드라인 도구예요. dart fix는 어떤 변화가 일어날지 미리 확인하면서 안전하게 적용할 수 있도록 도와드릴게요.

출처: dart fix

본문

dart fix 명령은 다음 두 종류의 문제를 찾아서 고쳐 줘요.

  • dart analyze가 잡아낸 분석 문제 중, 자동 수정(quick-fix 또는 code action이라고도 함)이 연결된 것들.
  • Dart와 Flutter SDK의 새 버전으로 업데이트할 때 생기는, 더 이상 쓰이지 않는 API 사용 방식.

팁: dart fix를 영상으로 배우고 싶다면 Decoding Flutter심층 분석(depth dive) 영상을 확인해 보세요.

수정 적용하기

제안된 변경 사항을 미리 보려면 --dry-run 플래그를 사용해요.

$ dart fix --dry-run

제안된 변경 사항을 실제로 적용하려면 --apply 플래그를 사용해요.

$ dart fix --apply

동작 방식 조정하기

dart fix 명령은 진단(diagnostic)으로 "문제"가 확인됐을 때만 수정을 적용해요. 컴파일 오류 같은 일부 진단은 기본적으로 활성화되어 있는 반면, lint 같은 나머지 진단은 개인마다 선호가 달라서 분석 옵션 파일에서 명시적으로 활성화해야 해요.

추가 lint를 활성화하면 적용할 수 있는 수정의 수를 늘릴 수도 있어요. 다만 모든 진단에 연결된 수정이 있는 건 아니라는 점을 기억해 주세요.

예시

이런 코드가 있다고 상상해 볼게요.

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에서 슈퍼 초기화자(super initializers)라는 새로운 언어 기능이 도입됐는데, 이 기능을 쓰면 Vector3d의 생성자를 더 간결한 형태로 작성할 수 있어요.

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

기존 코드를 이 기능을 사용하도록 dart fix가 업그레이드하게 하고, 나중에 이 기능을 잊어버리면 분석기가 경고하도록 하려면 analysis_options.yaml 파일을 다음과 같이 설정해요.

linter:
  rules:
    - use_super_parameters

또한 코드가 필요한 언어 버전을 활성화하고 있는지도 확인해야 해요. 슈퍼 초기화자는 Dart 2.17에서 도입됐으니, pubspec.yaml의 SDK 하한 제약을 최소한 그 버전으로 올려 주세요.

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가 알림을 표시해서 알려 줘요.

dart pub get 또는 dart pub upgrade를 실행한 뒤에도, 패키지 변경으로 dart fix가 고칠 수 있는 문제가 생겼다면 VS Code가 이 알림을 표시할 수 있어요.

dart fix를 실행하기 전에 모든 파일을 저장해 주세요. 그래야 Dart가 파일의 최신 버전을 사용하게 돼요.

더 알아보기