Skip to content

first#467

Merged
ignatandrei merged 5 commits intomainfrom
lomapper
Apr 4, 2026
Merged

first#467
ignatandrei merged 5 commits intomainfrom
lomapper

Conversation

@ignatandrei
Copy link
Copy Markdown
Owner

@ignatandrei ignatandrei commented Apr 4, 2026

Summary by CodeRabbit

  • New Features

    • Added "lomapper" (more #265), a lightweight object mapper using compile-time source generation with zero runtime reflection.
  • Documentation

    • Added comprehensive documentation, example code, and usage guides for the new lomapper generator.
    • Updated site content to reflect the new total of 265 RSCG examples.

Copilot AI review requested due to automatic review settings April 4, 2026 07:00
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 4, 2026

Warning

Rate limit exceeded

@ignatandrei has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 13 minutes and 27 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 13 minutes and 27 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2985e556-a1cd-4717-91c5-722f3ed5cf31

📥 Commits

Reviewing files that changed from the base of the PR and between 1caec67 and e2d2b7d.

⛔ Files ignored due to path filters (1)
  • v2/rscg_examples_site/static/exports/RSCG.xlsx is excluded by !**/*.xlsx
📒 Files selected for processing (4)
  • v2/Generator/MultiGeneratorV2.cs
  • v2/RSCGExamplesData/GeneratorDataRec.json
  • v2/rscg_examples/lomapper/description.json
  • v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md
📝 Walkthrough

Walkthrough

This PR adds a new RSCG (Roslyn Source Code Generator) example for lomapper, a lightweight object mapper using compile-time source generation. It increments the total example count from 264 to 265, includes a complete working sample project with documentation, and updates all related indices, category lists, and website pages to reflect the new entry.

Changes

Cohort / File(s) Summary
Counter & Index Updates
README.md, later.md, v2/book/list.html, v2/rscg_examples_site/docs/about.md, v2/rscg_examples_site/docs/indexRSCG.md, v2/rscg_examples_site/src/components/HomepageFeatures/index.js
Updated RSCG example count from 264 to 265 and adjusted date from 2026-04-06 to 2026-04-07 across all index and display pages.
Generator Metadata & Configuration
v2/RSCGExamplesData/GeneratorDataRec.json, v2/rscg_examples/lomapper/description.json, v2/rscg_examples/lomapper/nuget.txt, v2/rscg_examples/lomapper/video.json, v2/book/pandocHTML.yaml
Added new generator entry metadata with ID "loMapper", category 6, and start date 2026-04-07T00:00:00. Extended Pandoc configuration to include lomapper HTML documentation.
Example Project Source Code
v2/rscg_examples/lomapper/src/mapperDemo.slnx, v2/rscg_examples/lomapper/src/mapperDemo/Person.cs, v2/rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs, v2/rscg_examples/lomapper/src/mapperDemo/Program.cs, v2/rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj
Created complete working demonstration project with Person and PersonDTO classes, a UserMapper using the [Mapper] annotation, and a sample Program.cs showing object mapping. Project configured for .NET 10.0 with LoMapper 0.4.0 dependency and compiler-generated file emission.
Documentation & Static Content
v2/book/examples/lomapper.html, v2/rscg_examples/lomapper/readme.txt, v2/rscg_examples_site/docs/Authors/Junaid_Desai.md, v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md
Added comprehensive HTML and markdown documentation describing lomapper features (case-insensitive matching, custom mapping, property ignoring, flattening, lifecycle hooks, collection mapping), diagnostics, benchmarks, and usage examples. Created author documentation and detailed feature documentation page.
Category & List Management
v2/rscg_examples_site/docs/RSCG-Examples/index.md, v2/rscg_examples_site/docs/Categories/Mapper.md, v2/rscg_examples_site/docs/Categories/_PrimitiveMapper.mdx, v2/rscg_examples_site/static/exports/RSCG.json
Updated Mapper category count from 9 to 10 examples, inserted lomapper as entry #265, shifted existing mapper entries accordingly, and added lomapper to the main RSCG export data file. Updated Mermaid flowchart to include lomapper node.
Interactive Guides
v2/.tours/lomapper.tour
Created CodeTour configuration guiding users through the lomapper example project, covering NuGet package installation, source/target type review, and generated output file inspection.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 A mapper hops in, brand new and bright,
From zero to two-sixty-five in flight!
With classes that dance and properties that gleam,
LoMapper joins the RSCG dream.
One more example, our warren's delight! 🎉

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The pull request title 'first' is vague and generic, providing no meaningful information about the changeset. It does not describe the actual changes being made. Replace the title with a specific, descriptive summary of the main change, such as 'Add lomapper RSCG example (#265)' or 'Add LoMapper Roslyn source generator example'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch lomapper

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds a new RSCG example for LoMapper (object mapping via source generators) to the v2 examples set, and updates the website/book/export artifacts to include it in the “Serializer” category and overall counts.

Changes:

  • Add a new lomapper example project (csproj + demo code) and its metadata (description/nuget/readme/video/tour).
  • Regenerate site/docs/book outputs and exports to include the new example and increment totals to 265.
  • Update generator registry data (GeneratorDataRec.json, all.csv, exports) to include the new entry.

Reviewed changes

Copilot reviewed 26 out of 28 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
v2/RSCGExamplesData/GeneratorDataRec.json Registers the new generator entry (ID/category/start date).
v2/rscg_examples/lomapper/video.json Adds the scripted video steps for the example.
v2/rscg_examples/lomapper/src/mapperDemo/Program.cs Demo usage: maps Person to PersonDTO and prints FullName.
v2/rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs Defines DTO + mapper declaration via attributes.
v2/rscg_examples/lomapper/src/mapperDemo/Person.cs Defines the source model used in the mapping demo.
v2/rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj New .NET project referencing the LoMapper package.
v2/rscg_examples/lomapper/src/mapperDemo.slnx Solution container for the demo project.
v2/rscg_examples/lomapper/readme.txt Captures upstream readme content for the docs pipeline.
v2/rscg_examples/lomapper/nuget.txt Short NuGet description text used by the generator pipeline.
v2/rscg_examples/lomapper/description.json Adds generator metadata + lists demo files for documentation generation.
v2/rscg_examples_site/static/sources/lomapper.zip Adds downloadable zipped source for the example.
v2/rscg_examples_site/static/exports/RSCG.xlsx Updates Excel export to include the new example.
v2/rscg_examples_site/static/exports/RSCG.json Updates JSON export to include the new example.
v2/rscg_examples_site/src/components/HomepageFeatures/index.js Updates homepage count from 264 to 265.
v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md Adds the new Docusaurus page for the LoMapper example.
v2/rscg_examples_site/docs/RSCG-Examples/index.md Updates category counts and inserts the new example into lists/graph.
v2/rscg_examples_site/docs/indexRSCG.md Updates the master chronological list (now 265 entries).
v2/rscg_examples_site/docs/Categories/Serializer.md Updates category page count and inserts the new example link.
v2/rscg_examples_site/docs/Categories/_PrimitiveSerializer.mdx Updates “same category” include list to add the new example.
v2/rscg_examples_site/docs/Authors/Junaid_Desai.md Adds a new author page for the LoMapper author.
v2/rscg_examples_site/docs/about.md Updates the overall RSCG example count in the About page.
v2/Generator/all.csv Appends the new generator to the CSV inventory list.
v2/book/pandocHTML.yaml Adds lomapper.html to the book build inputs.
v2/book/list.html Updates book index count and inserts the new example row.
v2/book/examples/lomapper.html Adds the generated HTML page for the LoMapper example.
v2/.tours/lomapper.tour Adds a CodeTour walkthrough for the new example.
README.md Updates repo headline counts and “Latest Update” date, and inserts the new entry.
later.md Updates the “Latest Update” date.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

}
},
{
"ID":"loMapper",
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

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

The newly added generator ID is loMapper, but the example folder added in this PR is v2/rscg_examples/lomapper/ (lowercase). MultiGeneratorV2 builds paths with Path.Combine(rootFolder, generatorKey) and expects description.json under that exact folder name, so this casing mismatch will break generation on case-sensitive filesystems/CI. Align the ID (and downstream references) with the actual folder name, or rename the folder to match the ID consistently everywhere.

Suggested change
"ID":"loMapper",
"ID":"lomapper",

Copilot uses AI. Check for mistakes.
262,SvgIconGenerator, https://github.com/helluvamatt/SvgIconGenerator,FilesToCode
263,TaggedEnum, https://github.com/al0rid4l/SixTatami,Enum
264,Najlot.Audit.SourceGenerator, https://github.com/najlot/Audit,Audit
265,loMapper, https://github.com/jdtoon/lomapper,Mapper
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

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

The new CSV row uses the key loMapper, but the newly added example folder is v2/rscg_examples/lomapper/ and the site/docs mostly use lomapper. This key is used as the generator identifier in the pipeline; mismatched casing will cause lookups/path resolution issues on case-sensitive systems. Standardize the key casing across all.csv, GeneratorDataRec.json, and the example folder name.

Suggested change
265,loMapper, https://github.com/jdtoon/lomapper,Mapper
265,lomapper, https://github.com/jdtoon/lomapper,Mapper

Copilot uses AI. Check for mistakes.
"data":{
"goodFor":["Generate mapping code at compile time using source generators."],
"csprojDemo":"mapperDemo.csproj",
"csFiles":["Program.cs","Person.cs","PersonDto.cs"],
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

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

description.json lists PersonDto.cs in csFiles, but the actual file added in this PR is PersonDTO.cs. The generator code searches by exact file name (case-sensitive on Linux), so this mismatch can cause generation failures on case-sensitive filesystems. Update csFiles to match the real filename (or rename the file to match the convention).

Suggested change
"csFiles":["Program.cs","Person.cs","PersonDto.cs"],
"csFiles":["Program.cs","Person.cs","PersonDTO.cs"],

Copilot uses AI. Check for mistakes.

{"typeStep":"text","arg": "To use it ,you will put the Nuget lomapper into the csproj "},

{"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\loMapper\\src\\mapperDemo\\mapperDemo.csproj"},
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

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

This script references the path v2\\rscg_examples\\loMapper\\... (capital M), but the example folder added in this PR is v2/rscg_examples/lomapper/ (lowercase). If these scripts are executed on a case-sensitive filesystem, steps that open files/projects will fail. Make the path casing consistent with the repository folder name (and with the generator key used elsewhere).

Suggested change
{"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\loMapper\\src\\mapperDemo\\mapperDemo.csproj"},
{"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\lomapper\\src\\mapperDemo\\mapperDemo.csproj"},

Copilot uses AI. Check for mistakes.
Comment on lines +8 to +63
"file": "rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj",
"description": "First, we add Nuget [lomapper](https://www.nuget.org/packages/lomapper/) in csproj ",
"pattern": "lomapper"
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/PersonDTO.cs",
"description": "File PersonDTO.cs ",
"pattern": "this is the code"
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/Person.cs",
"description": "File Person.cs ",
"pattern": "this is the code"
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/Program.cs",
"description": "File Program.cs \r\n>> dotnet run --project rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj ",
"pattern": "this is the code"
}


,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LoMapper.Generator/LoMapper.Generator.LoMapperGenerator/UserMapper.g.cs",
"description": "Generated File 6 from 6 : UserMapper.g.cs ",
"line": 1
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/PredefinedSpecialTypeMapping.Generated.cs",
"description": "Generated File 5 from 6 : PredefinedSpecialTypeMapping.Generated.cs ",
"line": 1
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LOMMapExtensions_mapperDemo_Person.g.cs",
"description": "Generated File 4 from 6 : LOMMapExtensions_mapperDemo_Person.g.cs ",
"line": 1
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LightweightObjectMapper.PreCodes.PredefinedSpecialTypeMapping.cs",
"description": "Generated File 3 from 6 : LightweightObjectMapper.PreCodes.PredefinedSpecialTypeMapping.cs ",
"line": 1
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LightweightObjectMapper.PreCodes.LightweightObjectMapperPreCodes.cs",
"description": "Generated File 2 from 6 : LightweightObjectMapper.PreCodes.LightweightObjectMapperPreCodes.cs ",
"line": 1
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/Extensions.Generated.cs",
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

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

The CodeTour step file paths use rscg_examples/loMapper/... (capital M), but the example directory added in this PR is v2/rscg_examples/lomapper/ (lowercase). These references will not resolve on case-sensitive filesystems and will break the tour. Update the file paths to match the actual directory name (or rename the directory consistently).

Suggested change
"file": "rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj",
"description": "First, we add Nuget [lomapper](https://www.nuget.org/packages/lomapper/) in csproj ",
"pattern": "lomapper"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/PersonDTO.cs",
"description": "File PersonDTO.cs ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/Person.cs",
"description": "File Person.cs ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/Program.cs",
"description": "File Program.cs \r\n>> dotnet run --project rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LoMapper.Generator/LoMapper.Generator.LoMapperGenerator/UserMapper.g.cs",
"description": "Generated File 6 from 6 : UserMapper.g.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/PredefinedSpecialTypeMapping.Generated.cs",
"description": "Generated File 5 from 6 : PredefinedSpecialTypeMapping.Generated.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LOMMapExtensions_mapperDemo_Person.g.cs",
"description": "Generated File 4 from 6 : LOMMapExtensions_mapperDemo_Person.g.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LightweightObjectMapper.PreCodes.PredefinedSpecialTypeMapping.cs",
"description": "Generated File 3 from 6 : LightweightObjectMapper.PreCodes.PredefinedSpecialTypeMapping.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LightweightObjectMapper.PreCodes.LightweightObjectMapperPreCodes.cs",
"description": "Generated File 2 from 6 : LightweightObjectMapper.PreCodes.LightweightObjectMapperPreCodes.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/Extensions.Generated.cs",
"file": "rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj",
"description": "First, we add Nuget [lomapper](https://www.nuget.org/packages/lomapper/) in csproj ",
"pattern": "lomapper"
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs",
"description": "File PersonDTO.cs ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/Person.cs",
"description": "File Person.cs ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/Program.cs",
"description": "File Program.cs \r\n>> dotnet run --project rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/obj/GX/LoMapper.Generator/LoMapper.Generator.LoMapperGenerator/UserMapper.g.cs",
"description": "Generated File 6 from 6 : UserMapper.g.cs ",
"line": 1
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/PredefinedSpecialTypeMapping.Generated.cs",
"description": "Generated File 5 from 6 : PredefinedSpecialTypeMapping.Generated.cs ",
"line": 1
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LOMMapExtensions_mapperDemo_Person.g.cs",
"description": "Generated File 4 from 6 : LOMMapExtensions_mapperDemo_Person.g.cs ",
"line": 1
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LightweightObjectMapper.PreCodes.PredefinedSpecialTypeMapping.cs",
"description": "Generated File 3 from 6 : LightweightObjectMapper.PreCodes.PredefinedSpecialTypeMapping.cs ",
"line": 1
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/LightweightObjectMapper.PreCodes.LightweightObjectMapperPreCodes.cs",
"description": "Generated File 2 from 6 : LightweightObjectMapper.PreCodes.LightweightObjectMapperPreCodes.cs ",
"line": 1
}
,{
"file": "rscg_examples/lomapper/src/mapperDemo/obj/GX/LightweightObjectMapper/LightweightObjectMapper.LightweightObjectMapperSourceGenerator/Extensions.Generated.cs",

Copilot uses AI. Check for mistakes.
Comment on lines +2118 to +2123
"Name": "lomapper",
"Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/loMapper",
"NuGet": "https://www.nuget.org/packages/lomapper/",
"Source": "https://github.com/jdtoon/lomapper",
"Category": "Mapper",
"AddedOn": "2026-04-07T00:00:00"
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

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

The export entry links to .../docs/loMapper (capital M), but the generated docs page in this PR uses slug: /lomapper and other references point to /docs/lomapper. On case-sensitive hosting this link will 404. Update the Link value to match the actual docs route.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (7)
v2/rscg_examples_site/docs/Authors/Junaid_Desai.md (1)

7-7: Consider removing trailing whitespace.

Line 7 contains trailing whitespace. While not critical, cleaning this up improves file hygiene.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples_site/docs/Authors/Junaid_Desai.md` at line 7, Remove the
trailing whitespace on the empty/blank line in Authors/Junaid_Desai.md so the
file has no trailing spaces; locate the blank line near the top of the file and
delete the extra space characters (ensure the file ends/contains only clean line
breaks).
v2/rscg_examples/lomapper/nuget.txt (1)

1-1: Consider adding a trailing newline.

The file contains a clear and concise description of the LoMapper package. However, POSIX and many coding standards recommend that text files end with a newline character. Consider adding a trailing newline for better compatibility with text processing tools and editors.

📝 Proposed fix to add trailing newline
-LoMapper - Lightweight Object Mapper using compile-time source generation. Zero runtime reflection.
+LoMapper - Lightweight Object Mapper using compile-time source generation. Zero runtime reflection.
+
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples/lomapper/nuget.txt` at line 1, Add a POSIX-compliant
trailing newline to the end of the nuget.txt file describing "LoMapper" so the
file ends with a newline character; simply update the nuget.txt content (the
LoMapper description line) to include a final newline character after the
existing text.
v2/rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj (1)

12-12: Make generated-files output path OS-neutral.

Line 12 hardcodes a Windows-style separator. Prefer a separator-neutral path to avoid platform-specific behavior on Linux/macOS CI.

♻️ Suggested change
-		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
+		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)GX</CompilerGeneratedFilesOutputPath>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj` at line 12, The
CompilerGeneratedFilesOutputPath currently uses a Windows-style backslash
("$(BaseIntermediateOutputPath)\GX"), which is platform-specific; update the
value of CompilerGeneratedFilesOutputPath to use a platform-neutral separator
such as a forward slash (e.g. "$(BaseIntermediateOutputPath)/GX") so the
generated-files output works on Linux/macOS CI; locate the
CompilerGeneratedFilesOutputPath element in the .csproj and replace the
backslash with a forward slash while keeping the existing
BaseIntermediateOutputPath and "GX" token.
v2/.tours/lomapper.tour (1)

32-66: Generated file numbering is reversed and potentially confusing.

The descriptions label files as "Generated File 6 from 6", "5 from 6", etc., in descending order. This reverses the natural reading order. Consider renumbering them 1-6 in sequence for clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/.tours/lomapper.tour` around lines 32 - 66, The tour entries list
generated files with descending "Generated File X from 6" numbers which is
confusing; update the descriptions in the lomapper.tour entries (the JSON
objects referencing files like UserMapper.g.cs,
PredefinedSpecialTypeMapping.Generated.cs,
LOMMapExtensions_mapperDemo_Person.g.cs, LightweightObjectMapper.PreCodes.* and
Extensions.Generated.cs) so the "Generated File X from 6" labels are renumbered
in ascending order (1 to 6) to reflect natural reading order and maintain
consistency across the described files.
v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md (1)

1001-1001: Minor: Trailing space in link text.

The link text has a trailing space before the closing bracket.

🔧 Proposed fix
-[Download Example project lomapper ](/sources/lomapper.zip)
+[Download Example project lomapper](/sources/lomapper.zip)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md` at line 1001, Remove
the trailing space inside the link text for the Markdown link "[Download Example
project lomapper ](/sources/lomapper.zip)"; edit the link text to be "[Download
Example project lomapper](/sources/lomapper.zip)" so there is no space before
the closing bracket.
v2/rscg_examples/lomapper/readme.txt (1)

237-243: Add a heading or explanatory text before the benchmark run instructions.

The bash commands for running benchmarks appear immediately after the </details> closing tag without any introductory context. This makes the document flow unclear—readers may not understand these commands are separate from the collapsible section above.

Suggested fix
 Zero allocations beyond the mapped objects themselves.

 [Full Results](BenchmarkDotNet.Artifacts/results/)
 </details>
+
+**Run benchmarks yourself:**
+
 ```bash
 cd benchmarks/LoMapper.Benchmarks
 dotnet run -c Release
 ```
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples/lomapper/readme.txt` around lines 237 - 243, The README
places bash commands immediately after a closing </details> with no context; add
a short heading or sentence before the command block (e.g., "Run benchmarks
locally" or "To execute the benchmarks, run:") and ensure the following lines
are formatted as a fenced bash code block so readers understand the commands are
separate from the collapsible section and how to run them (apply this change
around the snippet containing the closing </details> and the subsequent bash
commands).
v2/rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs (1)

2-2: Unused import: System.Xml.Serialization.

This namespace is imported but not used anywhere in this file. Consider removing it to keep imports clean.

Suggested fix
 using LoMapper;
-using System.Xml.Serialization;
 
 namespace mapperDemo;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs` at line 2, Remove the
unused using directive "using System.Xml.Serialization;" from the top of the
file; verify the PersonDTO class (and any members in this file) do not rely on
types or attributes from System.Xml.Serialization before removal to ensure no
behaviors break.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@README.md`:
- Line 7: Update the README metadata dates that are set to the future (instances
of "2026-04-07") to the actual PR/open date (e.g., "2026-04-04") so the file
isn't future-dated; locate the occurrences in the README under the "## Latest
Update" header and the other matching line (both line 7 and line 31 in the
current diff) and replace the date strings consistently.

In `@v2/.tours/lomapper.tour`:
- Around line 13-29: The tour steps use a non-matching pattern ("this is the
code") for the three entries referencing PersonDTO.cs, Person.cs and Program.cs;
update each step in the lomapper.tour to either replace the "pattern": "this is
the code" with a valid "line": 1 property or set "pattern" to an actual string
that exists in the target file (e.g., a class or method name) so CodeTour can
locate the intended lines for PersonDTO.cs, Person.cs and Program.cs.

In `@v2/rscg_examples_site/static/exports/RSCG.json`:
- Around line 2117-2122: The lomapper JSON entry has inconsistent casing and
category: update the "Link" value from ".../loMapper" to use the lowercase path
".../lomapper" to match the actual documentation URL, and change the "Category"
value from "Serializer" to "Mapper"; leave the "Name", "NuGet", and "Source"
fields unchanged.

In `@v2/rscg_examples/lomapper/description.json`:
- Line 14: The csFiles array in description.json lists "PersonDto.cs" which
mismatches the actual file "PersonDTO.cs" and will fail on case-sensitive
filesystems; update the entry in the csFiles array (the "csFiles" property) to
"PersonDTO.cs" so the filename exactly matches the real file name.

In `@v2/rscg_examples/lomapper/video.json`:
- Around line 35-38: The JSON contains invalid syntax: the token SpeakTest=" "
is using = and is placed outside an object, and there is a trailing comma before
the closing array bracket; fix by converting SpeakTest to a proper key-value
pair inside the preceding object using colon (e.g., "SpeakTest": " "), ensure it
is comma-separated from other properties within the same object (referencing the
object with "typeStep":"browser"), and remove the trailing comma after the
{"typeStep":"waitseconds","arg":"30"} entry so the array ends validly.
- Line 29: The tour step in v2/rscg_examples/lomapper/video.json references the
string "src/.tours/" but that directory and its tour file are missing for the
lomapper example; create the src/.tours/ directory for lomapper and add the
appropriate tour file (matching the pattern used in other examples) so the
"typeStep":"tour" entry in video.json resolves to an actual tour file; commit
the new directory and tour file alongside video.json to ensure the step runs.

In `@v2/RSCGExamplesData/GeneratorDataRec.json`:
- Line 1605: The ID value "loMapper" in the JSON should be normalized to the
canonical slug "lomapper" to avoid case-sensitive lookup/link mismatches; locate
the JSON entry with "ID":"loMapper" (in GeneratorDataRec.json) and change it to
"lomapper", then search the codebase/metadata for any references to "loMapper"
and update them to "lomapper" so all lookups, links, and docs use the same
canonical identifier.
- Line 1606: The Category value for this generator entry is incorrect: the
"Category" field in the GeneratorDataRec.json entry currently uses 16
(Serializer) but this generator is an object mapper; update that "Category"
value to the enum/constant for Mapper (replace 16 with the Mapper enum numeric
value or symbol used in your taxonomy) so the generator is classified as a
Mapper rather than a Serializer.

---

Nitpick comments:
In `@v2/.tours/lomapper.tour`:
- Around line 32-66: The tour entries list generated files with descending
"Generated File X from 6" numbers which is confusing; update the descriptions in
the lomapper.tour entries (the JSON objects referencing files like
UserMapper.g.cs, PredefinedSpecialTypeMapping.Generated.cs,
LOMMapExtensions_mapperDemo_Person.g.cs, LightweightObjectMapper.PreCodes.* and
Extensions.Generated.cs) so the "Generated File X from 6" labels are renumbered
in ascending order (1 to 6) to reflect natural reading order and maintain
consistency across the described files.

In `@v2/rscg_examples_site/docs/Authors/Junaid_Desai.md`:
- Line 7: Remove the trailing whitespace on the empty/blank line in
Authors/Junaid_Desai.md so the file has no trailing spaces; locate the blank
line near the top of the file and delete the extra space characters (ensure the
file ends/contains only clean line breaks).

In `@v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md`:
- Line 1001: Remove the trailing space inside the link text for the Markdown
link "[Download Example project lomapper ](/sources/lomapper.zip)"; edit the
link text to be "[Download Example project lomapper](/sources/lomapper.zip)" so
there is no space before the closing bracket.

In `@v2/rscg_examples/lomapper/nuget.txt`:
- Line 1: Add a POSIX-compliant trailing newline to the end of the nuget.txt
file describing "LoMapper" so the file ends with a newline character; simply
update the nuget.txt content (the LoMapper description line) to include a final
newline character after the existing text.

In `@v2/rscg_examples/lomapper/readme.txt`:
- Around line 237-243: The README places bash commands immediately after a
closing </details> with no context; add a short heading or sentence before the
command block (e.g., "Run benchmarks locally" or "To execute the benchmarks,
run:") and ensure the following lines are formatted as a fenced bash code block
so readers understand the commands are separate from the collapsible section and
how to run them (apply this change around the snippet containing the closing
</details> and the subsequent bash commands).

In `@v2/rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj`:
- Line 12: The CompilerGeneratedFilesOutputPath currently uses a Windows-style
backslash ("$(BaseIntermediateOutputPath)\GX"), which is platform-specific;
update the value of CompilerGeneratedFilesOutputPath to use a platform-neutral
separator such as a forward slash (e.g. "$(BaseIntermediateOutputPath)/GX") so
the generated-files output works on Linux/macOS CI; locate the
CompilerGeneratedFilesOutputPath element in the .csproj and replace the
backslash with a forward slash while keeping the existing
BaseIntermediateOutputPath and "GX" token.

In `@v2/rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs`:
- Line 2: Remove the unused using directive "using System.Xml.Serialization;"
from the top of the file; verify the PersonDTO class (and any members in this
file) do not rely on types or attributes from System.Xml.Serialization before
removal to ensure no behaviors break.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 974b14de-cfb0-446f-b41b-de653bebc091

📥 Commits

Reviewing files that changed from the base of the PR and between ee6d933 and b47e1c9.

⛔ Files ignored due to path filters (3)
  • v2/Generator/all.csv is excluded by !**/*.csv
  • v2/rscg_examples_site/static/exports/RSCG.xlsx is excluded by !**/*.xlsx
  • v2/rscg_examples_site/static/sources/lomapper.zip is excluded by !**/*.zip
📒 Files selected for processing (25)
  • README.md
  • later.md
  • v2/.tours/lomapper.tour
  • v2/RSCGExamplesData/GeneratorDataRec.json
  • v2/book/examples/lomapper.html
  • v2/book/list.html
  • v2/book/pandocHTML.yaml
  • v2/rscg_examples/lomapper/description.json
  • v2/rscg_examples/lomapper/nuget.txt
  • v2/rscg_examples/lomapper/readme.txt
  • v2/rscg_examples/lomapper/src/mapperDemo.slnx
  • v2/rscg_examples/lomapper/src/mapperDemo/Person.cs
  • v2/rscg_examples/lomapper/src/mapperDemo/PersonDTO.cs
  • v2/rscg_examples/lomapper/src/mapperDemo/Program.cs
  • v2/rscg_examples/lomapper/src/mapperDemo/mapperDemo.csproj
  • v2/rscg_examples/lomapper/video.json
  • v2/rscg_examples_site/docs/Authors/Junaid_Desai.md
  • v2/rscg_examples_site/docs/Categories/Serializer.md
  • v2/rscg_examples_site/docs/Categories/_PrimitiveSerializer.mdx
  • v2/rscg_examples_site/docs/RSCG-Examples/index.md
  • v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md
  • v2/rscg_examples_site/docs/about.md
  • v2/rscg_examples_site/docs/indexRSCG.md
  • v2/rscg_examples_site/src/components/HomepageFeatures/index.js
  • v2/rscg_examples_site/static/exports/RSCG.json

This system serves as both a learning resource for .NET developers interested in source generators and an automated pipeline for maintaining up-to-date documentation about the RSCG ecosystem

## Latest Update : 2026-04-06 => 06 April 2026
## Latest Update : 2026-04-07 => 07 April 2026
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use non-future publication dates in README metadata.

Line 7 and Line 31 are set to 2026-04-07, but this PR was opened on April 4, 2026. This makes the README appear future-dated and can confuse chronology.

🛠️ Suggested date alignment
-## Latest Update : 2026-04-07 => 07 April 2026
+## Latest Update : 2026-04-04 => 04 April 2026
...
-Generated on : 2026-04-07 => 07 April 2026
+Generated on : 2026-04-04 => 04 April 2026

Also applies to: 31-31

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 7, Update the README metadata dates that are set to the
future (instances of "2026-04-07") to the actual PR/open date (e.g.,
"2026-04-04") so the file isn't future-dated; locate the occurrences in the
README under the "## Latest Update" header and the other matching line (both
line 7 and line 31 in the current diff) and replace the date strings
consistently.

Comment on lines +13 to +29
,{
"file": "rscg_examples/loMapper/src/mapperDemo/PersonDTO.cs",
"description": "File PersonDTO.cs ",
"pattern": "this is the code"
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/Person.cs",
"description": "File Person.cs ",
"pattern": "this is the code"
}

,{
"file": "rscg_examples/loMapper/src/mapperDemo/Program.cs",
"description": "File Program.cs \r\n>> dotnet run --project rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj ",
"pattern": "this is the code"
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Tour step patterns "this is the code" will never match actual source files.

The pattern property in CodeTour is used to locate a specific line in the file. The string "this is the code" doesn't exist in PersonDTO.cs, Person.cs, or Program.cs, so the tour will fail to highlight the intended location.

Use "line": 1 instead, or provide an actual pattern that exists in each file.

🔧 Proposed fix
         ,{
         "file": "rscg_examples/loMapper/src/mapperDemo/PersonDTO.cs",
         "description": "File PersonDTO.cs  ",
-        "pattern": "this is the code"
+        "line": 1
         }
     
         ,{
         "file": "rscg_examples/loMapper/src/mapperDemo/Person.cs",
         "description": "File Person.cs  ",
-        "pattern": "this is the code"
+        "line": 1
         }
     
         ,{
         "file": "rscg_examples/loMapper/src/mapperDemo/Program.cs",
         "description": "File Program.cs \r\n>> dotnet run --project rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj ",
-        "pattern": "this is the code"
+        "line": 1
         }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
,{
"file": "rscg_examples/loMapper/src/mapperDemo/PersonDTO.cs",
"description": "File PersonDTO.cs ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/Person.cs",
"description": "File Person.cs ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/Program.cs",
"description": "File Program.cs \r\n>> dotnet run --project rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj ",
"pattern": "this is the code"
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/PersonDTO.cs",
"description": "File PersonDTO.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/Person.cs",
"description": "File Person.cs ",
"line": 1
}
,{
"file": "rscg_examples/loMapper/src/mapperDemo/Program.cs",
"description": "File Program.cs \r\n>> dotnet run --project rscg_examples/loMapper/src/mapperDemo/mapperDemo.csproj ",
"line": 1
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/.tours/lomapper.tour` around lines 13 - 29, The tour steps use a
non-matching pattern ("this is the code") for the three entries referencing
PersonDTO.cs, Person.cs and Program.cs; update each step in the lomapper.tour to
either replace the "pattern": "this is the code" with a valid "line": 1 property
or set "pattern" to an actual string that exists in the target file (e.g., a
class or method name) so CodeTour can locate the intended lines for
PersonDTO.cs, Person.cs and Program.cs.

Comment on lines +2117 to +2122
{
"Name": "lomapper",
"Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/loMapper",
"NuGet": "https://www.nuget.org/packages/lomapper/",
"Source": "https://github.com/jdtoon/lomapper",
"Category": "Serializer",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Verify the correct documentation path for lomapper

# Check for lomapper documentation directory - case variations
echo "Searching for lomapper doc directories..."
fd -t d -i 'lomapper' v2/rscg_examples_site/docs/ 2>/dev/null || echo "No directory found in docs/"

# Also check in the general rscg_examples directory
fd -t d -i 'lomapper' v2/rscg_examples/ 2>/dev/null | head -5

# Check what casing is used in other documentation references
echo -e "\nChecking documentation references for lomapper..."
rg -i 'lomapper' --type=md v2/rscg_examples_site/docs/ 2>/dev/null | head -10

Repository: ignatandrei/RSCG_Examples

Length of output: 1292


Fix case and category inconsistencies in the lomapper entry.

The Link uses loMapper (camelCase) but the actual documentation path is lomapper (lowercase), and the entry is categorized as "Serializer" when it should be "Mapper"—all references in the codebase and documentation index use the "Mapper" category.

Fix
     {
       "Name": "lomapper",
-      "Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/loMapper",
+      "Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper",
       "NuGet": "https://www.nuget.org/packages/lomapper/",
       "Source": "https://github.com/jdtoon/lomapper",
-      "Category": "Serializer",
+      "Category": "Mapper",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{
"Name": "lomapper",
"Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/loMapper",
"NuGet": "https://www.nuget.org/packages/lomapper/",
"Source": "https://github.com/jdtoon/lomapper",
"Category": "Serializer",
{
"Name": "lomapper",
"Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper",
"NuGet": "https://www.nuget.org/packages/lomapper/",
"Source": "https://github.com/jdtoon/lomapper",
"Category": "Mapper",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples_site/static/exports/RSCG.json` around lines 2117 - 2122, The
lomapper JSON entry has inconsistent casing and category: update the "Link"
value from ".../loMapper" to use the lowercase path ".../lomapper" to match the
actual documentation URL, and change the "Category" value from "Serializer" to
"Mapper"; leave the "Name", "NuGet", and "Source" fields unchanged.

{"typeStep":"text","arg": "And now I will show you an example of using lomapper"},

{"typeStep":"hide","arg": "now execute the tour in VSCode"},
{"typeStep":"tour", "arg": "src/.tours/"},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the tour file location and check if src/.tours/ exists
echo "=== Checking for .tours directories ==="
fd -t d '.tours' v2/

echo ""
echo "=== Checking lomapper tour file location ==="
fd -t f 'lomapper.tour' v2/

echo ""
echo "=== Checking if src/.tours exists under lomapper ==="
ls -la v2/rscg_examples/lomapper/src/.tours/ 2>/dev/null || echo "Directory does not exist"

Repository: ignatandrei/RSCG_Examples

Length of output: 233


🏁 Script executed:

#!/bin/bash
# Search for tour-related files more broadly
echo "=== Searching for tour files anywhere in repository ==="
find v2 -type f -name "*.tour*" 2>/dev/null | head -20

echo ""
echo "=== Searching for .tours in any form ==="
find v2 -type d -name "*tour*" 2>/dev/null | head -20

echo ""
echo "=== Check what's actually in video.json ==="
cat -n v2/rscg_examples/lomapper/video.json | head -40

echo ""
echo "=== Check the directory structure of lomapper example ==="
ls -la v2/rscg_examples/lomapper/ 2>/dev/null

Repository: ignatandrei/RSCG_Examples

Length of output: 4602


🏁 Script executed:

#!/bin/bash
# Check if src/.tours exists in lomapper
echo "=== Listing src directory in lomapper ==="
ls -la v2/rscg_examples/lomapper/src/

echo ""
echo "=== Check if src/.tours exists in lomapper ==="
if [ -d "v2/rscg_examples/lomapper/src/.tours" ]; then
    echo "Directory EXISTS"
    ls -la v2/rscg_examples/lomapper/src/.tours/
else
    echo "Directory does NOT exist"
fi

echo ""
echo "=== Compare with another example that has src/.tours (ActorSrcGen) ==="
ls -la v2/rscg_examples/ActorSrcGen/src/.tours/ 2>/dev/null | head -5

Repository: ignatandrei/RSCG_Examples

Length of output: 664


🏁 Script executed:

#!/bin/bash
# Check how other examples reference tour files in their video.json
echo "=== Check ActorSrcGen's video.json for tour references ==="
if [ -f "v2/rscg_examples/ActorSrcGen/video.json" ]; then
    grep -n "tour" v2/rscg_examples/ActorSrcGen/video.json
fi

echo ""
echo "=== Check a few more examples with src/.tours for tour references ==="
for example in Apparatus.AOT.Reflection Architect.DomainModeling; do
    echo "--- $example ---"
    if [ -f "v2/rscg_examples/$example/video.json" ]; then
        grep -n "tour" "v2/rscg_examples/$example/video.json" 2>/dev/null || echo "No video.json or no tour references"
    fi
done

Repository: ignatandrei/RSCG_Examples

Length of output: 594


Create missing src/.tours/ directory with tour file for lomapper.

The src/.tours/ path pattern in the tour step (line 29) is correct and matches other examples in the repository (ActorSrcGen, Apparatus.AOT.Reflection, Architect.DomainModeling). However, the src/.tours/ directory is missing from the lomapper example, unlike those other examples which all contain tour files in their respective src/.tours/ directories. Create the missing directory and add the appropriate tour file.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples/lomapper/video.json` at line 29, The tour step in
v2/rscg_examples/lomapper/video.json references the string "src/.tours/" but
that directory and its tour file are missing for the lomapper example; create
the src/.tours/ directory for lomapper and add the appropriate tour file
(matching the pattern used in other examples) so the "typeStep":"tour" entry in
video.json resolves to an actual tour file; commit the new directory and tour
file alongside video.json to ensure the step runs.

Comment on lines +35 to +38
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper#download-example-net--c-",
SpeakTest=" "},
{"typeStep":"waitseconds","arg":"30"},
]
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Invalid JSON syntax will cause parsing failure.

Line 36 has invalid syntax: SpeakTest=" " uses = instead of : and is placed outside the JSON object. Line 38 also has a trailing comma before the closing bracket.

🐛 Proposed fix
 {"typeStep":"text","arg": "Remember, you can download the code from here"},
-{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper#download-example-net--c-",
-SpeakTest=" "},
-{"typeStep":"waitseconds","arg":"30"},
+{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper#download-example-net--c-"},
+{"typeStep":"waitseconds","arg":"30"}
 ]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper#download-example-net--c-",
SpeakTest=" "},
{"typeStep":"waitseconds","arg":"30"},
]
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/lomapper#download-example-net--c-"},
{"typeStep":"waitseconds","arg":"30"}
]
🧰 Tools
🪛 Biome (2.4.10)

[error] 36-36: Property key must be double quoted

(parse)


[error] 36-36: unexpected character =

(parse)


[error] 36-36: expected , but instead found " "

(parse)


[error] 36-36: expected : but instead found }

(parse)


[error] 38-38: Expected an array, an object, or a literal but instead found ']'.

(parse)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples/lomapper/video.json` around lines 35 - 38, The JSON contains
invalid syntax: the token SpeakTest=" " is using = and is placed outside an
object, and there is a trailing comma before the closing array bracket; fix by
converting SpeakTest to a proper key-value pair inside the preceding object
using colon (e.g., "SpeakTest": " "), ensure it is comma-separated from other
properties within the same object (referencing the object with
"typeStep":"browser"), and remove the trailing comma after the
{"typeStep":"waitseconds","arg":"30"} entry so the array ends validly.

}
},
{
"ID":"loMapper",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Normalize ID to match the canonical slug/name.

Line 1605 uses loMapper, while related metadata/docs use lomapper. Keep one canonical ID to prevent case-sensitive lookup/link mismatches.

🛠️ Suggested fix
-    "ID":"loMapper",
+    "ID":"lomapper",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"ID":"loMapper",
"ID":"lomapper",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/RSCGExamplesData/GeneratorDataRec.json` at line 1605, The ID value
"loMapper" in the JSON should be normalized to the canonical slug "lomapper" to
avoid case-sensitive lookup/link mismatches; locate the JSON entry with
"ID":"loMapper" (in GeneratorDataRec.json) and change it to "lomapper", then
search the codebase/metadata for any references to "loMapper" and update them to
"lomapper" so all lookups, links, and docs use the same canonical identifier.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@v2/rscg_examples_site/docs/indexRSCG.md`:
- Line 23: The markdown link text "[lomapper by Junaid Desai ](/docs/lomapper)"
contains a trailing space; edit that link so the visible text has no trailing
whitespace (change "[lomapper by Junaid Desai ]" to "[lomapper by Junaid
Desai]") to satisfy MD039 and ensure the entry (the lomapper link) has no extra
space in its link text.

In `@v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md`:
- Line 1001: Remove the trailing space inside the markdown link text so it reads
"[Download Example project lomapper](/sources/lomapper.zip)" instead of
"[Download Example project lomapper ](/sources/lomapper.zip)"; update the link
string in the lomapper.md content where that exact link appears to eliminate the
space before the closing bracket.
- Around line 411-473: The TabItem value attributes in the markdown use
"loMapper" (capital M) but the actual folder is "lomapper" (all lowercase);
update the three TabItem value attributes that point to Program.cs, Person.cs,
and PersonDTO.cs so their value strings use "lomapper" (lowercase m) instead of
"loMapper" to match the repository directory casing.
- Around line 50-362: The README markdown has inconsistent heading levels,
missing spaces after '#' in some headings, indented code blocks instead of
fenced blocks, and some fenced blocks missing language tags; fix the lomapper.md
by (1) changing the h6 at "Quick Start" to an h5 to keep heading progression
consistent (locate the "Quick Start" / "Installation" headings), (2) ensure all
headings like those near the Benchmarks and Comparison sections include a space
after '#' (search for headings around "Benchmarks" and "Comparison"), (3)
replace indented code examples (e.g., the Basic Usage C# examples and any other
indented blocks such as nested code examples) with fenced code blocks using
```csharp, and (4) add language tags to bash snippets (e.g., the benchmarks run
and project XML emit examples) using ```bash or ```xml as appropriate so
markdownlint stops flagging them; update all affected blocks consistently across
the file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6bea2dde-b63f-4c45-9792-fc188e087ed8

📥 Commits

Reviewing files that changed from the base of the PR and between b47e1c9 and 1caec67.

⛔ Files ignored due to path filters (2)
  • v2/Generator/all.csv is excluded by !**/*.csv
  • v2/rscg_examples_site/static/exports/RSCG.xlsx is excluded by !**/*.xlsx
📒 Files selected for processing (8)
  • README.md
  • v2/RSCGExamplesData/GeneratorDataRec.json
  • v2/rscg_examples_site/docs/Categories/Mapper.md
  • v2/rscg_examples_site/docs/Categories/_PrimitiveMapper.mdx
  • v2/rscg_examples_site/docs/RSCG-Examples/index.md
  • v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md
  • v2/rscg_examples_site/docs/indexRSCG.md
  • v2/rscg_examples_site/static/exports/RSCG.json
✅ Files skipped from review due to trivial changes (2)
  • v2/rscg_examples_site/docs/Categories/Mapper.md
  • README.md
🚧 Files skipped from review as they are similar to previous changes (3)
  • v2/rscg_examples_site/docs/RSCG-Examples/index.md
  • v2/rscg_examples_site/static/exports/RSCG.json
  • v2/RSCGExamplesData/GeneratorDataRec.json


| No | Name | Date | Category |
| --------- | ----- | ---- | -------- |
|265| [lomapper by Junaid Desai ](/docs/lomapper)|2026-04-07 => 07 April 2026 | [Mapper](/docs/Categories/Mapper) |
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove trailing space in link text.

The lomapper entry has a trailing space in the link text, which violates markdown best practices (MD039).

🔗 Proposed fix
-|265| [lomapper by Junaid Desai ](/docs/lomapper)|2026-04-07 => 07 April 2026 | [Mapper](/docs/Categories/Mapper) |
+|265| [lomapper by Junaid Desai](/docs/lomapper)|2026-04-07 => 07 April 2026 | [Mapper](/docs/Categories/Mapper) |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
|265| [lomapper by Junaid Desai ](/docs/lomapper)|2026-04-07 => 07 April 2026 | [Mapper](/docs/Categories/Mapper) |
|265| [lomapper by Junaid Desai](/docs/lomapper)|2026-04-07 => 07 April 2026 | [Mapper](/docs/Categories/Mapper) |
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 23-23: Spaces inside link text

(MD039, no-space-in-links)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples_site/docs/indexRSCG.md` at line 23, The markdown link text
"[lomapper by Junaid Desai ](/docs/lomapper)" contains a trailing space; edit
that link so the visible text has no trailing whitespace (change "[lomapper by
Junaid Desai ]" to "[lomapper by Junaid Desai]") to satisfy MD039 and ensure the
entry (the lomapper link) has no extra space in its link text.

Comment on lines +50 to +362
:::note

### LoMapper

**A tiny, focused object mapper** — Generate mapping code at compile time using Roslyn Source Generators.

[![NuGet](https://img.shields.io/nuget/v/LoMapper.svg)](https://www.nuget.org/packages/LoMapper/)
[![NuGet Downloads](https://img.shields.io/nuget/dt/LoMapper.svg)](https://www.nuget.org/packages/LoMapper/)
[![Build Status](https://github.com/jdtoon/lomapper/actions/workflows/ci.yml/badge.svg)](https://github.com/jdtoon/lomapper/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![.NET](https://img.shields.io/badge/.NET-Standard%202.0+-purple.svg)](https://dotnet.microsoft.com/)
[![GitHub Stars](https://img.shields.io/github/stars/jdtoon/lomapper?style=social)](https://github.com/jdtoon/lomapper)

###### What is LoMapper?

LoMapper is a small library that generates mapping code at compile time, saving you from writing repetitive property-by-property assignments by hand.

**Benefits:**
- ✅ **Less boilerplate** — Stop writing manual property assignments
- ✅ **Compile-time safety** — Catch mapping issues during build, not at runtime
- ✅ **Zero runtime overhead** — No reflection, no scanning, just generated code
- ✅ **Debuggable** — F12 into generated code like it's your own
- ✅ **Simple** — Just add attributes to partial classes

###### Quick Start

######### Installation

```bash
dotnet add package LoMapper
```

######### Basic Usage

```csharp
using LoMapper;

// 1. Define your types
public class UserEntity
{
public int Id \{ get; set; }
public string Name \{ get; set; }
public string Email \{ get; set; }
}

public class UserDto
{
public int Id \{ get; set; }
public string Name \{ get; set; }
public string Email \{ get; set; }
}

// 2. Create a mapper
[Mapper]
public partial class UserMapper
{
public partial UserDto Map(UserEntity entity);
}

// 3. Use it
var mapper = new UserMapper();
var dto = mapper.Map(entity);
```

That's it! The `Map` method is generated at compile time with property-by-property assignment.

###### Features

######### Property Mapping
Properties are matched by name (case-insensitive):

```csharp
public class Source \{ public int ID \{ get; set; \} }
public class Target \{ public int Id \{ get; set; \} } // ✅ Matched
```

######### Custom Property Mapping
Rename properties or apply transforms:

```csharp
[Mapper]
public partial class UserMapper
{
[MapProperty("FirstName", "FullName")]
[MapProperty("BirthDate", "Age", Transform = nameof(CalculateAge))]
public partial UserDto Map(UserEntity entity);

private int CalculateAge(DateTime birthDate)
=> DateTime.Today.Year - birthDate.Year;
}
```

######### Ignore Properties
Skip properties you don't want mapped:

```csharp
[Mapper]
public partial class UserMapper
{
[MapIgnore("InternalId")]
[MapIgnore("CacheKey")]
public partial UserDto Map(UserEntity entity);
}
```

######### Flatten Properties
Map nested object properties to flat target properties:

```csharp
[Mapper]
public partial class UserMapper
{
[FlattenProperty("Address.City", nameof(UserDto.AddressCity))]
[FlattenProperty("Address.ZipCode", nameof(UserDto.AddressZipCode))]
public partial UserDto Map(UserEntity entity);
}
```

Features:
- ✅ Deep nesting support (e.g., `Order.Customer.Address.City`)
- ✅ Null-safe navigation (`?.`) automatically generated
- ✅ Type-safe with compile-time validation
- ✅ Works with both reference and value types
- ✅ Combine with `[MapProperty]` and `[MapIgnore]`

######### Lifecycle Hooks (BeforeMap / AfterMap)
Run code before or after mapping to validate inputs, set defaults, or audit results:

```csharp
[Mapper]
public partial class UserMapper
{
[BeforeMap(nameof(ValidateUser))]
[AfterMap(nameof(AuditUser))]
public partial UserDto Map(UserEntity entity);

private void ValidateUser(UserEntity entity)
{
if (string.IsNullOrWhiteSpace(entity.Email)) throw new InvalidOperationException("Email required");
}

private void AuditUser(UserDto dto) => dto.Tags = dto.Tags.Append("mapped").ToArray();
}
```

Hooks execute in order: `BeforeMap` runs before object creation and property assignments; `AfterMap` runs after the target is fully constructed (including constructor-based mappings).

######### Nested Objects
For nested objects, declare explicit mapper methods:

```csharp
[Mapper]
public partial class OrderMapper
{
public partial OrderDto Map(OrderEntity entity);
public partial CustomerDto Map(CustomerEntity entity); // Used for nested Customer
public partial AddressDto Map(AddressEntity entity); // Used for nested Address
}
```

######### Collections
Full support for collections — `List<T>`, `IEnumerable<T>`, `Dictionary<K,V>`, `HashSet<T>`, and arrays:

```csharp
public class Source \{ public List<ItemEntity> Items \{ get; set; \} }
public class Target \{ public List<ItemDto> Items \{ get; set; \} } // ✅ Auto-mapped
```

######### Circular Reference Detection
LoMapper detects mapper graphs that contain cycles and stops the build with diagnostic `LOM010` so you can break the loop early.

```csharp
[Mapper]
public partial class CircularMapper
{
public partial TargetA Map(SourceA source);
public partial TargetB Map(SourceB source);
}

public class SourceA \{ public SourceB? Child \{ get; set; \} }
public class SourceB \{ public SourceA? Parent \{ get; set; \} }

public class TargetA \{ public TargetB? Child \{ get; set; \} }
public class TargetB \{ public TargetA? Parent \{ get; set; \} }
```

Mapping these types produces LOM010 describing the cycle. Break one side (e.g., ignore a property or change the DTO shape) to proceed.

###### Compile-Time Diagnostics

LoMapper catches mapping issues **before your code runs**:

| Code | Severity | Description |
|------|----------|-------------|
| LOM001 | ⚠️ Warning | Target property has no matching source property |
| LOM002 | ❌ Error | Property types are incompatible |
| LOM003 | ❌ Error | Nested object requires mapper method |
| LOM004 | ❌ Error | Invalid transform method signature |
| LOM005 | ❌ Error | Source property not found |
| LOM006 | ❌ Error | Target property not found |
| LOM007 | ❌ Error | Invalid flatten property path |
| LOM008 | ❌ Error | Flatten target property not found |
| LOM009 | ❌ Error | Flatten type mismatch |
| LOM010 | ❌ Error | Circular reference detected in mapper graph |

Example:
```csharp
public class Source \{ public int Id \{ get; set; \} }
public class Target \{ public int Id \{ get; set; \} public string Extra \{ get; set; \} }

// ⚠️ LOM001: Target property 'Extra' has no matching source property
```

###### Benchmarks

**Performance**

LoMapper generates efficient code that performs well. Benchmark results mapping 10,000 objects:

| Method | Mean | Memory |
|------------|------------|-----------|
| **LoMapper** | **174 μs** | 781 KB |
| Manual | 208 μs | 781 KB |

*LoMapper matches the performance and memory characteristics of hand-written mapping code.*

The generated code uses straightforward property assignments with no reflection or runtime overhead. For most applications, the performance is more than sufficient and comparable to writing the mappings yourself.

<details>
<summary>Full Benchmark Details (Click to expand)</summary>

Tested on Intel Core i7-10870H, .NET 8.0.23, Windows 11 using BenchmarkDotNet v0.14.0.

**100 items:** 1.67 μs
**1,000 items:** 15.5 μs
**10,000 items:** 174 μs

The generated code produces clean IL that the JIT compiler can optimize effectively. Zero allocations beyond the mapped objects themselves.

[Full Results](BenchmarkDotNet.Artifacts/results/)
</details>
```bash
cd benchmarks/LoMapper.Benchmarks
dotnet run -c Release
```

###### View Generated Code

Enable generated file output in your `.csproj`:

```xml
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
</PropertyGroup>
```

Find generated files in: `obj/GeneratedFiles/LoMapper.Generator/`

###### Comparison

| Feature | LoMapper | Manual Code |
|---------|:--------:|:-----------:|
| **Performance (10K items)** | **174 μs** | 208 μs |
| Memory overhead | **0%** | - |
| Compile-time generation | ✅ | N/A |
| Zero runtime reflection | ✅ | ✅ |
| Compile-time error detection | ✅ | ✅ |
| IntelliSense support | ✅ | ✅ |
| Nested object mapping | ✅ | ✅ |
| Collection mapping | ✅ | ✅ |
| Custom transforms | ✅ | ✅ |
| Flattening/unflattening | ✅ v0.3 | Manual |
| Projection (IQueryable) | 🔜 v1.0 | Manual |

###### Why Use LoMapper?

**vs Writing Mappings Manually:**
- Less repetitive code to write and maintain
- Compile-time validation catches errors early
- Automatic updates when models change
- Similar or better performance

**When LoMapper Might Help:**
- You have many DTOs to map
- You want compile-time safety without runtime cost
- You prefer code generation over reflection
- You like seeing exactly what code runs (F12 into generated code)

**Current Limitations:**
- Expression projection for IQueryable not yet supported (planned for v1.0)
- Some advanced mapping scenarios may need manual code

LoMapper is a focused tool that does one thing well: generate simple, efficient mapping code. It's meant to complement your toolkit, not replace everything else.

###### Requirements

- .NET Standard 2.0+ (runs on .NET Core 3.1+, .NET 5+, .NET Framework 4.7.2+)
- C# 9.0+ (for partial methods)

###### Contributing

Contributions are welcome! Please read our [Contributing Guide](https://github.com/jdtoon/lomapper/CONTRIBUTING.md) first.

###### License

MIT License - see [LICENSE](https://github.com/jdtoon/lomapper/LICENSE) for details.

---

**LoMapper** — A tiny tool to help you write less mapping code.


:::
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix markdown formatting issues in the embedded README.

The "Original Readme" section contains several markdown formatting issues that should be corrected for consistency:

  1. Line 63: Heading level jumps from h4 to h6 - should use h5 instead
  2. Lines 733, 804: Headings are missing space after #
  3. Lines 756, 884: Code blocks use indented style - should use fenced blocks
  4. Lines 513, 806, 966: Fenced code blocks should specify language (likely bash)

These issues are flagged by markdownlint and affect documentation quality.

📝 Example fixes for heading and code block issues

For heading at line 63:

-###### What is LoMapper?
+##### What is LoMapper?

For headings at lines 733, 804:

-#pragma warning disable IDE0161 // 转换为文件范围限定的 namespace
+# pragma warning disable IDE0161 // 转换为文件范围限定的 namespace

For fenced blocks without language (e.g., line 513):

-```
+```bash
 cd benchmarks/LoMapper.Benchmarks
 dotnet run -c Release

</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.0)</summary>

[warning] 63-63: Heading levels should only increment by one level at a time
Expected: h4; Actual: h6

(MD001, heading-increment)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md around lines 50 - 362,
The README markdown has inconsistent heading levels, missing spaces after '#' in
some headings, indented code blocks instead of fenced blocks, and some fenced
blocks missing language tags; fix the lomapper.md by (1) changing the h6 at
"Quick Start" to an h5 to keep heading progression consistent (locate the "Quick
Start" / "Installation" headings), (2) ensure all headings like those near the
Benchmarks and Comparison sections include a space after '#' (search for
headings around "Benchmarks" and "Comparison"), (3) replace indented code
examples (e.g., the Basic Usage C# examples and any other indented blocks such
as nested code examples) with fenced code blocks using csharp, and (4) add language tags to bash snippets (e.g., the benchmarks run and project XML emit examples) using bash or ```xml as appropriate so markdownlint stops flagging
them; update all affected blocks consistently across the file.


</details>

<!-- fingerprinting:phantom:triton:puma:8eceffc3-2c64-4529-8093-0b3003898898 -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines +411 to +473
<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\loMapper\src\mapperDemo\Program.cs" label="Program.cs" >

This is the use of **lomapper** in *Program.cs*

```csharp showLineNumbers
using mapperDemo;
var p=new Person();
p.FirstName = "Andrei";
p.LastName = "Ignat";
PersonDTO dto= new UserMapper().Map(p);
Console.WriteLine(dto.FullName);

```
</TabItem>

<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\loMapper\src\mapperDemo\Person.cs" label="Person.cs" >

This is the use of **lomapper** in *Person.cs*

```csharp showLineNumbers

public partial class Person
{
public int ID \{ get; set; }
public string? FirstName \{ get; set; }
public string? LastName \{ get; set; }
}


```
</TabItem>

<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\loMapper\src\mapperDemo\PersonDTO.cs" label="PersonDTO.cs" >

This is the use of **lomapper** in *PersonDTO.cs*

```csharp showLineNumbers
using LoMapper;
using System.Xml.Serialization;

namespace mapperDemo;
public partial struct PersonDTO
{
public string? FirstName \{ get; set; }
public string? LastName \{ get; set; }

public string FullName \{
get
{
return FirstName + " " + LastName;
}
}
}


[Mapper]
public partial class UserMapper
{
[MapIgnore(nameof(Person.ID))]
public partial PersonDTO Map(Person entity);
}
```
</TabItem>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if lomapper directory exists and verify casing
fd -t d -i 'lomapper' v2/rscg_examples/ -x echo "Found: {}"
fd -t d -i 'loMapper' v2/rscg_examples/ -x echo "Found: {}"

Repository: ignatandrei/RSCG_Examples

Length of output: 134


Fix path casing to match actual directory structure.

The TabItem paths show loMapper (capital M) but the actual directory in the repository is lomapper (all lowercase). Update the paths on lines 411, 426, and 443 to use lowercase lomapper:

D:\gth\RSCG_Examples\v2\rscg_examples\lomapper\src\mapperDemo\...
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md` around lines 411 - 473,
The TabItem value attributes in the markdown use "loMapper" (capital M) but the
actual folder is "lomapper" (all lowercase); update the three TabItem value
attributes that point to Program.cs, Person.cs, and PersonDTO.cs so their value
strings use "lomapper" (lowercase m) instead of "loMapper" to match the
repository directory casing.


:::tip

[Download Example project lomapper ](/sources/lomapper.zip)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove trailing space in link text.

The download link has a trailing space before the closing bracket, which violates markdown best practices.

🔗 Proposed fix
-[Download Example project lomapper ](/sources/lomapper.zip)
+[Download Example project lomapper](/sources/lomapper.zip)
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 1001-1001: Spaces inside link text

(MD039, no-space-in-links)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@v2/rscg_examples_site/docs/RSCG-Examples/lomapper.md` at line 1001, Remove
the trailing space inside the markdown link text so it reads "[Download Example
project lomapper](/sources/lomapper.zip)" instead of "[Download Example project
lomapper ](/sources/lomapper.zip)"; update the link string in the lomapper.md
content where that exact link appears to eliminate the space before the closing
bracket.

@ignatandrei ignatandrei merged commit 79d1c60 into main Apr 4, 2026
3 checks passed
@ignatandrei ignatandrei deleted the lomapper branch April 4, 2026 07:17
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