Skip to content

feat(generator): implement Phase 1 DynamoMapper source generator with attribute-based mapping#7

Merged
j-d-ha merged 103 commits intomainfrom
feature/basic-mapper
Jan 7, 2026
Merged

feat(generator): implement Phase 1 DynamoMapper source generator with attribute-based mapping#7
j-d-ha merged 103 commits intomainfrom
feature/basic-mapper

Conversation

@j-d-ha
Copy link
Collaborator

@j-d-ha j-d-ha commented Dec 25, 2025

🚀 Pull Request

📋 Summary

This PR implements the foundational Phase 1 functionality of the DynamoMapper source generator, providing compile-time code generation for mapping between .NET domain models and DynamoDB AttributeValue dictionaries. The implementation follows a convention-first, attribute-based approach with zero runtime reflection.

Key Features:

  • Incremental source generator using Roslyn's IIncrementalGenerator API
  • Scriban-based template engine for generating ToItem and FromItem methods
  • Support for scalar types (primitives, DateTime, DateTimeOffset, TimeSpan, Guid, enums, and nullable versions)
  • Custom enum format support with configurable string formats
  • Property-level requiredness and omit options for flexible null/empty handling
  • Lifecycle hooks (BeforeToItem, AfterToItem, BeforeFromItem, AfterFromItem) for customization
  • Comprehensive runtime extensions for AttributeValue conversions
  • Snapshot testing with Verify.SourceGenerators
  • Central package management and multi-targeted test support (net8.0, net9.0, net10.0)

Architecture Highlights:

  • Clean separation between generator (netstandard2.0) and runtime packages
  • Functional error handling with Result<T> and DiagnosticInfo types
  • Well-known type caching for efficient Roslyn symbol resolution
  • Culture-safe numeric conversions (InvariantCulture)
  • Domain models remain clean (no attributes required on POCOs)
  • Enhanced diagnostics system with detailed error reporting
  • Optimized PropertyInfo generation with streamlined nullable type handling

Recent Enhancements:

  • Custom Enum Formats: Support for custom string formats when mapping enums to/from AttributeValues
  • Requiredness & Omit Options: Granular control over required properties and omitting null/empty values
  • Enhanced Diagnostics: Improved error messages and streamlined diagnostic reporting
  • Method Signature Generation: More flexible method signature generation and parameter handling
  • 🔧 Simplified Dictionary Handling: Cleaner checks for Dictionary<string, AttributeValue> types
  • 🔧 Nullable Handling: Unified approach to nullable and non-nullable attribute handling
  • 🔧 Performance: Reduced allocations and optimized string handling in runtime extensions

✅ Checklist

  • My changes build cleanly
  • I've added/updated relevant tests
  • I've added/updated documentation or README
  • I've followed the coding style for this project
  • I've tested the changes locally (if applicable)
  • Snapshot tests verify all generation scenarios
  • Multi-framework testing (net8.0, net9.0, net10.0)

🧪 Testing

Snapshot Tests:

  • Basic type mapping (strings, numbers, booleans, dates, GUIDs)
  • Nullable type variants for all supported types
  • Enum mapping with custom formats
  • Init-only properties
  • Custom method prefixes (ToX, FromX)
  • Property omission and requiredness scenarios

Example Project:

  • Real-world usage demonstration with Product domain model
  • Lifecycle hooks for single-table pattern (pk/sk composition)
  • Custom attribute additions (recordType, TTL)
  • Manual mapper usage examples

Test Coverage:

  • Generator: Comprehensive snapshot testing with Verify.SourceGenerators
  • Runtime: Unit tests for AttributeValue extension methods
  • Integration: Example project validates end-to-end functionality

📊 Impact

Lines Changed: ~4,700+ additions across 63 files

Key Files:

  • DynamoMapperGenerator.cs: Core incremental generator orchestration
  • MapperSyntaxProvider.cs: Roslyn syntax analysis and metadata extraction
  • MapperClassInfo.cs & ModelClassInfo.cs: Mapper and model metadata structures
  • PropertyInfo.cs: Property-level configuration with requiredness and omit options
  • AttributeValueExtensions.cs: 1,600+ lines of runtime helpers for type conversions
  • Mapper.scriban: Template for generating ToItem/FromItem implementations
  • WellKnownTypes.cs: Cached type resolution for common .NET and AWS types

