Как одну проверку Clippy ускорили в 3133 раза
Казалось бы, проверить скобки в вызовах макросов Rust просто. Но Clippy делал это после раскрытия макросов, когда [], () или {} уже нельзя получить напрямую. Знак восстанавливали по фрагменту исходного кода.
В обстоятельном разборе показана цена решения: для каждого выражения, инструкции и элемента программы проверка поднималась по цепочке раскрытий, дважды запрашивала данные компилятора и блокировала таблицу преобразования идентификаторов в строки. Одна функция забирала 25% времени Clippy.
Исправление заняло менее 200 строк: проверку перенесли на этап до раскрытия макросов, где скобки видны сразу. Материал пригодится авторам статических анализаторов и компиляторных плагинов: профилируйте обход каждого узла дерева и проверяйте ускорение замерами.
Post #3026
120
