From 3f59e2d73a1564540fe9400d703386733457838f Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Tue, 14 Jan 2025 14:13:23 +0100 Subject: [PATCH 01/12] feat: packages upgrade --- .fvmrc | 3 + .gitignore | 3 + examples/drift/pubspec.yaml | 6 +- examples/example/pubspec.yaml | 6 +- examples/freezed/pubspec.yaml | 6 +- examples/injectable/pubspec.yaml | 6 +- examples/json_serializable/pubspec.yaml | 6 +- melos.yaml | 62 ------------------ packages/auto_mappr/example/pubspec.yaml | 6 +- packages/auto_mappr/pubspec.yaml | 15 +++-- .../example/pubspec.yaml | 6 +- packages/auto_mappr_annotation/pubspec.yaml | 9 +-- pubspec.yaml | 63 ++++++++++++++++++- 13 files changed, 102 insertions(+), 95 deletions(-) create mode 100644 .fvmrc delete mode 100644 melos.yaml diff --git a/.fvmrc b/.fvmrc new file mode 100644 index 00000000..0fdcb487 --- /dev/null +++ b/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.27.1" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index c9f6340d..5f81e90e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,6 @@ build/ .settings .last_build_id *.iml + +# FVM Version Cache +.fvm/ \ No newline at end of file diff --git a/examples/drift/pubspec.yaml b/examples/drift/pubspec.yaml index cb4f5f78..d7be68e5 100644 --- a/examples/drift/pubspec.yaml +++ b/examples/drift/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=2.18.7 <4.0.0" + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 @@ -15,5 +15,5 @@ dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 drift_dev: ^2.7.0 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/examples/example/pubspec.yaml b/examples/example/pubspec.yaml index 9e6b54cc..56fb709e 100644 --- a/examples/example/pubspec.yaml +++ b/examples/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=2.18.7 <4.0.0" + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 @@ -13,5 +13,5 @@ dependencies: dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/examples/freezed/pubspec.yaml b/examples/freezed/pubspec.yaml index adf97579..e8faf92a 100644 --- a/examples/freezed/pubspec.yaml +++ b/examples/freezed/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=2.18.7 <4.0.0" + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 @@ -15,5 +15,5 @@ dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 freezed: ^2.3.2 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/examples/injectable/pubspec.yaml b/examples/injectable/pubspec.yaml index cdfb0e4c..657307cb 100644 --- a/examples/injectable/pubspec.yaml +++ b/examples/injectable/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=2.18.7 <4.0.0" + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 @@ -16,5 +16,5 @@ dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 injectable_generator: ^2.1.5 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/examples/json_serializable/pubspec.yaml b/examples/json_serializable/pubspec.yaml index 242b7d43..99dc5527 100644 --- a/examples/json_serializable/pubspec.yaml +++ b/examples/json_serializable/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=2.18.7 <4.0.0" + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 @@ -14,5 +14,5 @@ dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 json_serializable: ^6.6.1 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/melos.yaml b/melos.yaml deleted file mode 100644 index caddb85e..00000000 --- a/melos.yaml +++ /dev/null @@ -1,62 +0,0 @@ -name: auto_mappr_workspace - -packages: - - packages/* - - packages/*/example - - examples/* - -scripts: - # ANALYZING - - lint:all: - run: melos run lint:dart && melos run lint:dcm - description: Run all static analysis checks. - - lint:dart: - run: melos exec -c 10 -- dart analyze --fatal-infos - description: Run Dart static analysis checks. - - lint:dcm: - run: melos exec -c 10 -- dcm analyze . --fatal-style --fatal-performance --fatal-warnings - description: Run DCM static analysis checks. - - # GENERATION - - gen:build-all: - run: melos run gen:example:build && melos run gen:test:build - description: Generate everything. - - gen:example: - run: melos exec -- dart run build_runner watch --delete-conflicting-outputs - packageFilters: - scope: "*example*" - description: Generate example mappers. - - gen:example:build: - run: melos exec -- dart run build_runner build --delete-conflicting-outputs --verbose - packageFilters: - scope: "*example*" - - description: Generate example mappers once. - - gen:test: - run: melos exec -- dart run build_runner watch --delete-conflicting-outputs --verbose - packageFilters: - dirExists: - - test - description: Generate test mappers. - - gen:test:build: - run: melos exec -- dart run build_runner build --delete-conflicting-outputs --verbose - packageFilters: - dirExists: - - test - description: Generate test mappers once. - - # TESTING - - test: - run: melos exec -- dart test - packageFilters: - dirExists: test - description: Run all Dart tests. diff --git a/packages/auto_mappr/example/pubspec.yaml b/packages/auto_mappr/example/pubspec.yaml index 2bb72c0b..41a5c247 100644 --- a/packages/auto_mappr/example/pubspec.yaml +++ b/packages/auto_mappr/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ^3.0.0 + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 @@ -13,5 +13,5 @@ dependencies: dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/packages/auto_mappr/pubspec.yaml b/packages/auto_mappr/pubspec.yaml index 58ef2c9d..601e1bd8 100644 --- a/packages/auto_mappr/pubspec.yaml +++ b/packages/auto_mappr/pubspec.yaml @@ -1,6 +1,6 @@ name: auto_mappr description: Code generation for mapping between different objects with ease. -version: 2.5.0 +version: 2.5.1 repository: https://github.com/netglade/auto_mappr issue_tracker: https://github.com/netglade/auto_mappr/issues screenshots: @@ -8,12 +8,15 @@ screenshots: path: doc/icon.png environment: - sdk: ^3.0.0 + sdk: ^3.6.0 +resolution: workspace dependencies: # TODO: Support analyzer same way as json_serializable https://github.com/google/json_serializable.dart/pull/1333 analyzer: ">=5.4.0 <7.0.0" - auto_mappr_annotation: ^2.1.0 + #auto_mappr_annotation: ^2.2.0 + auto_mappr_annotation: + path: ../auto_mappr_annotation build: ^2.3.1 built_collection: ^5.1.1 code_builder: ^4.4.0 @@ -25,9 +28,9 @@ dependencies: source_gen: ^1.2.6 dev_dependencies: - build_runner: ^2.0.0 + build_runner: ^2.4.10 generator_test: ^0.3.1 mocktail: ^1.0.0 - netglade_analysis: ^8.0.0 + netglade_analysis: ^15.0.0 source_gen_test: ^1.0.4 - test: ^1.16.0 + test: ^1.25.8 diff --git a/packages/auto_mappr_annotation/example/pubspec.yaml b/packages/auto_mappr_annotation/example/pubspec.yaml index eb787740..8ce980ac 100644 --- a/packages/auto_mappr_annotation/example/pubspec.yaml +++ b/packages/auto_mappr_annotation/example/pubspec.yaml @@ -4,12 +4,12 @@ version: 1.0.0 publish_to: none environment: - sdk: ^3.0.0 + sdk: ^3.6.0 dependencies: auto_mappr_annotation: ^2.0.0 dev_dependencies: build_runner: ^2.0.0 - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/packages/auto_mappr_annotation/pubspec.yaml b/packages/auto_mappr_annotation/pubspec.yaml index b8a6c422..6a52f9fa 100644 --- a/packages/auto_mappr_annotation/pubspec.yaml +++ b/packages/auto_mappr_annotation/pubspec.yaml @@ -1,12 +1,13 @@ name: auto_mappr_annotation description: Annotations for the auto_mappr code-generator of mapping between objects with ease. -version: 2.2.0 +version: 2.2.1 repository: https://github.com/netglade/auto_mappr issue_tracker: https://github.com/netglade/auto_mappr/issues environment: - sdk: ^3.0.0 + sdk: ^3.6.0 +resolution: workspace dev_dependencies: - netglade_analysis: ^8.0.0 - test: ^1.16.0 + netglade_analysis: ^15.0.0 + test: ^1.25.8 diff --git a/pubspec.yaml b/pubspec.yaml index 0c6521ba..133e782e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,66 @@ name: auto_mappr_workspace publish_to: "none" environment: - sdk: ^3.0.0 + sdk: ^3.6.0 dev_dependencies: - melos: ^5.2.1 + melos: ^7.0.0-dev.3 + +melos: + scripts: + # ANALYZING + + lint:all: + run: melos run lint:dart && melos run lint:dcm + description: Run all static analysis checks. + + lint:dart: + run: melos exec -c 10 -- dart analyze --fatal-infos + description: Run Dart static analysis checks. + + lint:dcm: + run: melos exec -c 10 -- dcm analyze . --fatal-style --fatal-performance --fatal-warnings + description: Run DCM static analysis checks. + + # GENERATION + + gen:build-all: + run: melos run gen:example:build && melos run gen:test:build + description: Generate everything. + + gen:example: + run: melos exec -- dart run build_runner watch --delete-conflicting-outputs + packageFilters: + scope: "*example*" + description: Generate example mappers. + + gen:example:build: + run: melos exec -- dart run build_runner build --delete-conflicting-outputs --verbose + packageFilters: + scope: "*example*" + + description: Generate example mappers once. + + gen:test: + run: melos exec -- dart run build_runner watch --delete-conflicting-outputs --verbose + packageFilters: + dirExists: + - test + description: Generate test mappers. + + gen:test:build: + run: melos exec -- dart run build_runner build --delete-conflicting-outputs --verbose + packageFilters: + dirExists: + - test + description: Generate test mappers once. + + # TESTING + + test: + run: melos exec -- dart test + packageFilters: + dirExists: test + description: Run all Dart tests. + + From 8df29b50814386338227d560414edf2112bfc46d Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Tue, 14 Jan 2025 14:22:26 +0100 Subject: [PATCH 02/12] chore: update injectable in example --- examples/injectable/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/injectable/pubspec.yaml b/examples/injectable/pubspec.yaml index 657307cb..f3267c9d 100644 --- a/examples/injectable/pubspec.yaml +++ b/examples/injectable/pubspec.yaml @@ -10,11 +10,11 @@ dependencies: auto_mappr_annotation: ^2.0.0 equatable: ^2.0.5 get_it: ^7.3.0 - injectable: ^2.1.1 + injectable: ^2.5.0 dev_dependencies: auto_mappr: ^2.0.0 build_runner: ^2.0.0 - injectable_generator: ^2.1.5 + injectable_generator: ^2.6.2 netglade_analysis: ^15.0.0 test: ^1.25.8 From 308bde00fd65ce52f81f06e09ac533ecbe60a41e Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Tue, 14 Jan 2025 14:38:38 +0100 Subject: [PATCH 03/12] chore: update dependencies in examples --- examples/drift/pubspec.yaml | 4 ++-- examples/example/pubspec.yaml | 4 ++-- examples/freezed/pubspec.yaml | 4 ++-- examples/injectable/pubspec.yaml | 4 ++-- examples/json_serializable/pubspec.yaml | 4 ++-- packages/auto_mappr/example/pubspec.yaml | 4 ++-- packages/auto_mappr/pubspec.yaml | 4 +--- packages/auto_mappr_annotation/example/pubspec.yaml | 2 +- 8 files changed, 14 insertions(+), 16 deletions(-) diff --git a/examples/drift/pubspec.yaml b/examples/drift/pubspec.yaml index d7be68e5..ce8d1663 100644 --- a/examples/drift/pubspec.yaml +++ b/examples/drift/pubspec.yaml @@ -7,12 +7,12 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 drift: ^2.7.0 equatable: ^2.0.5 dev_dependencies: - auto_mappr: ^2.0.0 + auto_mappr: ^2.5.1 build_runner: ^2.0.0 drift_dev: ^2.7.0 netglade_analysis: ^15.0.0 diff --git a/examples/example/pubspec.yaml b/examples/example/pubspec.yaml index 56fb709e..99b78735 100644 --- a/examples/example/pubspec.yaml +++ b/examples/example/pubspec.yaml @@ -7,11 +7,11 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 equatable: ^2.0.5 dev_dependencies: - auto_mappr: ^2.0.0 + auto_mappr: ^2.5.1 build_runner: ^2.0.0 netglade_analysis: ^15.0.0 test: ^1.25.8 diff --git a/examples/freezed/pubspec.yaml b/examples/freezed/pubspec.yaml index e8faf92a..ff18a8ad 100644 --- a/examples/freezed/pubspec.yaml +++ b/examples/freezed/pubspec.yaml @@ -7,12 +7,12 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 equatable: ^2.0.5 freezed_annotation: ^2.2.0 dev_dependencies: - auto_mappr: ^2.0.0 + auto_mappr: ^2.5.1 build_runner: ^2.0.0 freezed: ^2.3.2 netglade_analysis: ^15.0.0 diff --git a/examples/injectable/pubspec.yaml b/examples/injectable/pubspec.yaml index f3267c9d..e63e2c64 100644 --- a/examples/injectable/pubspec.yaml +++ b/examples/injectable/pubspec.yaml @@ -7,13 +7,13 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 equatable: ^2.0.5 get_it: ^7.3.0 injectable: ^2.5.0 dev_dependencies: - auto_mappr: ^2.0.0 + auto_mappr: ^2.5.1 build_runner: ^2.0.0 injectable_generator: ^2.6.2 netglade_analysis: ^15.0.0 diff --git a/examples/json_serializable/pubspec.yaml b/examples/json_serializable/pubspec.yaml index 99dc5527..4639348a 100644 --- a/examples/json_serializable/pubspec.yaml +++ b/examples/json_serializable/pubspec.yaml @@ -7,11 +7,11 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 json_annotation: ^4.8.1 dev_dependencies: - auto_mappr: ^2.0.0 + auto_mappr: ^2.5.1 build_runner: ^2.0.0 json_serializable: ^6.6.1 netglade_analysis: ^15.0.0 diff --git a/packages/auto_mappr/example/pubspec.yaml b/packages/auto_mappr/example/pubspec.yaml index 41a5c247..d180e699 100644 --- a/packages/auto_mappr/example/pubspec.yaml +++ b/packages/auto_mappr/example/pubspec.yaml @@ -7,11 +7,11 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 equatable: ^2.0.5 dev_dependencies: - auto_mappr: ^2.0.0 + auto_mappr: ^2.5.1 build_runner: ^2.0.0 netglade_analysis: ^15.0.0 test: ^1.25.8 diff --git a/packages/auto_mappr/pubspec.yaml b/packages/auto_mappr/pubspec.yaml index 601e1bd8..3c0a7762 100644 --- a/packages/auto_mappr/pubspec.yaml +++ b/packages/auto_mappr/pubspec.yaml @@ -14,9 +14,7 @@ resolution: workspace dependencies: # TODO: Support analyzer same way as json_serializable https://github.com/google/json_serializable.dart/pull/1333 analyzer: ">=5.4.0 <7.0.0" - #auto_mappr_annotation: ^2.2.0 - auto_mappr_annotation: - path: ../auto_mappr_annotation + auto_mappr_annotation: ^2.2.1 build: ^2.3.1 built_collection: ^5.1.1 code_builder: ^4.4.0 diff --git a/packages/auto_mappr_annotation/example/pubspec.yaml b/packages/auto_mappr_annotation/example/pubspec.yaml index 8ce980ac..dd41f636 100644 --- a/packages/auto_mappr_annotation/example/pubspec.yaml +++ b/packages/auto_mappr_annotation/example/pubspec.yaml @@ -7,7 +7,7 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.0.0 + auto_mappr_annotation: ^2.2.1 dev_dependencies: build_runner: ^2.0.0 From 5657dc10224e83b622b1e5cc4395614f0e0d41e1 Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Tue, 14 Jan 2025 16:35:45 +0100 Subject: [PATCH 04/12] chore: upgrade dcm setup and action in ci --- .github/workflows/ci.yaml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 11d9977f..ad3605f0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,20 +22,18 @@ jobs: run: melos run lint:dart - name: Install DCM - uses: CQLabs/setup-dcm@v1 + uses: CQLabs/setup-dcm@v2 with: - github_token: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Run DCM - uses: CQLabs/dcm-action@v1 + uses: CQLabs/dcm-action@v2 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - ci_key: oss + github-token: ${{ secrets.GITHUB_TOKEN }} + ci-key: oss email: oss folders: . - fatal_style: true - fatal_performance: true - fatal_warnings: true + fatal-found: true - name: Test run: melos run test From dce2758b1fc263f9a01f0d842a1a1c05b1280b43 Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Wed, 15 Jan 2025 13:22:34 +0100 Subject: [PATCH 05/12] chore: fix dcm, bump package versions --- examples/drift/pubspec.yaml | 4 ++-- examples/example/pubspec.yaml | 4 ++-- examples/freezed/pubspec.yaml | 4 ++-- examples/injectable/pubspec.yaml | 4 ++-- examples/json_serializable/pubspec.yaml | 4 ++-- packages/auto_mappr/CHANGELOG.md | 3 +++ packages/auto_mappr/analysis_options.yaml | 5 +++++ packages/auto_mappr/example/pubspec.yaml | 4 ++-- .../lib/src/builder/map_bodies/class_body_builder.dart | 2 +- .../lib/src/builder/map_model_body_method_builder.dart | 3 +-- .../auto_mappr/lib/src/generator/auto_mappr_generator.dart | 1 + packages/auto_mappr/lib/src/helpers/urls.dart | 2 +- packages/auto_mappr/pubspec.yaml | 4 ++-- .../test/integration/fixture/mapping_from_source.dart | 4 ++-- packages/auto_mappr/test/integration/fixture/record.dart | 1 + packages/auto_mappr_annotation/CHANGELOG.md | 3 +++ packages/auto_mappr_annotation/analysis_options.yaml | 3 +++ packages/auto_mappr_annotation/example/pubspec.yaml | 2 +- .../auto_mappr_annotation/lib/auto_mappr_annotation.dart | 2 +- packages/auto_mappr_annotation/lib/src/map_type.dart | 1 + packages/auto_mappr_annotation/pubspec.yaml | 2 +- pubspec.yaml | 4 ++++ 22 files changed, 43 insertions(+), 23 deletions(-) diff --git a/examples/drift/pubspec.yaml b/examples/drift/pubspec.yaml index ce8d1663..2eb01ab7 100644 --- a/examples/drift/pubspec.yaml +++ b/examples/drift/pubspec.yaml @@ -7,12 +7,12 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 drift: ^2.7.0 equatable: ^2.0.5 dev_dependencies: - auto_mappr: ^2.5.1 + auto_mappr: ^2.6.0 build_runner: ^2.0.0 drift_dev: ^2.7.0 netglade_analysis: ^15.0.0 diff --git a/examples/example/pubspec.yaml b/examples/example/pubspec.yaml index 99b78735..bae8091c 100644 --- a/examples/example/pubspec.yaml +++ b/examples/example/pubspec.yaml @@ -7,11 +7,11 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 equatable: ^2.0.5 dev_dependencies: - auto_mappr: ^2.5.1 + auto_mappr: ^2.6.0 build_runner: ^2.0.0 netglade_analysis: ^15.0.0 test: ^1.25.8 diff --git a/examples/freezed/pubspec.yaml b/examples/freezed/pubspec.yaml index ff18a8ad..b85832cb 100644 --- a/examples/freezed/pubspec.yaml +++ b/examples/freezed/pubspec.yaml @@ -7,12 +7,12 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 equatable: ^2.0.5 freezed_annotation: ^2.2.0 dev_dependencies: - auto_mappr: ^2.5.1 + auto_mappr: ^2.6.0 build_runner: ^2.0.0 freezed: ^2.3.2 netglade_analysis: ^15.0.0 diff --git a/examples/injectable/pubspec.yaml b/examples/injectable/pubspec.yaml index e63e2c64..5dc66ede 100644 --- a/examples/injectable/pubspec.yaml +++ b/examples/injectable/pubspec.yaml @@ -7,13 +7,13 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 equatable: ^2.0.5 get_it: ^7.3.0 injectable: ^2.5.0 dev_dependencies: - auto_mappr: ^2.5.1 + auto_mappr: ^2.6.0 build_runner: ^2.0.0 injectable_generator: ^2.6.2 netglade_analysis: ^15.0.0 diff --git a/examples/json_serializable/pubspec.yaml b/examples/json_serializable/pubspec.yaml index 4639348a..87b4ffb3 100644 --- a/examples/json_serializable/pubspec.yaml +++ b/examples/json_serializable/pubspec.yaml @@ -7,11 +7,11 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 json_annotation: ^4.8.1 dev_dependencies: - auto_mappr: ^2.5.1 + auto_mappr: ^2.6.0 build_runner: ^2.0.0 json_serializable: ^6.6.1 netglade_analysis: ^15.0.0 diff --git a/packages/auto_mappr/CHANGELOG.md b/packages/auto_mappr/CHANGELOG.md index 8b6f69a2..a8fbfb0b 100644 --- a/packages/auto_mappr/CHANGELOG.md +++ b/packages/auto_mappr/CHANGELOG.md @@ -1,5 +1,8 @@ [//]: # (## Unreleased) +## 2.6.0 +- Update dependencies + ## 2.5.0 - Add support for safe mapping (mapping exceptions handling). [#216](https://github.com/netglade/auto_mappr/pull/216) diff --git a/packages/auto_mappr/analysis_options.yaml b/packages/auto_mappr/analysis_options.yaml index 4e1c0b88..0a15c9c0 100644 --- a/packages/auto_mappr/analysis_options.yaml +++ b/packages/auto_mappr/analysis_options.yaml @@ -18,3 +18,8 @@ dart_code_metrics: - test/integration/fixture/** avoid-non-null-assertion: false # TODO avoid-nullable-interpolation: false # TODO + prefer-boolean-prefixes: false # TODO + avoid-passing-default-values: false # TODO + avoid-commented-out-code: false # code examples in comments + prefer-single-declaration-per-file: false # TODO + prefer-named-parameters: false # TODO \ No newline at end of file diff --git a/packages/auto_mappr/example/pubspec.yaml b/packages/auto_mappr/example/pubspec.yaml index d180e699..5d1deab3 100644 --- a/packages/auto_mappr/example/pubspec.yaml +++ b/packages/auto_mappr/example/pubspec.yaml @@ -7,11 +7,11 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 equatable: ^2.0.5 dev_dependencies: - auto_mappr: ^2.5.1 + auto_mappr: ^2.6.0 build_runner: ^2.0.0 netglade_analysis: ^15.0.0 test: ^1.25.8 diff --git a/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart b/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart index 57053d58..a7350f47 100644 --- a/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart @@ -233,7 +233,7 @@ class ClassBodyBuilder extends MapBodyBuilderBase { final notMappedSourceFields = potentialSetterFields .map((sourceKey) => sourceFields[sourceKey]) - .whereNotNull() + .nonNulls // Use only those that match. .where((accessor) { final fieldMapping = mapping.tryGetFieldMappingFromFrom(accessor.name); diff --git a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart index b30ca485..39cbbefe 100644 --- a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart @@ -70,8 +70,7 @@ class MapModelBodyMethodBuilder { ? mapping.whenSourceIsNullExpression!.returned : refer('Exception').newInstance([ refer( - "r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. '\n" - "r'Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.'", + "r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. \n Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.'", ), ]).thrown; diff --git a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart index 63ac56bd..3f2c442c 100644 --- a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart +++ b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart @@ -193,6 +193,7 @@ class AutoMapprGenerator extends GeneratorForAnnotation { ), ]; }) + // ignore: avoid-slow-collection-methods, fix dcm without refactoring .flattened .toList(); } diff --git a/packages/auto_mappr/lib/src/helpers/urls.dart b/packages/auto_mappr/lib/src/helpers/urls.dart index 42769fd1..80aa3150 100644 --- a/packages/auto_mappr/lib/src/helpers/urls.dart +++ b/packages/auto_mappr/lib/src/helpers/urls.dart @@ -1,3 +1,3 @@ -class Urls { +abstract final class Urls { static const annotationPackageUrl = 'package:auto_mappr_annotation/auto_mappr_annotation.dart'; } diff --git a/packages/auto_mappr/pubspec.yaml b/packages/auto_mappr/pubspec.yaml index 3c0a7762..e19b509b 100644 --- a/packages/auto_mappr/pubspec.yaml +++ b/packages/auto_mappr/pubspec.yaml @@ -1,6 +1,6 @@ name: auto_mappr description: Code generation for mapping between different objects with ease. -version: 2.5.1 +version: 2.6.0 repository: https://github.com/netglade/auto_mappr issue_tracker: https://github.com/netglade/auto_mappr/issues screenshots: @@ -14,7 +14,7 @@ resolution: workspace dependencies: # TODO: Support analyzer same way as json_serializable https://github.com/google/json_serializable.dart/pull/1333 analyzer: ">=5.4.0 <7.0.0" - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 build: ^2.3.1 built_collection: ^5.1.1 code_builder: ^4.4.0 diff --git a/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart b/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart index c48d962b..850f5abd 100644 --- a/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart +++ b/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart @@ -41,13 +41,13 @@ class InstanceGetter { set value(int value) => _value = value; } -class StaticField { +abstract final class StaticField { // ignore: avoid-global-state, for testing static int value = 666; static const String secondValue = 'test 3'; } -class StaticGetter { +abstract final class StaticGetter { static int? _value; static int get value => _value ?? 0; diff --git a/packages/auto_mappr/test/integration/fixture/record.dart b/packages/auto_mappr/test/integration/fixture/record.dart index faca3e81..a4727286 100644 --- a/packages/auto_mappr/test/integration/fixture/record.dart +++ b/packages/auto_mappr/test/integration/fixture/record.dart @@ -68,6 +68,7 @@ class Named extends Equatable { } class NamedNullable extends Equatable { + // ignore: record-fields-ordering, greek alphabet final ({int alpha, bool beta, String gama, int? delta, bool? epsilon}) value; @override diff --git a/packages/auto_mappr_annotation/CHANGELOG.md b/packages/auto_mappr_annotation/CHANGELOG.md index 66c92c70..3cf4f318 100644 --- a/packages/auto_mappr_annotation/CHANGELOG.md +++ b/packages/auto_mappr_annotation/CHANGELOG.md @@ -1,5 +1,8 @@ [//]: # (## Unreleased) +## 2.3.0 +- Update dependencies + ## 2.2.0 - Add `safeMapping` option to `MapType`. [#204](https://github.com/netglade/auto_mappr/pull/216) diff --git a/packages/auto_mappr_annotation/analysis_options.yaml b/packages/auto_mappr_annotation/analysis_options.yaml index c9ff4c9c..dbf884f3 100644 --- a/packages/auto_mappr_annotation/analysis_options.yaml +++ b/packages/auto_mappr_annotation/analysis_options.yaml @@ -5,3 +5,6 @@ dart_code_metrics: - package:netglade_analysis/dcm.yaml pubspec-rules: prefer-publish-to-none: false + rules: + prefer-boolean-prefixes: false # TODO + prefer-named-parameters: false # TODO diff --git a/packages/auto_mappr_annotation/example/pubspec.yaml b/packages/auto_mappr_annotation/example/pubspec.yaml index dd41f636..88ceec99 100644 --- a/packages/auto_mappr_annotation/example/pubspec.yaml +++ b/packages/auto_mappr_annotation/example/pubspec.yaml @@ -7,7 +7,7 @@ environment: sdk: ^3.6.0 dependencies: - auto_mappr_annotation: ^2.2.1 + auto_mappr_annotation: ^2.3.0 dev_dependencies: build_runner: ^2.0.0 diff --git a/packages/auto_mappr_annotation/lib/auto_mappr_annotation.dart b/packages/auto_mappr_annotation/lib/auto_mappr_annotation.dart index 28ba0560..0a290f62 100644 --- a/packages/auto_mappr_annotation/lib/auto_mappr_annotation.dart +++ b/packages/auto_mappr_annotation/lib/auto_mappr_annotation.dart @@ -1,5 +1,5 @@ /// AutoMappr Annotation. -library auto_mappr_annotation; +library; export 'src/auto_mappr.dart'; export 'src/auto_mappr_interface.dart'; diff --git a/packages/auto_mappr_annotation/lib/src/map_type.dart b/packages/auto_mappr_annotation/lib/src/map_type.dart index 68e13f12..bd893e4d 100644 --- a/packages/auto_mappr_annotation/lib/src/map_type.dart +++ b/packages/auto_mappr_annotation/lib/src/map_type.dart @@ -2,6 +2,7 @@ import 'package:auto_mappr_annotation/src/field.dart'; import 'package:auto_mappr_annotation/src/type_converter.dart'; /// Configured mapping from [SOURCE] to [TARGET]. +// ignore: avoid-unused-generics, dcm fix without refactoring final class MapType { /// Configuration for [TARGET]'s fields. final List fields; diff --git a/packages/auto_mappr_annotation/pubspec.yaml b/packages/auto_mappr_annotation/pubspec.yaml index 6a52f9fa..953293b1 100644 --- a/packages/auto_mappr_annotation/pubspec.yaml +++ b/packages/auto_mappr_annotation/pubspec.yaml @@ -1,6 +1,6 @@ name: auto_mappr_annotation description: Annotations for the auto_mappr code-generator of mapping between objects with ease. -version: 2.2.1 +version: 2.3.0 repository: https://github.com/netglade/auto_mappr issue_tracker: https://github.com/netglade/auto_mappr/issues diff --git a/pubspec.yaml b/pubspec.yaml index 133e782e..72fd0cd4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,10 @@ name: auto_mappr_workspace publish_to: "none" +workspace: + - packages/auto_mappr + - packages/auto_mappr_annotation + environment: sdk: ^3.6.0 From 457b0675f402564e9649d4431bffe75f3657a1f1 Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Wed, 15 Jan 2025 15:20:44 +0100 Subject: [PATCH 06/12] chore: include examples in workspace, fix generations/parse errors --- examples/drift/pubspec.yaml | 1 + examples/example/pubspec.yaml | 1 + examples/freezed/pubspec.yaml | 1 + examples/injectable/pubspec.yaml | 1 + examples/json_serializable/pubspec.yaml | 1 + packages/auto_mappr/example/pubspec.yaml | 1 + .../lib/src/builder/map_model_body_method_builder.dart | 4 +++- .../test/integration/fixture/mapping_from_source.dart | 6 ++++-- packages/auto_mappr_annotation/example/pubspec.yaml | 1 + pubspec.yaml | 7 +++++++ 10 files changed, 21 insertions(+), 3 deletions(-) diff --git a/examples/drift/pubspec.yaml b/examples/drift/pubspec.yaml index 2eb01ab7..4b7e6d9a 100644 --- a/examples/drift/pubspec.yaml +++ b/examples/drift/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/examples/example/pubspec.yaml b/examples/example/pubspec.yaml index bae8091c..f6f029ad 100644 --- a/examples/example/pubspec.yaml +++ b/examples/example/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/examples/freezed/pubspec.yaml b/examples/freezed/pubspec.yaml index b85832cb..12bc4ef4 100644 --- a/examples/freezed/pubspec.yaml +++ b/examples/freezed/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/examples/injectable/pubspec.yaml b/examples/injectable/pubspec.yaml index 5dc66ede..d7ee72ea 100644 --- a/examples/injectable/pubspec.yaml +++ b/examples/injectable/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/examples/json_serializable/pubspec.yaml b/examples/json_serializable/pubspec.yaml index 87b4ffb3..342fbd9b 100644 --- a/examples/json_serializable/pubspec.yaml +++ b/examples/json_serializable/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/packages/auto_mappr/example/pubspec.yaml b/packages/auto_mappr/example/pubspec.yaml index 5d1deab3..0c6a6b3e 100644 --- a/packages/auto_mappr/example/pubspec.yaml +++ b/packages/auto_mappr/example/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart index 39cbbefe..698d788d 100644 --- a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart @@ -70,7 +70,9 @@ class MapModelBodyMethodBuilder { ? mapping.whenSourceIsNullExpression!.returned : refer('Exception').newInstance([ refer( - "r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. \n Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.'", + // ignore: avoid-adjacent-strings, to avoid parsing the errors in tests + "r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. '\n" + "r'Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.'", ), ]).thrown; diff --git a/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart b/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart index 850f5abd..30c988eb 100644 --- a/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart +++ b/packages/auto_mappr/test/integration/fixture/mapping_from_source.dart @@ -1,3 +1,5 @@ +// ignore_for_file: prefer-abstract-final-static-class + import 'package:auto_mappr_annotation/auto_mappr_annotation.dart'; import 'package:equatable/equatable.dart'; @@ -41,13 +43,13 @@ class InstanceGetter { set value(int value) => _value = value; } -abstract final class StaticField { +class StaticField { // ignore: avoid-global-state, for testing static int value = 666; static const String secondValue = 'test 3'; } -abstract final class StaticGetter { +class StaticGetter { static int? _value; static int get value => _value ?? 0; diff --git a/packages/auto_mappr_annotation/example/pubspec.yaml b/packages/auto_mappr_annotation/example/pubspec.yaml index 88ceec99..e157f887 100644 --- a/packages/auto_mappr_annotation/example/pubspec.yaml +++ b/packages/auto_mappr_annotation/example/pubspec.yaml @@ -5,6 +5,7 @@ publish_to: none environment: sdk: ^3.6.0 +resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 diff --git a/pubspec.yaml b/pubspec.yaml index 72fd0cd4..07f0631e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,6 +4,13 @@ publish_to: "none" workspace: - packages/auto_mappr - packages/auto_mappr_annotation + - packages/auto_mappr/example + - packages/auto_mappr_annotation/example + - examples/drift + - examples/example + - examples/freezed + - examples/injectable + - examples/json_serializable environment: sdk: ^3.6.0 From d50ec3056eabf9e6fe2c6b2944e725d56196db94 Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Mon, 20 Jan 2025 13:58:02 +0100 Subject: [PATCH 07/12] chore: improve dcm, create baseline --- packages/auto_mappr/analysis_options.yaml | 7 +- packages/auto_mappr/dcm_baseline.json | 130 ++++++++++++++++++ .../map_bodies/class_body_builder.dart | 2 +- .../builder/map_bodies/enum_body_builder.dart | 8 +- .../src/generator/auto_mappr_generator.dart | 3 +- .../lib/src/models/auto_mappr_config.dart | 4 +- .../lib/src/models/type_converter.dart | 4 +- .../lib/src/models/type_mapping.dart | 4 +- .../integration/fixture/custom_mapping.dart | 4 +- .../test/integration/fixture/rename.dart | 4 +- .../analysis_options.yaml | 3 - .../auto_mappr_annotation/dcm_baseline.json | 28 ++++ .../lib/src/map_type.dart | 2 +- 13 files changed, 177 insertions(+), 26 deletions(-) create mode 100644 packages/auto_mappr/dcm_baseline.json create mode 100644 packages/auto_mappr_annotation/dcm_baseline.json diff --git a/packages/auto_mappr/analysis_options.yaml b/packages/auto_mappr/analysis_options.yaml index 0a15c9c0..0b36c1fd 100644 --- a/packages/auto_mappr/analysis_options.yaml +++ b/packages/auto_mappr/analysis_options.yaml @@ -16,10 +16,7 @@ dart_code_metrics: avoid-top-level-members-in-tests: exclude: - test/integration/fixture/** - avoid-non-null-assertion: false # TODO - avoid-nullable-interpolation: false # TODO - prefer-boolean-prefixes: false # TODO - avoid-passing-default-values: false # TODO + prefer-boolean-prefixes: false # TODO: release new major version (breaking change) avoid-commented-out-code: false # code examples in comments prefer-single-declaration-per-file: false # TODO - prefer-named-parameters: false # TODO \ No newline at end of file + prefer-named-parameters: false # TODO: release new major version (breaking change) \ No newline at end of file diff --git a/packages/auto_mappr/dcm_baseline.json b/packages/auto_mappr/dcm_baseline.json new file mode 100644 index 00000000..2652f08b --- /dev/null +++ b/packages/auto_mappr/dcm_baseline.json @@ -0,0 +1,130 @@ +{ + "date": "2025-01-20 12:55:26.396096Z", + "version": "1.26.2", + "paths": { + "lib/src/models/type_converter.dart": { + "avoid-non-null-assertion": [ + "49d6910256d6a9925f1f305647170175", + "3e2fb62702f0d6d976c0ef4838e256f3", + "37d7521d3b9436994de3d46bfec19156", + "37d560854197d3d451fa40ebda978adf", + "6002ec186df142e2eeabc594fb05b0cd", + "32d05f2391dfd5a054110f0cf5b00edb", + "2bde3d2541dbd52f427522d8859dddbc", + "4901e165d9d77551c2b961387d8f709b" + ] + }, + "lib/src/models/field_mapping.dart": { + "avoid-non-null-assertion": [ + "4e22d2815561f01ac60242562eb3d477" + ] + }, + "lib/src/models/source_assignment.dart": { + "avoid-non-null-assertion": [ + "8f0912f968e86ab46d0dd647c5d322e9", + "8f0912f968e86ab46d0dd647c5d322e9", + "412aa7c321ce0580e16e5586de44ae45", + "412aa7c321ce0580e16e5586de44ae45" + ], + "avoid-nullable-interpolation": [ + "165ee04eb4d55330435a841f09c3c6b1" + ] + }, + "lib/src/extensions/dart_object_extension.dart": { + "avoid-non-null-assertion": [ + "0839d20a589c74eb461adbed71774c0c", + "18cabcff3de662dfb212c548a5a39c24" + ], + "avoid-nullable-interpolation": [ + "cf7dba3d85f84df468ec72f8b3744601" + ] + }, + "lib/src/generator/auto_mappr_generator.dart": { + "avoid-non-null-assertion": [ + "7a50c2efb20fe138dc37e6550e009160", + "b877c976f457e163c51a7c84f5777069", + "695248e6e85f1fecba6bf6c344ea8187", + "9825f25ed373f63c6d3efc8caffaaef1", + "25851cd74f03edbac9719dacc76c4bcc", + "acd1213c9abd408fac46b00b6631d6a2", + "43019f988cd8e5f2b155f1375dc99da2", + "05fe4fffcb9159fd5c0dd62f0e6fb7c5", + "bc359bcc3ec98cd8aada89ff9b0046e9", + "f3c3ceea53e478439edd662d2793cf00", + "ac37c4c51b2a4b1187b271e1f71cde2e", + "48e33839a8de547d03f16d3b4f023b1e" + ] + }, + "lib/src/builder/methods/private_convert_method_builder.dart": { + "avoid-non-null-assertion": [ + "a8022779055b7c4c7bf23042d14e613a" + ] + }, + "lib/src/builder/assignments/record_assignment_builder.dart": { + "avoid-non-null-assertion": [ + "0bd202edba38880d347468eaa934da83", + "3cb7b9402c27519c759bb527c0bf7693", + "3cb7b9402c27519c759bb527c0bf7693" + ] + }, + "lib/src/builder/assignments/map_assignment_builder.dart": { + "avoid-non-null-assertion": [ + "0bd202edba38880d347468eaa934da83", + "3cb7b9402c27519c759bb527c0bf7693", + "0bd202edba38880d347468eaa934da83", + "0bd202edba38880d347468eaa934da83" + ] + }, + "lib/src/builder/assignments/iterable_assignment_builder.dart": { + "avoid-non-null-assertion": [ + "0bd202edba38880d347468eaa934da83", + "3cb7b9402c27519c759bb527c0bf7693", + "0bd202edba38880d347468eaa934da83" + ] + }, + "lib/src/builder/assignments/nested_object_mixin.dart": { + "avoid-non-null-assertion": [ + "3cb7b9402c27519c759bb527c0bf7693", + "02b8861952b1d31c7e3fc701a1196ef3", + "1e8062cd91c977990ce8a7e9808b7a30" + ], + "avoid-nullable-interpolation": [ + "48d7effa328cb38d0a736b2496a897b0", + "20d7c588ba9f39a442116c71149ea3b8" + ] + }, + "lib/src/builder/map_model_body_method_builder.dart": { + "avoid-non-null-assertion": [ + "a8022779055b7c4c7bf23042d14e613a", + "a8022779055b7c4c7bf23042d14e613a" + ] + }, + "lib/src/builder/value_assignment_builder.dart": { + "avoid-non-null-assertion": [ + "da5b0598f70c2b82fb9db2510920be2c", + "0bd202edba38880d347468eaa934da83", + "0bd202edba38880d347468eaa934da83", + "02b8861952b1d31c7e3fc701a1196ef3", + "1e8062cd91c977990ce8a7e9808b7a30", + "0bd202edba38880d347468eaa934da83" + ], + "avoid-nullable-interpolation": [ + "019cf3c46b0e37f0339187e7f06d9984", + "019cf3c46b0e37f0339187e7f06d9984" + ] + }, + "lib/src/builder/map_bodies/class_body_builder.dart": { + "avoid-non-null-assertion": [ + "374cdacb7c32728a88ad32f9ec5821ff", + "dfda47d1f6044e6fcb565ff03e9721e3", + "927919a5768cf07ec40df0aca3c14e73", + "24f4441455b612dc6d0d29bf53d82f03" + ] + }, + "lib/src/builder/map_bodies/enum_body_builder.dart": { + "avoid-non-null-assertion": [ + "a8022779055b7c4c7bf23042d14e613a" + ] + } + } +} \ No newline at end of file diff --git a/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart b/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart index a7350f47..7c76d54d 100644 --- a/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_bodies/class_body_builder.dart @@ -196,7 +196,7 @@ class ClassBodyBuilder extends MapBodyBuilderBase { } void _assertParamFieldCanBeIgnored(ParameterElement param, PropertyAccessorElement sourceField) { - final sourceFieldName = sourceField.getDisplayString(withNullability: true); + final sourceFieldName = sourceField.getDisplayString(); if (param.isPositional && param.type.isNotNullable) { throw InvalidGenerationSourceError( "Can't ignore field '$sourceFieldName' as it is positional not-nullable parameter. ($mapping)", diff --git a/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart b/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart index 2ecb220c..b045698a 100644 --- a/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart @@ -18,8 +18,8 @@ class EnumBodyBuilder extends MapBodyBuilderBase { // Check that both source and target enums are enums. if (!isSourceEnum || !isTargetEnum) { - final sourceDisplay = mapping.source.getDisplayString(withNullability: true); - final targetDisplay = mapping.target.getDisplayString(withNullability: true); + final sourceDisplay = mapping.source.getDisplayString(); + final targetDisplay = mapping.target.getDisplayString(); throw InvalidGenerationSourceError( 'Failed to map $mapping because ${isSourceEnum ? 'target $targetDisplay' : 'source $sourceDisplay'} is not an enum.', @@ -35,8 +35,8 @@ class EnumBodyBuilder extends MapBodyBuilderBase { final sourceIsSubset = targetValues.containsAll(sourceValues); if (!sourceIsSubset && !mapping.hasWhenNullDefault()) { - final sourceDisplay = mapping.source.getDisplayString(withNullability: true); - final targetDisplay = mapping.target.getDisplayString(withNullability: true); + final sourceDisplay = mapping.source.getDisplayString(); + final targetDisplay = mapping.target.getDisplayString(); throw InvalidGenerationSourceError( "Can't map enum $sourceDisplay into $targetDisplay. Target enum is not superset of source enum. ($mapping)", ); diff --git a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart index 3f2c442c..e0f68630 100644 --- a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart +++ b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart @@ -1,5 +1,4 @@ //ignore_for_file: avoid-dynamic - import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; @@ -193,7 +192,7 @@ class AutoMapprGenerator extends GeneratorForAnnotation { ), ]; }) - // ignore: avoid-slow-collection-methods, fix dcm without refactoring + // ignore: avoid-slow-collection-methods, it's ok to use here .flattened .toList(); } diff --git a/packages/auto_mappr/lib/src/models/auto_mappr_config.dart b/packages/auto_mappr/lib/src/models/auto_mappr_config.dart index 20659be9..ecc4dfdd 100644 --- a/packages/auto_mappr/lib/src/models/auto_mappr_config.dart +++ b/packages/auto_mappr/lib/src/models/auto_mappr_config.dart @@ -80,8 +80,8 @@ class AutoMapprConfig { String _getTypeMappingDocs(TypeMapping typeMapping) { final trailingPart = typeMapping.hasWhenNullDefault() ? ' -- With default value.' : '.'; // Display without import aliases. - final emittedSource = typeMapping.source.getDisplayString(withNullability: true); - final emittedTarget = typeMapping.target.getDisplayString(withNullability: true); + final emittedSource = typeMapping.source.getDisplayString(); + final emittedTarget = typeMapping.target.getDisplayString(); // ignore: avoid-non-ascii-symbols, it is ok return '/// - `$emittedSource` → `$emittedTarget`$trailingPart'; diff --git a/packages/auto_mappr/lib/src/models/type_converter.dart b/packages/auto_mappr/lib/src/models/type_converter.dart index 0ec4c78a..daffee99 100644 --- a/packages/auto_mappr/lib/src/models/type_converter.dart +++ b/packages/auto_mappr/lib/src/models/type_converter.dart @@ -19,8 +19,8 @@ class TypeConverter extends Equatable { @override String toString() { - final sourceX = source.getDisplayString(withNullability: true); - final targetX = target.getDisplayString(withNullability: true); + final sourceX = source.getDisplayString(); + final targetX = target.getDisplayString(); return 'typeConverter $sourceX -> $targetX'; } diff --git a/packages/auto_mappr/lib/src/models/type_mapping.dart b/packages/auto_mappr/lib/src/models/type_mapping.dart index 2d5447bf..75c44c42 100644 --- a/packages/auto_mappr/lib/src/models/type_mapping.dart +++ b/packages/auto_mappr/lib/src/models/type_mapping.dart @@ -75,8 +75,8 @@ class TypeMapping extends Equatable { @override String toString() { // Without import aliases, used to display errors to user. - final sourceAsString = source.getDisplayString(withNullability: true); - final targetAsString = target.getDisplayString(withNullability: true); + final sourceAsString = source.getDisplayString(); + final targetAsString = target.getDisplayString(); // ignore: avoid-non-ascii-symbols, it is ok return '$sourceAsString → $targetAsString'; diff --git a/packages/auto_mappr/test/integration/fixture/custom_mapping.dart b/packages/auto_mappr/test/integration/fixture/custom_mapping.dart index 12cdcef3..9ae9e9eb 100644 --- a/packages/auto_mappr/test/integration/fixture/custom_mapping.dart +++ b/packages/auto_mappr/test/integration/fixture/custom_mapping.dart @@ -105,9 +105,9 @@ class Mappr extends $Mappr { static Map emptyToMapValue(CustomFunctionFromEmptyDto? _) => {'one': 11, 'two': 22, 'three': 33}; - static String convertToNameAndIdPositional(CustomFunctionPositionalDto? dto) => '${dto?.name} #${dto?.id}'; + static String convertToNameAndIdPositional(CustomFunctionPositionalDto dto) => '${dto.name} #${dto.id}'; - static String convertToNameAndIdNamed(CustomFunctionNamedDto? dto) => '${dto?.name} #${dto?.id}'; + static String convertToNameAndIdNamed(CustomFunctionNamedDto dto) => '${dto.name} #${dto.id}'; static DateTime dateTimeFixed() => DateTime(2023); } diff --git a/packages/auto_mappr/test/integration/fixture/rename.dart b/packages/auto_mappr/test/integration/fixture/rename.dart index 6feaf926..42bb5290 100644 --- a/packages/auto_mappr/test/integration/fixture/rename.dart +++ b/packages/auto_mappr/test/integration/fixture/rename.dart @@ -66,9 +66,9 @@ import 'rename.auto_mappr.dart'; ), ]) class Mappr extends $Mappr { - static String convertToNameAndIdPositional(CustomPositionalDto? dto) => '${dto?.name} #${dto?.id}'; + static String convertToNameAndIdPositional(CustomPositionalDto dto) => '${dto.name} #${dto.id}'; - static String convertToNameAndIdNamed(CustomNamedDto? dto) => '${dto?.name} #${dto?.id}'; + static String convertToNameAndIdNamed(CustomNamedDto dto) => '${dto.name} #${dto.id}'; } // same diff --git a/packages/auto_mappr_annotation/analysis_options.yaml b/packages/auto_mappr_annotation/analysis_options.yaml index dbf884f3..c9ff4c9c 100644 --- a/packages/auto_mappr_annotation/analysis_options.yaml +++ b/packages/auto_mappr_annotation/analysis_options.yaml @@ -5,6 +5,3 @@ dart_code_metrics: - package:netglade_analysis/dcm.yaml pubspec-rules: prefer-publish-to-none: false - rules: - prefer-boolean-prefixes: false # TODO - prefer-named-parameters: false # TODO diff --git a/packages/auto_mappr_annotation/dcm_baseline.json b/packages/auto_mappr_annotation/dcm_baseline.json new file mode 100644 index 00000000..b9dad53e --- /dev/null +++ b/packages/auto_mappr_annotation/dcm_baseline.json @@ -0,0 +1,28 @@ +{ + "date": "2025-01-20 11:07:26.586363Z", + "version": "1.26.2", + "paths": { + "lib/src/auto_mappr_interface.dart": { + "prefer-boolean-prefixes": [ + "f8e45531a3ea3d5c1247b004985175a4", + "9696113cbf65a7d0a20c3b28984795f6" + ], + "prefer-named-parameters": [ + "d2eb52ce2ae9079bc52e9a13a6a44c1e" + ] + }, + "lib/src/map_type.dart": { + "prefer-boolean-prefixes": [ + "2d42e74f6260722660851c540faa9b08", + "4d9c2073afa3c2abb817dceb22c34de6", + "cdf1cce8a80c3ed282b32d792e2d6a76" + ] + }, + "lib/src/field.dart": { + "prefer-boolean-prefixes": [ + "567bc1d268f135496de3d5b946b691f3", + "1d93a811b1cf660fbae038a0f6ea19cb" + ] + } + } +} \ No newline at end of file diff --git a/packages/auto_mappr_annotation/lib/src/map_type.dart b/packages/auto_mappr_annotation/lib/src/map_type.dart index bd893e4d..582b3959 100644 --- a/packages/auto_mappr_annotation/lib/src/map_type.dart +++ b/packages/auto_mappr_annotation/lib/src/map_type.dart @@ -2,7 +2,7 @@ import 'package:auto_mappr_annotation/src/field.dart'; import 'package:auto_mappr_annotation/src/type_converter.dart'; /// Configured mapping from [SOURCE] to [TARGET]. -// ignore: avoid-unused-generics, dcm fix without refactoring +// ignore: avoid-unused-generics, generic are used later in code final class MapType { /// Configuration for [TARGET]'s fields. final List fields; From 2349cc3b4e923cd9d384672de98908e6c6624df0 Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Tue, 21 Jan 2025 10:21:52 +0100 Subject: [PATCH 08/12] chore: update and fixes for dcm linter --- examples/drift/lib/db.drift.dart | 285 ++++++++++++++++++ .../freezed/lib/freezed_example.freezed.dart | 17 +- examples/injectable/lib/getit.config.dart | 16 +- packages/auto_mappr/analysis_options.yaml | 13 +- packages/auto_mappr/dcm_baseline.json | 22 +- .../iterable_assignment_builder.dart | 14 +- .../assignments/map_assignment_builder.dart | 30 +- .../assignments/nested_object_mixin.dart | 4 +- .../record_assignment_builder.dart | 12 +- .../builder/map_bodies/enum_body_builder.dart | 4 +- .../src/builder/value_assignment_builder.dart | 6 +- .../src/generator/auto_mappr_generator.dart | 16 +- .../lib/src/models/source_assignment.dart | 1 + 13 files changed, 367 insertions(+), 73 deletions(-) diff --git a/examples/drift/lib/db.drift.dart b/examples/drift/lib/db.drift.dart index 1880bdb6..0a5d8858 100644 --- a/examples/drift/lib/db.drift.dart +++ b/examples/drift/lib/db.drift.dart @@ -1,3 +1,4 @@ +// dart format width=80 // ignore_for_file: type=lint part of 'db.dart'; @@ -157,6 +158,15 @@ class Todo extends DataClass implements Insertable { content: content ?? this.content, category: category.present ? category.value : this.category, ); + Todo copyWithCompanion(TodosCompanion data) { + return Todo( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + content: data.content.present ? data.content.value : this.content, + category: data.category.present ? data.category.value : this.category, + ); + } + @override String toString() { return (StringBuffer('Todo(') @@ -361,6 +371,14 @@ class Category extends DataClass implements Insertable { id: id ?? this.id, description: description ?? this.description, ); + Category copyWithCompanion(CategoriesCompanion data) { + return Category( + id: data.id.present ? data.id.value : this.id, + description: + data.description.present ? data.description.value : this.description, + ); + } + @override String toString() { return (StringBuffer('Category(') @@ -432,6 +450,7 @@ class CategoriesCompanion extends UpdateCompanion { abstract class _$MyDatabase extends GeneratedDatabase { _$MyDatabase(QueryExecutor e) : super(e); + $MyDatabaseManager get managers => $MyDatabaseManager(this); late final $TodosTable todos = $TodosTable(this); late final $CategoriesTable categories = $CategoriesTable(this); @override @@ -440,3 +459,269 @@ abstract class _$MyDatabase extends GeneratedDatabase { @override List get allSchemaEntities => [todos, categories]; } + +typedef $$TodosTableCreateCompanionBuilder = TodosCompanion Function({ + Value id, + required String title, + required String content, + Value category, +}); +typedef $$TodosTableUpdateCompanionBuilder = TodosCompanion Function({ + Value id, + Value title, + Value content, + Value category, +}); + +class $$TodosTableFilterComposer extends Composer<_$MyDatabase, $TodosTable> { + $$TodosTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnFilters(column)); + + ColumnFilters get title => $composableBuilder( + column: $table.title, builder: (column) => ColumnFilters(column)); + + ColumnFilters get content => $composableBuilder( + column: $table.content, builder: (column) => ColumnFilters(column)); + + ColumnFilters get category => $composableBuilder( + column: $table.category, builder: (column) => ColumnFilters(column)); +} + +class $$TodosTableOrderingComposer extends Composer<_$MyDatabase, $TodosTable> { + $$TodosTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get title => $composableBuilder( + column: $table.title, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get content => $composableBuilder( + column: $table.content, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get category => $composableBuilder( + column: $table.category, builder: (column) => ColumnOrderings(column)); +} + +class $$TodosTableAnnotationComposer + extends Composer<_$MyDatabase, $TodosTable> { + $$TodosTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get title => + $composableBuilder(column: $table.title, builder: (column) => column); + + GeneratedColumn get content => + $composableBuilder(column: $table.content, builder: (column) => column); + + GeneratedColumn get category => + $composableBuilder(column: $table.category, builder: (column) => column); +} + +class $$TodosTableTableManager extends RootTableManager< + _$MyDatabase, + $TodosTable, + Todo, + $$TodosTableFilterComposer, + $$TodosTableOrderingComposer, + $$TodosTableAnnotationComposer, + $$TodosTableCreateCompanionBuilder, + $$TodosTableUpdateCompanionBuilder, + (Todo, BaseReferences<_$MyDatabase, $TodosTable, Todo>), + Todo, + PrefetchHooks Function()> { + $$TodosTableTableManager(_$MyDatabase db, $TodosTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$TodosTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$TodosTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$TodosTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value title = const Value.absent(), + Value content = const Value.absent(), + Value category = const Value.absent(), + }) => + TodosCompanion( + id: id, + title: title, + content: content, + category: category, + ), + createCompanionCallback: ({ + Value id = const Value.absent(), + required String title, + required String content, + Value category = const Value.absent(), + }) => + TodosCompanion.insert( + id: id, + title: title, + content: content, + category: category, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$TodosTableProcessedTableManager = ProcessedTableManager< + _$MyDatabase, + $TodosTable, + Todo, + $$TodosTableFilterComposer, + $$TodosTableOrderingComposer, + $$TodosTableAnnotationComposer, + $$TodosTableCreateCompanionBuilder, + $$TodosTableUpdateCompanionBuilder, + (Todo, BaseReferences<_$MyDatabase, $TodosTable, Todo>), + Todo, + PrefetchHooks Function()>; +typedef $$CategoriesTableCreateCompanionBuilder = CategoriesCompanion Function({ + Value id, + required String description, +}); +typedef $$CategoriesTableUpdateCompanionBuilder = CategoriesCompanion Function({ + Value id, + Value description, +}); + +class $$CategoriesTableFilterComposer + extends Composer<_$MyDatabase, $CategoriesTable> { + $$CategoriesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnFilters(column)); + + ColumnFilters get description => $composableBuilder( + column: $table.description, builder: (column) => ColumnFilters(column)); +} + +class $$CategoriesTableOrderingComposer + extends Composer<_$MyDatabase, $CategoriesTable> { + $$CategoriesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get description => $composableBuilder( + column: $table.description, builder: (column) => ColumnOrderings(column)); +} + +class $$CategoriesTableAnnotationComposer + extends Composer<_$MyDatabase, $CategoriesTable> { + $$CategoriesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get description => $composableBuilder( + column: $table.description, builder: (column) => column); +} + +class $$CategoriesTableTableManager extends RootTableManager< + _$MyDatabase, + $CategoriesTable, + Category, + $$CategoriesTableFilterComposer, + $$CategoriesTableOrderingComposer, + $$CategoriesTableAnnotationComposer, + $$CategoriesTableCreateCompanionBuilder, + $$CategoriesTableUpdateCompanionBuilder, + (Category, BaseReferences<_$MyDatabase, $CategoriesTable, Category>), + Category, + PrefetchHooks Function()> { + $$CategoriesTableTableManager(_$MyDatabase db, $CategoriesTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$CategoriesTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$CategoriesTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$CategoriesTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value description = const Value.absent(), + }) => + CategoriesCompanion( + id: id, + description: description, + ), + createCompanionCallback: ({ + Value id = const Value.absent(), + required String description, + }) => + CategoriesCompanion.insert( + id: id, + description: description, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$CategoriesTableProcessedTableManager = ProcessedTableManager< + _$MyDatabase, + $CategoriesTable, + Category, + $$CategoriesTableFilterComposer, + $$CategoriesTableOrderingComposer, + $$CategoriesTableAnnotationComposer, + $$CategoriesTableCreateCompanionBuilder, + $$CategoriesTableUpdateCompanionBuilder, + (Category, BaseReferences<_$MyDatabase, $CategoriesTable, Category>), + Category, + PrefetchHooks Function()>; + +class $MyDatabaseManager { + final _$MyDatabase _db; + $MyDatabaseManager(this._db); + $$TodosTableTableManager get todos => + $$TodosTableTableManager(_db, _db.todos); + $$CategoriesTableTableManager get categories => + $$CategoriesTableTableManager(_db, _db.categories); +} diff --git a/examples/freezed/lib/freezed_example.freezed.dart b/examples/freezed/lib/freezed_example.freezed.dart index 7477ddfc..e336d183 100644 --- a/examples/freezed/lib/freezed_example.freezed.dart +++ b/examples/freezed/lib/freezed_example.freezed.dart @@ -21,7 +21,9 @@ mixin _$UserInfoUnion { DateTime get updatedAt => throw _privateConstructorUsedError; int get primarySectionId => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + /// Create a copy of UserInfoUnion + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $UserInfoUnionCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -49,6 +51,8 @@ class _$UserInfoUnionCopyWithImpl<$Res, $Val extends UserInfoUnion> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of UserInfoUnion + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -101,6 +105,8 @@ class __$$UserInfoImplCopyWithImpl<$Res> _$UserInfoImpl _value, $Res Function(_$UserInfoImpl) _then) : super(_value, _then); + /// Create a copy of UserInfoUnion + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -172,7 +178,9 @@ class _$UserInfoImpl implements UserInfo { int get hashCode => Object.hash( runtimeType, email, loginIdentifier, updatedAt, primarySectionId); - @JsonKey(ignore: true) + /// Create a copy of UserInfoUnion + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$UserInfoImplCopyWith<_$UserInfoImpl> get copyWith => @@ -194,8 +202,11 @@ abstract class UserInfo implements UserInfoUnion { DateTime get updatedAt; @override int get primarySectionId; + + /// Create a copy of UserInfoUnion + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$UserInfoImplCopyWith<_$UserInfoImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/examples/injectable/lib/getit.config.dart b/examples/injectable/lib/getit.config.dart index 9818a2fc..da02943b 100644 --- a/examples/injectable/lib/getit.config.dart +++ b/examples/injectable/lib/getit.config.dart @@ -8,22 +8,22 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:examples_injectable/mappr.dart' as _i3; -import 'package:get_it/get_it.dart' as _i1; -import 'package:injectable/injectable.dart' as _i2; +import 'package:examples_injectable/mappr.dart' as _i771; +import 'package:get_it/get_it.dart' as _i174; +import 'package:injectable/injectable.dart' as _i526; -extension GetItInjectableX on _i1.GetIt { +extension GetItInjectableX on _i174.GetIt { // initializes the registration of main-scope dependencies inside of GetIt - _i1.GetIt init({ + _i174.GetIt init({ String? environment, - _i2.EnvironmentFilter? environmentFilter, + _i526.EnvironmentFilter? environmentFilter, }) { - final gh = _i2.GetItHelper( + final gh = _i526.GetItHelper( this, environment, environmentFilter, ); - gh.lazySingleton<_i3.Mappr>(() => _i3.Mappr()); + gh.lazySingleton<_i771.Mappr>(() => _i771.Mappr()); return this; } } diff --git a/packages/auto_mappr/analysis_options.yaml b/packages/auto_mappr/analysis_options.yaml index 0b36c1fd..2e9322fc 100644 --- a/packages/auto_mappr/analysis_options.yaml +++ b/packages/auto_mappr/analysis_options.yaml @@ -16,7 +16,14 @@ dart_code_metrics: avoid-top-level-members-in-tests: exclude: - test/integration/fixture/** - prefer-boolean-prefixes: false # TODO: release new major version (breaking change) avoid-commented-out-code: false # code examples in comments - prefer-single-declaration-per-file: false # TODO - prefer-named-parameters: false # TODO: release new major version (breaking change) \ No newline at end of file + prefer-single-declaration-per-file: + exclude: + - test/integration/fixture/** + prefer-named-parameters: false # TODO: release new major version (breaking change) + prefer-boolean-prefixes: false # TODO: release new major version (breaking change) + # TODO: release new major version (breaking change) - uncomment lines below + # prefer-boolean-prefixes: + # exclude: + # - test/integration/fixture/** + # prefixes: ['include' , 'use', 'are', 'assign', 'with', 'will', 'maybe'] diff --git a/packages/auto_mappr/dcm_baseline.json b/packages/auto_mappr/dcm_baseline.json index 2652f08b..5009a8d9 100644 --- a/packages/auto_mappr/dcm_baseline.json +++ b/packages/auto_mappr/dcm_baseline.json @@ -1,5 +1,5 @@ { - "date": "2025-01-20 12:55:26.396096Z", + "date": "2025-01-21 09:08:40.977713Z", "version": "1.26.2", "paths": { "lib/src/models/type_converter.dart": { @@ -15,9 +15,7 @@ ] }, "lib/src/models/field_mapping.dart": { - "avoid-non-null-assertion": [ - "4e22d2815561f01ac60242562eb3d477" - ] + "avoid-non-null-assertion": ["4e22d2815561f01ac60242562eb3d477"] }, "lib/src/models/source_assignment.dart": { "avoid-non-null-assertion": [ @@ -26,18 +24,14 @@ "412aa7c321ce0580e16e5586de44ae45", "412aa7c321ce0580e16e5586de44ae45" ], - "avoid-nullable-interpolation": [ - "165ee04eb4d55330435a841f09c3c6b1" - ] + "avoid-nullable-interpolation": ["165ee04eb4d55330435a841f09c3c6b1"] }, "lib/src/extensions/dart_object_extension.dart": { "avoid-non-null-assertion": [ "0839d20a589c74eb461adbed71774c0c", "18cabcff3de662dfb212c548a5a39c24" ], - "avoid-nullable-interpolation": [ - "cf7dba3d85f84df468ec72f8b3744601" - ] + "avoid-nullable-interpolation": ["cf7dba3d85f84df468ec72f8b3744601"] }, "lib/src/generator/auto_mappr_generator.dart": { "avoid-non-null-assertion": [ @@ -56,9 +50,7 @@ ] }, "lib/src/builder/methods/private_convert_method_builder.dart": { - "avoid-non-null-assertion": [ - "a8022779055b7c4c7bf23042d14e613a" - ] + "avoid-non-null-assertion": ["a8022779055b7c4c7bf23042d14e613a"] }, "lib/src/builder/assignments/record_assignment_builder.dart": { "avoid-non-null-assertion": [ @@ -122,9 +114,7 @@ ] }, "lib/src/builder/map_bodies/enum_body_builder.dart": { - "avoid-non-null-assertion": [ - "a8022779055b7c4c7bf23042d14e613a" - ] + "avoid-non-null-assertion": ["a8022779055b7c4c7bf23042d14e613a"] } } } \ No newline at end of file diff --git a/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart b/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart index 4becadbe..c7941730 100644 --- a/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart +++ b/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart @@ -24,8 +24,8 @@ class IterableAssignmentBuilder extends AssignmentBuilderBase with NestedObjectM final sourceType = assignment.sourceType!; final targetType = assignment.targetType; - final sourceNullable = sourceType.isNullable; - final targetNullable = targetType.isNullable; + final isSourceNullable = sourceType.isNullable; + final isTargetNullable = targetType.isNullable; final sourceIterableType = sourceType.genericParameterTypeOrSelf; final targetIterableType = targetType.genericParameterTypeOrSelf; @@ -38,7 +38,7 @@ class IterableAssignmentBuilder extends AssignmentBuilderBase with NestedObjectM // When [sourceIterableType] is nullable and [targetIterableType] is not, remove null values. final sourceIterableExpression = AssignmentBuilderBase.modelReference.property(assignment.sourceField!.name).maybeWhereIterableNotNull( condition: shouldFilterNullInSource, - isOnNullable: sourceNullable, + isOnNullable: isSourceNullable, ); final defaultIterableValueExpression = targetType.defaultIterableExpression(); @@ -46,7 +46,7 @@ class IterableAssignmentBuilder extends AssignmentBuilderBase with NestedObjectM if (assignNestedObject) { return sourceIterableExpression // Map complex nested types. - .maybeNullSafeProperty('map', isOnNullable: sourceNullable) + .maybeNullSafeProperty('map', isOnNullable: isSourceNullable) .call( [_map(assignment)], {}, @@ -61,7 +61,7 @@ class IterableAssignmentBuilder extends AssignmentBuilderBase with NestedObjectM isOnNullable: false, ) // When [sourceNullable], use default value. - .maybeIfNullThen(defaultIterableValueExpression, isOnNullable: sourceNullable && !targetNullable); + .maybeIfNullThen(defaultIterableValueExpression, isOnNullable: isSourceNullable && !isTargetNullable); } return sourceIterableExpression @@ -69,11 +69,11 @@ class IterableAssignmentBuilder extends AssignmentBuilderBase with NestedObjectM source: sourceType, target: targetType, forceCast: shouldFilterNullInSource, // if whereNotNull was used -> we want to force toIterable() call - isOnNullable: !targetNullable && sourceNullable, + isOnNullable: !isTargetNullable && isSourceNullable, ) .maybeIfNullThen( defaultIterableValueExpression, - isOnNullable: !targetNullable && sourceNullable, + isOnNullable: !isTargetNullable && isSourceNullable, ); } diff --git a/packages/auto_mappr/lib/src/builder/assignments/map_assignment_builder.dart b/packages/auto_mappr/lib/src/builder/assignments/map_assignment_builder.dart index a9d03381..71320f84 100644 --- a/packages/auto_mappr/lib/src/builder/assignments/map_assignment_builder.dart +++ b/packages/auto_mappr/lib/src/builder/assignments/map_assignment_builder.dart @@ -27,8 +27,8 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin final sourceType = assignment.sourceType!; final targetType = assignment.targetType; - final sourceNullable = sourceType.isNullable; - final targetNullable = targetType.isNullable; + final isSourceNullable = sourceType.isNullable; + final isTargetNullable = targetType.isNullable; final sourceKeyType = (sourceType as ParameterizedType).typeArguments.firstOrNull; final sourceValueType = sourceType.typeArguments.lastOrNull; @@ -36,10 +36,10 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin final targetKeyType = (targetType as ParameterizedType).typeArguments.firstOrNull; final targetValueType = targetType.typeArguments.lastOrNull; - final sourceNullableKey = sourceKeyType?.isNullable ?? false; - final sourceNullableValue = sourceValueType?.isNullable ?? false; - final targetNullableKey = targetKeyType?.isNullable ?? false; - final targetNullableValue = targetValueType?.isNullable ?? false; + final isSourceNullableKey = sourceKeyType?.isNullable ?? false; + final isSourceNullableValue = sourceValueType?.isNullable ?? false; + final isTargetNullableKey = targetKeyType?.isNullable ?? false; + final isTargetNullableValue = targetValueType?.isNullable ?? false; if (targetKeyType == null || targetValueType == null) { final emittedTarget = EmitterHelper.current.typeReferEmitted(type: targetType); @@ -62,11 +62,11 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin // Keys: source is null, target is not null, and default value does not exist. final shouldRemoveNullsKey = - sourceNullableKey && !targetNullableKey && (!(keyMapping?.hasWhenNullDefault() ?? false)); + isSourceNullableKey && !isTargetNullableKey && (!(keyMapping?.hasWhenNullDefault() ?? false)); // Value: source is null, target is not null, and default value does not exist. final shouldRemoveNullsValue = - sourceNullableValue && !targetNullableValue && (!(valueMapping?.hasWhenNullDefault() ?? false)); + isSourceNullableValue && !isTargetNullableValue && (!(valueMapping?.hasWhenNullDefault() ?? false)); final sourceMapExpression = AssignmentBuilderBase.modelReference.property(assignment.sourceField!.name); @@ -84,7 +84,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin return sourceMapExpression // Filter nulls when source key/value is nullable and target is not. .maybeWhereMapNotNull( - isOnNullable: sourceNullable, + isOnNullable: isSourceNullable, keyIsNullable: shouldRemoveNullsKey, valueIsNullable: shouldRemoveNullsValue, keyType: sourceKeyType, @@ -92,7 +92,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin ) .maybeCall( 'map', - isOnNullable: sourceNullable, + isOnNullable: isSourceNullable, // Call map only when actually some mapping is required. condition: shouldDoMapCall, positionalArguments: [_map(assignment)], @@ -102,7 +102,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin ], ) // When [sourceNullable], use default value. - .maybeIfNullThen(defaultMapValueExpression, isOnNullable: sourceNullable && !targetNullable); + .maybeIfNullThen(defaultMapValueExpression, isOnNullable: isSourceNullable && !isTargetNullable); } Expression _map(SourceAssignment assignment) { @@ -128,8 +128,8 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin final assignNestedObjectKey = !targetKeyType.isPrimitiveType && (targetKeyType != sourceKeyType); final assignNestedObjectValue = !targetValueType.isPrimitiveType && (targetValueType != sourceValueType); - final keysAreSameType = sourceKeyType == targetKeyType; - final valuesAreSameType = sourceValueType == targetValueType; + final areKeysSameType = sourceKeyType == targetKeyType; + final areValuesSameType = sourceValueType == targetValueType; // Returns a tear off when no nested call is needed. if (!assignNestedObjectKey && !assignNestedObjectValue) { @@ -144,7 +144,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin assignment: assignment, source: sourceKeyType, target: targetKeyType, - convertMethodArgument: keysAreSameType ? null : sourceMapExpression, + convertMethodArgument: areKeysSameType ? null : sourceMapExpression, ) : sourceMapExpression; @@ -153,7 +153,7 @@ class MapAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMixin assignment: assignment, source: sourceValueType, target: targetValueType, - convertMethodArgument: valuesAreSameType ? null : targetMapExpression, + convertMethodArgument: areValuesSameType ? null : targetMapExpression, ) : targetMapExpression; diff --git a/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart b/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart index 0cdd0082..aa12c661 100644 --- a/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart +++ b/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart @@ -120,9 +120,9 @@ mixin NestedObjectMixin on AssignmentBuilderBase { Expression? convertMethodArgument, bool includeGenericTypes = false, }) { - final targetNullable = target.isNullable; + final isTargetNullable = target.isNullable; - final useNullableMethod = targetNullable && !mapping.hasWhenNullDefault(); + final useNullableMethod = isTargetNullable && !mapping.hasWhenNullDefault(); // When target is nullable, use nullable convert method. // But use non-nullable when the mapping has default value. diff --git a/packages/auto_mappr/lib/src/builder/assignments/record_assignment_builder.dart b/packages/auto_mappr/lib/src/builder/assignments/record_assignment_builder.dart index 3d033cf7..cf62bd48 100644 --- a/packages/auto_mappr/lib/src/builder/assignments/record_assignment_builder.dart +++ b/packages/auto_mappr/lib/src/builder/assignments/record_assignment_builder.dart @@ -97,8 +97,8 @@ class RecordAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMix }) { if (source == null) return literalNull; - final valuesAreSameType = source.type == target.type; - final shouldAssignNestedObject = !target.type.isPrimitiveType && !valuesAreSameType; + final areValuesSameType = source.type == target.type; + final shouldAssignNestedObject = !target.type.isPrimitiveType && !areValuesSameType; final targetRecordExpression = refer(assignment.sourceField!.name); @@ -110,7 +110,7 @@ class RecordAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMix assignment: assignment, source: source.type, target: target.type, - convertMethodArgument: valuesAreSameType ? null : targetRecordExpression, + convertMethodArgument: areValuesSameType ? null : targetRecordExpression, ); return refer('${valueExpression.accept(EmitterHelper.current.emitter)})'); @@ -130,8 +130,8 @@ class RecordAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMix }) { if (source == null) return literalNull; - final valuesAreSameType = source.type == target.type; - final shouldAssignNestedObject = !target.type.isPrimitiveType && !valuesAreSameType; + final areValuesSameType = source.type == target.type; + final shouldAssignNestedObject = !target.type.isPrimitiveType && !areValuesSameType; final targetRecordExpression = refer(assignment.sourceField!.name); @@ -143,7 +143,7 @@ class RecordAssignmentBuilder extends AssignmentBuilderBase with NestedObjectMix assignment: assignment, source: source.type, target: target.type, - convertMethodArgument: valuesAreSameType ? null : targetRecordExpression, + convertMethodArgument: areValuesSameType ? null : targetRecordExpression, ); return refer('${valueExpression.accept(EmitterHelper.current.emitter)})'); diff --git a/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart b/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart index b045698a..8ab4d1ec 100644 --- a/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_bodies/enum_body_builder.dart @@ -32,9 +32,9 @@ class EnumBodyBuilder extends MapBodyBuilderBase { final sourceValues = sourceEnum.fields.where((e) => e.isEnumConstant && e.isPublic).map((e) => e.name).toSet(); final targetValues = targetEnum.fields.where((e) => e.isEnumConstant && e.isPublic).map((e) => e.name).toSet(); - final sourceIsSubset = targetValues.containsAll(sourceValues); + final isSourceSubset = targetValues.containsAll(sourceValues); - if (!sourceIsSubset && !mapping.hasWhenNullDefault()) { + if (!isSourceSubset && !mapping.hasWhenNullDefault()) { final sourceDisplay = mapping.source.getDisplayString(); final targetDisplay = mapping.target.getDisplayString(); throw InvalidGenerationSourceError( diff --git a/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart b/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart index 030d7fb4..013d8714 100644 --- a/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart +++ b/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart @@ -102,8 +102,8 @@ class ValueAssignmentBuilder { return rightSide.ifNullThen(fieldMapping!.whenNullExpression!); } - final sourceNullable = assignment.sourceType!.isNullable; - final targetNullable = assignment.targetType.isNullable; + final isSourceNullable = assignment.sourceType!.isNullable; + final isTargetNullable = assignment.targetType.isNullable; // BANG operator when Source is nullable and Target not final shouldIgnoreNull = fieldMapping?.ignoreNull ?? @@ -111,7 +111,7 @@ class ValueAssignmentBuilder { mapperConfig.mapprOptions.ignoreNullableSourceField ?? false; - if (shouldIgnoreNull && sourceNullable && !targetNullable) { + if (shouldIgnoreNull && isSourceNullable && !isTargetNullable) { return refer(sourceField.isStatic ? '${sourceField.enclosingElement.name}' : 'model') .property(sourceField.name) .nullChecked; diff --git a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart index e0f68630..47ee29ca 100644 --- a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart +++ b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart @@ -136,9 +136,9 @@ class AutoMapprGenerator extends GeneratorForAnnotation { final mapTypeConverters = mapper.getField(mapTypeFieldConverters)?.toListValue() ?? []; final whenSourceIsNull = mapper.getField(mapTypeFieldWhenSourceIsNull)?.toCodeExpression(); final constructor = mapper.getField(mapTypeFieldConstructor)?.toStringValue(); - final ignoreFieldNull = mapper.getField(mapTypeFieldIgnoreFieldNull)?.toBoolValue(); - final reverse = mapper.getField(mapTypeFieldReverse)?.toBoolValue(); - final safeMapping = mapper.getField(mapTypeSafeMapping)?.toBoolValue(); + final willIgnoreFieldNull = mapper.getField(mapTypeFieldIgnoreFieldNull)?.toBoolValue(); + final isReverse = mapper.getField(mapTypeFieldReverse)?.toBoolValue(); + final hasSafeMapping = mapper.getField(mapTypeSafeMapping)?.toBoolValue(); final fieldMappings = fields ?.map( @@ -162,10 +162,10 @@ class AutoMapprGenerator extends GeneratorForAnnotation { typeConverters: [..._toTypeConverters(mapTypeConverters), ...globalConverters], whenSourceIsNullExpression: whenSourceIsNull, constructor: constructor, - ignoreFieldNull: ignoreFieldNull, - safeMapping: safeMapping, + ignoreFieldNull: willIgnoreFieldNull, + safeMapping: hasSafeMapping, ), - if (reverse ?? false) + if (isReverse ?? false) TypeMapping( source: targetType, target: sourceType, @@ -187,8 +187,8 @@ class AutoMapprGenerator extends GeneratorForAnnotation { typeConverters: [..._toTypeConverters(mapTypeConverters), ...globalConverters], whenSourceIsNullExpression: whenSourceIsNull, constructor: constructor, - ignoreFieldNull: ignoreFieldNull, - safeMapping: safeMapping, + ignoreFieldNull: willIgnoreFieldNull, + safeMapping: hasSafeMapping, ), ]; }) diff --git a/packages/auto_mappr/lib/src/models/source_assignment.dart b/packages/auto_mappr/lib/src/models/source_assignment.dart index be9447f1..5f419696 100644 --- a/packages/auto_mappr/lib/src/models/source_assignment.dart +++ b/packages/auto_mappr/lib/src/models/source_assignment.dart @@ -1,4 +1,5 @@ //ignore_for_file: prefer-match-file-name +// ignore_for_file: prefer-single-declaration-per-file import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; From 744c8a0ee423b113ac714cc7e26d8107baa24a12 Mon Sep 17 00:00:00 2001 From: Matej Valenta Date: Tue, 21 Jan 2025 11:55:51 +0100 Subject: [PATCH 09/12] chore: revert adjacent string ignore --- .../map_model_body_method_builder.dart | 1 - .../src/generator/auto_mappr_generator.dart | 173 +++++++++--------- 2 files changed, 85 insertions(+), 89 deletions(-) diff --git a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart index 698d788d..b30ca485 100644 --- a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart @@ -70,7 +70,6 @@ class MapModelBodyMethodBuilder { ? mapping.whenSourceIsNullExpression!.returned : refer('Exception').newInstance([ refer( - // ignore: avoid-adjacent-strings, to avoid parsing the errors in tests "r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. '\n" "r'Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.'", ), diff --git a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart index 47ee29ca..06912ebc 100644 --- a/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart +++ b/packages/auto_mappr/lib/src/generator/auto_mappr_generator.dart @@ -106,95 +106,92 @@ class AutoMapprGenerator extends GeneratorForAnnotation { required List globalConverters, required ClassElement element, }) { - return mappers - .map((mapper) { - final mapperType = mapper.type! as ParameterizedType; - - final sourceType = mapperType.typeArguments.firstOrNull; - final targetType = mapperType.typeArguments.lastOrNull; - - if (sourceType is! InterfaceType) { - final emittedSource = EmitterHelper.current.typeReferEmitted(type: sourceType); - - throw InvalidGenerationSourceError( - '$emittedSource is not a class and cannot be mapped from', - element: element, - todo: 'Use a class', - ); - } - if (targetType is! InterfaceType) { - final emittedTarget = EmitterHelper.current.typeReferEmitted(type: targetType); - - throw InvalidGenerationSourceError( - '$emittedTarget is not a class and cannot be mapped to', - element: element, - todo: 'Use a class', - ); - } - - final fields = mapper.getField(mapTypeFieldFields)?.toListValue(); - final mapTypeConverters = mapper.getField(mapTypeFieldConverters)?.toListValue() ?? []; - final whenSourceIsNull = mapper.getField(mapTypeFieldWhenSourceIsNull)?.toCodeExpression(); - final constructor = mapper.getField(mapTypeFieldConstructor)?.toStringValue(); - final willIgnoreFieldNull = mapper.getField(mapTypeFieldIgnoreFieldNull)?.toBoolValue(); - final isReverse = mapper.getField(mapTypeFieldReverse)?.toBoolValue(); - final hasSafeMapping = mapper.getField(mapTypeSafeMapping)?.toBoolValue(); - - final fieldMappings = fields - ?.map( - (fieldMapping) => FieldMapping( - field: fieldMapping.getField(fieldFieldField)!.toStringValue()!, - ignore: fieldMapping.getField(fieldFieldIgnore)!.toBoolValue()!, - from: fieldMapping.getField(fieldFieldFrom)!.toStringValue(), - customExpression: - fieldMapping.getField(fieldFieldCustom)!.toCodeExpression(maybePassModelArgument: true), - whenNullExpression: fieldMapping.getField(fieldFieldWhenNull)!.toCodeExpression(), - ignoreNull: fieldMapping.getField(fieldFieldIgnoreNull)!.toBoolValue(), - ), - ) - .toList(); - - return [ - TypeMapping( - source: sourceType, - target: targetType, - fieldMappings: fieldMappings ?? [], - typeConverters: [..._toTypeConverters(mapTypeConverters), ...globalConverters], - whenSourceIsNullExpression: whenSourceIsNull, - constructor: constructor, - ignoreFieldNull: willIgnoreFieldNull, - safeMapping: hasSafeMapping, + final res = mappers.map((mapper) { + final mapperType = mapper.type! as ParameterizedType; + + final sourceType = mapperType.typeArguments.firstOrNull; + final targetType = mapperType.typeArguments.lastOrNull; + + if (sourceType is! InterfaceType) { + final emittedSource = EmitterHelper.current.typeReferEmitted(type: sourceType); + + throw InvalidGenerationSourceError( + '$emittedSource is not a class and cannot be mapped from', + element: element, + todo: 'Use a class', + ); + } + if (targetType is! InterfaceType) { + final emittedTarget = EmitterHelper.current.typeReferEmitted(type: targetType); + + throw InvalidGenerationSourceError( + '$emittedTarget is not a class and cannot be mapped to', + element: element, + todo: 'Use a class', + ); + } + + final fields = mapper.getField(mapTypeFieldFields)?.toListValue(); + final mapTypeConverters = mapper.getField(mapTypeFieldConverters)?.toListValue() ?? []; + final whenSourceIsNull = mapper.getField(mapTypeFieldWhenSourceIsNull)?.toCodeExpression(); + final constructor = mapper.getField(mapTypeFieldConstructor)?.toStringValue(); + final willIgnoreFieldNull = mapper.getField(mapTypeFieldIgnoreFieldNull)?.toBoolValue(); + final isReverse = mapper.getField(mapTypeFieldReverse)?.toBoolValue(); + final hasSafeMapping = mapper.getField(mapTypeSafeMapping)?.toBoolValue(); + + final fieldMappings = fields + ?.map( + (fieldMapping) => FieldMapping( + field: fieldMapping.getField(fieldFieldField)!.toStringValue()!, + ignore: fieldMapping.getField(fieldFieldIgnore)!.toBoolValue()!, + from: fieldMapping.getField(fieldFieldFrom)!.toStringValue(), + customExpression: fieldMapping.getField(fieldFieldCustom)!.toCodeExpression(maybePassModelArgument: true), + whenNullExpression: fieldMapping.getField(fieldFieldWhenNull)!.toCodeExpression(), + ignoreNull: fieldMapping.getField(fieldFieldIgnoreNull)!.toBoolValue(), ), - if (isReverse ?? false) - TypeMapping( - source: targetType, - target: sourceType, - fieldMappings: fieldMappings - ?.map( - (f) => f.from != null - ? FieldMapping( - field: f.from!, - from: f.field, - customExpression: f.customExpression, - whenNullExpression: f.whenNullExpression, - ignore: f.ignore, - ignoreNull: f.ignoreNull, - ) - : f, - ) - .toList() ?? - [], - typeConverters: [..._toTypeConverters(mapTypeConverters), ...globalConverters], - whenSourceIsNullExpression: whenSourceIsNull, - constructor: constructor, - ignoreFieldNull: willIgnoreFieldNull, - safeMapping: hasSafeMapping, - ), - ]; - }) - // ignore: avoid-slow-collection-methods, it's ok to use here - .flattened - .toList(); + ) + .toList(); + + return [ + TypeMapping( + source: sourceType, + target: targetType, + fieldMappings: fieldMappings ?? [], + typeConverters: [..._toTypeConverters(mapTypeConverters), ...globalConverters], + whenSourceIsNullExpression: whenSourceIsNull, + constructor: constructor, + ignoreFieldNull: willIgnoreFieldNull, + safeMapping: hasSafeMapping, + ), + if (isReverse ?? false) + TypeMapping( + source: targetType, + target: sourceType, + fieldMappings: fieldMappings + ?.map( + (f) => f.from != null + ? FieldMapping( + field: f.from!, + from: f.field, + customExpression: f.customExpression, + whenNullExpression: f.whenNullExpression, + ignore: f.ignore, + ignoreNull: f.ignoreNull, + ) + : f, + ) + .toList() ?? + [], + typeConverters: [..._toTypeConverters(mapTypeConverters), ...globalConverters], + whenSourceIsNullExpression: whenSourceIsNull, + constructor: constructor, + ignoreFieldNull: willIgnoreFieldNull, + safeMapping: hasSafeMapping, + ), + ]; + }); + + return res.flattened.toList(); } /// Recursively returns all mappings from includes. From 3434b8f872fd73d5fd5f317ee17554ae7255fb77 Mon Sep 17 00:00:00 2001 From: Honza Bittner Date: Thu, 23 Jan 2025 10:27:08 +0100 Subject: [PATCH 10/12] Fix specialized int list resolution --- .vscode/settings.json | 25 +- examples/drift/lib/db.drift.dart | 285 ------------------ examples/drift/pubspec.yaml | 2 +- examples/example/pubspec.yaml | 2 +- examples/freezed/pubspec.yaml | 2 +- examples/injectable/pubspec.yaml | 4 +- packages/auto_mappr/CHANGELOG.md | 1 + packages/auto_mappr/example/pubspec.yaml | 2 +- .../iterable_assignment_builder.dart | 9 +- .../src/extensions/dart_type_extension.dart | 6 +- .../src/extensions/expression_extension.dart | 4 +- .../lib/src/models/source_assignment.dart | 9 +- packages/auto_mappr/pubspec.yaml | 4 +- .../test/integration/iterable_test.dart | 4 +- 14 files changed, 51 insertions(+), 308 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index e7850227..4c44b6d6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,26 @@ { - "yaml.schemaStore.enable": false + "yaml.schemaStore.enable": false, + "dart.flutterSdkPath": ".fvm/versions/3.27.1", + "search.exclude": { + "**/.fvm": true + }, + "files.exclude": { + "**/.git": true, + "**/.DS_Store": true, + ".idea/**": true, + ".run/**": true + }, + "files.watcherExclude": { + "**/.fvm": true + }, + "[dart]": { + "editor.formatOnSave": true, + "editor.formatOnType": true, + "editor.rulers": [ + 120 + ], + "editor.formatOnPaste": true, + "editor.defaultFormatter": "Dart-Code.dart-code" + }, + "dart.lineLength": 120 } \ No newline at end of file diff --git a/examples/drift/lib/db.drift.dart b/examples/drift/lib/db.drift.dart index 0a5d8858..1880bdb6 100644 --- a/examples/drift/lib/db.drift.dart +++ b/examples/drift/lib/db.drift.dart @@ -1,4 +1,3 @@ -// dart format width=80 // ignore_for_file: type=lint part of 'db.dart'; @@ -158,15 +157,6 @@ class Todo extends DataClass implements Insertable { content: content ?? this.content, category: category.present ? category.value : this.category, ); - Todo copyWithCompanion(TodosCompanion data) { - return Todo( - id: data.id.present ? data.id.value : this.id, - title: data.title.present ? data.title.value : this.title, - content: data.content.present ? data.content.value : this.content, - category: data.category.present ? data.category.value : this.category, - ); - } - @override String toString() { return (StringBuffer('Todo(') @@ -371,14 +361,6 @@ class Category extends DataClass implements Insertable { id: id ?? this.id, description: description ?? this.description, ); - Category copyWithCompanion(CategoriesCompanion data) { - return Category( - id: data.id.present ? data.id.value : this.id, - description: - data.description.present ? data.description.value : this.description, - ); - } - @override String toString() { return (StringBuffer('Category(') @@ -450,7 +432,6 @@ class CategoriesCompanion extends UpdateCompanion { abstract class _$MyDatabase extends GeneratedDatabase { _$MyDatabase(QueryExecutor e) : super(e); - $MyDatabaseManager get managers => $MyDatabaseManager(this); late final $TodosTable todos = $TodosTable(this); late final $CategoriesTable categories = $CategoriesTable(this); @override @@ -459,269 +440,3 @@ abstract class _$MyDatabase extends GeneratedDatabase { @override List get allSchemaEntities => [todos, categories]; } - -typedef $$TodosTableCreateCompanionBuilder = TodosCompanion Function({ - Value id, - required String title, - required String content, - Value category, -}); -typedef $$TodosTableUpdateCompanionBuilder = TodosCompanion Function({ - Value id, - Value title, - Value content, - Value category, -}); - -class $$TodosTableFilterComposer extends Composer<_$MyDatabase, $TodosTable> { - $$TodosTableFilterComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - ColumnFilters get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnFilters(column)); - - ColumnFilters get title => $composableBuilder( - column: $table.title, builder: (column) => ColumnFilters(column)); - - ColumnFilters get content => $composableBuilder( - column: $table.content, builder: (column) => ColumnFilters(column)); - - ColumnFilters get category => $composableBuilder( - column: $table.category, builder: (column) => ColumnFilters(column)); -} - -class $$TodosTableOrderingComposer extends Composer<_$MyDatabase, $TodosTable> { - $$TodosTableOrderingComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - ColumnOrderings get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get title => $composableBuilder( - column: $table.title, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get content => $composableBuilder( - column: $table.content, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get category => $composableBuilder( - column: $table.category, builder: (column) => ColumnOrderings(column)); -} - -class $$TodosTableAnnotationComposer - extends Composer<_$MyDatabase, $TodosTable> { - $$TodosTableAnnotationComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - GeneratedColumn get id => - $composableBuilder(column: $table.id, builder: (column) => column); - - GeneratedColumn get title => - $composableBuilder(column: $table.title, builder: (column) => column); - - GeneratedColumn get content => - $composableBuilder(column: $table.content, builder: (column) => column); - - GeneratedColumn get category => - $composableBuilder(column: $table.category, builder: (column) => column); -} - -class $$TodosTableTableManager extends RootTableManager< - _$MyDatabase, - $TodosTable, - Todo, - $$TodosTableFilterComposer, - $$TodosTableOrderingComposer, - $$TodosTableAnnotationComposer, - $$TodosTableCreateCompanionBuilder, - $$TodosTableUpdateCompanionBuilder, - (Todo, BaseReferences<_$MyDatabase, $TodosTable, Todo>), - Todo, - PrefetchHooks Function()> { - $$TodosTableTableManager(_$MyDatabase db, $TodosTable table) - : super(TableManagerState( - db: db, - table: table, - createFilteringComposer: () => - $$TodosTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$TodosTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $$TodosTableAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value id = const Value.absent(), - Value title = const Value.absent(), - Value content = const Value.absent(), - Value category = const Value.absent(), - }) => - TodosCompanion( - id: id, - title: title, - content: content, - category: category, - ), - createCompanionCallback: ({ - Value id = const Value.absent(), - required String title, - required String content, - Value category = const Value.absent(), - }) => - TodosCompanion.insert( - id: id, - title: title, - content: content, - category: category, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), - prefetchHooksCallback: null, - )); -} - -typedef $$TodosTableProcessedTableManager = ProcessedTableManager< - _$MyDatabase, - $TodosTable, - Todo, - $$TodosTableFilterComposer, - $$TodosTableOrderingComposer, - $$TodosTableAnnotationComposer, - $$TodosTableCreateCompanionBuilder, - $$TodosTableUpdateCompanionBuilder, - (Todo, BaseReferences<_$MyDatabase, $TodosTable, Todo>), - Todo, - PrefetchHooks Function()>; -typedef $$CategoriesTableCreateCompanionBuilder = CategoriesCompanion Function({ - Value id, - required String description, -}); -typedef $$CategoriesTableUpdateCompanionBuilder = CategoriesCompanion Function({ - Value id, - Value description, -}); - -class $$CategoriesTableFilterComposer - extends Composer<_$MyDatabase, $CategoriesTable> { - $$CategoriesTableFilterComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - ColumnFilters get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnFilters(column)); - - ColumnFilters get description => $composableBuilder( - column: $table.description, builder: (column) => ColumnFilters(column)); -} - -class $$CategoriesTableOrderingComposer - extends Composer<_$MyDatabase, $CategoriesTable> { - $$CategoriesTableOrderingComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - ColumnOrderings get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnOrderings(column)); - - ColumnOrderings get description => $composableBuilder( - column: $table.description, builder: (column) => ColumnOrderings(column)); -} - -class $$CategoriesTableAnnotationComposer - extends Composer<_$MyDatabase, $CategoriesTable> { - $$CategoriesTableAnnotationComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - GeneratedColumn get id => - $composableBuilder(column: $table.id, builder: (column) => column); - - GeneratedColumn get description => $composableBuilder( - column: $table.description, builder: (column) => column); -} - -class $$CategoriesTableTableManager extends RootTableManager< - _$MyDatabase, - $CategoriesTable, - Category, - $$CategoriesTableFilterComposer, - $$CategoriesTableOrderingComposer, - $$CategoriesTableAnnotationComposer, - $$CategoriesTableCreateCompanionBuilder, - $$CategoriesTableUpdateCompanionBuilder, - (Category, BaseReferences<_$MyDatabase, $CategoriesTable, Category>), - Category, - PrefetchHooks Function()> { - $$CategoriesTableTableManager(_$MyDatabase db, $CategoriesTable table) - : super(TableManagerState( - db: db, - table: table, - createFilteringComposer: () => - $$CategoriesTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$CategoriesTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $$CategoriesTableAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value id = const Value.absent(), - Value description = const Value.absent(), - }) => - CategoriesCompanion( - id: id, - description: description, - ), - createCompanionCallback: ({ - Value id = const Value.absent(), - required String description, - }) => - CategoriesCompanion.insert( - id: id, - description: description, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), - prefetchHooksCallback: null, - )); -} - -typedef $$CategoriesTableProcessedTableManager = ProcessedTableManager< - _$MyDatabase, - $CategoriesTable, - Category, - $$CategoriesTableFilterComposer, - $$CategoriesTableOrderingComposer, - $$CategoriesTableAnnotationComposer, - $$CategoriesTableCreateCompanionBuilder, - $$CategoriesTableUpdateCompanionBuilder, - (Category, BaseReferences<_$MyDatabase, $CategoriesTable, Category>), - Category, - PrefetchHooks Function()>; - -class $MyDatabaseManager { - final _$MyDatabase _db; - $MyDatabaseManager(this._db); - $$TodosTableTableManager get todos => - $$TodosTableTableManager(_db, _db.todos); - $$CategoriesTableTableManager get categories => - $$CategoriesTableTableManager(_db, _db.categories); -} diff --git a/examples/drift/pubspec.yaml b/examples/drift/pubspec.yaml index 4b7e6d9a..7d47f55a 100644 --- a/examples/drift/pubspec.yaml +++ b/examples/drift/pubspec.yaml @@ -10,7 +10,7 @@ resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 drift: ^2.7.0 - equatable: ^2.0.5 + equatable: ^2.0.7 dev_dependencies: auto_mappr: ^2.6.0 diff --git a/examples/example/pubspec.yaml b/examples/example/pubspec.yaml index f6f029ad..ae58b870 100644 --- a/examples/example/pubspec.yaml +++ b/examples/example/pubspec.yaml @@ -9,7 +9,7 @@ resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 - equatable: ^2.0.5 + equatable: ^2.0.7 dev_dependencies: auto_mappr: ^2.6.0 diff --git a/examples/freezed/pubspec.yaml b/examples/freezed/pubspec.yaml index 12bc4ef4..80999cde 100644 --- a/examples/freezed/pubspec.yaml +++ b/examples/freezed/pubspec.yaml @@ -9,7 +9,7 @@ resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 - equatable: ^2.0.5 + equatable: ^2.0.7 freezed_annotation: ^2.2.0 dev_dependencies: diff --git a/examples/injectable/pubspec.yaml b/examples/injectable/pubspec.yaml index d7ee72ea..668e3ca5 100644 --- a/examples/injectable/pubspec.yaml +++ b/examples/injectable/pubspec.yaml @@ -9,8 +9,8 @@ resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 - equatable: ^2.0.5 - get_it: ^7.3.0 + equatable: ^2.0.7 + get_it: ^8.0.0 injectable: ^2.5.0 dev_dependencies: diff --git a/packages/auto_mappr/CHANGELOG.md b/packages/auto_mappr/CHANGELOG.md index a8fbfb0b..35b7e93a 100644 --- a/packages/auto_mappr/CHANGELOG.md +++ b/packages/auto_mappr/CHANGELOG.md @@ -2,6 +2,7 @@ ## 2.6.0 - Update dependencies +- Update get_it dependency to ^8.0.0 ## 2.5.0 - Add support for safe mapping (mapping exceptions handling). [#216](https://github.com/netglade/auto_mappr/pull/216) diff --git a/packages/auto_mappr/example/pubspec.yaml b/packages/auto_mappr/example/pubspec.yaml index 0c6a6b3e..2e5c9d80 100644 --- a/packages/auto_mappr/example/pubspec.yaml +++ b/packages/auto_mappr/example/pubspec.yaml @@ -9,7 +9,7 @@ resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 - equatable: ^2.0.5 + equatable: ^2.0.7 dev_dependencies: auto_mappr: ^2.6.0 diff --git a/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart b/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart index c7941730..28881c17 100644 --- a/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart +++ b/packages/auto_mappr/lib/src/builder/assignments/iterable_assignment_builder.dart @@ -32,14 +32,15 @@ class IterableAssignmentBuilder extends AssignmentBuilderBase with NestedObjectM final shouldFilterNullInSource = sourceIterableType.isNullable && targetIterableType.isNotNullable; - final assignNestedObject = (!targetIterableType.isPrimitiveType && !targetIterableType.isSpecializedListType) && + final assignNestedObject = (!targetIterableType.isPrimitiveType && !targetIterableType.isSpecializedIntListType) && (!targetIterableType.isSame(sourceIterableType)); // When [sourceIterableType] is nullable and [targetIterableType] is not, remove null values. - final sourceIterableExpression = AssignmentBuilderBase.modelReference.property(assignment.sourceField!.name).maybeWhereIterableNotNull( - condition: shouldFilterNullInSource, + final sourceIterableExpression = + AssignmentBuilderBase.modelReference.property(assignment.sourceField!.name).maybeWhereIterableNotNull( + condition: shouldFilterNullInSource, isOnNullable: isSourceNullable, - ); + ); final defaultIterableValueExpression = targetType.defaultIterableExpression(); diff --git a/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart b/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart index a9e5baa6..8e99faee 100644 --- a/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart +++ b/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart @@ -22,14 +22,14 @@ extension DartTypeExtension on DartType { return !isNullable; } - /// Is special variant of integer. + /// Is special variant of integer list. /// /// See `[Uint8List], [Uint16List], [Uint32List], [Uint64List]`. - bool get isSpecializedListType { + bool get isSpecializedIntListType { final thisType = this; if (thisType is! InterfaceType) return false; - return thisType.interfaces.any((i) => i.getDisplayString(withNullability: false) == 'List'); + return thisType.allSupertypes.any((i) => i.getDisplayString(withNullability: false) == 'List'); } DartType get genericParameterTypeOrSelf => (this as ParameterizedType).typeArguments.firstOrNull ?? this; diff --git a/packages/auto_mappr/lib/src/extensions/expression_extension.dart b/packages/auto_mappr/lib/src/extensions/expression_extension.dart index 111b1bbc..4ca839d6 100644 --- a/packages/auto_mappr/lib/src/extensions/expression_extension.dart +++ b/packages/auto_mappr/lib/src/extensions/expression_extension.dart @@ -10,7 +10,7 @@ extension ExpressionExtension on Expression { required bool forceCast, required bool isOnNullable, }) { - if (((!source.isDartCoreList && !source.isSpecializedListType) || forceCast) && target.isDartCoreList) { + if (((!source.isDartCoreList && !source.isSpecializedIntListType) || forceCast) && target.isDartCoreList) { return maybeProperty('toList', isOnNullable: isOnNullable).call([]); } @@ -18,7 +18,7 @@ extension ExpressionExtension on Expression { return maybeProperty('toSet', isOnNullable: isOnNullable).call([]); } - if ((source.isDartCoreList || forceCast) && target.isSpecializedListType) { + if ((source.isDartCoreList || forceCast) && target.isSpecializedIntListType) { return EmitterHelper.current .typeRefer(type: target, withNullabilitySuffix: false) .property('fromList') diff --git a/packages/auto_mappr/lib/src/models/source_assignment.dart b/packages/auto_mappr/lib/src/models/source_assignment.dart index 5f419696..43fa65a1 100644 --- a/packages/auto_mappr/lib/src/models/source_assignment.dart +++ b/packages/auto_mappr/lib/src/models/source_assignment.dart @@ -1,5 +1,4 @@ -//ignore_for_file: prefer-match-file-name -// ignore_for_file: prefer-single-declaration-per-file +// ignore_for_file: prefer-match-file-name, prefer-single-declaration-per-file import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; @@ -48,8 +47,12 @@ class SourceAssignment { }); bool canAssignIterable() { + final isCoreIterable = _isCoreIterable(targetType); + final isSpecializedIntList = targetType.isSpecializedIntListType; + final isMappableIterable = _isMappableIterable(sourceType!); + // The source can be mapped to the target, if the source is mappable object and the target is an iterable. - return (_isCoreIterable(targetType) || targetType.isSpecializedListType) && _isMappableIterable(sourceType!); + return (isCoreIterable || isSpecializedIntList) && isMappableIterable; } bool canAssignMap() { diff --git a/packages/auto_mappr/pubspec.yaml b/packages/auto_mappr/pubspec.yaml index e19b509b..a05b0fe4 100644 --- a/packages/auto_mappr/pubspec.yaml +++ b/packages/auto_mappr/pubspec.yaml @@ -19,8 +19,8 @@ dependencies: built_collection: ^5.1.1 code_builder: ^4.4.0 collection: ^1.17.0 - equatable: ^2.0.5 - get_it: ^7.6.4 + equatable: ^2.0.7 + get_it: ^8.0.0 meta: ^1.8.0 path: ^1.8.2 source_gen: ^1.2.6 diff --git a/packages/auto_mappr/test/integration/iterable_test.dart b/packages/auto_mappr/test/integration/iterable_test.dart index 518b8961..47ebba00 100644 --- a/packages/auto_mappr/test/integration/iterable_test.dart +++ b/packages/auto_mappr/test/integration/iterable_test.dart @@ -128,7 +128,7 @@ void main() { expect( converted, - equals(fixture.IterableHolder([1, 2, 3, 4, 5].where((_) => true))), + equals(const fixture.IterableHolder({1, 2, 3, 4, 5})), ); }); }); @@ -154,7 +154,7 @@ void main() { expect( converted, - equals(fixture.IterableHolder([1, 2, 3, 4, 5].where((_) => true))), + equals(const fixture.IterableHolder([1, 2, 3, 4, 5])), ); }); }); From 3a4366a49cb3116a0984fc2bdc79a58c048354a3 Mon Sep 17 00:00:00 2001 From: Honza Bittner Date: Thu, 23 Jan 2025 10:54:04 +0100 Subject: [PATCH 11/12] Fix lints --- examples/json_serializable/pubspec.yaml | 2 +- .../example/lib/mappr.auto_mappr.dart | 22 +++++++++---------- .../assignments/nested_object_mixin.dart | 4 ++-- .../map_model_body_method_builder.dart | 8 +++---- .../private_convert_method_builder.dart | 1 + .../methods/safe_convert_method_builder.dart | 1 + .../try_convert_iterable_method_builder.dart | 1 + .../methods/try_convert_method_builder.dart | 1 + .../src/builder/value_assignment_builder.dart | 9 +++++--- .../executable_element_extension.dart | 2 +- .../test/integration/fixture/rename.dart | 1 + .../fixture/selecting_constructor.dart | 1 + .../integration/fixture/type_converters.dart | 2 +- 13 files changed, 32 insertions(+), 23 deletions(-) diff --git a/examples/json_serializable/pubspec.yaml b/examples/json_serializable/pubspec.yaml index 342fbd9b..c0fbefdf 100644 --- a/examples/json_serializable/pubspec.yaml +++ b/examples/json_serializable/pubspec.yaml @@ -9,7 +9,7 @@ resolution: workspace dependencies: auto_mappr_annotation: ^2.3.0 - json_annotation: ^4.8.1 + json_annotation: ^4.9.0 dev_dependencies: auto_mappr: ^2.6.0 diff --git a/packages/auto_mappr/example/lib/mappr.auto_mappr.dart b/packages/auto_mappr/example/lib/mappr.auto_mappr.dart index bd23fe64..2c795868 100644 --- a/packages/auto_mappr/example/lib/mappr.auto_mappr.dart +++ b/packages/auto_mappr/example/lib/mappr.auto_mappr.dart @@ -11,7 +11,7 @@ import 'package:auto_mappr_annotation/auto_mappr_annotation.dart' as _i1; import 'mappr.dart' as _i2; -/// {@template asset:auto_mappr/example/lib/mappr.dart} +/// {@template package:auto_mappr_example/mappr.dart} /// Available mappings: /// - `UserDto` → `User`. /// - `UserDto` → `AnotherUser`. @@ -24,7 +24,7 @@ class $Mappr implements _i1.AutoMapprInterface { List<_i1.AutoMapprInterface> get _delegates => const []; /// {@macro AutoMapprInterface:canConvert} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override bool canConvert({bool recursive = true}) { final sourceTypeOf = _typeOf(); @@ -52,7 +52,7 @@ class $Mappr implements _i1.AutoMapprInterface { } /// {@macro AutoMapprInterface:convert} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override TARGET convert(SOURCE? model) { if (canConvert(recursive: false)) { @@ -68,7 +68,7 @@ class $Mappr implements _i1.AutoMapprInterface { } /// {@macro AutoMapprInterface:tryConvert} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override TARGET? tryConvert( SOURCE? model, { @@ -94,7 +94,7 @@ class $Mappr implements _i1.AutoMapprInterface { } /// {@macro AutoMapprInterface:convertIterable} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override Iterable convertIterable(Iterable model) { if (canConvert(recursive: false)) { @@ -113,7 +113,7 @@ class $Mappr implements _i1.AutoMapprInterface { /// /// When an item in the source iterable is null, uses `whenSourceIsNull` if defined or null /// - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override Iterable tryConvertIterable( Iterable model, { @@ -137,7 +137,7 @@ class $Mappr implements _i1.AutoMapprInterface { } /// {@macro AutoMapprInterface:convertList} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override List convertList(Iterable model) { if (canConvert(recursive: false)) { @@ -156,7 +156,7 @@ class $Mappr implements _i1.AutoMapprInterface { /// /// When an item in the source iterable is null, uses `whenSourceIsNull` if defined or null /// - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override List tryConvertList( Iterable model, { @@ -182,7 +182,7 @@ class $Mappr implements _i1.AutoMapprInterface { } /// {@macro AutoMapprInterface:convertSet} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override Set convertSet(Iterable model) { if (canConvert(recursive: false)) { @@ -201,7 +201,7 @@ class $Mappr implements _i1.AutoMapprInterface { /// /// When an item in the source iterable is null, uses `whenSourceIsNull` if defined or null /// - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override Set tryConvertSet( Iterable model, { @@ -277,7 +277,7 @@ class $Mappr implements _i1.AutoMapprInterface { } /// {@macro AutoMapprInterface:useSafeMapping} - /// {@macro asset:auto_mappr/example/lib/mappr.dart} + /// {@macro package:auto_mappr_example/mappr.dart} @override bool useSafeMapping() { return false; diff --git a/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart b/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart index aa12c661..77560c79 100644 --- a/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart +++ b/packages/auto_mappr/lib/src/builder/assignments/nested_object_mixin.dart @@ -61,8 +61,8 @@ mixin NestedObjectMixin on AssignmentBuilderBase { // Unknown mapping. if (nestedMapping == null) { - final sourceParentClass = assignment.sourceField?.enclosingElement.name; - final targetParentClass = assignment.targetField?.enclosingElement.name; + final sourceParentClass = assignment.sourceField?.enclosingElement3.name; + final targetParentClass = assignment.targetField?.enclosingElement3.name; final enclosingMappingMessage = "Parent mapping holding this is '$sourceParentClass' -> '$targetParentClass'"; if (target.isNullable) { diff --git a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart index b30ca485..59d51523 100644 --- a/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/map_model_body_method_builder.dart @@ -69,10 +69,10 @@ class MapModelBodyMethodBuilder { final ifBodyExpression = mapping.hasWhenNullDefault() ? mapping.whenSourceIsNullExpression!.returned : refer('Exception').newInstance([ - refer( - "r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. '\n" - "r'Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.'", - ), + refer(""" +r'Mapping $mapping failed because ${mapping.source} was null, and no default value was provided. '\n +r'Consider setting the whenSourceIsNull parameter on the MapType<${mapping.source}, ${mapping.target}> to handle null values during mapping.' + """), ]).thrown; // Generates code like: diff --git a/packages/auto_mappr/lib/src/builder/methods/private_convert_method_builder.dart b/packages/auto_mappr/lib/src/builder/methods/private_convert_method_builder.dart index 30f40fa4..35bad897 100644 --- a/packages/auto_mappr/lib/src/builder/methods/private_convert_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/methods/private_convert_method_builder.dart @@ -22,6 +22,7 @@ class PrivateConvertMethodBuilder extends MethodBuilderBase { ..optionalParameters.add( Parameter( (p) => p + // ignore: avoid-late-final-reassignment, false positive ..name = 'canReturnNull' ..type = refer('bool') ..named = true diff --git a/packages/auto_mappr/lib/src/builder/methods/safe_convert_method_builder.dart b/packages/auto_mappr/lib/src/builder/methods/safe_convert_method_builder.dart index f38c8b7f..ee48cf48 100644 --- a/packages/auto_mappr/lib/src/builder/methods/safe_convert_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/methods/safe_convert_method_builder.dart @@ -21,6 +21,7 @@ class SafeConvertMethodBuilder extends MethodBuilderBase { ..optionalParameters.add( Parameter( (p) => p + // ignore: avoid-late-final-reassignment, false positive ..name = 'onMappingError' ..type = refer('void Function(Object error, StackTrace stackTrace, SOURCE? source)?') ..named = true, diff --git a/packages/auto_mappr/lib/src/builder/methods/try_convert_iterable_method_builder.dart b/packages/auto_mappr/lib/src/builder/methods/try_convert_iterable_method_builder.dart index ddc97e49..a685ddcb 100644 --- a/packages/auto_mappr/lib/src/builder/methods/try_convert_iterable_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/methods/try_convert_iterable_method_builder.dart @@ -44,6 +44,7 @@ class TryConvertIterableMethodBuilder extends MethodBuilderBase { ..optionalParameters.add( Parameter( (p) => p + // ignore: avoid-late-final-reassignment, false positive ..name = 'onMappingError' ..type = refer('void Function(Object error, StackTrace stackTrace, SOURCE? source)?') ..named = true, diff --git a/packages/auto_mappr/lib/src/builder/methods/try_convert_method_builder.dart b/packages/auto_mappr/lib/src/builder/methods/try_convert_method_builder.dart index 2b03900d..dd06079a 100644 --- a/packages/auto_mappr/lib/src/builder/methods/try_convert_method_builder.dart +++ b/packages/auto_mappr/lib/src/builder/methods/try_convert_method_builder.dart @@ -28,6 +28,7 @@ class TryConvertMethodBuilder extends MethodBuilderBase { ..optionalParameters.add( Parameter( (p) => p + // ignore: avoid-late-final-reassignment, false positive ..name = 'onMappingError' ..type = refer('void Function(Object error, StackTrace stackTrace, SOURCE? source)?') ..named = true, diff --git a/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart b/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart index 013d8714..b4b961ef 100644 --- a/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart +++ b/packages/auto_mappr/lib/src/builder/value_assignment_builder.dart @@ -39,9 +39,11 @@ class ValueAssignmentBuilder { final rightSide = (sourceField.isStatic // Static field. ? EmitterHelper.current - .refer(sourceField.enclosingElement.name!, sourceField.enclosingElement.library?.identifier) + // ignore: avoid-non-null-assertion, should be ok + .refer(sourceField.enclosingElement3.name!, sourceField.enclosingElement3.library?.identifier) // Non static field. - : refer(sourceField.isStatic ? '${sourceField.enclosingElement.name}' : 'model')) + // ignore: avoid-nullable-interpolation, should be ok + : refer(sourceField.isStatic ? '${sourceField.enclosingElement3.name}' : 'model')) .property(sourceField.name); final assignmentBuilders = [ @@ -112,7 +114,8 @@ class ValueAssignmentBuilder { false; if (shouldIgnoreNull && isSourceNullable && !isTargetNullable) { - return refer(sourceField.isStatic ? '${sourceField.enclosingElement.name}' : 'model') + // ignore: avoid-nullable-interpolation, should be ok + return refer(sourceField.isStatic ? '${sourceField.enclosingElement3.name}' : 'model') .property(sourceField.name) .nullChecked; } diff --git a/packages/auto_mappr/lib/src/extensions/executable_element_extension.dart b/packages/auto_mappr/lib/src/extensions/executable_element_extension.dart index 319876b5..9d718c59 100644 --- a/packages/auto_mappr/lib/src/extensions/executable_element_extension.dart +++ b/packages/auto_mappr/lib/src/extensions/executable_element_extension.dart @@ -6,5 +6,5 @@ extension ExecutableElementExtension on ExecutableElement { // This could result in the expression being `.someFunction()` which is invalid. // Therefore, we only add the enclosing element's display name if it is not empty. String get referCallString => - isStatic && enclosingElement.displayName != '' ? '${enclosingElement.displayName}.$displayName' : displayName; + isStatic && enclosingElement3.displayName != '' ? '${enclosingElement3.displayName}.$displayName' : displayName; } diff --git a/packages/auto_mappr/test/integration/fixture/rename.dart b/packages/auto_mappr/test/integration/fixture/rename.dart index 42bb5290..9d1c815c 100644 --- a/packages/auto_mappr/test/integration/fixture/rename.dart +++ b/packages/auto_mappr/test/integration/fixture/rename.dart @@ -321,6 +321,7 @@ class NoConstructorWithLateDto { const NoConstructorWithLateDto({required this.value, required this.secondValue}); } +// ignore: must_be_immutable, ok in tests class NoConstructorWithLate with EquatableMixin { // ignore: avoid-unassigned-late-fields, will be set using Mappr late int alpha; diff --git a/packages/auto_mappr/test/integration/fixture/selecting_constructor.dart b/packages/auto_mappr/test/integration/fixture/selecting_constructor.dart index f3fbcff5..bd584491 100644 --- a/packages/auto_mappr/test/integration/fixture/selecting_constructor.dart +++ b/packages/auto_mappr/test/integration/fixture/selecting_constructor.dart @@ -50,6 +50,7 @@ class FinalTarget with EquatableMixin { b = null; } +// ignore: must_be_immutable, ok in tests class NonFinalTarget with EquatableMixin { int? a; int? b; diff --git a/packages/auto_mappr/test/integration/fixture/type_converters.dart b/packages/auto_mappr/test/integration/fixture/type_converters.dart index 2f034b59..a881f372 100644 --- a/packages/auto_mappr/test/integration/fixture/type_converters.dart +++ b/packages/auto_mappr/test/integration/fixture/type_converters.dart @@ -1,4 +1,4 @@ -// ignore_for_file: prefer-named-boolean-parameters, avoid_positional_boolean_parameters +// ignore_for_file: avoid_positional_boolean_parameters import 'package:auto_mappr_annotation/auto_mappr_annotation.dart'; import 'package:equatable/equatable.dart'; From bd61091832076e7b69cc11592aaa32e1ab377e35 Mon Sep 17 00:00:00 2001 From: Honza Bittner Date: Thu, 23 Jan 2025 10:57:38 +0100 Subject: [PATCH 12/12] Fix deprecated warnings --- .../auto_mappr/lib/src/extensions/dart_type_extension.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart b/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart index 8e99faee..0cf84334 100644 --- a/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart +++ b/packages/auto_mappr/lib/src/extensions/dart_type_extension.dart @@ -29,6 +29,7 @@ extension DartTypeExtension on DartType { final thisType = this; if (thisType is! InterfaceType) return false; + // ignore: deprecated_member_use, for now use this - w/o this it fails return thisType.allSupertypes.any((i) => i.getDisplayString(withNullability: false) == 'List'); } @@ -51,7 +52,9 @@ extension DartTypeExtension on DartType { // } // Name matches. + // ignore: deprecated_member_use, for now use this - w/o this it fails final thisName = getDisplayString(withNullability: withNullability); + // ignore: deprecated_member_use, for now use this - w/o this it fails final otherName = other.getDisplayString(withNullability: withNullability); final isSameName = thisName == otherName;