🔍 Areas for Review

Critical Components:

  1. Template Logic (Templates/Mapper.scriban): Review the generated code structure for ToItem/FromItem methods
  2. Type Resolution (ModelClassInfo.cs, WellKnownTypes.cs): Verify type mapping logic covers all Phase 1 scenarios
  3. Diagnostics (Diagnostics/): Ensure error messages are clear and actionable
  4. Runtime Extensions (AttributeValueExtensions.cs): Check null handling, culture safety, and enum format support
  5. PropertyInfo Generation: Validate requiredness and omit option handling

Design Decisions to Validate:

  • Extension method naming conventions (Get*/Set* for AttributeValue)
  • Lifecycle hook signatures and partial method approach
  • Scriban template organization and readability
  • Error handling strategy (Result vs exceptions in generator)
  • Dictionary key naming convention handling (camelCase vs PascalCase)

🚀 Next Steps (Future PRs)

Phase 1 Completion:

  • Additional diagnostics per Phase 1 specification
  • Performance benchmarking suite
  • NuGet package preparation and publishing workflow
  • Documentation site refinements

Phase 2 Planning:

  • Fluent DSL configuration API
  • Nested object support
  • Collection mapping (lists, sets, maps)
  • Advanced customization scenarios

💬 Notes for Reviewers

This PR represents the culmination of iterative development with 35+ commits refining the generator architecture, runtime helpers, and testing strategy. The implementation prioritizes:

  • Zero runtime reflection for maximum performance
  • Compile-time safety with Roslyn diagnostics
  • Developer experience with convention-first defaults
  • Extensibility through lifecycle hooks
  • Maintainability with functional error handling and comprehensive tests

The code is production-ready for Phase 1 scenarios (scalar type mapping with attribute-based configuration). All tests pass across net8.0, net9.0, and net10.0 target frameworks.


📝 Related Documentation

- Added a new project `DynamoMapper.SimpleExample` to demonstrate usage.
- Updated solution file to include the new example project.
- Added `.editorconfig` for consistent code formatting.
- Updated `.gitignore` to ignore user-specific settings files.
… file consistency

- Added `Directory.Packages.props` for centralized NuGet package version management.
- Enabled `ManagePackageVersionsCentrally` and transitive pinning for all projects.
- Simplified and standardized package references across all project files.
- Added `ModuleInitializer.cs` to initialize VerifySourceGenerators for tests.
- Adjusted `.csproj` files to remove version specifications where central management applies.
…nerator

- Added `DynamoMapperGenerator` with a basic setup as an incremental source generator.
- Updated project files to include `Microsoft.CodeAnalysis.Common` and `Microsoft.CodeAnalysis.CSharp`.
- Enhanced test project with references for testing source generators and added `Verify.SourceGenerators`.
- Refactored unit test to `SimpleVerifyTests` to include a basic source generator verification example.
- Added `GeneratorTestHelpers` and `VerifyTestOptions` for consistent and reusable source generator test utilities.
- Updated `Directory.Packages.props` with required dependencies for code analysis and verification tools.
…ibute mapping

- Expanded `Program.cs` to include comprehensive DynamoDB `AttributeValue` mapping examples.
- Added a POCO class (`ExampleEntity`) with properties demonstrating various type mappings.
- Introduced enums (`Status`, `Priority`, `OrderStatus`) for example use cases.
- Included `AWSSDK.DynamoDBv2` package reference in `DynamoMapper.SimpleExample.csproj`.
…ctionality

- Introduced `MapperSyntaxProvider` for attribute-based class parsing and mapping extraction.
- Added `GeneratorConstants` and `TrackingName` classes to manage constants and tracking names.
- Updated `DynamoMapperGenerator` with logic for extracting and filtering mapping information.
- Expanded project dependencies to include `Microsoft.CodeAnalysis.CSharp`.
- Enhanced test helpers to support `DynamoMapper.Generator` namespace for testing.
- Added `DiagnosticInfo` and `MapperAndDiagnosticInfo` models for detailed error reporting and handling.
- Implemented new extension methods for `IncrementalValueProvider` and `IEnumerable` to improve processing.
- Created `MapperOutputGenerator` to streamline mapper code generation logic.
- Updated `DynamoMapperGenerator` to include source output registrations for diagnostics and mappers.
- Added `DiagnosticProvider` for building diagnostic information alongside mapper data.
- Extended project references and dependencies for enhanced functionality and compatibility.
- Improved `GeneratorTestHelpers` for more flexible and robust unit testing of source generators.
- Enhanced tests to handle diagnostic outputs and additional mapper validations.
- Introduced `GeneratedCode` attribute to annotate generated mappers with generator metadata.
- Utilized `Assembly.GetExecutingAssembly` to include generator name and version in the attribute.
…ions

