Skip to content

Conversation

@ignatandrei
Copy link
Owner

@ignatandrei ignatandrei commented Nov 26, 2025

Summary by CodeRabbit

  • New Features

    • Added a new ASP.NET Core "Program" example (237th) showcasing OpenAPI integration with a sample Todo web API and runnable demo assets.
  • Documentation

    • Updated totals: 237 examples, 15 Microsoft-contributed examples; refreshed "Latest Update" to 06 November 2025.
    • Added detailed example pages, tour/script content, README/readme guidance, and download/share materials.
    • Reorganized categories and navigation (moved ConsoleAppFramework/CommandLine entries, updated indexes and exported lists).

✏️ Tip: You can customize this high-level summary in your review settings.

Added the 237th Roslyn Source Code Generator example: Program (Microsoft.AspNetCore.OpenApi) by Microsoft, including documentation, metadata, and example files. Updated category assignments, counts, and listings across CSV, JSON, markdown, and site documentation to reflect the new generator. Adjusted CommandLine and Console category assignments for CommandLine and ConsoleAppFramework generators.
Copilot AI review requested due to automatic review settings November 26, 2025 23:28
@coderabbitai
Copy link

coderabbitai bot commented Nov 26, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

This PR adds a new Program example (entry 237), updates counts from 236→237 and Microsoft examples from 14→15, reassigns several categories (ConsoleAppFramework/CommandLine), and introduces a full Program example project with docs, site metadata, generator data, and tour/video assets.

Changes

