diagnostic_describe_all_properties 린트 규칙

diagnostic_describe_all_properties 린트 규칙

디버그 메서드에서 모든 공개 프로퍼티를 참조하도록 안내하는 린트 규칙이에요.

출처: diagnostic_describe_all_properties

본문

디버그 메서드 구현에서는 모든 공개 프로퍼티를 참조하는 게 좋아요.

Diagnosticable을 구현하는 클래스는 런타임에서 디버깅을 더 쉽게 하기 위해 debugFillProperties(...)debugDescribeChildren(...) 메서드 구현 안에서 모든 공개 프로퍼티를 참조해야 해요.

여기서 공개 프로퍼티란 다음 조건을 모두 만족하는 필드와 getter를 말해요.

  • _로 시작하는 패키지 전용(package-private) 프로퍼티가 아닐 것

  • static이거나 오버라이딩된 것이 아닐 것

  • 프로퍼티 자체가 Widget이거나 Widget의 컬렉션이 아닐 것

추가로 Flutter에서는 debug 접두사가 특별하게 취급돼요. 진단 관점에서 보면 어떤 프로퍼티 foo와 접두사가 붙은 debugFoo는 사실상 같은 프로퍼티를 나타내는 것으로 보고, 둘 중 하나만 참조해도 충분해요.

나쁜 예

class Absorber extends Widget {
  bool get absorbing => _absorbing;
  bool _absorbing;
  bool get ignoringSemantics => _ignoringSemantics;
  bool _ignoringSemantics;
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty<bool>('absorbing', absorbing));
    // Missing reference to ignoringSemantics
  }
}

ignoringSemantics 프로퍼티에 대한 참조가 빠져 있네요. 이렇게 빠뜨리면 디버깅 정보가 불완전해져요.

좋은 예

class Absorber extends Widget {
  bool get absorbing => _absorbing;
  bool _absorbing;
  bool get ignoringSemantics => _ignoringSemantics;
  bool _ignoringSemantics;
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty<bool>('absorbing', absorbing));
    properties.add(DiagnosticsProperty<bool>('ignoringSemantics', ignoringSemantics));
  }
}

이제 ignoringSemantics까지 properties.add(...)로 모두 참조했어요.

활성화 방법

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

linter:
  rules:
    - diagnostic_describe_all_properties

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

linter:
  rules:
    diagnostic_describe_all_properties: true

더 알아보기

Flutter 위젯의 디버그 출력을 더 풍부하게 만들고 싶다면 DiagnosticabledebugFillProperties에 대한 공식 문서를 함께 참고해 보세요. 린트 규칙 전체 목록은 공식 Linter rules 문서에서 확인할 수 있어요.