- Introduced `Pipe` method to streamline functional transformations.
- Added `Mutate` method to apply in-place modifications and return the source.
…urce generation

- Introduced `WellKnownTypes` for efficient retrieval and caching of known type symbols.
- Added `BoundedCacheWithFactory` to manage a bounded weak-reference cache for analyzer performance.
- Created `WellKnownTypeData` to define and map well-known types used in generator logic.
- Incorporated a `THIRD-PARTY-LICENSES.txt` file to document and acknowledge third-party dependencies.
- Updated `MapperSyntaxProvider` to support parsing `ToItem` and `FromItem` mapper methods.
- Ensured mapper methods follow consistent rules for POCO types and method signatures.
- Integrated additional validation logic for `WellKnownTypes` with DynamoDB modeling support.
- Refactored `MapperInfo` to include class metadata and model type for mapper generation.
- Enhanced test cases to validate new mapper syntax rules and diagnostics.
…ception

- Updated `MapperSyntaxProvider` to include namespace and method signatures in `MapperInfo`.
- Added `GetMethodSignature` to extract detailed method signature display.
- Refactored `MapperInfo` for improved metadata handling.
- Introduced `DiagnosticException` to encapsulate diagnostic info and streamline error handling.
- Enhanced `SimpleVerifyTests` with namespace inclusion for test cases.
- Updated `DynamoMapper.SimpleExample` to include additional partial method declarations.
…odel details

- Replaced `ClassName`, `ClassAccessibility`, and `ClassNamespace` with `MapperClassInfo`.
- Introduced `ModelClassInfo` to encapsulate model type details in `MapperInfo`.
- Updated `MapperSyntaxProvider` to reflect the restructured `MapperInfo` and return updated values.
- Enhanced maintainability and clarity of mapper metadata representation.
…per generation

- Introduced `MapperClassInfo`, `ModelClassInfo`, and related extensions for streamlined mapper generation.
- Migrated mapper metadata extraction logic to `GeneratorContext` for improved modularity and reuse.
- Introduced new extensions for `IncrementalValueProvider` and `IEnumerable` to enhance collection processing.
- Refactored `MapperSyntaxProvider` to leverage new utilities and improve maintainability.
- Added `ModelPropertyInfo` for handling model property metadata extraction.
- Updated existing utilities to ensure compliance with naming conventions and extensibility.
…ity checks

- Introduced `SymbolExtensions` to enhance property symbol analysis in source generation.
- Added methods to check if a property is assignable from/to a type or both.
…s for `ExampleEntity`

- Added `ToItem` method to map `ExampleEntity` properties to DynamoDB attribute values.
- Introduced `FromItem` method to populate `ExampleEntity` from DynamoDB item attributes.
- Utilized `CultureInfo.InvariantCulture` for consistent formatting of numeric and date-time values.
- Enhanced support for nullable, enum, and complex types in serialization and deserialization.
- Updated `DynamoMapper.SimpleExample` to showcase improved mapper functionality.
…or reporting

