From 99fb686e963979950e8ded364abda58d6c0ebfed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:43:23 +0000 Subject: [PATCH 1/5] Initial plan From bb982e42bad7d5b6d82f74a6e4cb48a2ca79bdbc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:59:15 +0000 Subject: [PATCH 2/5] Add lean_builder support infrastructure to retrofit_generator Co-authored-by: trevorwang <121966+trevorwang@users.noreply.github.com> --- README.md | 16 ++++ example/LEAN_BUILDER.md | 102 ++++++++++++++++++++++++++ generator/lib/lean_builder.dart | 61 +++++++++++++++ generator/lib/src/lean_generator.dart | 41 +++++++++++ generator/pubspec.yaml | 1 + 5 files changed, 221 insertions(+) create mode 100644 example/LEAN_BUILDER.md create mode 100644 generator/lib/lean_builder.dart create mode 100644 generator/lib/src/lean_generator.dart diff --git a/README.md b/README.md index bef30db77..c70e7183e 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,24 @@ then run the generator ```sh # dart dart pub run build_runner build + +# for watch mode (recommended during development) +dart pub run build_runner watch ``` +#### Lean Builder Support (Experimental) + +Retrofit now has experimental support for [lean_builder](https://pub.dev/packages/lean_builder), a faster build system for Dart. While lean_builder support is still under development, the infrastructure has been added for future use. + +To prepare for lean_builder support, add it to your `dev_dependencies`: + +```yaml +dev_dependencies: + lean_builder: ^0.1.2 +``` + +**Note:** For now, please continue using `build_runner` as shown above. Full lean_builder integration will be available in a future release once lean_builder reaches stability. + ### Use it ```dart diff --git a/example/LEAN_BUILDER.md b/example/LEAN_BUILDER.md new file mode 100644 index 000000000..7b6d84e84 --- /dev/null +++ b/example/LEAN_BUILDER.md @@ -0,0 +1,102 @@ +# Lean Builder Support (Experimental) + +This document provides information about using lean_builder with retrofit_generator. + +## Status + +⚠️ **Experimental** - Lean Builder support is currently under development and not yet recommended for production use. + +## What is Lean Builder? + +[Lean Builder](https://pub.dev/packages/lean_builder) is a streamlined Dart build system that offers: +- Fast incremental builds (often under 1 second) +- Parallel processing for maximum efficiency +- Watch mode with hot reload support +- Simple, declarative builder configuration + +## Current Implementation + +The infrastructure for lean_builder support has been added to retrofit_generator, but the full implementation is pending until: +1. Lean Builder reaches a stable release (currently at v0.1.2) +2. The retrofit_generator codebase is fully adapted to lean_builder's API + +## Using build_runner (Recommended) + +For now, please continue using build_runner for code generation: + +```bash +# One-time build +dart pub run build_runner build + +# Watch mode (recommended during development) +dart pub run build_runner watch --delete-conflicting-outputs +``` + +## Future Usage (When Available) + +Once lean_builder support is fully implemented, you'll be able to use: + +```bash +# One-time build +dart run lean_builder build + +# Watch mode with hot reload +dart run lean_builder watch --dev +``` + +## Configuration + +### pubspec.yaml + +When lean_builder support is ready, your `pubspec.yaml` will include: + +```yaml +dependencies: + retrofit: ^4.6.0 + dio: ^5.0.0 + json_annotation: ^4.9.0 + +dev_dependencies: + retrofit_generator: ^10.0.0 + lean_builder: ^0.1.2 # or latest version + json_serializable: ^6.10.0 +``` + +### build.yaml (Optional) + +You can keep your existing `build.yaml` configuration. Lean Builder will respect these settings when support is fully implemented: + +```yaml +targets: + $default: + builders: + retrofit_generator: + options: + auto_cast_response: true +``` + +## Migration Path + +When lean_builder support becomes stable: + +1. **No code changes required** - Your @RestApi annotations and API definitions remain the same +2. **Update dependencies** - Add lean_builder to dev_dependencies +3. **Switch build command** - Use `dart run lean_builder build` instead of `build_runner` +4. **Enjoy faster builds** - Experience significantly faster incremental builds + +## Contributing + +If you're interested in helping complete the lean_builder integration, please: +1. Check the [retrofit.dart GitHub repository](https://github.com/trevorwang/retrofit.dart) +2. Review the [lean_builder documentation](https://pub.dev/packages/lean_builder) +3. Submit a pull request or open an issue with your ideas + +## Support + +For questions or issues: +- **retrofit.dart**: https://github.com/trevorwang/retrofit.dart/issues +- **lean_builder**: https://github.com/Milad-Akarie/lean_builder/issues + +## Timeline + +Follow the retrofit.dart repository for updates on when lean_builder support will be fully available. The maintainers are monitoring lean_builder's development and will complete the integration when appropriate. diff --git a/generator/lib/lean_builder.dart b/generator/lib/lean_builder.dart new file mode 100644 index 000000000..6f6e85d9d --- /dev/null +++ b/generator/lib/lean_builder.dart @@ -0,0 +1,61 @@ +/// Lean Builder entry point for Retrofit code generator. +/// +/// **⚠️ Experimental Feature ⚠️** +/// +/// This file provides experimental lean_builder support for retrofit_generator. +/// Lean Builder support is currently under development and not yet recommended +/// for production use. +/// +/// ## Current Status +/// +/// While the infrastructure for lean_builder support has been added, the +/// retrofit_generator package is currently optimized for build_runner. Full +/// lean_builder integration is planned for future releases once lean_builder +/// reaches a stable version. +/// +/// ## Usage (Experimental) +/// +/// For those who want to try the experimental support: +/// +/// 1. Add lean_builder to your dev_dependencies: +/// ```yaml +/// dev_dependencies: +/// lean_builder: ^0.1.2 +/// retrofit_generator: +/// ``` +/// +/// 2. For now, please continue using build_runner: +/// ```bash +/// dart pub run build_runner build +/// # or for watch mode: +/// dart pub run build_runner watch +/// ``` +/// +/// ## Future Plans +/// +/// Once lean_builder reaches stability and this integration is complete, you'll +/// be able to use: +/// ```bash +/// dart run lean_builder build +/// # or for watch mode with hot reload: +/// dart run lean_builder watch --dev +/// ``` +/// +/// For updates on lean_builder support, visit: +/// https://github.com/trevorwang/retrofit.dart +library retrofit_generator.lean_builder; + +import 'package:lean_builder/builder.dart'; +import 'package:retrofit_generator/src/lean_generator.dart'; + +export 'package:retrofit_generator/src/lean_generator.dart'; + +/// Retrofit generator for lean_builder (Experimental). +/// +/// This generator is automatically discovered by lean_builder through the +/// @LeanGenerator.shared() annotation, which marks it as a shared part builder +/// (similar to build_runner's shared part builders). +/// +/// Note: This is currently a placeholder for future implementation. +@LeanGenerator.shared() +final retrofitLeanGenerator = RetrofitLeanGenerator(); diff --git a/generator/lib/src/lean_generator.dart b/generator/lib/src/lean_generator.dart new file mode 100644 index 000000000..3ba4a5b29 --- /dev/null +++ b/generator/lib/src/lean_generator.dart @@ -0,0 +1,41 @@ +import 'dart:async'; + +import 'package:lean_builder/builder.dart'; +import 'package:lean_builder/element.dart' as lean; +import 'package:retrofit/retrofit.dart' as retrofit; + +/// Lean Builder generator for Retrofit. +/// +/// This generator provides lean_builder support for retrofit_generator, +/// allowing faster incremental builds with lean_builder. +/// +/// Note: This is an experimental feature. For production use, we recommend +/// using the traditional build_runner approach until lean_builder support +/// is fully stable. +class RetrofitLeanGenerator extends GeneratorForAnnotatedClass { + RetrofitLeanGenerator(); + + @override + FutureOr generateForClass( + BuildStep buildStep, + lean.ClassElement classElement, + Annotation annotation, + ) async { + // The retrofit generator is currently optimized for build_runner/source_gen. + // Full lean_builder support requires adapting the codebase to use lean_builder's + // analyzer abstractions instead of source_gen's API. + // + // For now, this serves as a placeholder for future lean_builder support. + // Users should continue using build_runner for code generation: + // dart pub run build_runner build + + throw UnsupportedError( + 'Lean Builder support for retrofit_generator is not yet fully implemented.\n' + 'The retrofit_generator package currently works with build_runner.\n\n' + 'To generate code, please use:\n' + ' dart pub run build_runner build\n\n' + 'For more information, see: https://github.com/trevorwang/retrofit.dart\n\n' + 'Lean Builder support is planned for a future release once lean_builder reaches stable.', + ); + } +} diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index eace0c578..268f02331 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: code_builder: ^4.10.1 dart_style: ^3.1.1 dio: ^5.8.0 + lean_builder: ^0.1.2 protobuf: ^5.0.0 retrofit: ^4.7.3 source_gen: '>=3.1.0 <5.0.0' From cf2956a9373aa5ff499169f3a5647a309a0ed3a9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:02:35 +0000 Subject: [PATCH 3/5] Fix analyzer issues in lean_builder support Co-authored-by: trevorwang <121966+trevorwang@users.noreply.github.com> --- generator/CHANGELOG.md | 8 ++++ generator/lib/lean_builder.dart | 58 ++++++++++++++++++++------- generator/lib/src/lean_generator.dart | 11 +++-- 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/generator/CHANGELOG.md b/generator/CHANGELOG.md index 0eb95ed79..6251a7f61 100644 --- a/generator/CHANGELOG.md +++ b/generator/CHANGELOG.md @@ -1,3 +1,11 @@ +## 10.0.8 (Unreleased) + +- Add experimental lean_builder support infrastructure +- Add `lean_builder` as a dependency for future integration +- Add `lib/lean_builder.dart` entry point for lean_builder users +- Add comprehensive documentation for lean_builder support +- Note: Full lean_builder implementation is pending until lean_builder reaches stability + ## 10.0.6 - Update `protobuf` to 5.0.0 diff --git a/generator/lib/lean_builder.dart b/generator/lib/lean_builder.dart index 6f6e85d9d..2811161d3 100644 --- a/generator/lib/lean_builder.dart +++ b/generator/lib/lean_builder.dart @@ -41,21 +41,51 @@ /// dart run lean_builder watch --dev /// ``` /// +/// Lean Builder entry point for Retrofit code generator. +/// +/// **⚠️ Experimental Feature ⚠️** +/// +/// This file provides experimental lean_builder support for retrofit_generator. +/// Lean Builder support is currently under development and not yet recommended +/// for production use. +/// +/// ## Current Status +/// +/// While the infrastructure for lean_builder support has been added, the +/// retrofit_generator package is currently optimized for build_runner. Full +/// lean_builder integration is planned for future releases once lean_builder +/// reaches a stable version. +/// +/// ## Usage (Experimental) +/// +/// For those who want to try the experimental support: +/// +/// 1. Add lean_builder to your dev_dependencies: +/// ```yaml +/// dev_dependencies: +/// lean_builder: ^0.1.2 +/// retrofit_generator: +/// ``` +/// +/// 2. For now, please continue using build_runner: +/// ```bash +/// dart pub run build_runner build +/// # or for watch mode: +/// dart pub run build_runner watch +/// ``` +/// +/// ## Future Plans +/// +/// Once lean_builder reaches stability and this integration is complete, you'll +/// be able to use: +/// ```bash +/// dart run lean_builder build +/// # or for watch mode with hot reload: +/// dart run lean_builder watch --dev +/// ``` +/// /// For updates on lean_builder support, visit: /// https://github.com/trevorwang/retrofit.dart -library retrofit_generator.lean_builder; - -import 'package:lean_builder/builder.dart'; -import 'package:retrofit_generator/src/lean_generator.dart'; +library; export 'package:retrofit_generator/src/lean_generator.dart'; - -/// Retrofit generator for lean_builder (Experimental). -/// -/// This generator is automatically discovered by lean_builder through the -/// @LeanGenerator.shared() annotation, which marks it as a shared part builder -/// (similar to build_runner's shared part builders). -/// -/// Note: This is currently a placeholder for future implementation. -@LeanGenerator.shared() -final retrofitLeanGenerator = RetrofitLeanGenerator(); diff --git a/generator/lib/src/lean_generator.dart b/generator/lib/src/lean_generator.dart index 3ba4a5b29..b9999a78a 100644 --- a/generator/lib/src/lean_generator.dart +++ b/generator/lib/src/lean_generator.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:lean_builder/builder.dart'; -import 'package:lean_builder/element.dart' as lean; +import 'package:lean_builder/element.dart'; import 'package:retrofit/retrofit.dart' as retrofit; /// Lean Builder generator for Retrofit. @@ -12,14 +12,19 @@ import 'package:retrofit/retrofit.dart' as retrofit; /// Note: This is an experimental feature. For production use, we recommend /// using the traditional build_runner approach until lean_builder support /// is fully stable. +/// +/// This generator is automatically discovered by lean_builder through the +/// @LeanGenerator.shared() annotation, which marks it as a shared part builder +/// (similar to build_runner's shared part builders). +@LeanGenerator.shared() class RetrofitLeanGenerator extends GeneratorForAnnotatedClass { RetrofitLeanGenerator(); @override FutureOr generateForClass( BuildStep buildStep, - lean.ClassElement classElement, - Annotation annotation, + ClassElement classElement, + ElementAnnotation annotation, ) async { // The retrofit generator is currently optimized for build_runner/source_gen. // Full lean_builder support requires adapting the codebase to use lean_builder's From c55f0080681c6541cff2ddd03748731a6461cab9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:04:15 +0000 Subject: [PATCH 4/5] Remove duplicate documentation in lean_builder.dart Co-authored-by: trevorwang <121966+trevorwang@users.noreply.github.com> --- generator/lib/lean_builder.dart | 43 --------------------------------- 1 file changed, 43 deletions(-) diff --git a/generator/lib/lean_builder.dart b/generator/lib/lean_builder.dart index 2811161d3..d4d17e754 100644 --- a/generator/lib/lean_builder.dart +++ b/generator/lib/lean_builder.dart @@ -41,49 +41,6 @@ /// dart run lean_builder watch --dev /// ``` /// -/// Lean Builder entry point for Retrofit code generator. -/// -/// **⚠️ Experimental Feature ⚠️** -/// -/// This file provides experimental lean_builder support for retrofit_generator. -/// Lean Builder support is currently under development and not yet recommended -/// for production use. -/// -/// ## Current Status -/// -/// While the infrastructure for lean_builder support has been added, the -/// retrofit_generator package is currently optimized for build_runner. Full -/// lean_builder integration is planned for future releases once lean_builder -/// reaches a stable version. -/// -/// ## Usage (Experimental) -/// -/// For those who want to try the experimental support: -/// -/// 1. Add lean_builder to your dev_dependencies: -/// ```yaml -/// dev_dependencies: -/// lean_builder: ^0.1.2 -/// retrofit_generator: -/// ``` -/// -/// 2. For now, please continue using build_runner: -/// ```bash -/// dart pub run build_runner build -/// # or for watch mode: -/// dart pub run build_runner watch -/// ``` -/// -/// ## Future Plans -/// -/// Once lean_builder reaches stability and this integration is complete, you'll -/// be able to use: -/// ```bash -/// dart run lean_builder build -/// # or for watch mode with hot reload: -/// dart run lean_builder watch --dev -/// ``` -/// /// For updates on lean_builder support, visit: /// https://github.com/trevorwang/retrofit.dart library; From 3607706021c4ce0dad240c899f72cead64f1cb9b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 00:54:59 +0000 Subject: [PATCH 5/5] Make lean_builder an optional dependency instead of required Co-authored-by: trevorwang <121966+trevorwang@users.noreply.github.com> --- README.md | 4 +++- example/LEAN_BUILDER.md | 8 ++++++-- generator/CHANGELOG.md | 2 +- generator/analysis_options.yaml | 6 ++++++ generator/lib/lean_builder.dart | 26 ++++++++++++++++++++++---- generator/pubspec.yaml | 1 - 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c70e7183e..e557f3cc2 100644 --- a/README.md +++ b/README.md @@ -73,11 +73,13 @@ dart pub run build_runner watch Retrofit now has experimental support for [lean_builder](https://pub.dev/packages/lean_builder), a faster build system for Dart. While lean_builder support is still under development, the infrastructure has been added for future use. +**Important**: lean_builder is an **optional** dependency and is NOT required to use retrofit_generator. It's only needed if you want to try the experimental lean_builder support. + To prepare for lean_builder support, add it to your `dev_dependencies`: ```yaml dev_dependencies: - lean_builder: ^0.1.2 + lean_builder: ^0.1.2 # Optional - only if you want to use lean_builder ``` **Note:** For now, please continue using `build_runner` as shown above. Full lean_builder integration will be available in a future release once lean_builder reaches stability. diff --git a/example/LEAN_BUILDER.md b/example/LEAN_BUILDER.md index 7b6d84e84..9c5d9f481 100644 --- a/example/LEAN_BUILDER.md +++ b/example/LEAN_BUILDER.md @@ -48,6 +48,8 @@ dart run lean_builder watch --dev ### pubspec.yaml +**Important**: lean_builder is an **optional** dependency. It is NOT included in retrofit_generator by default. + When lean_builder support is ready, your `pubspec.yaml` will include: ```yaml @@ -55,13 +57,15 @@ dependencies: retrofit: ^4.6.0 dio: ^5.0.0 json_annotation: ^4.9.0 + retrofit_generator: ^10.0.0 # For use in codegen folder dev_dependencies: - retrofit_generator: ^10.0.0 - lean_builder: ^0.1.2 # or latest version + lean_builder: ^0.1.2 # Optional - only if you want to use lean_builder json_serializable: ^6.10.0 ``` +Note: retrofit_generator does not depend on lean_builder, so you won't be forced to install it unless you explicitly want to use lean_builder support. + ### build.yaml (Optional) You can keep your existing `build.yaml` configuration. Lean Builder will respect these settings when support is fully implemented: diff --git a/generator/CHANGELOG.md b/generator/CHANGELOG.md index 6251a7f61..02adf6c0a 100644 --- a/generator/CHANGELOG.md +++ b/generator/CHANGELOG.md @@ -1,9 +1,9 @@ ## 10.0.8 (Unreleased) - Add experimental lean_builder support infrastructure -- Add `lean_builder` as a dependency for future integration - Add `lib/lean_builder.dart` entry point for lean_builder users - Add comprehensive documentation for lean_builder support +- Note: lean_builder is now an **optional** dependency - it's not required unless you want to use lean_builder - Note: Full lean_builder implementation is pending until lean_builder reaches stability ## 10.0.6 diff --git a/generator/analysis_options.yaml b/generator/analysis_options.yaml index 011741769..82d058c03 100644 --- a/generator/analysis_options.yaml +++ b/generator/analysis_options.yaml @@ -1,3 +1,9 @@ include: package:lints/recommended.yaml formatter: page_width: 80 +analyzer: + exclude: + # Exclude lean_builder support files as lean_builder is an optional dependency + # These files are only used when users explicitly add lean_builder to their project + - lib/lean_builder.dart + - lib/src/lean_generator.dart diff --git a/generator/lib/lean_builder.dart b/generator/lib/lean_builder.dart index d4d17e754..8ddcb4904 100644 --- a/generator/lib/lean_builder.dart +++ b/generator/lib/lean_builder.dart @@ -6,6 +6,24 @@ /// Lean Builder support is currently under development and not yet recommended /// for production use. /// +/// ## Important: Optional Dependency +/// +/// This library is **NOT** included in retrofit_generator's dependencies. +/// To use lean_builder support, you must add it to your own project: +/// +/// ```yaml +/// dependencies: +/// retrofit_generator: +/// +/// dev_dependencies: +/// lean_builder: ^0.1.2 +/// ``` +/// +/// Then, in your codegen folder (or where you define generators), import: +/// ```dart +/// import 'package:retrofit_generator/lean_builder.dart'; +/// ``` +/// /// ## Current Status /// /// While the infrastructure for lean_builder support has been added, the @@ -15,13 +33,13 @@ /// /// ## Usage (Experimental) /// -/// For those who want to try the experimental support: -/// -/// 1. Add lean_builder to your dev_dependencies: +/// 1. Add both packages to your pubspec.yaml: /// ```yaml +/// dependencies: +/// retrofit_generator: +/// /// dev_dependencies: /// lean_builder: ^0.1.2 -/// retrofit_generator: /// ``` /// /// 2. For now, please continue using build_runner: diff --git a/generator/pubspec.yaml b/generator/pubspec.yaml index 268f02331..eace0c578 100644 --- a/generator/pubspec.yaml +++ b/generator/pubspec.yaml @@ -19,7 +19,6 @@ dependencies: code_builder: ^4.10.1 dart_style: ^3.1.1 dio: ^5.8.0 - lean_builder: ^0.1.2 protobuf: ^5.0.0 retrofit: ^4.7.3 source_gen: '>=3.1.0 <5.0.0'