-
-
Notifications
You must be signed in to change notification settings - Fork 0
fix: NestedSelectExprTest and update documentation #229
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…and remove .NET 9 specific warnings
…s and remove .NET 9+ recommendation
WalkthroughDocumentation updated to simplify beta warnings and clarify DTO placement flexibility. Test file restructured as partial class with forward partial DTO declarations and NET9.0_OR_GREATER guard removed, enabling unconditional compilation of NestedSelectExpr tests. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes
Possibly related issues
Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
tests/Linqraft.Tests/Issue207_NestedSelectExprTest.cs (1)
150-152: Public partial DTO declarations align with the test intent; verify they match generator outputDeclaring
NestedEntity207DtoandNestedItem207Dtoaspublic partialinside the test class is a good fit for:
- Exercising the “user‑defined partial DTO + generated part” scenario.
- Keeping these DTOs in the
Linqraft.Testsnamespace, as asserted later in the test.One thing to confirm: the source generator’s partial definitions for these DTOs must use the same accessibility (
public) and type shape, otherwise you’ll hit partial‑type accessibility mismatches. It might also be worth adding a short comment above these declarations indicating they’re stubs for the generator to avoid confusion for future readers.docs/library/nested-selectexpr.md (1)
154-159: Consider slightly clarifying “Anywhere you want” in the comparison tableThe updated
DTO Locationvalue (“Anywhere you want”) correctly reflects that DTOs are generated where you place the partial declarations, not in theLinqraftGenerated_HASHnamespace. You might consider a slightly more precise phrasing such as:
Wherever you declare the DTO partial (any namespace/class)to make it unambiguous that “anywhere” means “wherever the partial type lives”.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
docs/library/nested-selectexpr.md(3 hunks)tests/Linqraft.Tests/Issue207_NestedSelectExprTest.cs(2 hunks)
🧰 Additional context used
🧠 Learnings (10)
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Add test cases for source generators to `tests/Linqraft.Tests/`
Applied to files:
tests/Linqraft.Tests/Issue207_NestedSelectExprTest.csdocs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft/DummyExpression.cs : Do not edit `DummyExpression.cs`; it serves only as a marker for the Source Generator
Applied to files:
tests/Linqraft.Tests/Issue207_NestedSelectExprTest.csdocs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.Core/**/*.cs : Keep helper methods lightweight and focused; helper methods are called frequently during analysis
Applied to files:
tests/Linqraft.Tests/Issue207_NestedSelectExprTest.csdocs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.Core/**/*Helper.cs : Document complex helper methods with XML comments
Applied to files:
docs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.Core/**/*.cs : Cache expensive operations in helper methods when possible
Applied to files:
docs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.Analyzer/**/*Analyzer.cs : All new analyzers should inherit from `BaseLinqraftAnalyzer`
Applied to files:
docs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.{Analyzer,Core}/**/*.cs : Always prefer semantic analysis over string matching; use `RoslynTypeHelper` instead of string-based type checking
Applied to files:
docs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.Core/SyntaxHelpers/*.cs : Syntax helpers should be placed in `Linqraft.Core/SyntaxHelpers/` and named `*Helper.cs`
Applied to files:
docs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.{Analyzer,Core}/**/*.cs : Use `ISymbolEqualityComparer` for symbol comparisons in analyzer code
Applied to files:
docs/library/nested-selectexpr.md
📚 Learning: 2025-11-25T12:08:35.849Z
Learnt from: CR
Repo: arika0093/Linqraft PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T12:08:35.849Z
Learning: Applies to src/Linqraft.Core/RoslynHelpers/*.cs : Roslyn helpers should be placed in `Linqraft.Core/RoslynHelpers/` and named `Roslyn*Helper.cs`
Applied to files:
docs/library/nested-selectexpr.md
🧬 Code graph analysis (1)
tests/Linqraft.Tests/Issue207_NestedSelectExprTest.cs (1)
tests/Linqraft.Tests/Issue217_NestedSelectExprTest.cs (1)
Issue_NestedSelectExprTest(6-67)
🔇 Additional comments (3)
tests/Linqraft.Tests/Issue207_NestedSelectExprTest.cs (1)
11-11: Partial test class looks appropriate; just ensure multi-target builds still passMaking
Issue207_NestedSelectExprTestpartialis consistent with the pattern of letting generated/other partial definitions live alongside the hand-written part, and the unconditional[Fact]nicely drops the .NET 9–only restriction. Please just double‑check that all target frameworks you build for can still compile and run this test with the NestedSelectExpr generator enabled (no language-version or generator assumptions leaking in).docs/library/nested-selectexpr.md (2)
10-11: Beta warning wording is clear and actionableThe shortened beta note reads well and gives users a direct action (file an issue on GitHub). This is a good simplification without losing important context.
41-44: Expanded rationale for empty partials is helpful and technically accurateThe explanation of Roslyn treating undeclared DTOs as an unknown type and the resulting ambiguity in generation location very nicely justifies the “declare all DTO partials” requirement. This should significantly reduce confusion for users reading the docs.
* Fix: update Issue207_NestedSelectExprTest to support partial classes and remove .NET 9 specific warnings * Fix: update documentation for Nested SelectExpr to clarify beta status and remove .NET 9+ recommendation (cherry picked from commit 1aa5ec7)
* Fix: Remove parent class nesting from implicit DTOs in hash namespaces (#219) * Initial plan * Add test for issue: implicit DTOs should not be nested in parent class when using hash namespace Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Fix: Implicit DTOs should not be nested in parent class when using hash namespace Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> (cherry picked from commit dd2d380) * Fix nested SelectExpr inconsistency between playground and source generator (#221) * Initial plan * Add shared IsNestedInsideAnotherSelectExpr helper and use in playground and source generator Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Add comprehensive tests for nested SelectExpr consistency fix Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Remove tests for nested SelectExpr type verification --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> Co-authored-by: Arika Ishinami <delete0093@gmail.com> (cherry picked from commit a25737e) * docs: Add IntroductionSection component and improve accessibility (#223) * feat: add IntroductionSection component for query-based DTO generation * fix: add translate attribute to improve accessibility in playground components * refactor: remove custom animation definitions from tailwind.css (cherry picked from commit 2a039c0) * Fix nested SelectExpr code generation: parent class qualification, array types, and comment verbosity (#222) * Initial plan * Initial analysis of nested SelectExpr issues Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Fix Issues 1 and 3 for nested SelectExpr - Issue 2 still in progress Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Fix Issue 2 - array property types now correctly include [] suffix Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Refactor array type detection into helper method per code review Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Address PR review comments: rename test file, remove qualifiers with partial declarations, improve comments, extract method Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Clarify that partial class declarations are required for nested DTO generation Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> (cherry picked from commit a163791) * docs: separate README contents to other files (#224) (cherry picked from commit 29b0301) * Fix: set default value of settingsExpanded to false in Sidebar component (cherry picked from commit a34d686) * docs: add comprehensive documentation for Nested SelectExpr feature (cherry picked from commit 97439c9) * Revert "docs: add comprehensive documentation for Nested SelectExpr feature" This reverts commit 97439c9. (cherry picked from commit 755698c) * docs: add Nested SelectExpr documentation for reusable DTOs (#225) * docs: add Nested SelectExpr documentation for reusable DTOs * docs: update Nested SelectExpr documentation with important notes and usage requirements * upd * Fix GitHub Issue link in nested-selectexpr.md (cherry picked from commit 64b9787) * fix: NestedSelectExprTest and update documentation (#229) * Fix: update Issue207_NestedSelectExprTest to support partial classes and remove .NET 9 specific warnings * Fix: update documentation for Nested SelectExpr to clarify beta status and remove .NET 9+ recommendation (cherry picked from commit 1aa5ec7) * Document explicit class naming for nested DTOs Added section on explicit class naming in nested DTOs. (cherry picked from commit 1ddc079) * Enhance library comparison with GitHub stars Updated the library comparison table to include GitHub repository star counts for each library. (cherry picked from commit d875f80) * Update Docs link to point to library directory (cherry picked from commit 59498e4) * Refactor Order example to use records and facets Updated the example to use records and facets for Order and OrderChild. (cherry picked from commit c66f8b8) * Add pre-built expression tree caching for IQueryable operations (#234) * Initial plan * Add pre-built expression tree configuration and implementation - Added LinqraftUsePrebuildExpression configuration option (default: false) - Created ExpressionTreeBuilder helper class for generating cached expression fields - Updated SelectExprInfoAnonymous to use pre-built expressions when enabled - Updated SelectExprInfoNamed to use pre-built expressions when enabled - Updated SelectExprInfoExplicitDto to use pre-built expressions when enabled - Pre-built expressions only apply to IQueryable (not IEnumerable) - Pre-built expressions are disabled when captures are used Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Refactor static field generation to class level - Moved static field generation from method body to class level - Added GenerateStaticFields() virtual method to SelectExprInfo - Updated SelectExprGroups to collect and pass static fields - Updated GenerateSourceCodeSnippets to output static fields before methods - Fixed null reference warning in SelectExprGroups Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Complete pre-built expression tree implementation - Fixed CompilerVisibleProperty list to include LinqraftUsePrebuildExpression - Anonymous types cannot use pre-built expressions (result type is compiler-generated) - Pre-built expressions only work for named/predefined/explicit DTO types - Added comprehensive tests for IQueryable with different DTO patterns - All tests passing with pre-built expressions enabled Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Add LinqraftUsePrebuildExpression to all CompilerVisibleProperty lists - Updated examples/Directory.Build.props with new configuration property - Fixed playground/Services/CodeGenerationService.cs to use updated API signature - All projects now support the new LinqraftUsePrebuildExpression configuration Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Add LinqraftUsePrebuildExpression property to project files * Fix code generation issues per review feedback - Use 'var' instead of explicit type in expression initialization (line 93) - Remove unnecessary '!' null-forgiving operator when fieldName is not null - Fix indentation of generated multi-line lambda expressions - Use explicit Expression<> type instead of 'as' operator (lambdas cannot use 'as') Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Refactor to use direct expression initialization per review feedback - Updated documentation in global-properties.md for LinqraftUsePrebuildExpression - Added note about captures not supporting pre-built expressions - Refactored ExpressionTreeBuilder to directly initialize expression fields (no lazy init) - Removed GenerateNamedExpressionTreeInitialization and GenerateAnonymousExpressionTreeInitialization - Expression trees now initialized at field declaration, eliminating null checks - Updated SelectExprInfoNamed and SelectExprInfoExplicitDto to use new approach - Added test for multiple DTO types to verify pre-built expressions work correctly - All 6 tests passing Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Address final review feedback: readonly, indentation, remove test, add playground toggle - Added 'readonly' keyword to static expression fields for immutability - Fixed indentation: ensured proper line ending with AppendLine for multi-line expressions - Deleted Linqraft.Tests.Configuration project as requested - Removed project reference from Linqraft.slnx - Added toggle for LinqraftUsePrebuildExpression in playground Settings section - All tests passing (130/130) Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * revert: reset Linqraft.Tests.Configuration * Fix indentation in BuildExprCodeSnippets for static fields * Add static fields generation to expression code snippets * formatt --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> Co-authored-by: Arika Ishinami <delete0093@gmail.com> (cherry picked from commit 1761753) * chore(deps): bump stefanzweifel/git-auto-commit-action from 4 to 7 (#236) Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 4 to 7. - [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases) - [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md) - [Commits](stefanzweifel/git-auto-commit-action@v4...v7) --- updated-dependencies: - dependency-name: stefanzweifel/git-auto-commit-action dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 107f2d2) * Bump AutoMapper from 15.1.0 to 16.0.0 (#237) --- updated-dependencies: - dependency-name: AutoMapper dependency-version: 16.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 623b9fa) * feat: optimize DTO generation and performance documentation (#235) * Refactor GenerateDtoClasses method for improved readability and performance * Add caching for pre-built expressions in SelectExprInfoNamed * Refactor nullable access conversion to simplify default value handling * Update performance documentation to clarify benchmarks and improve readability * Update README to simplify performance and FAQ sections * Fix nullable type handling in GetDefaultValueForType method (cherry picked from commit 54005a1) * formatted (cherry picked from commit 11122cb) * chore: update commit message format for csharpier workflow (cherry picked from commit 735eb9f) * playground: enable ScrollBeyondLastLine and update StickyScroll options in EditorPane and PreviewPane (cherry picked from commit 9bc3057) * Deduplicate DTO class definitions globally across all generated files (#240) * Initial plan * Fix duplicate ChildDto generation for same-shaped nested DTOs in Select expressions Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Improve code comments based on review feedback Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Fix duplicate DTO class definitions by deduplicating at generation point Reverted changes to DtoProperty.cs and implemented deduplication in GenerateSourceCodeSnippets.BuildDtoCodeSnippetsGroupedByNamespace instead. This ensures DTOs with the same FullName (namespace + class name) are only generated once, even when used across multiple SelectExpr calls. Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Implement global DTO deduplication across all files - Collect all DTOs from all SelectExpr groups - Deduplicate globally by FullName before generation - Generate all DTOs in a single shared GeneratedDtos.g.cs file - Each expression group file now only contains expression methods - This ensures DTOs are not duplicated even when used across different files Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> * Refactor DTO generation based on code review feedback - Moved global DTO deduplication logic to GenerateSourceCodeSnippets.BuildGlobalDtoCodeSnippet - Separated SelectExprGroups.GenerateCode into two methods: GenerateCode and GenerateCodeWithoutDtos - Made GenerateCommentHeaderPart and GenerateHeaderFlagsPart public for cross-namespace use - Renamed test files to Issue239_* pattern for clarity - Updated playground CodeGenerationService to use new global DTO deduplication - Fixed null reference warning in playground service Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> (cherry picked from commit 16b287e) * refactor: DTO handling and improve code clarity (#216) * refactor: improve code structure and add documentation for auto-generated DTO attribute * refactor: rename ExportAll method to ExportAllConstantSnippets for clarity * refactor: replace hardcoded DTO attributes with a dedicated method for better maintainability * refactor: add EditorBrowsable attribute to internal DTO attributes for better visibility control (cherry picked from commit ae2ba5f) * fix --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: arika0093 <4524647+arika0093@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Update the
Issue207_NestedSelectExprTestto support partial classes and remove .NET 9 specific warnings. Revise documentation for Nested SelectExpr to clarify its beta status and eliminate the .NET 9+ recommendation.close #211
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.