[Flutter] 정적 분석 파일 간 종속성 Analyzer Plugin 소개

시작했어.나 카와야.
원하는 Fluter/Dart의 정적 해석 플러그인을 만들었으니 소개해 드리겠습니다.

전하고 싶은 거.

  • 인코딩 규약을 준수하기 어려워 import을 제한하는 정적 분석
  • 을 제작하였다.
  • GiithubAction에서 수행하고 문제가 있으면 PR에 댓글
  • AnalyzerPlugin


    나는 코딩 규약은 팀에서 규칙을 제정하여 누가 봐도 이해할 수 있는 코드를 쓰는 것을 목적으로 도입한 것이라고 생각한다.
    다른 한편, 코드 규약의 준수를 확보하기 위해 코드 심사의 비용이 증가할 것이다.
    비용이 늘어나 코딩 규약을 지키지 않으면 목적을 달성할 수 없고 코드 심사만 고통스러워지는 것은 슬픈 일이다.
    이러한 상황을 개선하기 위해 이번에는 import을 제한하는 최소한의 정적 분석을 했다.
    구체적인 설치는 우리의 창고에 매우 참고 가치가 있습니다!
    https://github.com/mj-hd/flutter_hooks_lint_plugin

    생성된 라인 정보


    import의 정적 분석을 했습니다.
    import_lint(pub.dev) 공개.

    할 수 있는 일


    analyzer:
        plugins:
            - import_lint
    
    import_lint:
        rules:
            use_case_rule:
                target_file_path: "/**/use_case/*_use_case.dart"
                not_allow_imports: ["/**/use_case/*_use_case.dart"]
                exclude_imports: ["/**/use_case/base_use_case.dart"]
    
    analysis_options.yaml에서 상술한 기술을 통해 UseCase가 UseCase를 참고하는 것을 방지하고 UseCase 상속원의 기본 UseseCase를 배제할 수 있다.
    예를 들어 이런 파일이 존재하는 경우
    - lib/use_case/one_use_case.dart
    	import 'base_use_case.dart'
    	class OneUseCase extends BaseUseCase{}
    - lib/use_case/two_use_case.dart
    	import 'base_use_case.dart'
    	import 'one_use_case.dart'
    	class OneUseCase extends BaseUseCase{}
    - lib/use_case/base_use_case.dart
    	abstract class BaseUseCase {}
    
    IDE 경고 및 CLI 실행 시 문제점을 해결할 수 있습니다.

    Analyzing...
       warning • lib/use_case/two_use_case.dart:1:8 • import 'one_use_case.dart'; • use_case_rule
    
     1 issues found.
    

    사용법

  • 추가 팩
  • flutter pub add --dev import_lint
    
  • analysis_options.yaml limportlint 플러그인 정보 추가
  • analyzer:
        plugins:
            - import_lint
    
    import_lint:
        rules:
            use_case_rule:
                target_file_path: "/**/use_case/*_use_case.dart"
                not_allow_imports: ["/**/use_case/*_use_case.dart"]
                exclude_imports: ["/**/use_case/base_use_case.dart"]
    
    AnalyzerPlugin 기능을 통해 IDE에 경고가 표시됩니다.
  • 명령을 통해 해석 결과 출력
  • flutter pub run import_lint
    

    GiithubAction에서 실행 및 의견 게시


    이런 yml,analyze,importlint, format을 실행하고 문제가 있으면 PR에 메시지를 남길 수 있습니다.
    .github/workflows/analyze.yml
    on: [pull_request]
    
    name: Analyze
    
    jobs:
      build:
        name: Analyze
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v2
          - uses: at-wat/setup-gh-pr-comment@v0
          - uses: subosito/flutter-action@v1
            with:
              channel: "stable"
          - name: Install dependencies
            run: flutter pub get
          - name: analyze and format
            run: |
              is_error=false
    
              set +e
              analyze=$(flutter analyze)
              set -e
    
              if [ ! "`echo $analyze | grep 'No issues found'`" ]; then
                  gh-pr-comment "analyze" "${analyze}"
                  is_error=true
              fi
    
              import_lint=$(flutter pub run import_lint)
              if [ ! "`echo $import_lint | grep 'No issues found'`" ]; then
                  gh-pr-comment "analyze import lint" "${import_lint}"
                  is_error=true
              fi
    
              format=$(flutter format lib)
              if [ ! "`echo $format | grep '0 changed'`" ]; then
                  gh-pr-comment "format" "${format}"
                  is_error=true
              fi
    
              if "${is_error}"; then
                exit 1
              fi
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    

    최후


    시간이 길어졌지만 읽어주셔서 감사합니다!
    Issue, PR, 기분 스타(⭐)대단히 기쁘다😻
    https://github.com/kawa1214/import-lint
    https://pub.dev/packages/import_lint
    Analyzer Plugin이 원하는 Line 직접 만들기

    좋은 웹페이지 즐겨찾기