in src/AutoRest.CSharp/Common/Generation/Writers/CodeWriter.cs [243:335]
public CodeWriter AppendXmlDocumentation(FormattableString startTag, FormattableString endTag, FormattableString content)
{
// if xml docs is globally turned off by the configuration, write nothing
if (Configuration.DisableXmlDocs)
return this;
const string xmlDoc = "/// ";
const string xmlDocNewLine = "\n/// ";
var commentStart = _length;
AppendRaw(CurrentLine.IsEmpty ? xmlDoc : xmlDocNewLine);
var startTagStart = _length;
Append(startTag);
_writingXmlDocumentation = true;
var contentStart = _length;
if (content.Format.Length > 0)
{
Append(content);
}
var contentEnd = _length;
_writingXmlDocumentation = false;
Append(endTag);
if (contentStart == contentEnd)
{
var startTagSpan = WrittenText.Slice(startTagStart + 1, contentStart - startTagStart - 1);
var endTagSpan = WrittenText.Slice(contentEnd + 2);
if (startTagSpan.SequenceEqual(endTagSpan))
{
// Remove empty tags
_length = commentStart;
}
else
{
Line();
}
return this;
}
Line();
var contentSpan = _builder.AsSpan(contentStart, contentEnd - contentStart);
var lastLineBreak = contentSpan.LastIndexOf(_newLine);
if (lastLineBreak == -1)
{
// Add spaces and dot to match existing formatting
if (contentEnd > contentStart)
{
if (contentSpan[^1] != ' ')
{
InsertRaw(contentSpan[^1] == '.' ? " " : ". ", contentEnd);
}
else
{
var trimmedContentSpan = contentSpan.TrimEnd();
if (trimmedContentSpan[^1] != '.')
{
InsertRaw(".", contentStart + trimmedContentSpan.Length);
}
}
if (contentSpan[0] != ' ')
{
InsertRaw(" ", contentStart);
}
}
return this;
}
if (lastLineBreak != contentSpan.Length)
{
InsertRaw(xmlDocNewLine, contentEnd);
}
while (lastLineBreak != -1)
{
InsertRaw(xmlDoc, lastLineBreak + contentStart + 1);
contentSpan = contentSpan.Slice(0, lastLineBreak);
lastLineBreak = contentSpan.LastIndexOf(_newLine);
}
if (contentSpan.Length > 0)
{
InsertRaw(xmlDocNewLine, contentStart);
}
return this;
}