Unhandled ArgumentException in ContentProcessor - input sequence ("IList<T>") contains more than one element
JaykeBird opened this issue · 6 comments
Describe the bug
I was trying to use this project to test building some documentation for one of my libraries, but I had run into this error while it was on the "Printer" step of putting together the documentation. I had previously solved another bug I had encountered, and now this one is occurring. I don't have enough knowledge of F# to know what to do here, but it seems to be the result of the code not expecting the value "IList<T>
" there, as it separated that into 3 segments: "IList<", "T", and ">".
Reproducibility
Always
To Reproduce
Steps to reproduce the behavior:
- Get the net6.0-windows.zip for the 1.9.4 release for my project SSUI. Extract the files from that archive to a folder.
- Apply PR #235 OR modify line 494 in the XML file extracted from the archive to add parantheses to the ends of the methods referenced there (i.e.
DisableMaximizeAction
toDisableMaximizeAction()
) - In the ModularDoc.App program, use the "Markdown for Git" plugin, supplying the DLL that was extracted, and using the other default settings (GitHub, Output target: Wiki). Select an empty folder (doesn't matter what) as the output directory.
- Click "Finish" on the final Global step, and then the exception will occur while trying to generate the documentation.
Expected behavior
Expected documentation to be generated without issue.
Screenshots
If applicable, add screenshots to help explain your problem.
Additional context
Here's the full exception data and stack trace.
System.ArgumentException: The input sequence contains more than one element. (Parameter 'source')
at Microsoft.FSharp.Collections.SeqModule.ExactlyOne[T](IEnumerable`1 source) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 1704
at ModularDoc.Composer.Basic.ContentProcessor.processContent[a](IType input, IContent content, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ContentProcessor.fs:line 43
at ModularDoc.Composer.Basic.TagHelpers.processed@55.Invoke(IContent content) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TagHelpers.fs:line 55
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 102
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.Generator.Microsoft-FSharp-Collections-Internal-Generator-Generator<'T>-get_Apply@524-1.Invoke(Unit unitVar0) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 525
at Microsoft.FSharp.Collections.Internal.Generator.appG[a](Generator`1 g) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 408
at Microsoft.FSharp.Collections.Internal.Generator.Microsoft-FSharp-Collections-Internal-Generator-Generator<'T>-get_Apply@437.Invoke(Unit unitVar0) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 438
at Microsoft.FSharp.Collections.Internal.Generator.appG[a](Generator`1 g) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 408
at Microsoft.FSharp.Collections.Internal.Generator.EnumeratorWrappingLazyGenerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 498
at Microsoft.FSharp.Collections.Internal.IEnumerator.next@248[T](FSharpFunc`2 f, IEnumerator`1 e, FSharpRef`1 started, Unit unitVar0) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 252
at Microsoft.FSharp.Collections.Internal.IEnumerator.filter@238.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 254
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.IEnumerator.next@248[T](FSharpFunc`2 f, IEnumerator`1 e, FSharpRef`1 started, Unit unitVar0) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 252
at Microsoft.FSharp.Collections.Internal.IEnumerator.filter@238.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 254
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at System.Collections.Generic.LinkedList`1..ctor(IEnumerable`1 collection)
at ModularDoc.Helpers.Linq.ToLinkedList[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 102
at ModularDoc.Helpers.Linq.ToReadOnlyCollection[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 93
at ModularDoc.Elements.Markdown.TextBuilder..ctor(IEnumerable`1 content, String delimiter) in D:\Documents\Code\ModularDoc\src\Components\Elements\ModularDoc.Elements.Markdown\TextBuilder.cs:line 30
at ModularDoc.Plugins.GitMarkdown.PluginGitMarkdown.Creator.JoinTextContent(IEnumerable`1 content, String delimiter) in D:\Documents\Code\ModularDoc\src\Plugins\ModularDoc.Plugins.GitMarkdown\PluginGitMarkdown.cs:line 298
at ModularDoc.Composer.Basic.TextHelpers.processText[M](TextType`1 textType, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TextHelpers.fs:line 105
at ModularDoc.Composer.Basic.ContentHelpers.Pipe #1 stage #1 at line 72@72.Invoke(TextType`1 textType, Tools tools)
at ModularDoc.Composer.Basic.ContentHelpers.applyTools@66-2T.Invoke(FSharpFunc`2 input) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ContentHelpers.fs:line 66
at ModularDoc.Composer.Basic.ContentHelpers.Pipe #1 stage #1 at line 72@72-1.Invoke(TextType`1 x)
at ModularDoc.Composer.Basic.ContentHelpers.Pipe #1 stage #1 at line 72@72-3.Invoke(TextType`1 x)
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 102
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at System.Collections.Generic.LinkedList`1..ctor(IEnumerable`1 collection)
at ModularDoc.Helpers.Linq.ToLinkedList[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 102
at ModularDoc.Helpers.Linq.ToReadOnlyCollection[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 93
at ModularDoc.Composer.Basic.ContentHelpers.exceptions@72.Invoke(ITag x) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ContentHelpers.fs:line 72
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 102
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.SeqModule.IsEmpty[T](IEnumerable`1 source) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 851
at ModularDoc.Composer.Basic.ContentHelpers.getExceptions(IType input, IMember typeMember, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ContentHelpers.fs:line 75
at ModularDoc.Composer.Basic.ContentHelpers.Pipe #1 input at line 202@208-5.Invoke(IType input, b typeMember, Tools tools)
at ModularDoc.Composer.Basic.TypeContentHelpers.applyTools@155-6T.Invoke(FSharpFunc`2 input) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TypeContentHelpers.fs:line 155
at ModularDoc.Composer.Basic.TypeContentHelpers.processContent(FSharpFunc`2 item_0, String item_1, IMember mem, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TypeContentHelpers.fs:line 157
at ModularDoc.Composer.Basic.TypeContentHelpers.processContents@162-3.Invoke(c mem, Tools tools)
at ModularDoc.Composer.Basic.TypeContentHelpers.applyTools@161-7T.Invoke(FSharpFunc`2 input) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TypeContentHelpers.fs:line 161
at ModularDoc.Composer.Basic.TypeContentHelpers.toProcess@167.Invoke(FSharpFunc`2 x)
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 102
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.IEnumerator.next@248[T](FSharpFunc`2 f, IEnumerator`1 e, FSharpRef`1 started, Unit unitVar0) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 252
at Microsoft.FSharp.Collections.Internal.IEnumerator.filter@238.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 254
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 101
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at Microsoft.FSharp.Collections.Internal.Generator.Microsoft-FSharp-Collections-Internal-Generator-Generator<'T>-get_Apply@524-1.Invoke(Unit unitVar0) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 525
at Microsoft.FSharp.Collections.Internal.Generator.appG[a](Generator`1 g) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 408
at Microsoft.FSharp.Collections.Internal.Generator.EnumeratorWrappingLazyGenerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 498
at System.Collections.Generic.LinkedList`1..ctor(IEnumerable`1 collection)
at ModularDoc.Helpers.Linq.ToLinkedList[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 102
at ModularDoc.Helpers.Linq.ToReadOnlyCollection[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 93
at ModularDoc.Elements.Markdown.Section..ctor(IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Components\Elements\ModularDoc.Elements.Markdown\Section.cs:line 35
at ModularDoc.Plugins.GitMarkdown.PluginGitMarkdown.Creator.CreateSection(IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Plugins\ModularDoc.Plugins.GitMarkdown\PluginGitMarkdown.cs:line 283
at ModularDoc.Composer.Basic.ElementHelpers.initialize[a](Element`1 element, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ElementHelpers.fs:line 91
at ModularDoc.Composer.Basic.TypeContentHelpers.registerSection[a](a input, String name, FSharpFunc`2 content, Tools tools, Int32 level) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TypeContentHelpers.fs:line 83
at ModularDoc.Composer.Basic.TypeContentHelpers.processItems@139-1.Invoke(Int32 x, M y) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\TypeContentHelpers.fs:line 139
at Microsoft.FSharp.Collections.Internal.IEnumerator.mapi@116.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 121
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at System.Collections.Generic.LinkedList`1..ctor(IEnumerable`1 collection)
at ModularDoc.Helpers.Linq.ToLinkedList[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 102
at ModularDoc.Helpers.Linq.ToReadOnlyCollection[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 93
at ModularDoc.Elements.Markdown.Section..ctor(IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Components\Elements\ModularDoc.Elements.Markdown\Section.cs:line 35
at ModularDoc.Plugins.GitMarkdown.PluginGitMarkdown.Creator.CreateSection(IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Plugins\ModularDoc.Plugins.GitMarkdown\PluginGitMarkdown.cs:line 283
at ModularDoc.Composer.Basic.ElementHelpers.initialize[a](Element`1 element, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ElementHelpers.fs:line 91
at <StartupCode$ModularDoc-Composer-Basic>.$TypeComposer.clo@26-1.Invoke(Element`1 element, Tools tools)
at <StartupCode$ModularDoc-Composer-Basic>.$TypeComposer.applyTools@80-12T.Invoke(FSharpFunc`2 input) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\TypeComposer.fs:line 80
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 102
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at System.Collections.Generic.LinkedList`1..ctor(IEnumerable`1 collection)
at ModularDoc.Helpers.Linq.ToLinkedList[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 102
at ModularDoc.Helpers.Linq.ToReadOnlyCollection[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 93
at ModularDoc.Elements.Markdown.Section..ctor(IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Components\Elements\ModularDoc.Elements.Markdown\Section.cs:line 35
at ModularDoc.Plugins.GitMarkdown.PluginGitMarkdown.Creator.CreateSection(IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Plugins\ModularDoc.Plugins.GitMarkdown\PluginGitMarkdown.cs:line 283
at ModularDoc.Composer.Basic.ElementHelpers.initialize[a](Element`1 element, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ElementHelpers.fs:line 91
at <StartupCode$ModularDoc-Composer-Basic>.$TypeComposer.clo@26-1.Invoke(Element`1 element, Tools tools)
at <StartupCode$ModularDoc-Composer-Basic>.$TypeComposer.applyTools@80-12T.Invoke(FSharpFunc`2 input) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\TypeComposer.fs:line 80
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@99.DoMoveNext(b& curr) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 102
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System.Collections.IEnumerator.MoveNext() in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 84
at System.Collections.Generic.LinkedList`1..ctor(IEnumerable`1 collection)
at ModularDoc.Helpers.Linq.ToLinkedList[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 102
at ModularDoc.Helpers.Linq.ToReadOnlyCollection[T](IEnumerable`1 input) in D:\Documents\Code\ModularDoc\src\Libraries\Helpers\ModularDoc.Helpers\Linq.cs:line 93
at ModularDoc.Elements.Markdown.Page..ctor(IElementCreator creator, IEnumerable`1 content, IEnumerable`1 subpages, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Components\Elements\ModularDoc.Elements.Markdown\Page.cs:line 44
at ModularDoc.Plugins.GitMarkdown.PluginGitMarkdown.Creator.CreatePage(IEnumerable`1 subpages, IEnumerable`1 content, String heading, Int32 level) in D:\Documents\Code\ModularDoc\src\Plugins\ModularDoc.Plugins.GitMarkdown\PluginGitMarkdown.cs:line 277
at ModularDoc.Composer.Basic.ElementHelpers.initialize[a](Element`1 element, Tools tools) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\Helpers\ElementHelpers.fs:line 93
at ModularDoc.Composer.Basic.TypeComposer.ModularDoc.Composer.ITypeComposer.Compose(IType input) in D:\Documents\Code\ModularDoc\src\Components\Generators\ModularDoc.Composer.Basic\TypeComposer.fs:line 127
at ModularDoc.Printer.Markdown.PrinterMarkdown.<>c__DisplayClass5_0.<Print>g__PrintIntermediate|0(IType type) in D:\Documents\Code\ModularDoc\src\Components\Printers\ModularDoc.Printer.Markdown\PrinterMarkdown.cs:line 49
at System.Linq.Parallel.SelectQueryOperator`2.SelectQueryOperatorEnumerator`1.MoveNext(TOutput& currentElement, TKey& currentKey)
at System.Linq.Parallel.PipelineSpoolingTask`2.SpoolingWork()
at System.Linq.Parallel.SpoolingTaskBase.Work()
@JaykeBird, thanks a lot for submitting the issue. How quickly do you wish to have it fixed? I'm having my final state exams around January and will not have time to fix this quickly.
No rush on your end. :) Exams are important! I have my own (not as good) solution that I'm continuing to use right now, so I'm okay for the moment.
Like I mentioned, I don't know much about F#, but if there's any additional info or anything I can provide, let me know!
The TypeComposer
library does not expect the user-written documentation to place other tags within the <c></c>
and <code></code>
tag pairs.
MSDOC specifies that text should be within said tags; however, this documentation is quite vague and does allow one to assume that the content is not restricted from having additional tags within a code block.
Thus, the solution is to modify the ContentProcessor.fs
in the ModularDoc.Composer.Basic
project to process documentation tags correctly. This concerns the processContent
function and its processing of thee inline code block and the multi-line code block.
The fix shouldn't be too difficult.
The XML tag content must be extracted and flattened (as it can be structured). If the inner content is some tag that doesn't make sense, either a warning message should be logged with the rest of the content ignored or the content should be represented in XML (as written in the source code). The question is, what is better?
Taking a look at the XML file, I had put in <c>IList<<typeparamref name="T"/>></c>
(line 5615), so I can see how the code got tripped up on the embedded <typeparamref name="T"/>
part. Honestly, I just did it that way because Visual Studio didn't have any qualms with it, but it may be better if I changed that to just T
.
In regards to your question at the end, I think that rendering it as IList<<typeparamref name="T"/>>
(which I think you're proposing as an option?) would look weird, so the better option may be to throw a warning and move on. The bigger question, though, is how closely you'd want to stick to the official documentation and what it says; I definitely admire sticking to the standards, but I wonder what other weird cases like this will be encountered.
@JaykeBird Issue fixed. Please reopen if you find the fix to be insufficient
Just posting now to note that I got the project to work for me fully and it's now in use! :)
In the future, I'll look into developing a modification to the Git Markdown plugin to match exactly the output I'm looking for, but this is definitely better than I've previously been doing!