Skip to content

Commit 0410bbc

Browse files
authored
Refactor: New extensible Markdown Parser (#229)
* Refactor: Convert syntax node serializers to non-static classes implementing `IMdSyntaxNodeSerializer` and add associated `Syntax` regex properties. * BROKEN * Refactor: Standardize regex patterns for whitespace handling and optimize multiline parsing logic in `PushMultiLineMatchesToStack`. * Refactor: Add `ToString` and `ToDebugString` methods for `MdSyntaxNode` and `MdSyntaxTree`, update regex references, and standardize serializer naming. * Fix Markdown regex and code block serialization Improved Markdown regex patterns for superscript, subscript, and underline to handle newlines and nested delimiters correctly. Simplified code block serialization logic to always add newlines for CRLF sequences and removed special handling for trailing newlines. Added test output and failure files for debugging. * Update TUnit and TUnit.Core package versions to 1.7.7 * Refactor: Add `ToDebugString` to `TextMdSyntaxNode`, update `BoldRegex` pattern, and optimize single-line match stack logic * Refactor: Optimize memory allocation using `ArrayPool` in `MdSyntaxFragmentStack` and ensure capacity for dynamic resizing. * Refactor: Optimize multiline and single-line match stacking logic, replace `PushMatchToStack` with direct stack operations, and enhance memory efficiency with `ArrayPool`. * Refactor: Simplify matching logic in `MdSyntaxFragmentStack` by removing unnecessary `foundMatch` variable and redundant conditions * Refactor: Replace static `Pool.Get()` calls with centralized `MdSyntaxNodePool<T>.Shared.Get()` for memory management consistency and add shared pooling utility * Refactor: Remove unused `System.Runtime.CompilerServices` import and redundant `Return(IMdSyntaxNode)` method in `MdSyntaxNodePool` * Refactor: Merge `MdSyntaxNodeModifierExtensions` methods directly into `IMdSyntaxNodeModifier` and `MdSyntaxNodeModifier` to streamline API usage and reduce extension overhead * Refactor: Centralize pooling logic for `MdSyntaxTree` and `MdSyntaxFragmentStack` with new shared pool classes, remove redundant methods, and simplify memory management * Refactor: Add `GetCount` method to `MdSyntaxTree` for improved child node count retrieval * Update Directory.Packages.props * Refactor: Replace `MdRegexLib` with `GeneratedRegex` annotations in syntax node serializers for improved performance and maintainability * Fix regex group name usage in node serializers Replaces usage of constants for regex group names with string literals in BlockQuoteSyntaxNodeSerializer and BoldSyntaxNodeSerializer. Also removes the unused 'bold' named group from the bold regex pattern. * Update: Rename project to 'infiniblazor' and remove unused 'peer' fields from package-lock.json * Refactor: Simplify regex usage in BlockQuoteSyntaxNodeSerializer by removing unused group and constants * Refactor: Replace regex group name constants with string literals and simplify regex patterns in syntax node serializers * Refactor: Remove unused `MdRegexGroupNames` constants to simplify project structure and reduce maintenance overhead * Refactor: Replace `TryGetValue` and related checks with direct property access for improved clarity and consistency across syntax node serializers * Add mock dependencies to Markdown benchmarks for improved test isolation * Remove unused imports and update nullability handling for cleaner code structure * Remove unused `MdRegexLibTests` and update nullability handling in tests for clarity and simplicity * Add `TriggerCharacters` property to `IMdSyntaxNodeSerializer` and update relevant serializers to optimize matching logic * Refactor: Optimize multiline and single-line syntax node matching by improving `TriggerCharacters` checks and line-handling logic * Refactor: Add character-based serializer lookup tables to optimize syntax matching logic and improve performance * Refactor: Simplify serializer lookup initialization and optimize global + trigger-based serializer handling * Refactor: Add `SearchValues<char>` for fast trigger detection and optimize serializer matching logic * Refactor: Improve line handling, trigger matching, and serializer capacity logic for better readability and performance * Refactor: Replace empty `TriggerCharacters` array initializations with `Array.Empty<char>()` for improved clarity and performance * Refactor: Simplify line handling logic and remove redundant conditions for improved readability and maintainability * Update benchmark runner and refactor interface parameters Switched the benchmark runner in Program.cs to use IndividualMarkdownBenchmarks instead of MarkdownBenchmarks. Removed an unused using directive in InfiniMarkdownEditor.razor. Renamed parameters in IMdSyntaxFragmentStack interface methods for clarity. * Refactor benchmarks: Introduce `ParamsSource` cases for improved test coverage and remove redundant benchmark methods. Extract mocks into dedicated classes for reusability. * Expand `IndividualMarkdownBenchmarks` with additional cases, warmup logic, and helper methods to enhance benchmark coverage and performance. * Refactor benchmarks: Add missing `using` directives, make `Cases` public, and update mock service registrations for consistency and enhanced test coverage. * Remove `SerializeToSyntaxTree_ParagraphBaseline` benchmark as redundant * Switch benchmark runner back to `MarkdownBenchmarks` and add `Results.md` for benchmark result documentation. * Expand `IndividualMarkdownBenchmarks` with additional table cases for 50 and 100 rows to improve benchmark coverage. * Refactor: Move `ArrayPool` rentals closer to usage in `MdSyntaxFragmentStack` methods for clarity and maintainability * Refactor: Introduce `IRootMdSyntaxNode` interface, add tree reference management, and improve cache handling in `MdSyntaxTree` and related components * Add `RemoveChild` and `RemoveChildAt` functionality to `IMdSyntaxNode`, update core logic, and add corresponding unit tests. * Add comprehensive child node management tests to `MdSyntaxNode`, refactor sibling navigation logic, and fix index calculation bugs. * Update benchmark results for `RenderMarkdown` with improved performance metrics * Switch to IndividualMarkdownBenchmarks in benchmark runner The benchmark runner now executes IndividualMarkdownBenchmarks instead of MarkdownBenchmarks. This change likely aims to focus benchmarking on individual markdown scenarios for more granular performance analysis. * Update benchmark results in `Results.md` with additional metrics and formatting adjustments
1 parent d27ebe8 commit 0410bbc

89 files changed

Lines changed: 1897 additions & 1109 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

benchmarks/Benchmarks.InfiniBlazor.Markdown/IndividualMarkdownBenchmarks.cs

Lines changed: 271 additions & 226 deletions
Large diffs are not rendered by default.

benchmarks/Benchmarks.InfiniBlazor.Markdown/MarkdownBenchmarks.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public async Task Setup() {
3535

3636
private static ServiceProvider CreateProvider(Action<InfiniBlazorMarkdownConfig>? configure = null) {
3737
var serviceCollection = new ServiceCollection();
38+
serviceCollection.AddSingleton<Microsoft.AspNetCore.Components.NavigationManager, MockNavigationManager>();
39+
serviceCollection.AddSingleton<Microsoft.JSInterop.IJSRuntime, MockJsRuntime>();
3840
serviceCollection.AddInfiniBlazor(config => configure?.Invoke(config.Markdown));
3941
serviceCollection.AddLogging();
4042
return serviceCollection.BuildServiceProvider();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// ---------------------------------------------------------------------------------------------------------------------
2+
// Imports
3+
// ---------------------------------------------------------------------------------------------------------------------
4+
using Microsoft.JSInterop;
5+
6+
namespace Benchmarks.InfiniBlazor.Markdown;
7+
// ---------------------------------------------------------------------------------------------------------------------
8+
// Code
9+
// ---------------------------------------------------------------------------------------------------------------------
10+
public class MockJsRuntime : IJSRuntime {
11+
public ValueTask<TValue> InvokeAsync<TValue>(string identifier, object?[]? args) => default;
12+
public ValueTask<TValue> InvokeAsync<TValue>(string identifier, CancellationToken cancellationToken, object?[]? args) => default;
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// ---------------------------------------------------------------------------------------------------------------------
2+
// Imports
3+
// ---------------------------------------------------------------------------------------------------------------------
4+
using Microsoft.AspNetCore.Components;
5+
6+
namespace Benchmarks.InfiniBlazor.Markdown;
7+
// ---------------------------------------------------------------------------------------------------------------------
8+
// Code
9+
// ---------------------------------------------------------------------------------------------------------------------
10+
public class MockNavigationManager : NavigationManager {
11+
public MockNavigationManager() => Initialize("http://localhost/", "http://localhost/");
12+
protected override void NavigateToCore(string uri, bool forceLoad) { }
13+
}

benchmarks/Benchmarks.InfiniBlazor.Markdown/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Benchmarks.InfiniBlazor.Markdown;
99
// ---------------------------------------------------------------------------------------------------------------------
1010
public static class Program {
1111
public static void Main(string[] args) {
12-
BenchmarkRunner.Run<MarkdownBenchmarks>();
13-
// BenchmarkRunner.Run<IndividualMarkdownBenchmarks>();
12+
// BenchmarkRunner.Run<MarkdownBenchmarks>();
13+
BenchmarkRunner.Run<IndividualMarkdownBenchmarks>();
1414
}
1515
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# General Benchmark
2+
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
3+
|----------------|---------:|----------:|----------:|------:|--------:|---------:|---------:|--------:|----------:|------------:|
4+
| RenderMarkdown | 2.256 ms | 0.0420 ms | 0.1076 ms | 1.00 | 0.07 | 257.8125 | 250.0000 | 46.8750 | 2.14 MB | 1.00 |
5+
6+
7+
# Individual Benchmarks
8+
9+
| Method | InputCase | Mean | Error | StdDev | Median | Gen0 | Gen1 | Gen2 | Allocated |
10+
|-----------------------|----------------------|-------------:|------------:|-------------:|-------------:|--------:|-------:|-------:|----------:|
11+
| SerializeToSyntaxTree | BlockQuote_100Lines | 104,823.0 ns | 2,087.82 ns | 4,022.52 ns | 105,504.4 ns | 13.0615 | 5.0049 | - | 107.17 KB |
12+
| SerializeToSyntaxTree | BlockQuote_10Lines | 11,833.7 ns | 235.91 ns | 394.16 ns | 11,803.4 ns | 1.5259 | 0.0763 | - | 12.49 KB |
13+
| SerializeToSyntaxTree | BlockQuote_1Line | 1,738.4 ns | 33.07 ns | 35.38 ns | 1,730.8 ns | 0.3033 | 0.0038 | - | 2.48 KB |
14+
| SerializeToSyntaxTree | BlockQuote_2Lines | 4,276.1 ns | 366.70 ns | 1,081.21 ns | 4,119.1 ns | 0.4463 | 0.0076 | - | 3.67 KB |
15+
| SerializeToSyntaxTree | BlockQuote_3Lines | 3,461.2 ns | 63.81 ns | 145.32 ns | 3,457.7 ns | 0.4539 | 0.0076 | - | 3.73 KB |
16+
| SerializeToSyntaxTree | Bold | 1,797.7 ns | 35.52 ns | 46.19 ns | 1,804.6 ns | 0.3242 | 0.0038 | - | 2.66 KB |
17+
| SerializeToSyntaxTree | BoldAndItalic | 2,632.7 ns | 38.95 ns | 69.24 ns | 2,645.4 ns | 0.4196 | 0.0076 | - | 3.45 KB |
18+
| SerializeToSyntaxTree | BoldA(...)Other [28] | 3,086.9 ns | 59.35 ns | 70.65 ns | 3,085.1 ns | 0.4425 | 0.0076 | - | 3.62 KB |
19+
| SerializeToSyntaxTree | Bold_2InLine | 2,836.9 ns | 47.08 ns | 44.04 ns | 2,852.4 ns | 0.4425 | 0.0076 | - | 3.63 KB |
20+
| SerializeToSyntaxTree | Break | 2,049.5 ns | 39.98 ns | 57.34 ns | 2,060.3 ns | 0.2899 | 0.0038 | - | 2.38 KB |
21+
| SerializeToSyntaxTree | Callout | 2,797.3 ns | 55.42 ns | 75.86 ns | 2,813.5 ns | 0.4463 | 0.0076 | - | 3.67 KB |
22+
| SerializeToSyntaxTree | Callout_withoutBody | 1,509.3 ns | 29.77 ns | 42.69 ns | 1,509.6 ns | 0.3185 | 0.0038 | - | 2.6 KB |
23+
| SerializeToSyntaxTree | CodeBlock | 2,275.9 ns | 45.41 ns | 105.26 ns | 2,271.9 ns | 0.3090 | 0.0038 | - | 2.55 KB |
24+
| SerializeToSyntaxTree | CodeBlock_100Lines | 40,663.0 ns | 1,476.87 ns | 4,261.10 ns | 39,504.6 ns | 1.5869 | 0.0610 | - | 13.09 KB |
25+
| SerializeToSyntaxTree | CodeBlock_50Lines | 21,371.0 ns | 500.93 ns | 1,453.28 ns | 21,215.9 ns | 0.9155 | 0.0305 | - | 7.62 KB |
26+
| SerializeToSyntaxTree | CodeBlock_NoLanguage | 1,164.9 ns | 44.62 ns | 131.57 ns | 1,163.4 ns | 0.2670 | 0.0038 | - | 2.19 KB |
27+
| SerializeToSyntaxTree | CodeInline | 1,330.2 ns | 26.01 ns | 42.01 ns | 1,338.5 ns | 0.3014 | 0.0038 | - | 2.47 KB |
28+
| SerializeToSyntaxTree | CodeInline_2ticks | 1,368.1 ns | 24.08 ns | 52.34 ns | 1,355.8 ns | 0.3014 | 0.0038 | - | 2.47 KB |
29+
| SerializeToSyntaxTree | CodeInline_3ticks | 1,363.9 ns | 20.05 ns | 44.01 ns | 1,365.1 ns | 0.3014 | 0.0038 | - | 2.47 KB |
30+
| SerializeToSyntaxTree | Emote | 1,187.8 ns | 23.25 ns | 34.80 ns | 1,199.8 ns | 0.2365 | 0.0019 | - | 1.94 KB |
31+
| SerializeToSyntaxTree | EscapedCharacters | 1,768.0 ns | 34.07 ns | 48.86 ns | 1,789.2 ns | 0.3147 | 0.0038 | - | 2.57 KB |
32+
| SerializeToSyntaxTree | FootnoteDescription | 1,716.7 ns | 17.13 ns | 15.19 ns | 1,722.4 ns | 0.3357 | 0.0038 | - | 2.75 KB |
33+
| SerializeToSyntaxTree | FootnoteReference | 1,201.7 ns | 22.91 ns | 22.50 ns | 1,202.1 ns | 0.2842 | 0.0038 | - | 2.34 KB |
34+
| SerializeToSyntaxTree | FrontMatter | 763.8 ns | 11.74 ns | 10.98 ns | 762.4 ns | 0.2518 | 0.0010 | - | 2.06 KB |
35+
| SerializeToSyntaxTree | FrontMatter_2Entries | 3,521.8 ns | 67.13 ns | 74.61 ns | 3,513.4 ns | 0.5608 | 0.0114 | - | 4.61 KB |
36+
| SerializeToSyntaxTree | HeadingSimple | 971.1 ns | 19.26 ns | 20.61 ns | 978.1 ns | 0.2651 | 0.0038 | - | 2.18 KB |
37+
| SerializeToSyntaxTree | Heading_1 | 931.7 ns | 18.63 ns | 17.43 ns | 932.3 ns | 0.2565 | 0.0029 | - | 2.1 KB |
38+
| SerializeToSyntaxTree | Heading_2 | 1,009.0 ns | 31.89 ns | 91.49 ns | 982.4 ns | 0.2565 | 0.0029 | - | 2.1 KB |
39+
| SerializeToSyntaxTree | Heading_3 | 1,002.5 ns | 19.47 ns | 29.13 ns | 1,006.0 ns | 0.2556 | 0.0019 | - | 2.1 KB |
40+
| SerializeToSyntaxTree | Heading_4 | 1,023.8 ns | 19.41 ns | 37.40 ns | 1,022.5 ns | 0.2556 | 0.0019 | - | 2.1 KB |
41+
| SerializeToSyntaxTree | Heading_5 | 1,039.7 ns | 20.60 ns | 38.70 ns | 1,029.7 ns | 0.2556 | 0.0019 | - | 2.1 KB |
42+
| SerializeToSyntaxTree | Heading_6 | 1,048.9 ns | 21.03 ns | 27.35 ns | 1,045.3 ns | 0.2556 | 0.0019 | - | 2.1 KB |
43+
| SerializeToSyntaxTree | Highlight | 2,515.1 ns | 157.21 ns | 463.55 ns | 2,493.6 ns | 0.3166 | 0.0038 | - | 2.59 KB |
44+
| SerializeToSyntaxTree | HorizontalRule | 971.5 ns | 65.16 ns | 192.12 ns | 956.4 ns | 0.2079 | 0.0019 | - | 1.71 KB |
45+
| SerializeToSyntaxTree | HtmlBlock | 2,211.7 ns | 51.54 ns | 146.21 ns | 2,205.3 ns | 0.3262 | 0.0038 | - | 2.66 KB |
46+
| SerializeToSyntaxTree | Italic | 2,160.8 ns | 74.38 ns | 213.42 ns | 2,109.4 ns | 0.3281 | 0.0038 | - | 2.7 KB |
47+
| SerializeToSyntaxTree | Italic_2InLine | 3,939.5 ns | 253.46 ns | 747.33 ns | 3,960.8 ns | 0.4501 | 0.0076 | - | 3.7 KB |
48+
| SerializeToSyntaxTree | Link | 3,508.9 ns | 124.84 ns | 368.10 ns | 3,442.3 ns | 0.3662 | - | - | 3.02 KB |
49+
| SerializeToSyntaxTree | Link_Nested | 5,467.7 ns | 108.85 ns | 214.85 ns | 5,483.7 ns | 0.3586 | - | - | 2.97 KB |
50+
| SerializeToSyntaxTree | List_Ordered | 3,610.1 ns | 71.50 ns | 189.61 ns | 3,616.5 ns | 0.5646 | 0.0153 | - | 4.67 KB |
51+
| SerializeToSyntaxTree | List_Ordered_100 | 124,239.3 ns | 6,202.89 ns | 18,289.38 ns | 129,261.8 ns | 17.0898 | 8.0566 | - | 139.82 KB |
52+
| SerializeToSyntaxTree | List_Ordered_50 | 66,607.1 ns | 1,329.86 ns | 3,640.46 ns | 66,409.9 ns | 8.6060 | 2.1973 | - | 70.49 KB |
53+
| SerializeToSyntaxTree | List_Task | 2,385.7 ns | 119.07 ns | 351.09 ns | 2,549.2 ns | 0.3967 | 0.0076 | - | 3.27 KB |
54+
| SerializeToSyntaxTree | List_Task_100 | 125,710.5 ns | 4,045.63 ns | 11,542.41 ns | 128,810.2 ns | 17.2119 | 7.9346 | - | 140.99 KB |
55+
| SerializeToSyntaxTree | List_Task_50 | 70,300.3 ns | 1,404.52 ns | 1,875.00 ns | 69,753.2 ns | 8.6670 | 2.3193 | - | 71.08 KB |
56+
| SerializeToSyntaxTree | List_Task_checked | 2,762.5 ns | 54.61 ns | 95.64 ns | 2,777.2 ns | 0.3967 | 0.0076 | - | 3.27 KB |
57+
| SerializeToSyntaxTree | List_(...)d_100 [21] | 119,430.4 ns | 2,377.28 ns | 5,964.13 ns | 120,232.6 ns | 17.0898 | 7.8125 | - | 141 KB |
58+
| SerializeToSyntaxTree | List_Task_checked_50 | 71,094.4 ns | 1,323.01 ns | 2,484.94 ns | 70,931.7 ns | 8.6670 | 2.3193 | - | 71.08 KB |
59+
| SerializeToSyntaxTree | List_UnOrdered | 4,420.9 ns | 127.70 ns | 376.53 ns | 4,502.9 ns | 0.5569 | 0.0153 | - | 4.56 KB |
60+
| SerializeToSyntaxTree | List_UnOrdered_100 | 128,540.7 ns | 2,962.19 ns | 8,687.59 ns | 128,347.2 ns | 16.3574 | 7.5684 | - | 133.96 KB |
61+
| SerializeToSyntaxTree | List_UnOrdered_50 | 65,977.7 ns | 2,163.15 ns | 6,378.09 ns | 65,821.2 ns | 8.1787 | 1.9531 | - | 67.56 KB |
62+
| SerializeToSyntaxTree | Mixed_RealWorld | 29,987.4 ns | 596.90 ns | 1,572.48 ns | 29,819.9 ns | 2.1362 | 0.1221 | - | 17.84 KB |
63+
| SerializeToSyntaxTree | NewLine | 4,136.9 ns | 78.82 ns | 93.83 ns | 4,129.8 ns | 0.3662 | - | - | 3.03 KB |
64+
| SerializeToSyntaxTree | Paragraph | 2,360.7 ns | 47.03 ns | 117.13 ns | 2,358.6 ns | 0.2365 | - | - | 1.94 KB |
65+
| SerializeToSyntaxTree | Paragraph_Base | 2,063.3 ns | 117.09 ns | 345.23 ns | 2,197.4 ns | 0.2365 | - | - | 1.94 KB |
66+
| SerializeToSyntaxTree | Strikethrough | 3,232.4 ns | 96.97 ns | 285.91 ns | 3,244.3 ns | 0.3242 | 0.0038 | - | 2.67 KB |
67+
| SerializeToSyntaxTree | Strik(...)nLine [21] | 5,440.2 ns | 107.91 ns | 236.86 ns | 5,429.4 ns | 0.4349 | 0.0076 | - | 3.59 KB |
68+
| SerializeToSyntaxTree | Subscript | 2,684.4 ns | 53.44 ns | 90.74 ns | 2,678.2 ns | 0.3281 | 0.0038 | - | 2.7 KB |
69+
| SerializeToSyntaxTree | Subscript_2InLine | 4,477.2 ns | 89.46 ns | 131.13 ns | 4,480.8 ns | 0.4501 | 0.0076 | - | 3.7 KB |
70+
| SerializeToSyntaxTree | Superscript | 2,762.5 ns | 54.95 ns | 154.98 ns | 2,734.4 ns | 0.3281 | 0.0038 | - | 2.7 KB |
71+
| SerializeToSyntaxTree | Superscript_2InLine | 5,117.6 ns | 102.96 ns | 303.57 ns | 5,181.1 ns | 0.4501 | 0.0076 | - | 3.7 KB |
72+
| SerializeToSyntaxTree | Table | 5,861.7 ns | 134.17 ns | 395.61 ns | 5,825.8 ns | 0.5035 | 0.0076 | - | 4.13 KB |
73+
| SerializeToSyntaxTree | Table_100Rows | 142,121.2 ns | 5,273.80 ns | 15,549.92 ns | 143,746.1 ns | 12.4512 | 2.1973 | 0.9766 | 102.68 KB |
74+
| SerializeToSyntaxTree | Table_2Rows | 7,917.2 ns | 347.31 ns | 1,024.04 ns | 7,996.3 ns | 0.6256 | 0.0153 | - | 5.13 KB |
75+
| SerializeToSyntaxTree | Table_3Rows | 7,426.9 ns | 396.97 ns | 1,157.99 ns | 7,125.2 ns | 0.7477 | 0.0153 | - | 6.12 KB |
76+
| SerializeToSyntaxTree | Table_50Rows | 50,289.8 ns | 1,459.92 ns | 4,235.50 ns | 48,934.8 ns | 6.4697 | 0.6104 | - | 53.04 KB |
77+
| SerializeToSyntaxTree | Tag | 1,178.3 ns | 23.45 ns | 47.37 ns | 1,180.6 ns | 0.2861 | 0.0038 | - | 2.34 KB |
78+
| SerializeToSyntaxTree | Template | 1,530.5 ns | 45.19 ns | 127.46 ns | 1,494.4 ns | 0.3090 | 0.0038 | - | 2.53 KB |
79+
| SerializeToSyntaxTree | Underline | 1,846.8 ns | 46.27 ns | 132.00 ns | 1,817.0 ns | 0.3300 | 0.0038 | - | 2.7 KB |
80+
| SerializeToSyntaxTree | User | 1,271.7 ns | 41.44 ns | 118.24 ns | 1,233.1 ns | 0.2861 | 0.0038 | - | 2.34 KB |
81+
| SerializeToSyntaxTree | WikiLink | 1,352.8 ns | 23.71 ns | 19.80 ns | 1,358.0 ns | 0.2861 | 0.0038 | - | 2.35 KB |
82+
| SerializeToSyntaxTree | Wrapper | 2,165.3 ns | 59.70 ns | 171.29 ns | 2,124.9 ns | 0.3662 | 0.0038 | - | 3 KB |
83+

docs/InfiniBlazorDocs/Program.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
// ---------------------------------------------------------------------------------------------------------------------
22
// Imports
33
// ---------------------------------------------------------------------------------------------------------------------
4-
using InfiniBlazorDocs.Services;
54
using Microsoft.AspNetCore.Components;
65
using Microsoft.AspNetCore.Components.Web;
76
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
87
using Serilog;
98
using Serilog.Extensions.Logging;
109

11-
#if DEBUG
12-
#endif
13-
1410
namespace InfiniBlazorDocs;
1511
// ---------------------------------------------------------------------------------------------------------------------
1612
// Code

failure_footnote.txt

1.25 KB
Binary file not shown.

full_test_output.txt

52.7 KB
Binary file not shown.

package-lock.json

Lines changed: 3 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)