Быстро приближается релиз IntelliJ IDEA 2023.2, а значит, текущему EAP-у осталось жить недолго. Вы все еще можете успеть попробовать новые фичи, и попросить исправить их до релиза, когда исправлять будет уже поздно.
JetBrains ушел из России, но его IDE всё ещё является основным средством разработки на Java. Как у бывшего product marketing manager в JetBrains, у меня есть некоторый опыт в написании и переводе таких статей. Изначально, принести эту новость сподвигло то, что в ней есть важное обновление плагина Big Data Tools, над которым когда-то работала моя команда. Кроме того, JB разродились официальной поддержкой LSP, что наверняка, стоило им титанических моральных усилий. PMM-ов бывших не бывает, им просто перестают за это платить.
Я попробую описывать самые значимые новости, касающиеся JetBrains IDE. Чтобы получать больше таких новостей - подписывайтесь на Хабре на наш блог, а ещё вы можете пройти в мою личную телегу @Javawatch.
Под катом - обзор перечисленных фичей, со скриншотами. Поехали.
Фреймворки и технологии
Поддержка LSP для разработчиков плагинов
В этом EAP появилась огромная, фундаментальная фича, которую так долго ждали: LSP API для разрабочтиков плагинов. LSP - это протокол между редактором и бэкендом анализа кода, который позволяет делать поддержку анализа кода без залочки на конкретного вендора IDE.
IDE на основе IntelliJ известны способностью глубоко анализировать исходный код и поддерживать множество языков программирования и фреймворков. В то же время, часть языков технологий не поддерживаются нативно, и возможно, в природе существует LSP-сервер, который их поддерживает.
LSP API, в основном, предназначется тем разработчикам плагинов, которые хотят использовать LSP для фичей, связанных с написанием кода. Если у вас есть свой язык программирования или фреймворк, можно добавить его поддержку в IDE, написав для него свой LSP-сервер и плагин для интеграции в IDEA.
Текущая версия поддержки LSP включает подсветку ошибок и ворнингов, квик-фиксы, автодополнение, переход к определениям функций. Список поддерживаемых фичей будет расширяться.
Чтобы написать самый минимальный плагин, который уже что-то делает, хватит несколько строк кода. Такой плагин должен реализовывать интерфейс com.intellij.platform.lsp.api.LspServerSupportProvider
, перечислять на каких типах файлов он работает, и как запустить сервер. Плагин Prisma ORM, разработанный в JetBrains, может быть хорошим опенсорсным примером реализации такого плагина. Кодовая база дстаточно большая, но лишь несколько классов относятся к поддержке LSP - их можно пронаблюдать в пакете org.intellij.prisma.ide.lsp.*
.
Предпросмотр Redoc UI для OpenAPI и Swagger
IDEA начала поддерживать предпросмотр Redoc UI для файлов спецификации OpenAPI и Swagger, включая YAML и JSON, позволяя переключаться между Redoc и Swagger. Эта интеграция позволяет использовать консоль Try it прямо внутри IDE, устанавливать параметры и рассылать запросы к API.
Поддержка GraphQL и WebSocket в HTTP Client CLI
Теперь вы можете использовать HTTP Client CLI для работы с GraphQL API и установки WebSocket-соединений с вашими сервисами, например, для тестирования или скриптов автоматизации.
Запросы к gRPC с использованием TLS в HTTP Client
Теперь вы можете делать gRPC-запросы через Transport Layer Security (TLS) в HTTP Client. TLS предоставляет шифрование и аутентификацию, обеспечивая конфиденциальность и целостность передачи данных. В синтаксисе запроса поддеживаются обе схемы (https:// and grpcs://).
Инспекция для Norway problem в YAML-файлах
Добавлена инспекция, исправляющая так называемую Norway problem, мешающая неправильной интерпретации булевских значений в YAML-файлах. Вкратце, а что если в YAML файле будет строчка 'NO', которую вы собирались интерпретировать как сокращение от страны Норвегия, но она внезапно стала булевским значением "no"?
Когда список, по большей части, состоит из строк, содержащих литерал, похожий на булевское значение, IDEA пытается подсветить этот литерал, обозначая потенциальную неконсистентность, и подсказывая добавить кавычки. Если список состоит из таких литералов (например, false, off, on, yes, no), любой лиетрал, который отличается от этого паттерна, подсвеичвается как возможная ошибка, несмотря на то, что никаких специальных решений проблемы и квик-фиксов IDE предлагать здесь не станет.
Бины-конфигурации Spring больше не требует процессора аннотаций
В свежей IDEA починили работу с кастомными конфигурациями. Теперь IDE дает человеческое автодополнение и валидацию свойств в файлах конфигурации YAML, без необходимости запускать отдельный процессор аннотаций.
Run / Debug
Непрерывный запуск JUnit для проектов Maven и Gradle
В свежей IDEA расширились возможности auto-testing с использванием JUnit, что позволило нормально работать с Maven и Gradle.
В дополнение к этому, упрощена активация режима непрерывного тестирования. Чтобы включить его, нужно использовать новую иконку Rerun Automatically, расположенную в окне Run/Debug. Каждый раз, когда вы сохраняете изменения, ваши тесты запускаются совершенно автоматически, что позволяет получать мгновенный фидбек на каждое обновление кода.
Остальные фичи
Разделение плагина Big Data Tools на кусочки
То, что плагин Big Data Tools - это огромный монолит, всегда было проблемой для пользователей. Сейчас его разделили на кусочки, которые можно использовать по-отдельности и сравнительно независимо. Это означает появление шести новых плагинов:
Плагин для Kafka позволяет мониторить кафковые процессы, управлять созданием консюмеров, продюсеров и топиков. Кроме того, он позволяет подключаться к Schema Registry, чтобы создавать и обновлять схемы.
Плагин для Spark позволяет работать со спарковыми проектами, запускать джобы и мониторить их исполнение.
Плагин для Flink - это отдельная штука для работы с Flink-проектами, которая умеет запускать джобы и мониторить их.
Remote File Systems создан для работы с облачными хранилищами типа AWS S3, Alibaba, Google Cloud и Tencent, это что-то типа файлового менеджера.
Big Data File Viewer нужен для того, чтобы получить быстрый предпросмотр файлов с большими данными (CSV, Parquet, ORC, Avro), не скачивая терабайты данных, и имея возможность смотреть их сразу в табличной форме.
Плагин Zeppelin нужен для эксплоративного анализа, визуализации и прототипирования в ноутбуках Zeppelin. Он делает для Цепелина нормальный UI, а не тот кошмар, что вы видите в вебе.
Если вам нужны все эти плагины одновременно (а почему бы их и не поставить, если вы за них всё равно заплатили), можно установить кмулятивный плагин Big Data Tools. Он подтянет их все.
Выше были перечислены наиболее важные изменения в IntelliJ IDEA 2023.2 EAP 7. Полный список таких изменений есть в Release Notes.
EAP скоро заканчивается, и у вас всё ещё есть возможность опробовать эти фичи и заслать в JB обратную связь. Если там есть какие-то дикие косяки, их ещё успеют починить.
Обратную связь можно отослать или через пункт Submit Feedback в меню Help, или пройдя в официальный багтрекер.
Но гораздо ценней, что мы можем бугуртить в комментариях на Хабре.
Пост написан при поддержке "российской джавы" Axiom JDK и моего бара Failover Bar, потому что я пишу его в рабочее время.
Комментарии (39)
ris58h
06.07.2023 09:05+5Кроме того, JB разродились официальной поддержкой LSP, что наверняка, стоило им титанических моральных усилий.
Поэтому поддержка LSP только в платных версиях.
https://youtrack.jetbrains.com/issue/IDEA-162901
Are you planning to support LSP API in IntelliJ IDEA Community?
No, sorry, IntelliJ IDEA Community, PyCharm Community, and Android Studio won't support LSP API.
AstarothAst
06.07.2023 09:05+7Круто, конечно, но не актуально — JB решили, что наши деньги для них не достаточно хороши, и продавать все это великолепие нам отказывается. А жаль =(
ris58h
06.07.2023 09:05+1Community Edition можно использовать для комерческой разработки. Лучше чем ничего.
olegchir Автор
06.07.2023 09:05+4Есть Eclipse, он довольно хорош, и у него куча плагинов для всего на свете
IDEA CE хороша, но имхо, Эклипс совершенно незаслуженно забывают
Maccimo
06.07.2023 09:05Есть Eclipse, он довольно хорош
Вы им, похоже, не пользовались никогда.
Зачастую для отладки плагина для Eclipse-платформы проще было подрубиться к нему идеей по JDWP или даже просто JDB, чем пытаться отладить его средствами самого Eclipse. А «Evaluate» какой-нибудь переменной вполне мог закончиться «ClassNotFoundException». В окне отладчика «Variables» оная при этом прекрасно отображала своё значение.и у него куча плагинов для всего на свете
Количество не всегда переходит в качество.
ritorichesky_echpochmak
06.07.2023 09:05А HTTP Client уже научился в объявление переменных по аналогии с HTTP Request у VSCode и httpYac? И нормально подсвечиваться/запускаться прямо из документации на Markdown (блоки '''http ...''')?
Ну и всякие эти вот LSP в плагине плагина к плагину - это прекрасно, но киллерфичей был бы быстрый генератор для создания класса по шаблону (часто нужно, например, создать модельку улетающую с бэкенда перенеся часть свойств от основного объекта и точно так же приземлить очень похожую модель в БД), генератор нового объекта (просто быстро перечислить все имеющиеся пропертя класса у создаваемого объекта, чтобы юзверь не пропустил пару-тройку при заполнении) и инструмент для сравнения классов по аналогии с тем, как сделано сравнение результатов в DataGrip.
olegchir Автор
06.07.2023 09:05+1Сложной генерации нет, но самые простейшие штуки можно делать с помощью шаблонов. Класс по шаблону можно делатьс с помощью File Templates, а куски внутри файлов - с помощью Live Templates, эта функциональность древняя как звезды :)
ritorichesky_echpochmak
06.07.2023 09:05Создавать каждый раз ручками шаблон из которого тебе нужно две копии (DTO и моделька для сериализации в JSON из MVC) - ну такое себе. Ctrl+C/Ctrl+V тогда уж проще.
Live Templates, мне кажется 80% никто не использует в ежедневной работе, в лучшем случае конструктор, for и проперти создать - это почти то же самое, что с нуля всё писать и присутствует уже почти везде, чуть ли не в notepad++ и vim.
А вот именно добавить в Code | Generate (Alt+Insert) что-то типа create by example, да ещё с конструктором который бы от исходного класса всё затягивал - это же песня. Заполнить объект данными из другого объекта пройдясь по всем имеющимся полям - тоже была бы прям фича-фича, чтобы не перебирать всё руками, уже и для разных моделек часто нужная. Ну или некоторые swagger-штуки умеют генерить код прям по JSON - почему бы не создать класс на основе json-объекта прям в редакторе от JB? И, главное, даже пропосалы есть в трекере, им даже уже не один год.
DataGrip и его компаратор DDL и результатов - вообще вещь в себе и сильно недооценённая. Хотя там тоже подбешивает, например, дефолтная ширина таблички при использовании Inline results вместо services.
ris58h
06.07.2023 09:05Ctrl+C/Ctrl+V тогда уж проще.
Возможно, в этом дело. Фича весьма узкоспециализированная.
Можете сами плагин слепить - это не так уж трудно.
olegchir Автор
06.07.2023 09:05Когда руки таки дойдут до создания своей IDE, запилю тебе такую фичу одной из первых :)
b00
06.07.2023 09:05+1Класс (dto) из json (и обратная операция) - плагины есть, нормально справляются.
axelmaker
06.07.2023 09:05Как дела с удаленной разработкой по SSH? Пытался как-то раз попользоваться, но не дотягивает то того уровню, как у VS Code
olegchir Автор
06.07.2023 09:05+2Если нужно просто использование файлов на диске удалённого сервера, то это инструмент Tools->Deployment. Оно умеет синхронизировать локальный проект с удалённым.
Если нужно запускать движок анализа языка на удаленной тачке, то в платных версиях есть Remote Development: https://www.jetbrains.com/remote-development/
ritorichesky_echpochmak
06.07.2023 09:05+2Скорее всего речь про плагин "Remote - SSH" который поднимает удалённо инстанс VSCode, вместе со всеми плагинами на той стороне, а локальный инстанс подключается к нему. Можно в т.ч. дебажить код запущенный на удалённой машине. При этом локально исходников может не быть вообще - всё на той стороне.
olegchir Автор
06.07.2023 09:05+2Это remote development, по ссылке выше. Прямо из главного экрана Идеи эта штука работает. Собственно, мы над этой фичой и работали.
Sigest
06.07.2023 09:05+1А когда можно будет хоститься на windows? У меня вот есть мощная машина под виндой и я хочу тонким клиентом подключаться через Gateway покодить. Хост требуется линуксовый, либо какие-то костыли в виде WSL, которые у меня так и не завелись
ritorichesky_echpochmak
06.07.2023 09:05Мне нравится этот вопрос... потому что на винде docker-compose поднимающий Windows Containers у меня полгода назад даже на локальном хосте дебажить не получалось из Rider, ремоут не пробовал
slonopotamus
06.07.2023 09:05RDP?
Sigest
06.07.2023 09:05Не, ну по SSH как-то понадежнее в плане секьюрити, а оборачивать RDP впном не хочется. Но и легковеснее на SSH. Я пробовал через linux host - просто бомба. Сама идея бомба. Реализация пока хромая-кривая. Но ты получаешь вычислительную мощь домашнего десктопа у себя на полудохлом планшете. Не надо возить ноутбук с собой. Какого-нибудь surface с 4гб хватит. И это максимально бесшовно. Словно работаешь на десктопной машине
olegchir Автор
06.07.2023 09:05Projector работает сильно лучше RDP. Там векторные шрифты, которые не корежатся через сжатие по JPEG
olegchir Автор
06.07.2023 09:05Моя команда делала бесплатный продукт, который мог работать на Windows. Он до сих пор находится в открытом доступе:
Официально, JetBrains убили этот продукт, потому что им бесплатное решение невыгодно. Но по факту, вы можете разобраться, как это работает, и запустить всё у себя.
Вот мой самый первый пост:
https://habr.com/ru/articles/510210/А вот пост, сделанный во время первого публичного релиза: https://habr.com/ru/companies/JetBrains/articles/548770/
Я сейчас делаю свою IDE, там Projector будет бесплатно входить в базовую поставку, и для его настройки не нужно будет мучиться вообще. Но это дело долгое, типа полгода ещё до бета-версии.
Пока что рекомендую разобраться с Прожектором. Это не очень сложно.
ritorichesky_echpochmak
06.07.2023 09:05Скажите пожалуйста, а будет ли тогда это вот Remote Development добавлено в Space для Android? Или там в принципе не будет никакой возможности что-то попрогать кроме как сходить по SSH на удалённый хост и поднять там веб-версию VSCode. У меня просто Samsung DeX без дела простаивает, т.к. девелоперского софта непосредственно под ведроиды нет в принципе (полтора блокнотика со скудной подсветкой синтаксиса и не знающие про клавиатуру не считаем), приходится таскать в любую поездку ноут с собой)
И второй вопрос - мне казалось что Remote Development и Space немножко за санкциями. Или локально это решается?
olegchir Автор
06.07.2023 09:05Прости, ничего не знаю про Space, в том числе, по озвученной причине - оно всё забанено в России. Я сам, конечно, могу купить всё что нужно для себя лично, но люди в целом так делать не будут. В отсутствие возможности масштабировать это на большое количество людей, изучать тему про Спейс бессмысленно.
В качестве альтернативы, почитай вот этот комментарий выше по треду.
Скриншот в этом комментарии сделан именно что в IDE, которое проецируется на Android. И я даже так работал некоторое время.
IcyKit
То есть IDE идет к тому, чтобы на ней работали не преимущественно джависты, а все? Если эта IDE хочет забрать в себя все направления, то зачем жидбрейнсам куча других IDE?
olegchir Автор
IDEA всегда была самой "жирной" IDE. Там работают почти все плагины для скриптятины. Не работают только извращения - C++, C#, итп.
slonopotamus
Ну как работают... Rust уже можно дебажить хоть где-нить кроме CLion?
Я вот страдаю в обратную сторону - идея самого понятия "IDE" в том что из неё можно заниматься всеми активностями по разработке. А мне приходится держать ШЕСТЬ сред от JetBrains. Они почти покрывают функциональность друг друга, но вот не полностью.
ris58h
Интересно стало что это за 6 сред - расскажите.
slonopotamus
IDEA (джава, котлин)
RubyMine (руби)
GoLang (го)
PyCharm (питон)
CLion (раст)
Rider (c#, c++)
Почему Rider и CLion - понятно.
Причины, которые мешают полноценно девелопить руби/питон/го в IDEA я честно говоря забыл, не хватало каких-то мелочей, но важных.
Ну то есть меньше трёх штук ну ваще никак не получается.
theonevolodya
Поставьте соответствующие платины в Idea и используйте только её
olegchir Автор
Про Питон - там часть фичей находится в других местах, чем в выделенной IDE. Поэтому может сложиться ощущение, что их нет вообще. Хотя они есть. Другие пункты меню, другие хоткеи, вот это всё. Нужно поискать.
Про го сказать не смогу, потому что не использую. Скорей всего, там могут быть те же пробьлемы, что и с CLion - нативная отладка требует нативных инструментов.
slonopotamus
Ну меньше трёх (IDEA, CLion, Rider) значит всё-равно не получится.
olegchir Автор
Да это чистый маркетинг. Будет нужно - все можно смерджить в одно. Было бы зачем.
slonopotamus
Но спасибо за пинок под зад, попробовал, как минимум отдельный GoLang похоже действительно не нужен. Попробую PyCharm/RubyMine тоже выкинуть. CLion таки никак, из-за дебага Rust'а.
olegchir Автор
А суть в том, что "куча других IDE" нужна не стоклько Джетбрейнсу, сколько нам. Они сильно дешевле стоят. Если они вдруг таки соберутся и прикроют другие IDE, это будет мощный удар по карману. Вот прикинь, пишешь ты на Питоне, зачем тебе нужно платить за Java и Ruby?
IcyKit
не знал про цену, в виме пишу :D