Cohort / File(s) Summary
Top-level metadata
README.md, later.md
Updated totals (236→237) and Microsoft count (14→15); refreshed latest-update dates; added new Program entry block.
Generator registry
v2/RSCGExamplesData/GeneratorDataRec.json
Appended new generator record for ID "Program" with AddedOn 2025-11-06.
Program example metadata & docs
v2/rscg_examples/Program/description.json, v2/rscg_examples/Program/nuget.txt, v2/rscg_examples/Program/readme.txt, v2/rscg_examples/Program/video.json, v2/rscg_examples/Program/src/TestProgram.slnx
Added generator description, NuGet note, README, video/script, and solution descriptor for the Program example.
Program project files
v2/rscg_examples/Program/src/TestProgram/TestProgram.csproj, v2/rscg_examples/Program/src/TestProgram/Program.cs, v2/rscg_examples/Program/src/TestProgram/*.http, v2/rscg_examples/Program/src/TestProgram/launchSettings.json, v2/rscg_examples/Program/src/TestProgram/appsettings*.json
New .NET 10 web project with Microsoft.AspNetCore.OpenApi reference, minimal Todo API endpoints, HTTP test requests, launch settings, and appsettings.
Code tour
v2/.tours/Program.tour
Added Code Tour JSON defining step-by-step walkthrough referencing csproj, Program.cs, and generated file.
Site category docs & lists
v2/rscg_examples_site/docs/Categories/*, v2/rscg_examples_site/docs/RSCG-Examples/index.md, v2/rscg_examples_site/docs/RSCG-Examples/Program.md, v2/rscg_examples_site/docs/indexRSCG.md, v2/rscg_examples_site/docs/about.md
Reordered category listings (added Program to EnhancementClass), moved ConsoleAppFramework/CommandLine into CommandLine category, updated counts/mermaid diagram and added Program doc page.
Site assets & exports
v2/rscg_examples_site/src/components/HomepageFeatures/index.js, v2/rscg_examples_site/static/exports/RSCG.json, v2/book/*, v2/book/pandocHTML.yaml
Updated homepage feature count string, updated/added RSCG.json entries (including Program), added book HTML page and updated pandoc inputs.
Generator string rewrites
v2/Generator/MultiGeneratorV2.cs
Extended post-render string-replacement rules to rewrite local docs/CONTRIBUTING/SECURITY/CODE-OF-CONDUCT links to generator source locations.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Browser as Browser/Client
  participant App as TestProgram (ASP.NET Core)
  Note over App: Minimal Todo API (in-memory sample)

  Browser->>App: GET /todos
  App-->>Browser: 200 OK (Todo[] JSON)

  Browser->>App: GET /todos/1
  alt found
    App-->>Browser: 200 OK (Todo JSON)
  else not found
    App-->>Browser: 404 Not Found
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

  • Areas to focus:
    • Consistency of global counts (README, site, book, homepage component, exports)
    • Category reassignments across docs and JSON exports (possible duplicates)
    • Integrity of new Program project files (csproj SDK/target settings, OpenApi package reference) and tour/video references
    • Potential duplicate "Program" entries in static/exports/RSCG.json

Possibly related PRs

  • unflat1 #401 — Modifies v2/Generator/MultiGeneratorV2.cs with link-rewrite adjustments; directly related to generator post-render replacements added here.
  • ConsoleAppFramework #407 — Similar site/README and generator updates; overlaps with category/listing rework and metadata changes.
  • first iteration #410 — Adds replacement mappings in generator readme processing; closely related to the MultiGeneratorV2 changes in this PR.

Poem

🐰 I hopped through files with curious cheer,
A Program sprouted—now two-three-seven here!
Lists rearranged and docs all dressed new,
Todo endpoints ready, and tours to view.
Carrots for reviewers — small, tidy, and true.

Pre-merge checks and finishing touches

❌ 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%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'adding program' is vague and generic; it lacks specificity about what 'program' refers to or what aspect of the system is being changed. Provide a more descriptive title that clarifies the specific addition, such as 'Add Program RSCG example with ASP.NET Core OpenAPI integration' or similar.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ProgramAspCore

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.

Copilot finished reviewing on behalf of ignatandrei November 26, 2025 23:30
@ignatandrei ignatandrei self-assigned this Nov 26, 2025
Copy link

@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: 6

🧹 Nitpick comments (5)
v2/rscg_examples/Program/readme.txt (1)

18-18: Minor: Improve writing clarity.

Consider changing "give feedback" to "provide feedback" for clearer, more professional language.

v2/rscg_examples_site/docs/RSCG-Examples/Program.md (1)

154-157: Replace hard tabs with spaces.

Lines 154-157 contain hard tabs, which can cause inconsistent rendering across different editors and platforms. Use spaces for indentation in markdown files.

Apply this diff to replace tabs with spaces:

-	<PropertyGroup>
-		<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
-		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
-	</PropertyGroup>
+  <PropertyGroup>
+    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
+    <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
+  </PropertyGroup>

As per static analysis hints.

v2/rscg_examples/Program/video.json (1)

20-21: Likely wrong CodeTour path; make it relative to the opened folder.

You open VS Code at “v2” (Line 20). The tour path “src/.tours/” (Line 29) probably won’t resolve if the file is at “v2/.tours/Program.tour”. Use “.tours/”.

-{"typeStep":"tour", "arg": "src/.tours/"},
+{"typeStep":"tour", "arg": ".tours/"},

Also applies to: 29-29

v2/rscg_examples_site/docs/indexRSCG.md (1)

23-23: Fix markdown link text formatting violations.

Static analysis flagged MD039 violations (spaces inside link text) on lines 23, 28, 152, and 281. While this formatting appears consistent with the file's existing style, it violates linting rules. Apply this diff to align with markdown best practices:

-|237| [Program by Microsoft ](/docs/Program)|2025-11-06 => 06 November 2025 | [EnhancementClass](/docs/Categories/EnhancementClass) |
+|237| [Program by Microsoft](/docs/Program)|2025-11-06 => 06 November 2025 | [EnhancementClass](/docs/Categories/EnhancementClass) |

-|232| [ConsoleAppFramework by Cysharp, Inc. ](/docs/ConsoleAppFramework)|2025-10-02 => 02 October 2025 | [CommandLine](/docs/Categories/CommandLine) |
+|232| [ConsoleAppFramework by Cysharp, Inc.](/docs/ConsoleAppFramework)|2025-10-02 => 02 October 2025 | [CommandLine](/docs/Categories/CommandLine) |

-|108| [CommandLine by DotMake ](/docs/CommandLine)|2024-02-11 => 11 February 2024 | [CommandLine](/docs/Categories/CommandLine) |
+|108| [CommandLine by DotMake](/docs/CommandLine)|2024-02-11 => 11 February 2024 | [CommandLine](/docs/Categories/CommandLine) |

-|237| [Program  by Microsoft ](/docs/Program)|2025-11-06 => 06 November 2025 | EnhancementClass |
+|237| [Program by Microsoft](/docs/Program)|2025-11-06 => 06 November 2025 | EnhancementClass |

Also applies to: 28-28, 152-152, 281-281

v2/rscg_examples/Program/src/TestProgram/Program.cs (1)

44-48: Correct source generation setup.

The AppJsonSerializerContext is properly configured with the JsonSerializable attribute for Todo[], enabling the source generator to create optimized serialization code. The partial class and empty body are correct—the source generator fills in the implementation.

Optional formatting nit: Line 47 contains an unnecessary blank line that could be removed for consistency.

 [JsonSerializable(typeof(Todo[]))]
 internal partial class AppJsonSerializerContext : JsonSerializerContext
 {
-
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 75f3d0e and 30d8eb3.

⛔ 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 (29)
  • README.md (4 hunks)
  • later.md (1 hunks)
  • v2/.tours/Program.tour (1 hunks)
  • v2/RSCGExamplesData/GeneratorDataRec.json (1 hunks)
  • v2/rscg_examples/Program/description.json (1 hunks)
  • v2/rscg_examples/Program/nuget.txt (1 hunks)
  • v2/rscg_examples/Program/readme.txt (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram.slnx (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram/Program.cs (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram/Properties/launchSettings.json (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram/TestProgram.csproj (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram/TestProgram.http (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram/appsettings.Development.json (1 hunks)
  • v2/rscg_examples/Program/src/TestProgram/appsettings.json (1 hunks)
  • v2/rscg_examples/Program/video.json (1 hunks)
  • v2/rscg_examples_site/docs/Categories/CommandLine.md (1 hunks)
  • v2/rscg_examples_site/docs/Categories/Console.md (1 hunks)
  • v2/rscg_examples_site/docs/Categories/EnhancementClass.md (2 hunks)
  • v2/rscg_examples_site/docs/Categories/EnhancementProject.md (2 hunks)
  • v2/rscg_examples_site/docs/Categories/_PrimitiveCommandLine.mdx (1 hunks)
  • v2/rscg_examples_site/docs/Categories/_PrimitiveConsole.mdx (1 hunks)
  • v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementClass.mdx (1 hunks)
  • v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementProject.mdx (1 hunks)
  • v2/rscg_examples_site/docs/RSCG-Examples/Program.md (1 hunks)
  • v2/rscg_examples_site/docs/RSCG-Examples/index.md (6 hunks)
  • v2/rscg_examples_site/docs/about.md (1 hunks)
  • v2/rscg_examples_site/docs/indexRSCG.md (5 hunks)
  • v2/rscg_examples_site/src/components/HomepageFeatures/index.js (1 hunks)
  • v2/rscg_examples_site/static/exports/RSCG.json (3 hunks)
🧰 Additional context used
🪛 Biome (2.1.2)
v2/rscg_examples/Program/video.json

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

(parse)


[error] 36-36: unexpected character =

(parse)


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

Remove " "

(parse)


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

Remove }

(parse)


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

Expected an array, an object, or a literal here.

(parse)

🪛 LanguageTool
v2/rscg_examples/Program/readme.txt

[style] ~18-~18: Try using a synonym here to strengthen your writing.
Context: ...ues. ## How to engage, contribute, and give feedback Some of the best ways to cont...

(GIVE_PROVIDE)

v2/rscg_examples_site/docs/RSCG-Examples/Program.md

[style] ~71-~71: Try using a synonym here to strengthen your writing.
Context: ...ues. ## How to engage, contribute, and give feedback Some of the best ways to cont...

(GIVE_PROVIDE)

🪛 markdownlint-cli2 (0.18.1)
README.md

42-42: Bare URL used

(MD034, no-bare-urls)

v2/rscg_examples_site/docs/RSCG-Examples/Program.md

31-31: Bare URL used

(MD034, no-bare-urls)


36-36: Bare URL used

(MD034, no-bare-urls)


39-39: Bare URL used

(MD034, no-bare-urls)


41-41: Bare URL used

(MD034, no-bare-urls)


54-54: Heading style
Expected: atx; Actual: setext

(MD003, heading-style)


78-78: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


79-79: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


93-93: Bare URL used

(MD034, no-bare-urls)


104-104: Link text should be descriptive

(MD059, descriptive-link-text)


104-104: Link text should be descriptive

(MD059, descriptive-link-text)


154-154: Hard tabs
Column: 1

(MD010, no-hard-tabs)


155-155: Hard tabs
Column: 1

(MD010, no-hard-tabs)


156-156: Hard tabs
Column: 1

(MD010, no-hard-tabs)


157-157: Hard tabs
Column: 1

(MD010, no-hard-tabs)


247-247: Spaces inside link text

(MD039, no-space-in-links)


261-261: Bare URL used

(MD034, no-bare-urls)

v2/rscg_examples_site/docs/indexRSCG.md

23-23: Spaces inside link text

(MD039, no-space-in-links)


24-24: Spaces inside link text

(MD039, no-space-in-links)


25-25: Spaces inside link text

(MD039, no-space-in-links)


26-26: Spaces inside link text

(MD039, no-space-in-links)


27-27: Spaces inside link text

(MD039, no-space-in-links)


28-28: Spaces inside link text

(MD039, no-space-in-links)


152-152: Spaces inside link text

(MD039, no-space-in-links)


281-281: Spaces inside link text

(MD039, no-space-in-links)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: CodeQL analysis (csharp)
  • GitHub Check: call-workflow-passing-data / build (24.3.0)
🔇 Additional comments (33)
v2/rscg_examples_site/docs/about.md (1)

8-10: Count update aligned with new example

Line 9 now states 237 RSCG examples, which matches the new Program entry and the updated totals elsewhere in the PR. No further changes needed here.

later.md (1)

3-3: “Latest Update” date is consistent

Line 3’s date (2025-11-06 => 06 November 2025) is consistent with the new Program entry’s start date in the data files. Looks good.

v2/RSCGExamplesData/GeneratorDataRec.json (1)

1431-1437: New Program generator record is well-formed

The added Program entry (Line 1433–Line 1437) has valid JSON syntax, uses Category 5 (matching the EnhancementClass documentation), and a dtStart aligned with the latest update date. No structural issues spotted.

v2/rscg_examples/Program/src/TestProgram/appsettings.Development.json (1)

1-8: Development logging configuration is sensible

The logging levels (Line 2–Line 6) follow typical ASP.NET Core defaults for development (Informational app logs, ASP.NET Core at Warning). This is appropriate for a sample and needs no changes.

v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementClass.mdx (1)

39-57: Program correctly wired into EnhancementClass category list

Lines 39–57 insert Program at position 19 and shift subsequent generators while keeping numbering consistent, and add ThisClass at position 28. The links and ordering look coherent with the category’s intent.

v2/rscg_examples/Program/src/TestProgram/TestProgram.http (1)

1-11: HTTP requests match the described API surface

The HTTP file defines a host variable and two GET requests to /todos/ and /todos/1 with JSON Accept headers (Line 1–Line 9), which aligns with the minimal API endpoints described for this sample. This should work smoothly with the provided launch settings.

v2/rscg_examples/Program/src/TestProgram/TestProgram.csproj (1)

1-18: Project configuration is consistent with an AOT + generator sample

The project file (Line 1–Line 18) is a clean minimal web setup with nullable enabled, AOT publishing, and compiler-generated files redirected for inspection, which fits the RSCG example pattern. Nothing problematic stands out here.

v2/rscg_examples/Program/src/TestProgram.slnx (1)

1-3: Solution descriptor correctly references the new project

The .slnx file (Line 1–Line 3) cleanly references the TestProgram project and is sufficient for tooling that understands this format. No changes needed.

v2/rscg_examples/Program/description.json (1)

1-26: Well-structured metadata.

The JSON is properly formatted with accurate generator information, appropriate metadata, and correct exclusions for generated namespace filtering.

v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementProject.mdx (1)

1-41: Documentation links properly reorganized.

The reordering reflects the category reorganization described in the PR. Entries are consistent with corresponding changes in EnhancementProject.md and related category files.

v2/rscg_examples/Program/src/TestProgram/Properties/launchSettings.json (1)

1-15: Standard launch configuration looks good.

The settings are appropriate for a development Web API example, with browser launch at the todos endpoint and Development environment variables properly configured.

v2/rscg_examples_site/docs/Categories/EnhancementProject.md (1)

1-41: Category count and ordering consistent.

The update from the previous count to 19 items and the reordered entries properly reflect the category reorganization across the PR. Documentation links match the primitive file changes.

v2/rscg_examples_site/docs/Categories/_PrimitiveCommandLine.mdx (1)

1-11: CommandLine category properly updated with new entries.

The addition of CommandLine and ConsoleAppFramework to this category, bringing the count to 3, aligns with the PR's category reorganization objective.

v2/rscg_examples_site/docs/Categories/CommandLine.md (1)

1-10: CommandLine category count updated correctly.

The count now reflects 3 entries (from 1 previously), with CommandLine and ConsoleAppFramework properly listed. Consistent with primitive file changes and the category reorganization.

v2/rscg_examples/Program/src/TestProgram/appsettings.json (1)

1-9: Standard development configuration.

Logging levels are appropriately set for a development example, and the permissive AllowedHosts setting is acceptable for example code.

v2/rscg_examples_site/docs/Categories/_PrimitiveConsole.mdx (1)

3-3: LGTM! Consistent category reorganization.

The update correctly renumbers Figgle to position 1 after removing ConsoleAppFramework from the Console category.

v2/rscg_examples_site/src/components/HomepageFeatures/index.js (1)

7-7: LGTM! Accurate count update.

The title correctly reflects the addition of the new Program example, bringing the total to 237 examples with 15 from Microsoft.

v2/rscg_examples_site/docs/Categories/Console.md (1)

3-5: LGTM! Correct category count and numbering.

The Console category correctly reflects 1 remaining RSCG after removing ConsoleAppFramework, with Figgle properly renumbered.

v2/rscg_examples/Program/nuget.txt (1)

1-3: LGTM! Clear package description.

The file provides accurate information about the Microsoft.AspNetCore.OpenApi package with proper source attribution.

v2/rscg_examples_site/docs/Categories/EnhancementClass.md (2)

3-3: LGTM! Correct category count update.

The total count correctly reflects 28 RSCG entries in the EnhancementClass category after adding Program.


41-59: LGTM! Proper insertion and renumbering.

The new Program entry is correctly inserted at position 19, with all subsequent items properly renumbered to maintain sequential ordering.

v2/.tours/Program.tour (1)

14-16: Verify the pattern in step 2.

The pattern "this is the code" doesn't appear in Program.cs. CodeTour patterns help navigate to specific code locations, so a non-matching pattern may prevent proper highlighting.

Consider using a pattern that exists in Program.cs, such as "WebApplication.CreateSlimBuilder" or "MapGroup".

v2/rscg_examples_site/docs/RSCG-Examples/index.md (1)

256-272: Counts and diagram look aligned; nice reclassification.

CommandLine/Console counts and the mermaid edges for CommandLine/Program match the lists. Please re-run the site export to ensure the totals (237/28/19) stay consistent with static exports and nav.

Also applies to: 278-284, 463-604, 1671-1672

v2/rscg_examples_site/static/exports/RSCG.json (3)

862-868: Verify category reassignment for CommandLine entry.

The category update from "EnhancementProject" to "CommandLine" (Line 866) is consistent with the markdown updates. Ensure this categorization aligns with the entry's intended purpose and doesn't break any upstream dependencies or queries that relied on the prior "EnhancementProject" classification.


1854-1860: Verify category reassignment for ConsoleAppFramework entry.

The category update from "Console" to "CommandLine" (Line 1858) is consistent with the markdown updates. Ensure downstream consumers and category filters handle this transition correctly.


1893-1900: NuGet package link is correct and intentional—no issue found.

The documentation confirms that Microsoft.AspNetCore.OpenApi is the correct NuGet package. While the package's primary purpose is OpenAPI documentation generation, it includes the PublicTopLevelProgramGenerator source generator that creates a public partial Program class for top-level statement apps. The entry title "Program" refers to this RSCG component within the package. The documentation explicitly references the source generator (PublicProgramSourceGenerator/PublicTopLevelProgramGenerator) and shows generated output, confirming this is a legitimate RSCG catalog entry.

v2/rscg_examples_site/docs/indexRSCG.md (2)

10-12: Totals updated correctly for new Program entry.

Count increments from 236 to 237 total RSCG, and from 14 to 15 Microsoft entries, are consistent and accurate.


23-23: AI summary inconsistency flagged.

The AI summary claims two duplicate "Program" entries were added to the JSON export with identical properties. However, the actual JSON (lines 1893–1900) contains exactly one Program entry. The markdown also reflects a single Program entry at position 237. Verify the summary generation; this discrepancy may indicate a summarization error.

v2/rscg_examples/Program/src/TestProgram/Program.cs (5)

1-12: Excellent setup for a minimal API with source-generated JSON serialization!

The use of CreateSlimBuilder combined with configuring AppJsonSerializerContext for source-generated serialization demonstrates modern best practices for performance and AOT/trim compatibility. The OpenAPI integration is also correctly configured.


14-19: LGTM!

Correctly restricts OpenAPI mapping to the development environment, which is a security best practice.


21-28: LGTM!

The sample data uses modern collection expressions and provides good variety for demonstrating the API endpoints.


30-38: LGTM!

The endpoint implementation demonstrates excellent modern ASP.NET Core patterns:

  • Route grouping for organization
  • Typed results (Results<Ok<Todo>, NotFound>) for better OpenAPI documentation
  • Pattern matching with FirstOrDefault for concise null handling
  • Named endpoints for link generation support

42-42: LGTM!

The Todo record uses modern C# syntax with positional parameters and sensible defaults.

Comment on lines +42 to +44
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436

Nuget: [https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Replace bare URL with a proper Markdown link (lint: MD034).

Avoid bare URLs to satisfy markdownlint.

-This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436 
+This package was built from the source code at [github.com/dotnet/aspnetcore/tree/e77cb01](https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436)
📝 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
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436
Nuget: [https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi)
This package was built from the source code at [github.com/dotnet/aspnetcore/tree/e77cb01](https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436)
Nuget: [https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi)
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

42-42: Bare URL used

(MD034, no-bare-urls)

🤖 Prompt for AI Agents
In README.md around lines 42 to 44, a bare URL
(https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436)
is used which violates markdownlint MD034; replace the bare URL with a proper
Markdown link (e.g., provide descriptive link text and wrap the URL in
parentheses) so the GitHub source is presented as [Repository or descriptive
text](https://github.com/...) rather than a raw URL, leaving the existing NuGet
markdown link unchanged.


</TabItem>

<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\Program.cs" label="Program.cs" >
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove absolute Windows path from tab label.

The tab label contains an absolute Windows file system path (D:\gth\RSCG_Examples\...), which:

  • Exposes local development environment details
  • Is not portable across different systems
  • Is inconsistent with documentation standards

Apply this diff to use a relative path:

-  <TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\Program.cs" label="Program.cs" >
+  <TabItem value="Program.cs" label="Program.cs" >
📝 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
<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\Program.cs" label="Program.cs" >
<TabItem value="Program.cs" label="Program.cs" >
🤖 Prompt for AI Agents
In v2/rscg_examples_site/docs/RSCG-Examples/Program.md around line 164, the
TabItem value contains an absolute Windows path
("D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\Program.cs");
replace it with a repository-relative path (for example
"Program/src/TestProgram/Program.cs" or the correct relative path within the
repo) so the label is portable and does not expose local machine details,
ensuring the TabItem value is consistent with documentation standards.

.WithName("GetTodos");

todosApi.MapGet("/{id}", Results<Ok<Todo>, NotFound> (int id) =>
sampleTodos.FirstOrDefault(a => a.Id == id) is \{ \} todo
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix escaped braces in C# pattern matching syntax.

The backslashes before the braces (\{ \}) are incorrect and will be displayed literally in the documentation. This breaks the C# pattern matching syntax.

Apply this diff:

-    sampleTodos.FirstOrDefault(a => a.Id == id) is \{ \} todo
+    sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo
📝 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
sampleTodos.FirstOrDefault(a => a.Id == id) is \{ \} todo
sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo
🤖 Prompt for AI Agents
In v2/rscg_examples_site/docs/RSCG-Examples/Program.md around line 203, the C#
pattern-matching braces are escaped ("\{ \}") and thus render literally; remove
the backslashes so the snippet reads with normal braces (e.g., "is { } todo" or
"is {} todo" as appropriate) to restore correct C# syntax and display.

<Tabs>


<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\obj\GX\Microsoft.AspNetCore.App.SourceGenerators\Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator\PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove absolute Windows path from generated file tab label.

Similar to Line 164, this tab label contains an absolute Windows path that should be replaced with a relative path.

Apply this diff:

-<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\obj\GX\Microsoft.AspNetCore.App.SourceGenerators\Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator\PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >
+<TabItem value="PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >
📝 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
<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\obj\GX\Microsoft.AspNetCore.App.SourceGenerators\Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator\PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >
<TabItem value="PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >

Comment on lines +1 to +65
ASP.NET Core
============

[![.NET Foundation](https://img.shields.io/badge/.NET%20Foundation-blueviolet.svg)](https://www.dotnetfoundation.org/)
[![MIT License](https://img.shields.io/github/license/dotnet/aspnetcore?color=%230b0&style=flat-square)](https://github.com/dotnet/aspnetcore/blob/main/LICENSE.txt) [![Help Wanted](https://img.shields.io/github/issues/dotnet/aspnetcore/help%20wanted?color=%232EA043&label=help%20wanted&style=flat-square)](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) [![Good First Issues](https://img.shields.io/github/issues/dotnet/aspnetcore/good%20first%20issue?color=%23512BD4&label=good%20first%20issue&style=flat-square)](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
[![Discord](https://img.shields.io/discord/732297728826277939?style=flat-square&label=Discord&logo=discord&logoColor=white&color=7289DA)](https://aka.ms/dotnet-discord)

ASP.NET Core is an open-source and cross-platform framework for building modern cloud-based internet-connected applications, such as web apps, IoT apps, and mobile backends. ASP.NET Core apps run on [.NET](https://dot.net), a free, cross-platform, and open-source application runtime. It was architected to provide an optimized development framework for apps that are deployed to the cloud or run on-premises. It consists of modular components with minimal overhead, so you retain flexibility while constructing your solutions. You can develop and run your ASP.NET Core apps cross-platform on Windows, Mac, and Linux. [Learn more about ASP.NET Core](https://learn.microsoft.com/aspnet/core/).

## Get started

Follow the [Getting Started](https://learn.microsoft.com/aspnet/core/getting-started) instructions.

Also check out the [.NET Homepage](https://www.microsoft.com/net) for released versions of .NET, getting started guides, and learning resources.

See the [Triage Process](https://github.com/dotnet/aspnetcore/blob/main/docs/TriageProcess.md) document for more information on how we handle incoming issues.

## How to engage, contribute, and give feedback

Some of the best ways to contribute are to try things out, file issues, join in design conversations,
and make pull-requests.

* [Download our latest daily builds](./docs/DailyBuilds.md)
* Follow along with the development of ASP.NET Core:
* [Community Standup](https://live.asp.net): The community standup is held every week and streamed live on YouTube. You can view past standups in the linked playlist.
* [Roadmap](https://aka.ms/aspnet/roadmap): The schedule and milestone themes for ASP.NET Core.
* [Build ASP.NET Core source code](./docs/BuildFromSource.md)
* Check out the [contributing](CONTRIBUTING.md) page to see the best places to log issues and start discussions.

## Reporting security issues and bugs

Security issues and bugs should be reported privately to the Microsoft Security Response Center (MSRC) via the [MSRC Researcher Portal](https://msrc.microsoft.com/report/vulnerability/new). You should receive a response within 24 hours. Further information can be found in the [MSRC Report an Issue FAQ](https://www.microsoft.com/msrc/faqs-report-an-issue). You can also find these instructions in this repo's [Security doc](SECURITY.md).

Also see info about related [Microsoft .NET Bounty Program](https://www.microsoft.com/msrc/bounty-dot-net-core).

## Related projects

These are some other repos for related projects:

* [Documentation](https://github.com/aspnet/Docs) - documentation sources for https://learn.microsoft.com/aspnet/core/
* [Entity Framework Core](https://github.com/dotnet/efcore) - data access technology
* [Runtime](https://github.com/dotnet/runtime) - cross-platform runtime for cloud, mobile, desktop, and IoT apps
* [Razor](https://github.com/dotnet/razor) - the Razor compiler and tooling for working with Razor syntax (.cshtml, .razor)

## Code of conduct

See [CODE-OF-CONDUCT](./CODE-OF-CONDUCT.md)

## Nightly builds

This table includes links to download the latest builds of the ASP.NET Core Shared Framework. Also included are links to download the Windows Hosting Bundle, which includes the ASP.NET Core Shared Framework, the .NET Runtime Shared Framework, and the IIS plugin (ASP.NET Core Module). You can download the latest .NET Runtime builds [here](https://github.com/dotnet/runtime/blob/main/docs/project/dogfooding.md#nightly-builds-table), and the latest .NET SDK builds [here](https://github.com/dotnet/installer#table). **If you're unsure what you need, then install the SDK; it has everything except the IIS plugin.**

| Platform | Shared Framework (Installer) | Shared Framework (Binaries) | Hosting Bundle (Installer) |
| :--------- | :----------: | :----------: | :----------: |
| **Windows x64** | [Installer](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-win-x64.exe) | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-win-x64.zip) | [Installer](https://aka.ms/dotnet/10.0/daily/dotnet-hosting-win.exe) |
| **Windows x86** | [Installer](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-win-x86.exe) | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-win-x86.zip) | [Installer](https://aka.ms/dotnet/10.0/daily/dotnet-hosting-win.exe) |
| **Windows arm64** | [Installer](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-win-arm64.exe) | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-win-arm64.zip) | [Installer](https://aka.ms/dotnet/10.0/daily/dotnet-hosting-win.exe) |
| **macOS x64** | **N/A** | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-osx-x64.tar.gz) | **N/A** |
| **macOS arm64** | **N/A** | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-osx-arm64.tar.gz) | **N/A** |
| **Linux x64** | [Deb Installer](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-x64.deb) - [RPM Installer](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-x64.rpm) | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-linux-x64.tar.gz) | **N/A** |
| **Linux arm** | **N/A** | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-linux-arm.tar.gz) | **N/A** |
| **Linux arm64** | [RPM Installer](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-aarch64.rpm) | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-linux-arm64.tar.gz) | **N/A** |
| **Linux-musl-x64** | **N/A** | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-linux-musl-x64.tar.gz) | **N/A** |
| **Linux-musl-arm** | **N/A** | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-linux-musl-arm.tar.gz) | **N/A** |
| **Linux-musl-arm64** | **N/A** | [Binaries](https://aka.ms/dotnet/10.0/daily/aspnetcore-runtime-linux-musl-arm64.tar.gz) | **N/A** |
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Replace with a focused example README.

This file contains the full ASP.NET Core framework README, which is off-topic for an RSCG example project. The example should have a concise README explaining what this specific Program.cs generation example demonstrates—e.g., the minimal Web API pattern, OpenAPI integration, and how the source generator is used.

Consider replacing this with a focused README like:

# Program.cs Example

This example demonstrates the use of `PublicTopLevelProgramGenerator` from Microsoft.AspNetCore.OpenApi to generate a minimal Web API with OpenAPI support.

## What it shows
- Generated Program.cs with top-level statements
- OpenAPI (Swagger) integration
- Todo API endpoints
- Development vs. production configuration

## Running the example
1. Open the solution or project
2. Run the application
3. Navigate to http://localhost:5219/todos

## Related files
- `Program.cs` - Generated entry point with Web API
- `launchSettings.json` - Local development configuration
- `TestProgram.http` - HTTP request samples
🧰 Tools
🪛 LanguageTool

[style] ~18-~18: Try using a synonym here to strengthen your writing.
Context: ...ues. ## How to engage, contribute, and give feedback Some of the best ways to cont...

(GIVE_PROVIDE)

🤖 Prompt for AI Agents
In v2/rscg_examples/Program/readme.txt lines 1-65, the file currently contains
the full ASP.NET Core framework README which is off-topic for this example;
replace it with a concise, focused README describing what this specific
Program.cs generation example demonstrates (e.g., PublicTopLevelProgramGenerator
usage, minimal Web API pattern, OpenAPI/Swagger integration, Todo endpoints, dev
vs prod behavior), include brief sections: What it shows, Running the example
(steps to open/run and sample URL), and Related files (Program.cs,
launchSettings.json, TestProgram.http); remove the unrelated framework content
and ensure the new README is short, example-specific, and clearly points to the
generated Program.cs and how to exercise the sample.

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

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix JSON parse errors (invalid key syntax).

The object uses SpeakTest=" " which is not valid JSON. Use a quoted key and colon.

Apply this patch:

-{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-",
-SpeakTest=" "},
+{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-",
+"SpeakTest": " "},
📝 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/Program#download-example-net--c-",
SpeakTest=" "},
{"typeStep":"waitseconds","arg":"30"},
]
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-",
"SpeakTest": " "},
{"typeStep":"waitseconds","arg":"30"},
]
🧰 Tools
🪛 Biome (2.1.2)

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

(parse)


[error] 36-36: unexpected character =

(parse)


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

Remove " "

(parse)


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

Remove }

(parse)


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

Expected an array, an object, or a literal here.

(parse)

🤖 Prompt for AI Agents
In v2/rscg_examples/Program/video.json around lines 35 to 38, the JSON object
uses invalid key syntax SpeakTest=" " which breaks parsing; replace it with a
proper JSON key/value pair "SpeakTest": " " and ensure the surrounding object
uses commas and colons correctly (e.g.,
{"typeStep":"browser","arg":"https://...","SpeakTest":" "},) so the array and
JSON remain valid.

Copy link
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 Roslyn Source Code Generator (RSCG) example called "Program" from Microsoft, which generates a public partial Program class for ASP.NET Core applications using top-level statements. This brings the total count to 237 RSCG examples (15 from Microsoft).

Key Changes

  • Added new "Program" RSCG example (#237) demonstrating the PublicTopLevelProgramGenerator from Microsoft.AspNetCore.OpenApi
  • Recategorized two existing RSCGs: "CommandLine" and "ConsoleAppFramework" moved to the CommandLine category
  • Updated all documentation counts from 236→237 examples and 14→15 Microsoft examples

Reviewed changes

Copilot reviewed 30 out of 31 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
v2/rscg_examples_site/static/exports/RSCG.json Added Program entry and updated categories for CommandLine and ConsoleAppFramework
v2/rscg_examples_site/static/exports/RSCG.xlsx Added binary Excel export file with updated data
v2/rscg_examples_site/docs/RSCG-Examples/Program.md New comprehensive documentation for Program RSCG with usage examples
v2/rscg_examples_site/docs/indexRSCG.md Updated main index with new entry and corrected counts
v2/rscg_examples_site/src/components/HomepageFeatures/index.js Updated homepage feature count
v2/rscg_examples/Program/src/TestProgram/Program.cs Added ASP.NET Core minimal API example demonstrating the generator
v2/rscg_examples/Program/video.json Added video script configuration for the example
v2/.tours/Program.tour Added VS Code tour configuration for the example
v2/rscg_examples_site/docs/Categories/*.md Updated category pages with new counts and entry placements
README.md Updated main README with new example and corrected counts

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

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

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

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

Pattern description is unclear. The value "this is the code" doesn't meaningfully describe what pattern should be matched in Program.cs. Consider using a more specific pattern that helps locate the relevant code section, or a descriptive comment that exists in the file.

Suggested change
"pattern": "this is the code"
"pattern": "// Program entry point"

Copilot uses AI. Check for mistakes.
Comment on lines +36 to +37
SpeakTest=" "},
{"typeStep":"waitseconds","arg":"30"},
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

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

Missing comma after the last array element. The JSON array has a trailing comma after the last object (line 37), which will cause a parse error in strict JSON parsers.

Suggested change
SpeakTest=" "},
{"typeStep":"waitseconds","arg":"30"},
SpeakTest=" "}
{"typeStep":"waitseconds","arg":"30"}

Copilot uses AI. Check for mistakes.
Comment on lines +35 to +36
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-",
SpeakTest=" "},
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

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

Inconsistent property naming in JSON object. Line 36 has SpeakTest=" " instead of using the camelCase pattern speakTest or "arg" key like other properties in the array. This inconsistency could cause issues if the parser expects specific property names.

Suggested change
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-",
SpeakTest=" "},
{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-"},

Copilot uses AI. Check for mistakes.
.WithName("GetTodos");

todosApi.MapGet("/{id}", Results<Ok<Todo>, NotFound> (int id) =>
sampleTodos.FirstOrDefault(a => a.Id == id) is \{ \} todo
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

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

Escaped curly braces in markdown code block. The braces in is \{ \} should be is { }. The backslash escaping is unnecessary and will be displayed in the rendered markdown.

Suggested change
sampleTodos.FirstOrDefault(a => a.Id == id) is \{ \} todo
sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo

Copilot uses AI. Check for mistakes.
/// <summary>
/// Auto-generated public partial Program class for top-level statement apps.
/// </summary>
public partial class Program \{ }
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

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

Escaped curly braces in markdown code block. The braces in public partial class Program \{ } should be public partial class Program { }. The backslash escaping is unnecessary and will be displayed in the rendered markdown.

Suggested change
public partial class Program \{ }
public partial class Program { }

Copilot uses AI. Check for mistakes.
Added a new example for RSCG 237 (Program) including HTML documentation and downloadable source zip. Updated the list and YAML to include the new example, adjusted link replacements in MultiGeneratorV2.cs for better path handling, and improved external link references in Program.md. Also updated the RSCG.xlsx export file.
Copy link

@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: 0

♻️ Duplicate comments (4)
v2/rscg_examples_site/docs/RSCG-Examples/Program.md (4)

164-164: Remove absolute Windows path from tab label.

The TabItem value contains an absolute Windows file system path that should be replaced with a repository-relative path. This was flagged in a previous review and remains unresolved.

-  <TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\Program.cs" label="Program.cs" >
+  <TabItem value="Program.cs" label="Program.cs" >

203-203: Fix escaped braces in C# pattern matching syntax.

The backslashes before the braces (\{ \}) are incorrect and will be displayed literally in the documentation, breaking the C# pattern matching syntax. This was flagged in previous reviews and remains unresolved.

-    sampleTodos.FirstOrDefault(a => a.Id == id) is \{ \} todo
+    sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo

229-229: Remove absolute Windows path from generated file tab label.

The TabItem value contains an absolute Windows path that should be replaced with a relative path or simple filename. This was flagged in a previous review and remains unresolved.

-<TabItem value="D:\gth\RSCG_Examples\v2\rscg_examples\Program\src\TestProgram\obj\GX\Microsoft.AspNetCore.App.SourceGenerators\Microsoft.AspNetCore.SourceGenerators.PublicProgramSourceGenerator\PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >
+<TabItem value="PublicTopLevelProgram.Generated.g.cs" label="PublicTopLevelProgram.Generated.g.cs" >

235-235: Fix escaped braces in generated code example.

The backslashes before the braces (\{ \}) are incorrect and will be displayed literally in the documentation. This was flagged in previous reviews and remains unresolved.

-public partial class Program \{ }
+public partial class Program { }
🧹 Nitpick comments (2)
v2/rscg_examples_site/docs/RSCG-Examples/Program.md (1)

154-157: Replace hard tabs with spaces in XML snippet.

Lines 154–157 contain hard tabs that should be converted to spaces for consistent formatting in the documentation.

  </PropertyGroup>
-
-	<PropertyGroup>
-		<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
-		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
-	</PropertyGroup>
+
+  <PropertyGroup>
+    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
+    <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
+  </PropertyGroup>
v2/Generator/MultiGeneratorV2.cs (1)

141-152: New link rewrites look correct; consider de‑duplicating and consolidating rules

The added replacements for "(./docs/", "(CONTRIBUTING", "(SECURITY", and "(./CODE-OF-CONDUCT" correctly normalize more relative links to d.Generator!.Source and should behave as intended, including cases like "(CONTRIBUTING.md#section)".

There are a couple of small maintainability nits you might want to tidy up later:

  • "(./docs/" is now handled twice (here and again at Line 209). The second call is a no‑op after the first, so one of them can be removed.
  • The generic rules for "(CONTRIBUTING", "(SECURITY", and "(./CODE-OF-CONDUCT" make the more specific .md variants at Lines 210–214 largely redundant. They’re harmless, but you could either:
    • Remove the now‑superfluous specific rules, or
    • Move all of these patterns into a small table (old → new) and loop over it to keep this block from growing more error‑prone.

Functionally this is fine; these are just optional cleanups for clarity and to avoid subtle future ordering issues as more patterns are added.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 30d8eb3 and d85203b.

⛔ Files ignored due to path filters (2)
  • v2/rscg_examples_site/static/exports/RSCG.xlsx is excluded by !**/*.xlsx
  • v2/rscg_examples_site/static/sources/Program.zip is excluded by !**/*.zip
📒 Files selected for processing (5)
  • v2/Generator/MultiGeneratorV2.cs (1 hunks)
  • v2/book/examples/Program.html (1 hunks)
  • v2/book/list.html (2 hunks)
  • v2/book/pandocHTML.yaml (1 hunks)
  • v2/rscg_examples_site/docs/RSCG-Examples/Program.md (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • v2/book/list.html
  • v2/book/examples/Program.html
🧰 Additional context used
🧬 Code graph analysis (1)
v2/Generator/MultiGeneratorV2.cs (1)
v2/Generator/Generator.cs (1)
  • Generator (4-145)
🪛 LanguageTool
v2/rscg_examples_site/docs/RSCG-Examples/Program.md

[style] ~71-~71: Try using a synonym here to strengthen your writing.
Context: ...ues. ## How to engage, contribute, and give feedback Some of the best ways to cont...

(GIVE_PROVIDE)

🪛 markdownlint-cli2 (0.18.1)
v2/rscg_examples_site/docs/RSCG-Examples/Program.md

31-31: Bare URL used

(MD034, no-bare-urls)


36-36: Bare URL used

(MD034, no-bare-urls)


39-39: Bare URL used

(MD034, no-bare-urls)


41-41: Bare URL used

(MD034, no-bare-urls)


54-54: Heading style
Expected: atx; Actual: setext

(MD003, heading-style)


78-78: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


79-79: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


93-93: Bare URL used

(MD034, no-bare-urls)


104-104: Link text should be descriptive

(MD059, descriptive-link-text)


104-104: Link text should be descriptive

(MD059, descriptive-link-text)


154-154: Hard tabs
Column: 1

(MD010, no-hard-tabs)


155-155: Hard tabs
Column: 1

(MD010, no-hard-tabs)


156-156: Hard tabs
Column: 1

(MD010, no-hard-tabs)


157-157: Hard tabs
Column: 1

(MD010, no-hard-tabs)


247-247: Spaces inside link text

(MD039, no-space-in-links)


261-261: Bare URL used

(MD034, no-bare-urls)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: call-workflow-passing-data / build (24.3.0)
🔇 Additional comments (1)
v2/book/pandocHTML.yaml (1)

252-253: Inconsistency between AI summary and code state.

The AI-generated summary states "Removed input-file: examples/validly.html," but line 252 still shows - examples/validly.html without a removal marker, while line 253 adds - examples/Program.html. This means both entries are present, which would increase the example count from 236 to 238 (not 237 as the PR objective indicates).

Verify that this change aligns with the PR intent: if validly.html should be removed and replaced by Program.html (net +1), then line 252 should be removed. If both should remain, the example count should be 238, not 237.

@ignatandrei ignatandrei merged commit 274d3a1 into main Nov 26, 2025
3 checks passed
@ignatandrei ignatandrei deleted the ProgramAspCore branch November 26, 2025 23:53
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