- Introduced `Diagnostics` for centralized diagnostic descriptor creation.
- Added `Result` and `DiagnosticResult` classes for structured result management.
- Enhanced `SymbolExtensions` with assignability methods using `WellKnownType`.
- Implemented `BuildFromItemMapping` in `ModelPropertyInfo` to support type-conversion validation.
- Updated `WellKnownTypeData` to include `System.String` for type validation.
- Added `TemplateHelper` for loading, caching, and rendering Scriban templates.
- Introduced `.scriban` templates for `ToItem` and `FromItem` mapper methods.
- Updated `MapperEmitter` to utilize templates for code generation.
- Enhanced error handling and validation for template-based mapper generation.
- Refactored `MapperOutputGenerator` to `MapperEmitter` for semantic clarity.
- Refactored property symbol processing to consolidate null checks and optimize conditions.
- Enhanced `BuildFromItemMapping` to support comprehensive type conversion diagnostics.
- Introduced aggregation for successful mappings and diagnostics for improved clarity.
- Updated nullable type mappings with explicit assignments for better generated code quality.
- Added handling for nullable `TimeSpan` and improved switch-case consistency.
- Enhanced `Mapper.scriban` template to support null checks and streamlined method signatures.
- Introduced `GeneratedCodeAttribute` in mapper templates for improved metadata accuracy.
- Added `Diagnostics` to `MapperInfo` for centralized error and warning management.
- Fixed property typo (`PropertieAssignments` to `PropertiedAssignments`) for consistency.
- Updated nullable type mapping to include consistent comma placement in assignments.
- Added utility extension for `List<T>.Add` method to facilitate chaining operations.
- Updated `Mapper.scriban` template to streamline partial method signatures.
- Modified `MapperEmitter` to generate files based on mapper class names for clarity.
- Enhanced test helpers with line scrubbing for consistent snapshot verification.
- Added folder inclusion for snapshot management in test project.
- Introduced `RegexHelper` with auto-generated regex support for attribute replacement.
…n mappings

- Removed `ModelPropertyInfo` and its related extensions in favor of a more streamlined approach.
- Added support for nullable enums in type mappings to enhance deserialization flexibility.
- Updated test cases to verify comprehensive type handling, including nullable enums.
- Modified `ExampleEntity` in the example project to reflect updated property definitions.
- Removed `DiagnosticsProvider` in favor of direct integration of diagnostic handling in `MapperEmitter`.
- Streamlined `MapperClassInfo` by removing unused properties (`FullyQualifiedType`, `Accessibility`).
- Introduced `MapperAndDiagnosticInfo` for combined mapper and diagnostic metadata representation.
- Refined diagnostic descriptors in `Diagnostics` for clearer error and warning messages.
- Consolidated diagnostic reporting and mapper generation logic in `DynamoMapperGenerator`.
…ue conversions

- Refactored `AttributeValueExtensions` to improve readability using multi-line formatting.
- Added `ToAttributeValue` and `ToNullableAttributeValue` extension methods for common types.
- Introduced extensions for strings, booleans, numeric types, GUIDs, DateTime, and TimeSpan.
- Used `CultureInfo.InvariantCulture` for consistent formatting across numeric and datetime values.
- Introduced `SetString` and `SetNullableString` for setting string values in the attribute dictionary.
- Added `SetBool` and `SetNullableBool` to support boolean attribute manipulation.
- Implemented setters for numeric types, including `SetInt`, `SetLong`, `SetFloat`, `SetDecimal`, and nullable variants.
- Added support for `Guid`, `DateTime`, `DateTimeOffset`, and `TimeSpan` with nullable equivalents.
- Enabled fluent chaining for attribute dictionary manipulations.
… enhance `ModelClassInfo`

- Extended `Mapper.scriban` template with handling for properties in `ToItem` mapping generation.
- Added `ToAttributeAssignments` to `ModelClassInfo` for enabling attribute value creation.
- Implemented `BuildToItemMapping` for generating mappings to DynamoDB attribute values.
- Refactored `CollectModelClassInfo` to aggregate diagnostics and mappings for both `ToItem` and `FromItem`.
- Improved nullable and non-nullable type handling for consistent value transformations.
- Introduced `SetEnum` and `SetNullableEnum` for setting enum values in the attribute dictionary.
- Added `ToAttributeValue` and `ToNullableAttributeValue` extensions for enums and nullable enums.
- Enabled fluent chaining for enum attribute manipulations.
… simplify enum conversion

- Updated `Mapper.scriban` to initialize dictionaries with calculated capacity for efficiency.
- Modified `MapperEmitter` to pass `DictionaryCapacity` based on property assignments.
- Simplified enum-to-attribute conversions by removing unnecessary `ToString()` calls.
- Added `Simple_InitProperty` and `Simple_NoSetter` snapshot tests for mapper generation.
- Verified support for properties using `init` and ones with no setters in generated code.
- Ensured consistency in `DynamoMapper` output for various property configurations
- Modified `Mapper.scriban` to remove semicolon after the namespace statement for compatibility.
- Updated `MapperClassInfo` to include conditional namespace declaration based on its presence.
- Added a new example mapper `ExampleEntityMapper2` with partial mapping methods to the example project.
j-d-ha added 9 commits January 4, 2026 20:16
…ntations

