我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

使用Roslyn的代码修复器实现cs文件头部注释功能

来源:网络 更新时间:2024-09-08 09:32:46

之前我们曾经介绍过使用Roslyn源生成器生成源代码的用例,今天我们将使用Roslyn的代码修复器(CodeFixProvider)来实现一个cs文件头部注释的功能。

代码修复器涉及到CodeFixProvider和DiagnosticAnalyzer。

实现FileHeaderAnalyzer

首先,我们需要实现一个名为FileHeaderAnalyzer的分析器。修复器的先决条件是分析器,因此分析器必须给出对应的分析提醒。FileHeaderAnalyzer分析器的原理很简单,需要重载几个方法,其中RegisterSyntaxTreeAction方法是核心代码,SyntaxTreeAnalysisContext对象取到当前源代码的SyntaxNode根节点,然后判断其第一个SyntaxToken是否为注释行(SyntaxKind.SingleLineCommentTrivia或SyntaxKind.MultiLineCommentTrivia)。如果不是注释行,则通知分析器。

实现了FileHeaderAnalyzer分析器后,我们可以看到效果,并且在编译时分析器将在错误面板中显示警告清单。

并且编译的时候分析器将会在错误面板中显示警告清单:

实现CodeFixProvider

分析器完成后,我们来实现一个名为AddFileHeaderCodeFixProvider的修复器。修复器最重要的重载方法是RegisterCodeFixesAsync,CodeFixContext对象包含项目和源代码以及对应分析器的信息。我们可以从项目文件中读取配置信息,然后使用正则表达式替换模板即可得到想要的注释代码片段。

比如我的Comment模板文件Biwen.AutoClassGen.Comment:

// Licensed to the {Product} under one or more agreements.
// The {Product} licenses this file to you under the MIT license. 
// See the LICENSE file in the project root for more information.
// {Product} Author: {Author} Github: https://github.com/vipwan
// {Description}
// Modify Date: {Date} {File}

最后使用SyntaxFactory.Comment(comment)方法生成一个注释的SyntaxTrivia并附加到当前的根语法树上,最后返回这个新的Document即可。

大功告成,我们来看效果:

以上代码就完成了整个代码修复器步骤,最后你可以使用我发布的nuget包体验:

dotnet add package Biwen.AutoClassGen

源代码已发布到GitHub,欢迎star!
https://github.com/vipwan/Biwen.AutoClassGen

https://github.com/vipwan/Biwen.AutoClassGen/blob/master/Biwen.AutoClassGen.Gen/CodeFixProviders/AddFileHeaderCodeFixProvider.cs