From 273aa07700375d7847e88fcaa91ad9d82a76cc19 Mon Sep 17 00:00:00 2001 From: Jan Calanog Date: Fri, 24 Jan 2025 11:09:23 +0100 Subject: [PATCH 1/2] Caseinsensitive anchor link check --- src/Elastic.Markdown/IO/MarkdownFile.cs | 2 +- .../Myst/InlineParsers/DiagnosticLinkInlineParser.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Elastic.Markdown/IO/MarkdownFile.cs b/src/Elastic.Markdown/IO/MarkdownFile.cs index 03cdc01f0..9cb001e0f 100644 --- a/src/Elastic.Markdown/IO/MarkdownFile.cs +++ b/src/Elastic.Markdown/IO/MarkdownFile.cs @@ -50,7 +50,7 @@ public string? NavigationTitle } //indexed by slug - private readonly Dictionary _tableOfContent = new(); + private readonly Dictionary _tableOfContent = new Dictionary(StringComparer.OrdinalIgnoreCase); public IReadOnlyDictionary TableOfContents => _tableOfContent; private readonly HashSet _additionalLabels = new(); diff --git a/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs b/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs index b6d8472ab..b2bedc0c4 100644 --- a/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs +++ b/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs @@ -136,7 +136,7 @@ public override bool Match(InlineProcessor processor, ref StringSlice slice) if (!string.IsNullOrEmpty(anchor)) { if (markdown == null || (!markdown.TableOfContents.TryGetValue(anchor, out var heading) - && !markdown.AdditionalLabels.Contains(anchor))) + && !markdown.AdditionalLabels.Contains(anchor, StringComparer.OrdinalIgnoreCase))) processor.EmitError(line, column, length, $"`{anchor}` does not exist in {markdown?.FileName}."); else if (link.FirstChild == null && heading != null) From c7c0e6173252eb13b79ebca32231e6d585a96a30 Mon Sep 17 00:00:00 2001 From: Jan Calanog Date: Fri, 24 Jan 2025 13:58:36 +0100 Subject: [PATCH 2/2] Also initialize additionalLabels HashSet with StringComparer.OrdinalIgnoreCase --- src/Elastic.Markdown/IO/MarkdownFile.cs | 4 ++-- .../Myst/InlineParsers/DiagnosticLinkInlineParser.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Elastic.Markdown/IO/MarkdownFile.cs b/src/Elastic.Markdown/IO/MarkdownFile.cs index 9cb001e0f..bd7d72592 100644 --- a/src/Elastic.Markdown/IO/MarkdownFile.cs +++ b/src/Elastic.Markdown/IO/MarkdownFile.cs @@ -50,10 +50,10 @@ public string? NavigationTitle } //indexed by slug - private readonly Dictionary _tableOfContent = new Dictionary(StringComparer.OrdinalIgnoreCase); + private readonly Dictionary _tableOfContent = new(StringComparer.OrdinalIgnoreCase); public IReadOnlyDictionary TableOfContents => _tableOfContent; - private readonly HashSet _additionalLabels = new(); + private readonly HashSet _additionalLabels = new(StringComparer.OrdinalIgnoreCase); public IReadOnlySet AdditionalLabels => _additionalLabels; public string FilePath { get; } diff --git a/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs b/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs index b2bedc0c4..b6d8472ab 100644 --- a/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs +++ b/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs @@ -136,7 +136,7 @@ public override bool Match(InlineProcessor processor, ref StringSlice slice) if (!string.IsNullOrEmpty(anchor)) { if (markdown == null || (!markdown.TableOfContents.TryGetValue(anchor, out var heading) - && !markdown.AdditionalLabels.Contains(anchor, StringComparer.OrdinalIgnoreCase))) + && !markdown.AdditionalLabels.Contains(anchor))) processor.EmitError(line, column, length, $"`{anchor}` does not exist in {markdown?.FileName}."); else if (link.FirstChild == null && heading != null)