Получи случайную криптовалюту за регистрацию!

Коллега поделился скриптом на питоне, который проверяет количе | 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