В настоящее время я работаю над CodeFixProvider
с использованием Roslyn SDK, представленного в Visual Studio 2015. Целью провайдера является добавление отсутствующей документации для инструкций throw для <exception>
.Согласование окончаний строк в Roslyn CodeFixProvider
Я строю синтаксис вроде этого:
var newNodes = new XmlNodeSyntax[]
{
SyntaxFactory.XmlText(
SyntaxFactory.TokenList(
SyntaxFactory.XmlTextLiteral(
SyntaxFactory.TriviaList(SyntaxFactory.DocumentationCommentExterior("///")),
string.Empty,
string.Empty,
SyntaxFactory.TriviaList()
),
SyntaxFactory.XmlTextNewLine(SyntaxFactory.TriviaList(), "\n", "\n", SyntaxFactory.TriviaList()),
SyntaxFactory.XmlTextLiteral(
SyntaxFactory.TriviaList(SyntaxFactory.DocumentationCommentExterior("///")),
" ",
" ",
SyntaxFactory.TriviaList()
)
)
),
SyntaxFactory.XmlElement(
SyntaxFactory.XmlElementStartTag(SyntaxFactory.XmlName("exception"))
.WithAttributes(SyntaxFactory.SingletonList<XmlAttributeSyntax>(
SyntaxFactory.XmlCrefAttribute(
SyntaxFactory.XmlName("cref"),
SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken),
SyntaxFactory.NameMemberCref(
SyntaxFactory.IdentifierName(thrownTypeSymbol.ToMinimalDisplayString(semanticModel, throwSyntax.GetLocation().SourceSpan.Start))
),
SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken)
).WithLeadingTrivia(
SyntaxFactory.TriviaList(
SyntaxFactory.Whitespace(" ")
)
)
)),
SyntaxFactory.XmlElementEndTag(SyntaxFactory.XmlName("exception"))
).WithContent(
SyntaxFactory.List<XmlNodeSyntax>(new[] {
SyntaxFactory.XmlText()
.WithTextTokens(
SyntaxFactory.TokenList(
SyntaxFactory.XmlTextNewLine(SyntaxFactory.TriviaList(), "\n", "\n", SyntaxFactory.TriviaList()),
SyntaxFactory.XmlTextLiteral(
SyntaxFactory.TriviaList(SyntaxFactory.DocumentationCommentExterior("///")),
" ",
" ",
SyntaxFactory.TriviaList()
),
SyntaxFactory.XmlTextNewLine(SyntaxFactory.TriviaList(), "\n", "\n", SyntaxFactory.TriviaList()),
SyntaxFactory.XmlTextLiteral(
SyntaxFactory.TriviaList(SyntaxFactory.DocumentationCommentExterior("///")),
" ",
" ",
SyntaxFactory.TriviaList()
)
)
)
})
),
SyntaxFactory.XmlText(
SyntaxFactory.TokenList(
SyntaxFactory.XmlTextNewLine(
SyntaxFactory.TriviaList(),
Environment.NewLine,
Environment.NewLine,
SyntaxFactory.TriviaList()
)
)
)
};
А потом добавление узлов к существующему DocumentationCommentTriviaSyntax
узла.
newTrivia = xmlTrivia.AddContent(newNodes);
Проблема
Это добавить недостающие < исключение> документация комментарии, но, к сожалению, используя неправильные окончания строки. Я могу изменить hardcoded \n
на Environment.NewLine
, но это все еще может не совпадать с окончанием строки файла.
Есть ли способ использовать окончание строки документа, в которое применяется исправление?
'Есть ли способ использовать окончаний строк документа исправление применяется в?' Что делать, если файл имеет сочетание обоих? –
@ ta.speot.is Это хороший вопрос, я не знаю. Как исправления по умолчанию, предоставленные Visual Studio для обработки строк в этом случае? – Wazner