正则表达式,用于查找缺少“异步”后缀的 C# 异步方法
本文关键字:后缀 异步方法 异步 用于 查找 正则表达式 | 更新日期: 2023-09-27 17:57:10
在 C# 中,异步方法(用 async
关键字标记的方法)的约定之一是它们的名称应以"Async"后缀结尾:
public async Task MyMethod(/* params */) ... <-- Bad, missing "Async" suffix
public async Task MyMethodAsync(/* params */) ... <-- Good, as per convention
我最近写了很多异步代码,我担心我可能忘记在某些方法上加上"异步"后缀。
是否有任何正则表达式可用于查找标有async
但没有"异步"后缀的方法?如果可能的话,是否可以进行相反的操作(即查找确实具有"Async"后缀但没有标有async
关键字的方法)?
我希望将正则表达式粘贴到Visual Studio中的"在文件中查找"对话框中,如果这对答案有任何影响的话。
我猜像FxCop,CodeRush或ReSharper这样的工具可能已经警告过这样的事情,但是后两个不是我的工作场所的选择,如果我可以使用简单的正则表达式来完成这一点,我宁愿不必安装和配置前者。
这里有正则表达式:
(?i)async.*(?<!async)'(
它查找关键字 async,然后在没有 ("?<!") 的"("中查找)在它之前异步。
编辑:更好的版本。谢谢@Andrew
Task's+('w+(?<!Async))'(
这也将为您提供在 and 处具有小书面异步的方法。此外,它允许使用查找和替换。
这是一个也适用于泛型方法和返回结果的方法(可能再次使用泛型)。
async (void|Task(<.*>)?) [^<'(]*(?<!Async)(?:<.*?>)?'(
我已经针对以下模式对其进行了测试:
async void Test()
async void Test<T>()
async void Test<T, U>()
async Task Test()
async Task Test<T>()
async Task Test<T, U>()
async Task<T> Test()
async Task<T> Test<T>()
async Task<T> Test<T, U>()
async Task<T<U>> Test()
async Task<T<U>> Test<U>()
async Task<T<U>> Test<T, U>()
好小伙子,干净的代码FTW。 :)除了任何其他答案外,以下是我通过使用grep
实用程序的方法:
grep ''basync'b' file.cs | grep -v 'Async('
第一个grep
查找所有包含async
的行(作为一个单词),第二个grep
将它们过滤为没有Async(
的行。