Коллега поделился скриптом на питоне, который проверяет количе | NuclearBand
Коллега поделился скриптом на питоне, который проверяет количество подписок и отписок на ивенты внутри cs файлов, и нашёл мою опечатку: += вместо -= внутри метода OnDestroy.
У меня появилась идея, что можно было бы обойтись регулярным выражением, ищущим += внутри методов OnDestroy и Dispose. Но сам я профан в составлении регулярок, так что решил обратиться к chatGPT.
Сначала хотел, чтобы он определял область поиска через равенство открывающихся и закрывающихся скобок, но rider такой вариант не поддерживает.
\b(OnDestroy|Dispose)\b[\s\S]*?\{[\s\S]*?(?:(?\{)|(?<-open>\})|[^{}])*(?:(?(open)|(?
Потом я решил сделать ограничение области метода через следующее ключевое слово private, public или protected и пришёл к такому варианту:
(OnDestroy|Dispose)[\s\S]*?\+=((?!(private|public|protected)\b)[\s\S])*?(?=\b(private|public|protected)\b)
Но в этой регуляркой были ложные срабатывания на += в других методах, идущих после OnDestroy и Dispose.
В итоге я догадался, что мешают модификаторы private, public и protected, которые идут перед '+=', и попросил также исключить их. Чуть доработанный рабочий результат таков:
(OnDestroy\(\)|Dispose\(\))((?!;)[^;])((?!(private|public|protected)\b)[\s\S])*?\+=((?!(private|public|protected)\b)[\s\S])*?(?=\b(private|public|protected)\b)
Нашёл три мэтча в коде. Но стоило ли это двух часов диалогов с chatGPT?
#tools