- Consolidated `Set*` and `SetNullable*` methods into unified implementations.
- Simplified parameter handling by leveraging nullable type capabilities.
- Updated XML documentation to reflect the new method signatures.
- Consolidated `SetNullable*` methods into their respective `Set*` counterparts in generated code.
- Updated enum mapping to support nullable enums with default values in templates.
- Enhanced `PropertyInfo` to efficiently handle nullable and non-nullable type distinctions.
- Simplified attribute dictionary initialization and population for better readability.
- Removed redundant `GetNullableEnum` method from `AttributeValueExtensions`.
…etNullableString`

- Added `requiredness` parameter to `GetString` and `GetNullableString` for better nullability control.
- Updated both methods to handle DynamoDB NULL values more consistently.
- Introduced utility methods `GetNullableValue` and `TryGetValue` for streamlined attribute access.
- Updated XML documentation to reflect new method signatures and behavioral changes.
- Added `requiredness` parameter to all getter methods for fine-grained nullability control.
- Replaced redundant method bodies with expression-bodied members for cleaner implementation.
- Standardized handling of `IsNotNull` and `IsNull` checks across attribute processing methods.
- Updated XML documentation to reflect new method signatures and clarify behavior.
- Improved parsing logic for numeric, boolean, `Guid`, and `DateTime` attributes using culture-specific settings.
- Refactored nullable value handling to use `Map` utility for concise and reusable code.
…generation

- Introduced `requiredness` to support fine-grained control of property nullability in mappers.
- Added `omitEmptyStrings` and `omitNullStrings` options to streamline property assignment logic.
- Updated `Get` and `Set` methods in generated code to integrate new options for improved flexibility.
…ndling

- Refactored `GetMethodSignature` to consistently handle nullable parameter names and types.
- Added `ToMethodParameterName` and `FromMethodParameterName` properties to `MapperOptions`.
- Updated `PropertyInfo` to dynamically use context-defined parameter names.
- Improved error handling in `EnsurePocoTypesMatch` for clearer diagnostic results.
- Enhanced type symbol extensions to support nullable name formatting.
…tion

- Replaced full method body with an expression-bodied member for conciseness.
- Streamlined type checks and improved readability by removing intermediate return statements.
- Ensured consistent style in type validation logic.

refactor(generator): replace `Map` with `Tap` for method parameter handling

- Updated usage of `Map` to `Tap` in method parameter assignments for consistency.
- Refined parameter handling logic for better readability and alignment with project conventions.
…neration

- Added diagnostics for invalid mapper methods to improve error visibility.
- Introduced implicit operator for `DiagnosticResult` to simplify result creation.
- Refactored `PropertyInfo` generation to extract nullable type logic into `GetProps`.
- Enhanced property mapping with support for fine-grained options like `requiredness`, `omitEmptyStrings`,
  and `omitNullStrings`.
- Improved handling of nullable enums and other complex types for better mapper accuracy.
- Introduced `GetEnum` and `GetNullableEnum` with support for custom formats in parsing.
- Added `SetEnum` method to handle formatted enum value assignments.
- Enhanced XML documentation to detail supported formats and usage scenarios.
- Refactored existing enum handling logic for consistency and clarity.
@j-d-ha j-d-ha marked this pull request as ready for review January 6, 2026 14:39
j-d-ha added 3 commits January 6, 2026 10:54
…quiredness`

- Introduced `Set*` methods for numeric, DateTime, TimeSpan, Guid, and string attributes.
- Enhanced all `Get*` methods to support the `Requiredness` parameter for fine-grained nullability control.
- Added extensive new test cases for both `Set*` and `Get*` methods to validate behaviors.
- Improved handling of DynamoDB `NULL`, optional attributes, and missing keys across all types.
- Updated XML documentation to reflect updated method signatures and new behaviors.
…an up project file

- Replaced `<None>` reference with `<AnalyzerDependency>` for `Humanizer.dll` configuration.
- Commented out unused `None` configuration for better clarity and upkeep.
- Removed redundant `<PropertyGroup>` entry disabling PolySharp's `ModuleInitializerAttribute` shim.
- Refined `ItemGroup` formatting for `AdditionalFiles` to align with consistent style.
- Adjusted spacing in `GetTargetPathDependsOn` property for better readability.
…lity

