Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

freezed,json_seriarizable の codegenの短縮 #547

Merged
merged 39 commits into from
Mar 27, 2022
Merged

Conversation

bannzai
Copy link
Owner

@bannzai bannzai commented Mar 27, 2022

Abstract

作ったスクリプト

#!/bin/bash
set -eu
set -o pipefail

CODEGEN_FILES=$(git grep --files-with-matches '@freezed')

echo "First"
for codegen_file in $CODEGEN_FILES; do
  if [[ $codegen_file == *.dart ]]; then
    codegen_file_without_file_extension=$(echo $codegen_file | awk -F'\.' '{print $1}')
    codegen_file_without_lib_package_and_file_extension=$(echo $codegen_file_without_file_extension | sed 's|lib/||')
    include_codegen_files=$(git grep $codegen_file_without_lib_package_and_file_extension | awk -F':' '{print $1}')

    if [[ ! -z "$include_codegen_files" ]]; then
      for include_codegen_file in $include_codegen_files; do
        sed -i '' -e "s|$codegen_file_without_lib_package_and_file_extension.dart|$codegen_file_without_lib_package_and_file_extension.codegen.dart|" $include_codegen_file
      done
    fi
  fi
done

echo "Second"
for codegen_file in $CODEGEN_FILES; do
  if [[ $codegen_file == *.dart ]]; then
    codegen_file_without_file_extension=$(echo $codegen_file | awk -F'\.' '{print $1}')
    sed -i '' -E -e "s|part '(.+)\.freezed\.dart';|part '\1\.codegen\.freezed\.dart';|" $codegen_file
    sed -i '' -E -e "s|part '(.+)\.g\.dart';|part '\1\.codegen\.g\.dart';|" $codegen_file
    sed -i '' -r -e "s|part \"(.+)\.freezed\.dart\";|part \"\1\.codegen\.freezed\.dart\";|" $codegen_file
    sed -i '' -r -e "s|part \"(.+)\.g\.dart\";|part \"\1\.codegen\.g\.dart\";|" $codegen_file
  fi
done

echo "Third"
for codegen_file in $CODEGEN_FILES; do
  if [[ $codegen_file == *.dart ]]; then
    echo "codegen_file: $codegen_file"
    codegen_file_without_file_extension=$(echo $codegen_file | awk -F'\.' '{print $1}')
    echo $codegen_file_without_file_extension | xargs -I '{}' mv {}.dart {}.codegen.dart
  fi
done
$ rm -rf lib/**/*freezed.dart lib/**/*.g.dart
$ ./scripts/rename.sh
$ flutter pub run build_runner build --delete-conflicting-outputs

Why

コード生成に20sくらいかかっていたので短縮したかった

この記事を参考にfreezed等のcodegenが必要なsource fileは *.codegen.dart のファイルネームルールで運用することにした
https://codewithandrea.com/tips/speed-up-code-generation-build-runner-dart-flutter/

結果 20s -> 140ms まで縮まった

Links

Checked

  • Analyticsのログを入れたか
  • 境界値に対してのUnitTestを書いた
  • パターン分岐が発生するWidgetに対してWidgetTestを書いた
  • リリースノートを追加した

@bannzai bannzai changed the title Fix codegen freezed,json_seriarizable の codegenの短縮 Mar 27, 2022
@bannzai bannzai marked this pull request as ready for review March 27, 2022 12:04
@bannzai bannzai merged commit a88e0ac into main Mar 27, 2022
@bannzai bannzai deleted the fix/script/codegen branch March 27, 2022 13:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
1 participant