Qodana – новый статический анализатор кода на базе продуктов IntelliJ. Анализ кода осуществляется с помощью инспекций. Для каждого файла из анализируемого проекта инспекция берет его AST-дерево и запускает на нем алгоритм, который проверяет какие-то правила языка (несоответствие типов, некорректное использование оператора и т.д.). Результат выполнения инспекции – подсветка кода цветом, в зависимости от серьезности проблемы, в редакторе IDE и экспортирование этой информации во вспомогательный файл.
Одна из важных функций Qodana – нахождение разницы (diff) между двумя любыми результатами анализа. Например, это может использоваться для проверки качества Pull Request в GitHub-репозитории. Для того, чтобы правильно понимать, какие результаты анализа уже присутствовали в прошлом прогоне, нам нужно для каждого элемента дерева вычислять уникальный идентификатор, который будет устойчив к простым изменениям в коде.
Задача
Написать плагин для IntelliJ, который реализует алгоритм построения уникального идентификатора элемента AST-дерева. Уникальный идентификатор должен обладать следующими свойствами:
1) Устойчивость к простым изменениям в коде. Если элемент находится в теле метода, то его идентификатор не должен меняться при изменении имени этого метода, при переформатировании текста программы и тд.
2) Языконезависимость. Мы хотим одним алгоритмом уметь строить идентификаторы для всех языков, которые поддерживаются в продуктах на платформе IntelliJ.
Ожидаемый результат стажировки
Плагин для продуктов на платформе IntelliJ, который применяет алгоритм для заданных элементов дерева и экспортирует идентификаторы во вспомогательный файл. Также, плагин должен уметь производить обратную операцию – по идентификаторам, полученным в результате запуска Qodana, находить соответствующие элементы в дереве и подсвечивать их в редакторе.
По всем вопросам можно писать на artemy.pestretsov@jetbrains.com