hailstorm75 / ModularDoc

Modular documentation generator for .NET libraries. Currently supporting Markdown only for GitHub, GitLab, and Bitbucket
MIT License
119 stars 11 forks source link

Unhandled ArgumentException in ContentProcessor - input sequence ("IList<T>") contains more than one element #236

Closed JaykeBird closed 1 year ago

JaykeBird commented 1 year ago

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:

  1. 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.
  2. 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 to DisableMaximizeAction())
  3. 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.
  4. 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. image image

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()
hailstorm75 commented 1 year ago

@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.

JaykeBird commented 1 year ago

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!

hailstorm75 commented 1 year ago

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?

JaykeBird commented 1 year ago

Taking a look at the XML file, I had put in <c>IList&lt;<typeparamref name="T"/>&gt;</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.

hailstorm75 commented 1 year ago

@JaykeBird Issue fixed. Please reopen if you find the fix to be insufficient

JaykeBird commented 1 year ago

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!