-
-
Notifications
You must be signed in to change notification settings - Fork 6
adding program #422
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
adding program #422
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,6 @@ | ||
| # Just later | ||
|
|
||
| ## Latest Update : 2025-10-06 => 06 October 2025 | ||
| ## Latest Update : 2025-11-06 => 06 November 2025 | ||
|
|
||
|
|
||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,30 @@ | ||||||
|
|
||||||
| { | ||||||
| "$schema": "https://aka.ms/codetour-schema", | ||||||
| "title": "Program", | ||||||
| "steps": | ||||||
| [ | ||||||
| { | ||||||
| "file": "rscg_examples/Program/src/TestProgram/TestProgram.csproj", | ||||||
| "description": "First, we add Nuget [Microsoft.AspNetCore.OpenApi](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) in csproj ", | ||||||
| "pattern": "Microsoft.AspNetCore.OpenApi" | ||||||
| } | ||||||
|
|
||||||
| ,{ | ||||||
| "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" | ||||||
|
||||||
| "pattern": "this is the code" | |
| "pattern": "// Program entry point" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| { | ||
| "generator":{ | ||
| "name":"Program", | ||
| "nuget":[ | ||
| "https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi" | ||
| ], | ||
| "link":"https://github.com/dotnet/aspnetcore/blob/70d851104f739fb906aabcd6a07c0935ce2549c9/src/Framework/AspNetCoreAnalyzers/src/SourceGenerators/PublicTopLevelProgramGenerator.cs#L11", | ||
| "author":"Microsoft", | ||
| "source":"https://github.com/dotnet/aspnetcore/" | ||
| }, | ||
| "data":{ | ||
| "goodFor":["Generating Program.cs class for testing purposes"], | ||
| "csprojDemo":"TestProgram.csproj", | ||
| "csFiles":["Program.cs"], | ||
| "excludeDirectoryGenerated":[ | ||
| "Microsoft.AspNetCore.Http.RequestDelegateGenerator", | ||
| "Microsoft.AspNetCore.OpenApi.SourceGenerators", | ||
| "System.Text.Json.SourceGeneration" | ||
| ], | ||
| "includeAdditionalFiles":[""] | ||
| }, | ||
| "links":{ | ||
| "blog":"", | ||
| "video":"" | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| Provides APIs for annotating route handler endpoints in ASP.NET Core with OpenAPI annotations. | ||
|
|
||
| This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/e77cb01b5529c137130757859f09f892dbdd2436 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| ASP.NET Core | ||
| ============ | ||
|
|
||
| [](https://www.dotnetfoundation.org/) | ||
| [](https://github.com/dotnet/aspnetcore/blob/main/LICENSE.txt) [](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) [](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) | ||
| [](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** | | ||
|
Comment on lines
+1
to
+65
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 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. (GIVE_PROVIDE) 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| <Solution> | ||
| <Project Path="TestProgram/TestProgram.csproj" /> | ||
| </Solution> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| using System.Text.Json.Serialization; | ||
| using Microsoft.AspNetCore.Http.HttpResults; | ||
|
|
||
| var builder = WebApplication.CreateSlimBuilder(args); | ||
|
|
||
| builder.Services.ConfigureHttpJsonOptions(options => | ||
| { | ||
| options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default); | ||
| }); | ||
|
|
||
| // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi | ||
| builder.Services.AddOpenApi(); | ||
|
|
||
| var app = builder.Build(); | ||
|
|
||
| if (app.Environment.IsDevelopment()) | ||
| { | ||
| app.MapOpenApi(); | ||
| } | ||
|
|
||
| Todo[] sampleTodos = | ||
| [ | ||
| new(1, "Walk the dog"), | ||
| new(2, "Do the dishes", DateOnly.FromDateTime(DateTime.Now)), | ||
| new(3, "Do the laundry", DateOnly.FromDateTime(DateTime.Now.AddDays(1))), | ||
| new(4, "Clean the bathroom"), | ||
| new(5, "Clean the car", DateOnly.FromDateTime(DateTime.Now.AddDays(2))) | ||
| ]; | ||
|
|
||
| var todosApi = app.MapGroup("/todos"); | ||
| todosApi.MapGet("/", () => sampleTodos) | ||
| .WithName("GetTodos"); | ||
|
|
||
| todosApi.MapGet("/{id}", Results<Ok<Todo>, NotFound> (int id) => | ||
| sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo | ||
| ? TypedResults.Ok(todo) | ||
| : TypedResults.NotFound()) | ||
| .WithName("GetTodoById"); | ||
|
|
||
| app.Run(); | ||
|
|
||
| public record Todo(int Id, string? Title, DateOnly? DueBy = null, bool IsComplete = false); | ||
|
|
||
| [JsonSerializable(typeof(Todo[]))] | ||
| internal partial class AppJsonSerializerContext : JsonSerializerContext | ||
| { | ||
|
|
||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| { | ||
| "$schema": "https://json.schemastore.org/launchsettings.json", | ||
| "profiles": { | ||
| "http": { | ||
| "commandName": "Project", | ||
| "dotnetRunMessages": true, | ||
| "launchBrowser": true, | ||
| "launchUrl": "todos", | ||
| "applicationUrl": "http://localhost:5219", | ||
| "environmentVariables": { | ||
| "ASPNETCORE_ENVIRONMENT": "Development" | ||
| } | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| <Project Sdk="Microsoft.NET.Sdk.Web"> | ||
|
|
||
| <PropertyGroup> | ||
| <TargetFramework>net10.0</TargetFramework> | ||
| <Nullable>enable</Nullable> | ||
| <ImplicitUsings>enable</ImplicitUsings> | ||
| <InvariantGlobalization>true</InvariantGlobalization> | ||
| <PublishAot>true</PublishAot> | ||
| </PropertyGroup> | ||
|
|
||
| <ItemGroup> | ||
| <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0" /> | ||
| </ItemGroup> | ||
| <PropertyGroup> | ||
| <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> | ||
| <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> | ||
| </PropertyGroup> | ||
| </Project> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| @TestProgram_HostAddress = http://localhost:5219 | ||
|
|
||
| GET {{TestProgram_HostAddress}}/todos/ | ||
| Accept: application/json | ||
|
|
||
| ### | ||
|
|
||
| GET {{TestProgram_HostAddress}}/todos/1 | ||
| Accept: application/json | ||
|
|
||
| ### |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| { | ||
| "Logging": { | ||
| "LogLevel": { | ||
| "Default": "Information", | ||
| "Microsoft.AspNetCore": "Warning" | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| { | ||
| "Logging": { | ||
| "LogLevel": { | ||
| "Default": "Information", | ||
| "Microsoft.AspNetCore": "Warning" | ||
| } | ||
| }, | ||
| "AllowedHosts": "*" | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,39 @@ | ||||||||||||||||||
| { | ||||||||||||||||||
| "scriptName": "Program", | ||||||||||||||||||
| "steps": | ||||||||||||||||||
| [ | ||||||||||||||||||
| {"typeStep":"exec","arg":"clipchamp.exe launch"}, | ||||||||||||||||||
| {"typeStep":"text","arg": "Welcome to Roslyn Examples"}, | ||||||||||||||||||
| {"typeStep":"text","arg":"If you want to see more examples , see List Of RSCG"}, | ||||||||||||||||||
| {"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG"}, | ||||||||||||||||||
| {"typeStep":"text","arg": "My name is Andrei Ignat and I am deeply fond of Roslyn Source Code Generator. "}, | ||||||||||||||||||
|
|
||||||||||||||||||
| {"typeStep":"text","arg": "Today I will present Microsoft.AspNetCore.OpenApi . Generating Program.cs class for testing purposes ."}, | ||||||||||||||||||
| {"typeStep":"browser","arg":"https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi"}, | ||||||||||||||||||
| {"typeStep":"text","arg": "The whole example is here"}, | ||||||||||||||||||
| {"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program"}, | ||||||||||||||||||
| {"typeStep":"text","arg": "You can download the code from here"}, | ||||||||||||||||||
| {"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-"}, | ||||||||||||||||||
| {"typeStep":"text","arg":"Here is the code downloaded "}, | ||||||||||||||||||
| {"typeStep":"exec","arg":"explorer.exe /select,D:\\gth\\RSCG_Examples\\v2\\Generator.sln"}, | ||||||||||||||||||
| {"typeStep":"text","arg": "So , let's start the project with Visual Studio Code "}, | ||||||||||||||||||
| {"typeStep":"stepvscode","arg": "-n D:\\gth\\RSCG_Examples\\v2"}, | ||||||||||||||||||
|
|
||||||||||||||||||
| {"typeStep":"text","arg": "To use it ,you will put the Nuget Microsoft.AspNetCore.OpenApi into the csproj "}, | ||||||||||||||||||
|
|
||||||||||||||||||
| {"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\Program\\src\\TestProgram\\TestProgram.csproj"}, | ||||||||||||||||||
|
|
||||||||||||||||||
| {"typeStep":"text","arg": "And now I will show you an example of using Microsoft.AspNetCore.OpenApi"}, | ||||||||||||||||||
|
|
||||||||||||||||||
| {"typeStep":"hide","arg": "now execute the tour in VSCode"}, | ||||||||||||||||||
| {"typeStep":"tour", "arg": "src/.tours/"}, | ||||||||||||||||||
| {"typeStep":"text","arg":" And I will execute the project"}, | ||||||||||||||||||
| {"typeStep":"showproj", "arg":"TestProgram.csproj"}, | ||||||||||||||||||
| {"typeStep":"text","arg":" This concludes the project"}, | ||||||||||||||||||
| {"typeStep":"waitseconds","arg":"30"}, | ||||||||||||||||||
| {"typeStep":"text","arg": "Remember, you can download the code from here"}, | ||||||||||||||||||
| {"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Program#download-example-net--c-", | ||||||||||||||||||
| SpeakTest=" "}, | ||||||||||||||||||
|
Comment on lines
+35
to
+36
|
||||||||||||||||||
| {"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
AI
Nov 26, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| SpeakTest=" "}, | |
| {"typeStep":"waitseconds","arg":"30"}, | |
| SpeakTest=" "} | |
| {"typeStep":"waitseconds","arg":"30"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| {"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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace bare URL with a proper Markdown link (lint: MD034).
Avoid bare URLs to satisfy markdownlint.
📝 Committable suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
42-42: Bare URL used
(MD034, no-bare-urls)
🤖 Prompt for AI Agents