- Updated `<None>` configuration for `Humanizer.Core` to enable packaging and specify visibility.
- Added `Humanizer.Core` as a dependency in test project with appropriate settings.
- Improved handling of analyzer dependencies and ensured consistent packaging behavior across projects.
Copy link
Contributor

@ncipollina ncipollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just left a few comments.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤔 I haven't decided, but I'm not sure I want this included in the repo.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wellll. I did just removed the stuff from it that was leftover from my project

- '.github/workflows/docs.yml'
pull_request:
branches: [ main ]
types: [ opened, synchronize, reopened, ready_for_review ]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❗️ I don't think this change was necessary. It didn't actually generate new docs on PRs.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I added this because it was not kicking off when it went from daft to ready for review.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❓I've been thinking about this and unlike Mapperly, you can only map from an object to a Dictionary and back. Does it make sense to have Diagnostic Descriptiors to validate/ensure this?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ya, I like that.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I messed around with this, and the problem is that the logic we use to determine what method we should be implementing is just returning a bool. If we want to return diagnostics for any methods that don't match our specific requirements, it could get messy. What if a user wanted another method on the mapper class? What are your thoughts on this?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm ok w/ leaving as is, additional methods just really don't make a whole lot of sense.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree. Maybe we add a story to come back and look at it again as an enhancement later?

j-d-ha added 4 commits January 6, 2026 14:49
- Removed detailed `<type>` and `<scope>` lists from PR template instructions for brevity.
- Simplified guidance on PR title format to
- Changed `<LangVersion>` from `preview` to `14` in `DynamoMapper.SimpleExample.csproj`.
- Ensures compatibility with stable language features in .NET 10.0 target framework.
- Updated `Map` method to support a generic return type for improved flexibility and reusability.
- Simplified `FunctionalExtensions` by consolidating overloaded definitions.
…djustments

- Replaced `HasSupportedSignature` with `IsToMethod` and `IsFromMethod` for better clarity.
- Simplified `MapperClassInfo` logic by leveraging specific validation methods.
- Changed `CreateWithDiagnostics` to private, restricting its accessibility.
- Adjusted example project mapper methods to use private visibility where appropriate.
ncipollina
ncipollina previously approved these changes Jan 7, 2026
Copy link
Contributor

@ncipollina ncipollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 Nice work. Approved. Left a few comments/questions, but otherwise looks good to me.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❓Does this need to be included?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the docs here, it's needed. If I leave it out, I get compilation warnings.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❓Does this need to be included?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as above.

j-d-ha added 4 commits January 7, 2026 08:24
- Deleted `WhereNotNull` extension for `IncrementalValuesProvider<T?>` where `T` is a struct.
- Ensures alignment with updated project conventions and avoids redundancy in nullable handling.
- Deleted `WhereNotNull` extensions for nullable structs and classes in `EnumerableExtensions`.
- Aligns with updated project conventions and removes duplication in nullable handling logic.
- Set `<EmbedUntrackedSources>` to true in `csproj` for better debugging support.
- Modified generator DLLs to be packaged into `analyzers` and `lib/netstandard2.0` folders.
- Updated `Runtime` project to set `<IsPackable>` to false, aligning with packaging conventions.
- Added `taskfile.yaml` for automated tasks like cleaning, restoring, building, and packaging.
- Enabled symbols and documentation generation in `Directory.Build.props`.
- Updated `String` property in `SimpleExample` to `required` for null safety improvements.
… and configuration

- Replaced `LayeredCraft.SourceGeneratorTools.Generator` with `LayeredCraft.SourceGeneratorTools`.
- Updated project references to include generator DLLs for analyzers and netstandard2.0 libraries.
- Adjusted `None` and `PackageReference` configurations for improved packaging consistency.
- Refined `GetDependencyTargetPaths` to include SourceGeneratorTools DLL configurations.
- Aligned test project file with updated `SourceGeneratorTools` packaging conventions.
Copy link
Contributor

@ncipollina ncipollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❓ What is this and why did you add it?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its like a makefile but better. Its just for automation of commands.

@j-d-ha j-d-ha merged commit 658fc6e into main Jan 7, 2026
3 checks passed
@j-d-ha j-d-ha deleted the feature/basic-mapper branch January 7, 2026 21:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants