Вопрос или проблема
Мне нужно понять существующую кодовую базу на Rust.
У меня есть возможность видеть иерархию модулей/трейтов/функций с помощью rustdoc и быстро переходить к ссылкам и определениям, используя VS Codium (анонимная версия VS Code), но я хотел бы инструмент, который поможет с такими задачами, как генерация и просмотр статического графа вызовов.
Я искал и спрашивал у людей несколько дней без успеха, поэтому спрашиваю: какие бесплатные инструменты статического анализа доступны для Rust?
Иерархия вызовов доступна в VSCode / VSCodium, но только если выбран rust-analyzer, а не RLS.
Используя rust-analyzer, у вас будет пункт “Показать иерархию вызовов” в контекстном меню.
Если вы используете RLS в качестве Rust-client: измените настройку Engine на rust-analyzer, нажав Ctrl-, чтобы открыть настройки, затем введите “Rust”, чтобы отфильтровать список, прокрутите до “Rust-client: Engine” и выберите “rust-analyzer”. Вам также потребуется закрыть и снова открыть рабочую область.
Ответ или решение
Вам повезло, что для анализа статического кода на языке Rust существует несколько бесплатных инструментов, которые могут помочь вам лучше понять существующую кодовую базу. Ниже представлены наиболее популярные из них:
-
rust-analyzer: Это современный инструмент для анализа кода, который предлагает множество функций, включая генерацию и просмотр иерархий вызовов. Как вы уже отметили, используя rust-analyzer, вы можете воспользоваться функцией "Show Call Hierarchy", что позволяет легко проследить, какие функции вызывают другие. Убедитесь, что вы используете rust-analyzer вместо RLS, как вы уже изложили в своем вопросе.
-
Clippy: Этот инструмент является линтером для Rust, который помогает выявлять потенциальные ошибки и шаблонные проблемы в вашем коде. Clippy не создает графы вызовов, но он очень полезен для анализа качества кода и нахождения потенциальных улучшений.
-
Cargo Geiger: Этот инструмент помогает определить использование небезопасного кода в вашем проекте. Он может быть полезен, если вы хотите проанализировать безопасность и надежность кода, особенно в больших проектах.
-
Cargo Audit: Этот инструмент проверяет зависимости вашего проекта на наличие известных уязвимостей. Хотя он не является анализатором кода в полном смысле, он важен для анализа внешних библиотек и их влияния на безопасность.
-
Mir (Mid-level Intermediate Representation): Вы можете использовать Mir для более глубокого анализа кода на уровне промежуточного представления. Хотя Mir больше ориентирован на разработчиков компиляторов, его возможность генерировать графы вызовов может быть полезна, если вам нужно более детальное представление структуры вашего кода.
-
rustfmt: Этот инструмент не является статическим анализатором, но форматирование кода помогает поддерживать его читаемость и согласованность. Хорошо отформатированный код легче анализировать.
-
dot: Если вам нужно визуализировать графы вызовов, вы можете экспортировать информацию о вызовах из вашего проекта в формат, совместимый с Graphviz и использовать
dot
для создания графов. Это потребует написания небольшого скрипта, который может обрабатывать вывод rust-analyzer или другой информации.
Каждый из перечисленных инструментов может предоставить различные аспекты анализа кода. Рекомендуется использовать их в комбинации для получения наиболее полного представления о вашей кодовой базе. Если у вас возникли дополнительные вопросы или нужна помощь с конкретным инструментом, не стесняйтесь спрашивать!