【问题标题】:Generating well-formatted syntax with Roslyn使用 Roslyn 生成格式良好的语法
【发布时间】:2016-02-01 17:26:52
【问题描述】:

我正在使用 Roslyn 来修改 C# 文件的语法。使用 CSharpSyntaxRewriter,很容易在语法树中查找和替换节点。但是,生成的代码非常难看,甚至在所有情况下都无法解析,因为我创建的语法节点(使用 SyntaxFactory)甚至缺少最少量的空白琐事。 Roslyn 是否提供了一些基本的格式化功能来避免这种情况,还是我必须手动向我创建的每个节点添加琐事?

【问题讨论】:

    标签: c# code-formatting roslyn


    【解决方案1】:

    是的 - 有可能,使用 Microsoft.CodeAnalysis.Formatting.Formatter:

    var formattedResult = Formatter.Format(syntaxNode, workspace);
    

    【讨论】:

      【解决方案2】:

      您可以在 Roslyn 源代码中查看不同 Roslyn 格式化程序的用法: http://sourceroslyn.io/#Microsoft.CodeAnalysis.Workspaces/CodeActions/CodeAction.cs,267

      internal static async Task<Document> CleanupDocumentAsync(
              Document document, CancellationToken cancellationToken)
      {
          if (document.SupportsSyntaxTree)
          {
              document = await ImportAdder.AddImportsFromSymbolAnnotationAsync(
              document, Simplifier.AddImportsAnnotation, cancellationToken: cancellationToken).ConfigureAwait(false);
      
              document = await Simplifier.ReduceAsync(document, Simplifier.Annotation, cancellationToken: cancellationToken).ConfigureAwait(false);
      
              // format any node with explicit formatter annotation
              document = await Formatter.FormatAsync(document, Formatter.Annotation, cancellationToken: cancellationToken).ConfigureAwait(false);
      
              // format any elastic whitespace
              document = await Formatter.FormatAsync(document, SyntaxAnnotation.ElasticAnnotation, cancellationToken: cancellationToken).ConfigureAwait(false);
      
              document = await CaseCorrector.CaseCorrectAsync(document, CaseCorrector.Annotation, cancellationToken).ConfigureAwait(false);
           }
      
           return document;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        • 2015-03-06
        • 2011-03-21
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        相关资源
        最近更新 更多