walterlv / BlogComments

3 stars 0 forks source link

post/develop-a-code-analyzer-for-both-nuget-and-visual-studio-extension #146

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

基于 Roslyn 同时为 Visual Studio 插件和 NuGet 包开发 .NET/C# 源代码分析器 Analyzer 和修改器 CodeFixProvider - walterlv

Roslyn 是 .NET 平台下十分强大的编译器,其提供的 API 也非常丰富好用。本文将基于 Roslyn 开发一个 C# 代码分析器,你不止可以将分析器作为 Visual Studio 代码分析和重构插件发布,还可以作为 NuGet 包发布。不管哪一种,都可以让我们编写的 C# 代码分析器工作起来

https://blog.walterlv.com/post/develop-a-code-analyzer-for-both-nuget-and-visual-studio-extension.html

Poker-sang commented 1 year ago

大佬写的太好了我学到了很多,但我还遇到了一个问题一直没能解决。就是在分析器中(源生成器或者修改器),如何保证生成的代码不会出现命名冲突,尤其是代码会和用户代码存在同一个文件时?

源生成器有个笨办法,可以复制用户的UsingDirectives,除了用户代码部分其他都用全限定名就可以解决问题;但如果用户Using写的位置很怪也难以保证一直正确。

修改器是直接给用户看的代码,所以无法全部用全限定名,应该用尽可能简单的名字,所以无法绕开这个问题,我还没想到更好的方法。

由于C#各种语法写法越来越多,几乎不可能手动分析完代码所有可能的情况,所以有没有什么Roslyn库自带的方法可以简单地解决命名冲突呢?谢谢谢谢】

walterlv commented 1 year ago

大佬写的太好了我学到了很多,但我还遇到了一个问题一直没能解决。就是在分析器中(源生成器或者修改器),如何保证生成的代码不会出现命名冲突,尤其是代码会和用户代码存在同一个文件时?

源生成器有个笨办法,可以复制用户的UsingDirectives,除了用户代码部分其他都用全限定名就可以解决问题;但如果用户Using写的位置很怪也难以保证一直正确。

修改器是直接给用户看的代码,所以无法全部用全限定名,应该用尽可能简单的名字,所以无法绕开这个问题,我还没想到更好的方法。

由于C#各种语法写法越来越多,几乎不可能手动分析完代码所有可能的情况,所以有没有什么Roslyn库自带的方法可以简单地解决命名冲突呢?谢谢谢谢】

实际上我现在用的主要就是你说的那个笨办法🤣

Poker-sang commented 1 year ago

resharper的重构好像会检测到冲突并使用全名,不知道他咋实现的🫤

说到resharper一直很想给他删了,但他的codefix provider太好用已经离不开了【