slang icon indicating copy to clipboard operation
slang copied to clipboard

build_runner only works the first time for each output_file_name

Open stefan-schweiger opened this issue 1 year ago • 3 comments

Describe the bug When I run flutter pub run build_runner build --delete-conflicting-outputs with the following build.yaml the first time it generates the correct translations.g.dart file. But when I run the command a second time it generates nothing (if you delete the file you won't get a new one). If I change the output_file to something else it works again for one time and breaks again afterwards.

targets:
  $default:
    builders:
      slang_build_runner:
        options:
          base_locale: en
          output_file_name: translations.g.dart

For the same reason flutter pub run build_runner watch --delete-conflicting-outputs also doesn't work for me.

Expected behavior The file should be regenerated each time the command is run.

Additional context

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter  
  intl: ^0.17.0
  slang: ^2.6.1
  slang_flutter: ^2.6.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  build_runner: ^2.2.0
  slang_build_runner: ^2.6.0

Additional question Why is the --delete-conflicting-outputs needed in the first place? Libs like auto_route and json_serializable don't seem to need the flag to work.

stefan-schweiger avatar Jul 20 '22 09:07 stefan-schweiger

I just tried it without output_file_name and noticed I have the same issue there as well.

stefan-schweiger avatar Jul 20 '22 09:07 stefan-schweiger

Hi, currently, this library generates the dart file only if input changes. That's why your issue should be minor. I will investigate if there is a way to force a rebuild. Other libraries have a 1:1 relationship between source and output. build_runner will notice right away when you delete one of the output files. slang however, does not tell build_runner what and where to build beforehand. That's why build_runner only watches the i18n files and the config to determine if slang should be run.

Actually, --delete-conflicting-outputs may not be needed anymore. I added this option a time ago when it was kind of buggy.

My recommendation is: Run flutter pub run slang on your dev machine. This command is build.yaml compatible. On your CI (if you have one), you can run flutter pub run build_runner build. If you start from a clean environment everytime (which should be the case in CI), then everything should be okay.

Tienisto avatar Jul 24 '22 16:07 Tienisto

@Tienisto this behavior should be mentioned in the docs or in FAQ at least, because the newcomers might wonder why build_runner does not output anything or why build_runner fails to generate files

AdamHavlicek avatar Apr 04 '24 12:04 AdamHavlicek