【问题标题】:How to add white space and/or format code?如何添加空格和/或格式代码?
【发布时间】:2021-12-16 07:30:31
【问题描述】:

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

【问题讨论】:

    标签: roslyn


    【解决方案1】:

    不,这就是您所期望的。生成的节点没有空格,目的是在完成后处理它。

    有两种选择:

    1. 在节点上调用 .NormalizeWhitespace()。这是一种激进的格式化程序,只有在您生成不打算被人类使用的代码时才真正有用 - 它使输出“有效”,但会消除任何现有的格式。
    2. Microsoft.CodeAnalysis.FormattingMicrosoft.CodeAnalysis.Workspaces.Common package 的一部分)调用 Formatter.Format()。这是一个花哨的格式化程序,它将尝试保留现有的空白等,并且只会更新需要修复的节点。如果您正在更新用户代码并且不想踩到它,这是最好的选择。

    【讨论】:

    • 再次感谢,不过还有一个问题,我该如何做到,这样它就不会写出完全限定的类型名称,例如 global::...Person,我宁愿只想要 Person,因为我将导入需要命名空间?
    • 如果您将它放在 IDocument 中,那么 Roslyn.Services.DocumentExtensions.Simplify 将生成一个新文档,其中所有内容都被删除。在 IDocument 上也有一个 Format 方法,这使得一切都更容易使用。
    • 这个答案给出了更新后的 Format 方法 post-CTP stackoverflow.com/a/23626524/22539
    【解决方案2】:

    我有同样的问题,我发现这个效果最好:

    node.WithTrailingTrivia(SyntaxFactory.Space)
    

    其中节点是任何类型的SyntaxToken

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 2020-10-06
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 2017-05-04
      相关资源
      最近更新 更多