플러터에서 커스텀 린트를 도입하는 방법

2024. 6. 8. 14:00Flutter/Flutter Programming

반응형

플러터는 단순히 모바일 앱 개발 프레임워크를 넘어, 개발 프로세스를 효율적으로 관리하고 코드 품질을 유지하는 데 도움을 주는 다양한 도구와 기능을 제공합니다.

이 중 린트(lint)는 코드 오류 및 품질 문제를 식별하는 정적 분석 도구로, 코드 가독성, 유지보수성, 버그 예방 등을 향상시키는 데 중요한 역할을 합니다.

플러터는 기본적으로 dart_style 패키지를 활용한 린트 기능을 제공하지만, 프로젝트의 특성에 맞춰 더욱 엄격한 규칙이나 맞춤형 검사를 추가하고 싶을 때가 있습니다.

이러한 경우 커스텀 린트를 도입하여 프로젝트 특화적인 코드 품질 관리를 수행할 수 있습니다.

 

커스텀 린트 도입 방법

 

플러터(Flutter)에서 커스텀 린트(lint)를 도입하여 코드 스타일을 일관되게 유지하고 잠재적인 버그를 미리 발견하는 방법은 다음과 같습니다.

이를 위해서는 lint 패키지와 analysis_options.yaml 파일을 설정해야 합니다.

1. lint 패키지 추가

프로젝트의 pubspec.yaml 파일에 lint 패키지를 추가합니다

dev_dependencies:
  lint: ^2.0.0

2. analysis_options.yaml 파일 생성

프로젝트 루트에 analysis_options.yaml 파일을 생성하여 커스텀 린트 규칙을 정의합니다.

include: package:lint/analysis_options.yaml

linter:
  rules:
    # Add or override lint rules here
    always_declare_return_types: true
    avoid_print: true
    # Add more rules as needed

analyzer:
  errors:
    # Customize the severity of specific rules
    missing_return: error

3. analysis_options.yaml 파일 설정

위의 파일에서 include는 기본적으로 lint 패키지의 규칙을 포함하도록 설정합니다. 추가로 원하는 규칙을 추가하거나 기존 규칙을 덮어쓸 수 있습니다.

예를 들어, analysis_options.yaml 파일에서 always_declare_return_types와 avoid_print 규칙을 추가하고, missing_return 오류의 심각도를 error로 설정했습니다.

4. 프로젝트에 린트 적용

flutter analyze 명령어를 실행하여 린트를 적용합니다. 이 명령어는 코드에서 린트 규칙을 위반한 부분을 찾아서 보고합니다.

flutter analyze

5. VS Code 또는 Android Studio 설정

VS Code 또는 Android Studio 같은 IDE에서도 린트 규칙을 실시간으로 확인할 수 있습니다. 보통 이러한 IDE는 프로젝트의 analysis_options.yaml 파일을 자동으로 인식합니다.

그러나, 플러그인을 설치하여 린트 지원을 활성화할 수도 있습니다.

추가적으로 커스텀 린트 생성하기

dartanalyzer를 사용하여 맞춤형 린트 규칙을 만들고 싶다면, 패키지를 생성하여 규칙을 정의할 수 있습니다.

이는 고급 주제이며, analyzer 패키지와 함께 build_runner를 사용하여 자체 린트를 작성하는 과정을 포함합니다.

커스텀 린트 패키지 예제

1. 새로운 Dart 패키지를 생성합니다.

dart create -t package-custom my_custom_lints

2. 패키지 내부에서 린트 규칙을 정의합니다.

lib/src/rules 디렉토리에 새로운 린트 규칙을 추가합니다.

예를 들어, avoid_magic_numbers.dart 파일을 생성합니다

import 'package:analyzer/dart/ast/ast.dart';
import 'package:lint/src/lint_rule.dart';
import 'package:lint/src/rule.dart';

class AvoidMagicNumbers extends LintRule {
  AvoidMagicNumbers()
      : super(
          name: 'avoid_magic_numbers',
          description: 'Avoid using magic numbers.',
          details: 'Use named constants instead of magic numbers.',
          group: Group.style,
        );

  @override
  void registerNodeProcessors(NodeLintRegistry registry, LinterContext context) {
    final visitor = _Visitor(this);
    registry.addLiteral(this, visitor);
  }
}

class _Visitor extends SimpleAstVisitor<void> {
  final LintRule rule;

  _Visitor(this.rule);

  @override
  void visitIntegerLiteral(IntegerLiteral node) {
    if (node.value != null && node.value != 0 && node.value != 1) {
      rule.reportLint(node);
    }
  }
}

3. 린트 패키지를 다른 프로젝트에서 사용하려면 pubspec.yaml 파일에 종속성을 추가합니다.

dev_dependencies:
  my_custom_lints:
    path: ../my_custom_lints

 

4. 프로젝트의 analysis_options.yaml 파일에서 커스텀 린트를 사용하도록 설정합니다.

analyzer:
  plugins:
    - my_custom_lints

linter:
  rules:
    - avoid_magic_numbers

 

이렇게 하면 Flutter 프로젝트에서 커스텀 린트를 도입하고 적용할 수 있습니다.

이를 통해 코드 스타일을 일관되게 유지하고 코드 품질을 향상시킬 수 있습니다.

 

커스텀 린트 옵션에 관하여 자세히 알아보기

 

수발가족을 위한 일기장 “나비일기장”

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

비공개테스트를 위한 20명의 테스터모집 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

반응형