问题 如何添加空格和/或格式代码?


鉴于我使用SymbolFactory.CreateProperty创建了一个符号,我将如何添加空格。目前我在写出文档时都获得了可访问性,修饰符,名称,类型等。也许我写错了,或者我需要添加额外的步骤来添加空格?我使用document.GetText()将其写入控制台。


8716
2017-10-31 15:55


起源



答案:


不,这就是你的期望。生成的节点没有空格,一旦完成,您将处理它。

有两种选择:

  1. 在节点上调用.NormalizeWhitespace()。这是一个积极的格式化程序,只有当你生成不打算被人类使用的代码时才真正有用 - 它会使输出“有效”但会消除任何现有格式。
  2. 调用Formatter.Format(),来自 Microsoft.CodeAnalysis.Formatting。这是花哨的格式化程序,它将尝试保留现有的空白等,并且只会更新需要修复的节点。如果您正在更新用户代码并且不想踩踏它,那么这是最好的。

9
2017-10-31 16:57



再次感谢,还有一个问题,我如何制作它以便它不会写出全限定类型名称,例如global :: ... Person,我只想要Person,因为我将导入所需的名称空间? - epitka
如果你把它放在一个IDocument中,那就是Roslyn.Services.DocumentExtensions.Simplify会产生一个新文档,删除所有这些东西。在IDocument上也有一个Format方法,这样可以使一切变得更容易使用。 - Jason Malinowski
这个答案给出了CTP后更新的Format方法 stackoverflow.com/a/23626524/22539 - foson


答案:


不,这就是你的期望。生成的节点没有空格,一旦完成,您将处理它。

有两种选择:

  1. 在节点上调用.NormalizeWhitespace()。这是一个积极的格式化程序,只有当你生成不打算被人类使用的代码时才真正有用 - 它会使输出“有效”但会消除任何现有格式。
  2. 调用Formatter.Format(),来自 Microsoft.CodeAnalysis.Formatting。这是花哨的格式化程序,它将尝试保留现有的空白等,并且只会更新需要修复的节点。如果您正在更新用户代码并且不想踩踏它,那么这是最好的。

9
2017-10-31 16:57



再次感谢,还有一个问题,我如何制作它以便它不会写出全限定类型名称,例如global :: ... Person,我只想要Person,因为我将导入所需的名称空间? - epitka
如果你把它放在一个IDocument中,那就是Roslyn.Services.DocumentExtensions.Simplify会产生一个新文档,删除所有这些东西。在IDocument上也有一个Format方法,这样可以使一切变得更容易使用。 - Jason Malinowski
这个答案给出了CTP后更新的Format方法 stackoverflow.com/a/23626524/22539 - foson


我有同样的问题,我发现这是最好的:

node.WithTrailingTrivia(SyntaxFactory.Space)

其中node是a SyntaxToken 任何形式的。


2
2017-08-09 11:53