Например для линтеров, очень подробное руководство зачем они нужны
https://habr.com/ru/post/457970/
Чтобы написать линтер — часто нужно сделать статич анализ кода.
Проверять цикломатич сложность, форматирование кода, находить ошибки или некорректное использование кода.
Для динамически-типизированных языков стат-анализ может взять роль компилятора и проверять корректность типов и прочих штук. Например описать типы массива (который не типизирован в PHP) или даже имитировать функционал дженериков. Это повысит качество кода и его надежность, избавит от ошибок в боевой среде.
И ещё интересно, как именно происходит анализ кода?
Все зависит от того, какую проверку вы делаете... Например (из воздуха) вы хотите сделать проверку, что метод слишком сложный (большой) — делаете анализ кода и по каким-то критериям выдаете оценку/предупреждения. Находите метод (начало и конец) и число строк сравниваете с "приемлимым для вас".
Или например есть код, но на самом деле он не вызывается никогда (утверждения всегда true дают, а IDE не может этого понять), вы находите такие случае в работе/на ревью со временем и вырабатываете правила как это детектить... Чтобы задетектить, вам надо разобрать инструкции кода, как понимаете без статанализа этого не возможно, не регулярками же делать.