린터 규칙(Linter rules)

린터 규칙(Linter rules)

Dart 린터를 쓰면 Dart 코드에서 잠재적인 문제를 찾아낼 수 있어요. 린터는 IDE를 통해서, 또는 dart analyze 명령으로 사용할 수 있어요. 개별 린터 규칙을 켜고 끄는 방법은 분석기 문서의 개별 규칙 섹션을 참고해요.

이 페이지는 모든 린터 규칙을, 언제 쓰면 좋은지, 어떤 코드 패턴이 규칙을 발동시키는지, 코드를 어떻게 고칠 수 있는지 같은 세부 내용과 함께 정리한 목록이에요.

💡 린터 규칙(때로 린트(lint)라고 부르죠)은 오탐(false positive)이 있을 수 있고, 규칙끼리 항상 서로 일치하지는 않아요. 예를 들어 어떤 규칙은 일반 Dart 패키지에 더 적합하고, 다른 규칙은 Flutter 앱을 위해 설계됐어요.

세트(Sets)

호환되는 린터 규칙을 일일이 골라야 하는 부담을 피하려면, 린터 규칙 세트(rule set)로 시작하는 걸 고려해 봐요. 다음 패키지들이 세트를 제공해요.

lints

Dart 팀이 큐레이션한 두 개의 규칙 세트를 담고 있어요. 최소한 core 규칙 세트는 쓰는 걸 권장하는데, 이 세트는 pub.dev에 업로드된 패키지의 점수 매길 때 사용돼요. 더 나아가서, core의 상위 집합으로서 추가 문제를 찾아내고 스타일과 포맷을 강제하는 recommended 규칙 세트를 쓰는 게 더 좋아요. Flutter 코드를 작성한다면 lints를 기반으로 하는 flutter_lints 패키지의 규칙 세트를 써요.

flutter_lints

Flutter 팀이 Flutter 앱, 패키지, 플러그인에서 쓰도록 권장하는 flutter 규칙 세트를 담고 있어요. 이 규칙 세트는 recommended 세트의 상위 집합이고, recommended는 다시 pub.dev에 업로드된 패키지 점수의 일부를 결정하는 core 세트의 상위 집합이에요.

특정 규칙 세트를 쓰는 방법은 린터 규칙 켜기/끄기 문서를 참고해요. 미리 정의된 규칙 세트를 더 찾으려면 pub.dev의 #lints 토픽을 확인해 봐요.

상태(Status)

각 규칙에는 상태 또는 성숙도가 있어요.

  • Stable(안정): 이 규칙들은 사용하기 안전하고 Dart 언어 최신 버전과 함께 기능이 검증됐어요. experimental, deprecated, removed로 표시되지 않는 한 모든 규칙은 안정으로 간주돼요.
  • Experimental(실험): 이 규칙들은 아직 평가 중이고 안정화되지 않을 수도 있어요. 주의해서 쓰고, 만나는 문제는 보고해 주세요.
  • Deprecated(폐기): 이 규칙들은 더 이상 사용을 권장하지 않으며 향후 Dart 릴리스에서 제거될 수 있어요.
  • Removed(제거): 이 규칙들은 최신 안정 Dart 릴리스에서 이미 제거됐어요.

빠른 수정(Quick fixes)

일부 규칙은 빠른 수정(quick fix)으로 자동 수정할 수 있어요. 빠른 수정은 린터 규칙이 보고한 문제를 고치는 데 집중한 자동 편집이에요.

규칙에 빠른 수정이 있다면 dart fix나 Dart 지원이 있는 에디터를 통해 적용할 수 있어요. 자세한 내용은 분석 이슈의 빠른 수정을 참고해요.

규칙(Rules)

다음은 모든 린터 규칙과 그 기능에 대한 짧은 설명을 모은 색인(index)이에요. 특정 규칙에 대해 더 자세히 알고 싶다면 카드의 Learn more 버튼을 클릭해요.

