我们提供安全,免费的手游软件下载!
之前我们曾经介绍过使用Roslyn源生成器生成源代码的用例,今天我们将使用Roslyn的代码修复器(CodeFixProvider)来实现一个cs文件头部注释的功能。
代码修复器涉及到CodeFixProvider和DiagnosticAnalyzer。
首先,我们需要实现一个名为FileHeaderAnalyzer的分析器。修复器的先决条件是分析器,因此分析器必须给出对应的分析提醒。FileHeaderAnalyzer分析器的原理很简单,需要重载几个方法,其中RegisterSyntaxTreeAction方法是核心代码,SyntaxTreeAnalysisContext对象取到当前源代码的SyntaxNode根节点,然后判断其第一个SyntaxToken是否为注释行(SyntaxKind.SingleLineCommentTrivia或SyntaxKind.MultiLineCommentTrivia)。如果不是注释行,则通知分析器。
实现了FileHeaderAnalyzer分析器后,我们可以看到效果,并且在编译时分析器将在错误面板中显示警告清单。
并且编译的时候分析器将会在错误面板中显示警告清单:
分析器完成后,我们来实现一个名为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
热门资讯