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