discarded_futures 린트 규칙

discarded_futures 린트 규칙

동기 함수 안에서 Future를 반환하는 호출을 함부로 버리지 않도록 지키는 린트 규칙이에요.

출처: discarded_futures

본문

async가 아닌 함수에서 비동기 호출을 하는 건 대부분 프로그래밍 오류의 신호예요. 일반적으로 이런 함수는 async로 표시하고, 그 Futureunawaited_futures 규칙이 지키는 것처럼 await해야 해요.

비동기 함수를 async가 아닌 블록 안에서 호출하지 마세요.

나쁜 예

void recreateDir(String path) {
  deleteDir(path);
  createDir(path);
}

Future<void> deleteDir(String path) async {}

Future<void> createDir(String path) async {}

recreateDirasync가 아닌데 그 안에서 deleteDir(path)createDir(path) 같은 비동기 함수를 호출하고 있어요. 반환된 Future가 그대로 버려지죠.

좋은 예

Future<void> recreateDir(String path) async {
  await deleteDir(path);
  await createDir(path);
}

Future<void> deleteDir(String path) async {}

Future<void> createDir(String path) async {}

함수를 async로 만들고 각 호출을 await해서 순서대로 완료되도록 했어요.

활성화 방법

이 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 discarded_futures을 추가하면 돼요.

linter:
  rules:
    - discarded_futures

linter > rules를 YAML map 문법으로 작성한다면 discarded_futures: true처럼 불리언 값을 지정해도 되고요.

linter:
  rules:
    discarded_futures: true

더 알아보기

버려질 Future를 의도적으로 무시해야 하는 경우엔 unawaited_futures 규칙과 unawaited() 함수를 함께 참고해 보세요. 린트 규칙 전체 목록은 공식 Linter rules 문서에서 확인할 수 있어요.