Dart 3.13.3의 모든 린터 규칙을 담은 자동 생성 목록은 All linter rules를 확인해 봐요.

  • always_declare_return_types — 메서드 반환 타입을 항상 선언해요.
  • always_put_control_body_on_new_line — 제어 구조의 표현식을 문과 분리해서 새 줄에 둬요.
  • always_put_required_named_parameters_first — 필수 named 매개변수를 앞에 두어요.
  • always_require_non_null_named_parameters — 기본값이 없는 named 매개변수에 @required를 지정해요.
  • always_specify_types — 타입 어노테이션을 명시해요.
  • always_use_package_imports — lib/ 안의 파일은 상대 import 대신 package import를 써요.
  • annotate_overrides — 오버라이드한 멤버에 어노테이션을 달아요.
  • annotate_redeclares — 재선언한 멤버에 어노테이션을 달아요.
  • async_return_with_no_await — await 없이 반환하는 async 함수를 피해요.
  • avoid_annotating_with_dynamic — 필요하지 않을 땐 dynamic으로 어노테이션하는 걸 피해요.
  • avoid_as — as를 쓰는 걸 피해요.
  • avoid_bool_literals_in_conditional_expressions — 조건식에서 bool 리터럴을 쓰는 걸 피해요.
  • avoid_catches_without_on_clauses — on 절이 없는 catch를 피해요.
  • avoid_catching_errors — Error나 그를 구현한 타입을 명시적으로 잡지 마세요.
  • avoid_classes_with_only_static_members — static 멤버만 담긴 클래스를 정의하는 걸 피해요.
  • avoid_double_and_int_checks — double과 int 타입 검사를 피해요.
  • avoid_dynamic_calls — dynamic 대상에 메서드 호출이나 속성 접근을 피해요.
  • avoid_empty_else — else 절에 빈 문을 쓰는 걸 피해요.
  • avoid_equals_and_hash_code_on_mutable_classes — @immutable로 표시되지 않은 클래스에서 ==와 hashCode를 오버로드하지 마세요.
  • avoid_escaping_inner_quotes — 안쪽 따옴표 이스케이프를 피하려고 바깥 따옴표를 바꿔요.
  • avoid_field_initializers_in_const_classes — const 클래스에서 필드 초기화를 피해요.
  • avoid_final_parameters — 매개변수 선언에 final을 쓰는 걸 피해요.
  • avoid_function_literals_in_foreach_calls — forEach에 함수 리터럴을 쓰는 걸 피해요.
  • avoid_futureor_void — 결과 타입으로 'FutureOr'을 쓰는 걸 피해요.
  • avoid_implementing_value_types — ==를 오버라이드한 클래스를 구현하지 마세요.
  • avoid_init_to_null — 변수를 null로 명시적으로 초기화하지 마세요.
  • avoid_js_rounded_ints — JavaScript의 반올림된 정수를 피해요.
  • avoid_multiple_declarations_per_line — 한 줄에 변수를 여러 개 선언하지 마세요.
  • avoid_null_checks_in_equality_operators — 사용자 정의 == 연산자에서 null 검사를 하지 마세요.
  • avoid_positional_boolean_parameters — 위치 기반 boolean 매개변수를 피해요.
  • avoid_print — 프로덕션 코드에서 print 호출을 피해요.
  • avoid_private_typedef_functions — private typedef 함수를 피해요.
  • avoid_redundant_argument_values — 중복되는 인자 값을 피해요.
  • avoid_relative_lib_imports — lib/ 안의 파일은 상대 import를 피해요.
  • avoid_renaming_method_parameters — 오버라이드한 메서드의 매개변수 이름을 바꾸지 마세요.
  • avoid_return_types_on_setters — setter에 반환 타입을 쓰지 마세요.
  • avoid_returning_null — bool, double, int, num 반환 타입의 멤버에서 null을 반환하지 마세요.
  • avoid_returning_null_for_future — Future에 대해 null을 반환하지 마세요.
  • avoid_returning_null_for_void — void에 대해 null을 반환하지 마세요.
  • avoid_returning_this — 유창한(fluent) 인터페이스를 만들려고 this를 반환하지 마세요.
  • avoid_setters_without_getters — getter 없는 setter를 피해요.
  • avoid_shadowing_type_parameters — 타입 매개변수를 가리는(shadowing) 걸 피해요.
  • avoid_single_cascade_in_expression_statements — 표현식 문에서 단일 캐스케이드를 피해요.
  • avoid_slow_async_io — 느린 비동기 dart:io 메서드를 피해요.
  • avoid_type_to_string — 결과가 난독화(minify)될 수 있으니 프로덕션 코드에서 .toString()을 피해요.
  • avoid_types_as_parameter_names — 타입을 매개변수 이름으로 쓰지 마세요.
  • avoid_types_on_closure_parameters — 함수 표현식 매개변수에 타입을 어노테이션하지 마세요.
  • avoid_unnecessary_containers — 불필요한 컨테이너를 피해요.
  • avoid_unstable_final_fields — final 필드를 오버라이드해서 호출할 때마다 다른 값을 반환하지 마세요.
  • avoid_unused_constructor_parameters — 생성자에서 쓰이지 않는 매개변수를 정의하지 마세요.
  • avoid_void_async — void를 반환하는 async 함수를 피해요.
  • avoid_web_libraries_in_flutter — Flutter 웹 플러그인 패키지 밖에서 웹 전용 라이브러리를 쓰지 마세요.
  • await_only_futures — Future만 await해요.
  • camel_case_extensions — 확장(extension) 이름은 UpperCamelCase로 지어요.
  • camel_case_types — 타입 이름은 UpperCamelCase로 지어요.
  • cancel_subscriptions — dart:async StreamSubscription 인스턴스를 취소해요.
  • cascade_invocations — 같은 참조에 대한 연속 메서드 호출은 캐스케이드로 묶어요.
  • cast_nullable_to_non_nullable — nullable 값을 non-nullable 타입으로 캐스팅하지 마세요.
  • close_sinks — dart:core Sink 인스턴스를 닫아요.
  • collection_methods_unrelated_type — 관련 없는 타입의 인자로 컬렉션 메서드를 호출하는 걸 피해요.
  • combinators_ordering — 조합자(combinator) 이름을 알파벳순으로 정렬해요.
  • comment_references — 문서 주석에서는 scope 안의 식별자만 참조해요.
  • conditional_uri_does_not_exist — 조건부 import가 없어요.
  • constant_identifier_names — 상수 이름은 lowerCamelCase를 선호해요.
  • control_flow_in_finally — finally 블록에서 제어 흐름을 피해요.
  • curly_braces_in_flow_control_structures — 모든 제어 흐름 구조에 중괄호를 써요.
  • dangling_library_doc_comments — 라이브러리 문서 주석을 library 지시어에 붙여요.
  • depend_on_referenced_packages — 참조하는 패키지에 의존해요.
  • deprecated_consistency — deprecated 어노테이션이 빠져 있어요.
  • deprecated_member_use_from_same_package — 선언된 것과 같은 패키지 안에서 deprecated 요소를 쓰지 마세요.
  • diagnostic_describe_all_properties — 디버그 메서드에서 모든 공개 속성을 참조해요.
  • directives_ordering — Effective Dart 가이드의 지시어 정렬 규칙을 따라요.
  • do_not_use_environment — 환경에 선언된 변수를 쓰지 마세요.
  • document_ignores — ignore 주석을 문서화해요.
  • empty_catches — 빈 catch 블록을 피해요.
  • empty_constructor_bodies — 빈 생성자 본문은 {} 대신 ;을 써요.
  • empty_container_bodies — 빈 컨테이너 본문은 {} 대신 ;을 써요.
  • empty_statements — 빈 문을 피해요.
  • enable_null_safety — 사운드 null safety를 써요.
  • eol_at_end_of_file — 파일 끝에 개행을 하나 둬요.
  • exhaustive_cases — enum 같은 타입의 모든 상수에 대해 case 절을 정의해요.
  • file_names — 소스 파일 이름은 lowercase_with_underscores로 지어요.
  • flutter_style_todos — Flutter TODO 형식을 써요: // TODO(username): message, https://URL-to-issue.
  • future_sync_value — 동기 값에는 Future.syncValue가 더 성능이 좋아요.
  • hash_and_equals — ==를 오버라이드하면 항상 hashCode도 오버라이드해요.
  • implementation_imports — 다른 패키지의 구현 파일을 import하지 마세요.
  • implicit_call_tearoffs — 객체를 Function으로 쓸 때 call 메서드를 명시적으로 tear-off해요.
  • implicit_reopen — 클래스를 암시적으로 재오픈하지 마세요.
  • initialize_in_field_declaration — 필드를 필드 초기화자에서 초기화해요.
  • invalid_case_patterns — Dart 3.0에서 유효한 case 표현식을 써요.
  • invariant_booleans — 조건이 무조건 true나 false로 평가되면 안 돼요.
  • iterable_contains_unrelated_type — 관련 없는 타입의 참조로 Iterable.contains를 호출하는 것을 피해요.
  • join_return_with_assignment — 가능하면 return 문을 할당과 합쳐요.
  • leading_newlines_in_multiline_strings — 멀티라인 문자열은 개행으로 시작해요.
  • library_annotations — 라이브러리 어노테이션을 library 지시어에 붙여요.
  • library_names — 라이브러리 이름은 lowercase_with_underscores로 지어요.
  • library_prefixes — 라이브러리 prefix를 지정할 때 lowercase_with_underscores를 써요.
  • library_private_types_in_public_api — 공개 API에서 private 타입을 쓰는 걸 피해요.
  • lines_longer_than_80_chars — 80자보다 긴 줄을 피해요.
  • list_remove_unrelated_type — 관련 없는 타입의 참조로 remove를 호출하는 것을 피해요.
  • literal_only_boolean_expressions — 리터럴로만 구성된 boolean 표현식을 피해요.
  • matching_super_parameters — 일치하는 super 매개변수 이름을 써요.
  • migrate_design_widgets — 디자인 위젯은 Material이나 Cupertino 패키지에서 import해요.
  • missing_code_block_language_in_doc_comment — 코드 블록에 지정된 언어가 빠져 있어요.
  • missing_whitespace_between_adjacent_strings — 인접한 문자열 사이에 공백이 빠져 있어요.
  • no_adjacent_strings_in_list — 리스트에서 인접한 문자열을 쓰지 마세요.
  • no_default_cases — default 케이스를 쓰지 마세요.
  • no_duplicate_case_values — 같은 값을 가진 case를 둘 이상 쓰지 마세요.
  • no_dynamic_casts — dynamic에서의 암시적 캐스팅을 피해요.
  • no_leading_underscores_for_library_prefixes — 라이브러리 prefix에 선행 밑줄을 쓰지 마세요.
  • no_leading_underscores_for_local_identifiers — 로컬 식별자에 선행 밑줄을 쓰지 마세요.
  • no_literal_bool_comparisons — boolean 표현식을 boolean 리터럴과 비교하지 마세요.
  • no_logic_in_create_state — createState에 로직을 두지 마세요.
  • no_raw_types — 원시(raw) 타입을 피해요.
  • no_runtimetype_tostring — runtimeType에 toString()을 호출하지 마세요.
  • no_self_assignments — 변수를 자기 자신에게 할당하지 마세요.
  • no_wildcard_variable_uses — 와일드카드 매개변수나 변수를 쓰지 마세요.
  • non_constant_identifier_names — 비상수 식별자 이름은 lowerCamelCase로 지어요.
  • noop_primitive_operations — 아무 일도 하지 않는 프리미티브 연산을 피해요.
  • null_check_on_nullable_type_parameter — 잠재적으로 nullable한 타입 매개변수에 null 검사를 하지 마세요.
  • null_closures — 클로저가 기대되는 자리에 null을 인자로 넘기지 마세요.
  • omit_local_variable_types — 로컬 변수의 타입 어노테이션을 생략해요.
  • omit_obvious_local_variable_types — 로컬 변수의 자명한 타입 어노테이션을 생략해요.
  • omit_obvious_property_types — 최상위·static 변수의 자명한 타입 어노테이션을 생략해요.
  • one_member_abstracts — 간단한 함수로 충분한데 멤버 하나짜리 추상 클래스를 정의하지 마세요.
  • only_throw_errors — Exception이나 Error를 상속하는 클래스의 인스턴스만 throw해요.
  • overridden_fields — 필드를 오버라이드하지 마세요.
  • package_api_docs — 모든 공개 API에 문서 주석을 제공해요.
  • package_names — 패키지 이름에 lowercase_with_underscores를 써요.
  • package_prefixed_library_names — 라이브러리 이름을 패키지 이름과 점으로 구분된 경로로 접두어를 붙여요.
  • parameter_assignments — 함수나 메서드의 매개변수 참조를 다시 할당하지 마세요.
  • prefer_adjacent_string_concatenation — 문자열 리터럴을 결합할 때 인접한 문자열을 써요.
  • prefer_asserts_in_initializer_lists — assert를 초기화 리스트에 두는 걸 선호해요.
  • prefer_asserts_with_message — 메시지가 있는 assert를 선호해요.
  • prefer_bool_in_asserts — assert 조건으로 boolean을 쓰는 걸 선호해요.
  • prefer_collection_literals — 가능하면 컬렉션 리터럴을 써요.
  • prefer_conditional_assignment — null 검사보다 ??=를 선호해요.
  • prefer_const_constructors — 상수 생성자에는 const를 선호해요.
  • prefer_const_constructors_in_immutables — @immutable 클래스에서 const 생성자를 선언하는 걸 선호해요.
  • prefer_const_declarations — 선언에서 final보다 const를 선호해요.
  • prefer_const_literals_to_create_immutables — @immutable 클래스 생성자의 매개변수로 const 리터럴을 선호해요.
  • prefer_constructors_over_static_methods — 인스턴스를 만들 때 static 메서드 대신 생성자를 정의하는 걸 선호해요.
  • prefer_contains — List와 String 인스턴스에는 contains를 써요.
  • prefer_double_quotes — 이스케이프가 필요 없는 곳에서는 큰따옴표를 선호해요.
  • prefer_equal_for_default_values — named 매개변수와 기본값 사이는 =로 구분해요.
  • prefer_expression_function_bodies — 본문이 단일 return 문인 짧은 멤버에는 =>를 써요.
  • prefer_final_fields — private 필드는 final이 될 수 있어요.
  • prefer_final_in_for_each — for-each 루프 변수가 재할당되지 않으면 final을 선호해요.
  • prefer_final_locals — 재할당되지 않는 변수 선언에는 final을 선호해요.
  • prefer_final_parameters — 재할당되지 않는 매개변수 선언에는 final을 선호해요.
  • prefer_for_elements_to_map_fromiterable — iterable에서 map을 만들 때 for 요소를 선호해요.
  • prefer_foreach — 모든 요소에 함수를 적용할 때는 forEach를 써요.
  • prefer_function_declarations_over_variables — 이름에 함수를 바인딩할 때는 함수 선언을 써요.
  • prefer_generic_function_type_aliases — 제네릭 함수 타입 별칭을 선호해요.
  • prefer_if_elements_to_conditional_expressions — 가능하면 조건식보다 if 요소를 선호해요.
  • prefer_if_null_operators — ?? 연산자를 선호해요.
  • prefer_initializing_formals — 가능하면 초기화 형식(initializing formal)을 써요.
  • prefer_inlined_adds — 가능하면 리스트 항목 선언을 인라인해요.
  • prefer_int_literals — double 리터럴보다 int 리터럴을 선호해요.
  • prefer_interpolation_to_compose_strings — 문자열과 값을 조합할 때 보간(interpolation)을 써요.
  • prefer_is_empty — Iterable과 Map에는 isEmpty를 써요.
  • prefer_is_not_empty — Iterable과 Map에는 isNotEmpty를 써요.
  • prefer_is_not_operator — is! 연산자를 선호해요.
  • prefer_iterable_wheretype — iterable에 whereType을 쓰는 걸 선호해요.
  • prefer_mixin — mixin 사용을 선호해요.
  • prefer_null_aware_method_calls — null 인식 메서드 호출을 선호해요.
  • prefer_null_aware_operators — null 인식 연산자를 선호해요.
  • prefer_relative_imports — lib/ 안의 파일은 상대 import를 선호해요.
  • prefer_single_quotes — 작은따옴표를 포함한 문자열에만 큰따옴표를 써요.
  • prefer_spread_collections — 가능하면 스프레드 컬렉션을 써요.
  • prefer_typing_uninitialized_variables — 초기화되지 않은 변수와 필드에는 타입을 지정해요.
  • prefer_void_to_null — void를 원하지 않는다는 게 확실하지 않다면 Null 타입을 쓰지 마세요.
  • provide_deprecation_message — @Deprecated("message")로 폐기 메시지를 제공해요.
  • public_member_api_docs — 모든 공개 멤버를 문서화해요.
  • recursive_getters — 속성 getter가 재귀적으로 자기 자신을 반환해요.
  • remove_deprecations_in_breaking_versions — 주 버전에서 폐기되면 제거해요.
  • require_trailing_commas — 모든 매개변수 리스트와 인자 리스트에 후행 쉼표를 써요.
  • secure_pubspec_urls — pubspec.yaml에서 보안 URL을 써요.
  • simple_directive_paths — 간단한 지시어 경로를 써요.
  • simplify_variable_pattern — 변수 패턴에서 불필요한 멤버 이름을 피해요.
  • sized_box_for_whitespace — 공백에는 SizedBox를 써요.
  • sized_box_shrink_expand — SizedBox의 shrink와 expand named 생성자를 써요.
  • slash_for_doc_comments — 문서 주석에는 ///을 선호해요.
  • sort_child_properties_last — 위젯 인스턴스 생성에서 child 속성을 마지막에 정렬해요.
  • sort_constructors_first — 생성자 선언을 다른 멤버보다 먼저 정렬해요.
  • sort_pub_dependencies — pub 의존성을 알파벳순으로 정렬해요.
  • sort_unnamed_constructors_first — 이름 없는 생성자 선언을 먼저 정렬해요.
  • specify_nonobvious_local_variable_types — 로컬 변수에 자명하지 않은 타입 어노테이션을 지정해요.
  • specify_nonobvious_property_types — 최상위·static 변수에 자명하지 않은 타입 어노테이션을 지정해요.
  • strict_top_level_inference — 타입 어노테이션을 명시해요.
  • super_goes_last — 생성자 초기화 리스트에서 super 호출을 마지막에 둬요.
  • switch_on_type — 'Type'에 대한 switch 문을 피해요.
  • test_types_in_equals — operator ==(Object other)에서 인자의 타입을 검사해요.
  • throw_in_finally — finally 블록에서 throw를 피해요.
  • tighten_type_of_initializing_formals — 초기화 형식(initializing formal)의 타입을 좁혀요.
  • type_annotate_public_apis — 공개 API에 타입 어노테이션을 해요.
  • type_init_formals — 초기화 형식에 타입 어노테이션을 하지 마세요.
  • type_literal_in_constant_pattern — 타입 리터럴이 있는 상수 패턴을 쓰지 마세요.
  • unintended_html_in_doc_comment — 문서 주석의 꺾쇠 괄호는 Markdown에서 HTML로 처리돼요.
  • unnecessary_async — await 없이 async를 쓰지 마세요.
  • unnecessary_await_in_return — return에서 불필요한 await 키워드를 피해요.
  • unnecessary_brace_in_string_interps — 필요하지 않을 땐 보간에서 중괄호를 피해요.
  • unnecessary_breaks — break가 암시될 때 명시적 break를 쓰지 마세요.
  • unnecessary_const — const 키워드를 피해요.
  • unnecessary_const_in_enum_constructor — 생성 enum 생성자에서 명시적 const를 쓰지 마세요.
  • unnecessary_constructor_name — 불필요한 .new 생성자 이름을 피해요.
  • unnecessary_final — 로컬 변수에 final을 쓰지 마세요.
  • unnecessary_getters_setters — 그냥 "안전"하려고 필드를 getter·setter로 감싸지 마세요.
  • unnecessary_ignore — 발생하지 않는 진단 코드를 ignore하지 마세요.
  • unnecessary_lambdas — tear-off로 충분한데 람다를 만들지 마세요.
  • unnecessary_late — 필요하지 않을 땐 late 수정자를 지정하지 마세요.
  • unnecessary_library_directive — 문서 주석이나 어노테이션이 없으면 library 지시어를 피해요.
  • unnecessary_library_name — library 선언에 라이브러리 이름을 넣지 마세요.
  • unnecessary_new — 불필요한 new 키워드를 피해요.
  • unnecessary_null_aware_assignments — null 인식 할당에서 null을 피해요.
  • unnecessary_null_aware_operator_on_extension_on_nullable — nullable 타입의 확장에 불필요한 null 인식 연산자를 피해요.
  • unnecessary_null_checks — 불필요한 null 검사를 피해요.
  • unnecessary_null_in_if_null_operators — ?? 연산자에서 null을 쓰는 걸 피해요.
  • unnecessary_nullable_for_final_variable_declarations — non-nullable 값으로 초기화된 final 변수에는 non-nullable 타입을 써요.
  • unnecessary_overrides — 같은 매개변수로 super 메서드 호출만 하는 오버라이드를 하지 마세요.
  • unnecessary_parenthesis — 불필요한 괄호는 제거할 수 있어요.
  • unnecessary_primary_constructor_body — 불필요한 기본 생성자 본문은 제거할 수 있어요.
  • unnecessary_raw_strings — 불필요한 raw 문자열을 피해요.
  • unnecessary_statements — 불필요한 문을 쓰지 마세요.
  • unnecessary_string_escapes — 문자열에서 불필요한 백슬래시를 제거해요.
  • unnecessary_string_interpolations — 불필요한 문자열 보간을 피해요.
  • unnecessary_this — 섀도잉을 피할 때가 아니면 this로 멤버에 접근하지 마세요.
  • unnecessary_this_alias — this를 로컬 변수에 할당하는 대신 직접 쓰세요.
  • unnecessary_to_list_in_spreads — 스프레드에서 불필요한 toList()를 피해요.
  • unnecessary_type_name_in_constructor — 생성자에서 명시적 타입 이름을 쓰지 마세요.
  • unnecessary_unawaited — 'unawaited'의 불필요한 사용을 피해요.
  • unnecessary_underscores — 불필요한 밑줄은 제거할 수 있어요.
  • unreachable_from_main — 실행 가능한 라이브러리에서 도달할 수 없는 최상위 멤버를 피해요.
  • unrelated_type_equality_checks — 관련 없는 타입의 참조로 == 연산자를 호출하는 것을 피해요.
  • unsafe_html — 안전하지 않은 HTML API를 피해요.
  • unsafe_variance — 안전하지 않은 타입: 비공변(non-covariant) 위치에 타입 변수가 있어요.
  • use_build_context_synchronously — 비동기 간격을 가로질러 BuildContext를 쓰지 마세요.
  • use_colored_box — ColoredBox를 써요.
  • use_declaring_parameters — 선언 매개변수(declaring parameter)를 써요.
  • use_decorated_box — DecoratedBox를 써요.
  • use_enums — enum처럼 동작하는 클래스보다 enum을 써요.
  • use_full_hex_values_for_flutter_colors — Color를 만들 때 8자리 16진수 정수(예: 0xFFFFFFFF)를 선호해요.
  • use_function_type_syntax_for_parameters — 매개변수에 제네릭 함수 타입 문법을 써요.
  • use_if_null_to_convert_nulls_to_bools — null을 bool로 변환할 때 ?? 연산자를 써요.
  • use_is_even_rather_than_modulo — % 2의 결과를 검사하는 대신 intValue.isOdd/isEven을 선호해요.
  • use_key_in_widget_constructors — 위젯 생성자에서 key를 써요.
  • use_late_for_private_fields_and_variables — non-nullable 타입의 private 멤버에는 late를 써요.
  • use_named_constants — 미리 정의된 named 상수를 써요.
  • use_null_aware_elements — null을 검사하는 if 요소는 null 인식 요소로 바꿀 수 있어요.
  • use_raw_strings — 이스케이프를 피하려고 raw 문자열을 써요.
  • use_rethrow_when_possible — 잡은 예외를 다시 던질 때 rethrow를 써요.
  • use_setters_to_change_properties — 개념적으로 속성을 바꾸는 연산에는 setter를 써요.
  • use_string_buffers — 문자열을 조합할 때 문자열 버퍼를 써요.
  • use_string_in_part_of_directives — part of 지시어에서 문자열을 써요.
  • use_super_parameters — 가능하면 super 초기화 매개변수를 써요.
  • use_test_throws_matchers — fail() 대신 throwsA 매처를 써요.
  • use_to_and_as_if_applicable — 가능하면 메서드 이름을 to/_to나 as/_as로 시작해요.
  • use_truncating_division — 절삭 나눗셈(truncating division)을 써요.
  • valid_regexps — 유효한 정규식 문법을 써요.
  • var_with_no_type_annotation — 타입 어노테이션 없이 var로 매개변수를 선언하지 마세요.
  • void_checks — void에 할당하지 마세요.

더 알아보기