Проект: IntelliJ Cooklang: Рефакторим помидоры  Публичный пост
27 марта 2024  188
IntelliJ Cooklang: Рефакторим помидоры

Салют!

Есть такая старая шутка каждый программист должен написать свою базу данных, текстовый редактор и язык программирования

Я хочу сегодня рассказать про свой опыт с закрытием пункта про язык программирования

Собственно, на прошлой неделе я написал плагин для intelliJ-based ides добавляющий минималистичную, но уже, поддержку нового языка

Как появилась идея? Что вдохновило?

На работе я делаю систему для визуализации статистики по git-репозиторию

Да, все вот эти, кто сколько строчек поменял, сколько коммитов сделал, по каким дням чаще открывает пуллреквесты и все в таком же духе, в виде графиков красивых

Продукт нужный и полезный, но не для людей для корпоратов

А хочется делать что-то более близкое "к народу", чем сам бы мог пользоваться

В какой-то момент, увидел в клубе пост про язык для рецептов и тут понеслось

Что вошло в прототип и сколько времени на него было потрачено?

Не уверен, сколько времени потратил. Две ночи точно, ну и еще, наверное, часов 10-15 на протяжении недели

Пока сделал две фичи

  1. Подсветка синтаксиса, чтоб быть не хуже остального доступного тулинга
  2. Поиск рецептов, где тоже используется этот ингредиент

Какой технологический стек вы использовали? Почему?

Проект написан на Kotlin, потому что с одной стороны это официально рекомендуемый язык для написания intellij-плагинов, а с другой стороны люблю я его

Собирается все это дело через Gradle средствами GitHub Actions

С какими самыми неожиданными трудностями пришлось столкнуться?

Глобально, трудность была одна - слабое знание матчасти в вопросах парсеров и формальных грамматик. Однако, не сказать, чтоб она была совсем неожиданная.

Концептуально, поддержка языка в IDEA очень простая штука.

Надо просто реализовывать несколько десятков доступных плагин поинтов

Коварный нюанс, что для их реализации нужно иметь PSI, оно же, описание твоего языка в терминах, понятных IDE

Вот тут в игру и вступают лексеры, парсеры и деревья, которыми принято вращать на собесах

Практически, надо сделать два файла

  • описание грамматики в формате bnf
  • описание лексера в формате flex

А потом, отдельным плагином сгенерировать код самих классов, представляющих тот самый PSI и еще один код парсера, который эти самые PSI сделает из поступившего на вход текстового файла.

Как показал мой опыт, для простых кейсов понимание теории, в принципе, не особо нужно. Достаточно внимательно раскурить полдесятка исходников похожих плагинов и сделать по аналогии

Какие планы на будущее?

В целом, я планирую на примере этого проекта прокачивать свои навыки в создании тулинга для IDEA и ведении opensource-проекта (раньше, пару раз коммитил в языковые плагины)

В доке есть туториал, что можно сделать, чтоб запилить крутую поддержку языка, хочу сделать все пункты

Из ближайшего, точно можно сделать красивый просмотр рецепта и переименование ингредиентов, посуды, таймеров

Нужны ли какие-то советы или помощь Клуба?

А накидайте пользовательских сценариев, а :)

Да, вот вы, обладатели коллекции рецептов, размеченных специальным языком. Чем бы вам могла помочь настоящая IDE в вопросах обслуживания этой коллекции?

Ибо, при всей технической крутости проекта, по сути, он вещь в себе и, пока что, обслуживает только эго своего автора в стиле "смотри, чо могу!"

Надо ли кому-то, во всех своих рецептах, удобно переименовывать все помидоры в томаты и обратно?

Связанные посты
Откомментируйте первым 👇

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб