0

我正在创建一个 Roslyn SourceGenerator,但在格式化 CodeAnalysis CompilationUnitSyntax 实例时遇到问题。

我在 SourceGenerators 中看到的所有示例都使用了一些复杂的 StringBuilders、TextWriters 或字符串格式的模板。

我正在使用 Microsoft.CodeAnalysis.CSharp.Syntax 命名空间来生成我的代码。

我遇到的问题是,如果我在调用“GeneratorExecutionContext.AddSource”之前调用“NormalizeWhitespace”,一些代码会因为缺少更好的术语而被渲染。

我编写了初始化对象的正确代码=>

var routes = new RouteValueDictionary(new { area = "area" });

调用“NormalizeWhitespace”将把它变成

var routes = new RouteValueDictionary(new
{
area = "area"
}

);

这可以编译,但看起来很丑陋。

如果我不使用 NormalizeWhitespace,一切看起来会更糟,并且生成的代码可能由于修饰符、标识符等之间缺少空格而无法编译。

出于性能原因,我读过的所有内容都建议不要对大量发出的代码使用“NormalizeWhitespace”。

此外,我尝试使用 Roslyn Formatter API,但在 SourceGenerator 内实例化 AdhocWorkspace 实例时遇到问题(TypeLoadException 不断被抛出)。

我宁愿不使用 SyntaxRewriter 或字符串格式,因为这个项目的重点是减少使用魔术字符串。

是否有关于格式化 SyntaxNodes 的明确指南,尤其是关于 NormalizeWhitespace 的使用?

4

0 回答 0