Internships
Register
Copyright © 2000—2025 JetBrains s.r.o.

Улучшение алгоритма сравнения (diff) результатов анализа и импорт маркеров в IDE

Description

Qodana – новый статический анализатор кода на базе продуктов IntelliJ. Анализ кода осуществляется с помощью инспекций. Для каждого файла из анализируемого проекта инспекция берет его AST-дерево и запускает на нем алгоритм, который проверяет какие-то правила языка (несоответствие типов, некорректное использование оператора и т.д.). Результат выполнения инспекции – подсветка кода цветом, в зависимости от серьезности проблемы, в редакторе IDE и экспортирование этой информации во вспомогательный файл.

Одна из важных функций Qodana – нахождение разницы (diff) между двумя любыми результатами анализа. Например, это может использоваться для проверки качества Pull Request в GitHub-репозитории. Для того, чтобы правильно понимать, какие результаты анализа уже присутствовали в прошлом прогоне, нам нужно для каждого элемента дерева вычислять уникальный идентификатор, который будет устойчив к простым изменениям в коде.

Задача

Написать плагин для IntelliJ, который реализует алгоритм построения уникального идентификатора элемента AST-дерева. Уникальный идентификатор должен обладать следующими свойствами:

1) Устойчивость к простым изменениям в коде. Если элемент находится в теле метода, то его идентификатор не должен меняться при изменении имени этого метода, при переформатировании текста программы и тд.

2) Языконезависимость. Мы хотим одним алгоритмом уметь строить идентификаторы для всех языков, которые поддерживаются в продуктах на платформе IntelliJ.

Ожидаемый результат стажировки

Плагин для продуктов на платформе IntelliJ, который применяет алгоритм для заданных элементов дерева и экспортирует идентификаторы во вспомогательный файл. Также, плагин должен уметь производить обратную операцию – по идентификаторам, полученным в результате запуска Qodana, находить соответствующие элементы в дереве и подсвечивать их в редакторе.

По всем вопросам можно писать на artemy.pestretsov@jetbrains.com

Requirements

  • Обязательно только знание Java и/или Kotlin, знание классических алгоритмов и желание разбираться в новом
  • Знакомство с принципами работы статических анализаторов кода является плюсом
  • Знакомство с IntelliJ платформой является плюсом

Admission

Разработчики: Лето 2021

Mentor

Artemy Pestretsov, Ekaterina Shliakhovetskaja, Nikita Kochetkov

Mentor's location

Remote

Product/Team

Qodana

Tags

Java
Kotlin