Лучшие плагины IntelliJ IDEA / Хабр

Лучшие плагины IntelliJ IDEA / Хабр Ipad

Docker

Добавлены новые возможности для Docker Compose:

Intellij idea 2021.2.1

JetBrains IntelliJ IDEA – функциональная IDE для JVM, которая создана специально для того, чтобы максимально повысить продуктивность разработки. Умный редактор кода в сочетании с эргономичным дизайном делают разработку не только эффективной, но и приятной.

Глубокое понимание кода

После индексирования исходного кода IntelliJ IDEA предоставляет массу возможностей для быстрой и эффективной разработки: умное автодополнение, анализ кода в реальном времени и надежные рефакторинги.

Все, что нужно разработчику

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

Умное автодополнение кода

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

Разработка на разных языках

Несмотря на то, что IntelliJ IDEA – в первую очередь IDE для Java, она понимает и предоставляет интеллектуальную помощь при написании кода на SQL, JPQL, HTML, jаvascript и многих других языках и позволяет редактировать код, написанный не на Java, внутри строковых литералов Java-кода.

Продуктивная работа

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

Kotlin

  • Начиная с этой версии, функция автодополнения кода Kotlin по умолчанию использует механизм машинного обучения.

  • Вам не нужно ждать завершения анализа кода, чтобы выполнить тесты: их можно запустить сразу после открытия файла, нажав на значок Run test в редакторе.

  • К агенту корутин можно перейти через вкладку Coroutines в окне Debug. Он работает для конфигураций запуска Java с зависимостью от kotlinx.coroutines, а также для конфигураций запуска Spring и Maven.

  • Теперь кнопки, связанные с Run/Debug Configurations, активны во время индексации, и вы можете запустить приложение и выполнять его отладку, пока IDE индексирует проект.

  • Мы обеспечили поддержку WSL 2 и реализовали функцию Run Targets для Kotlin.

  • Добавлена новая инспекция, позволяющая IntelliJ IDEA упростить синтаксис и объединить цепочку из нескольких вызовов методов внутри коллекции.

  • Мы добавили новое intention-действие для преобразования buildString.

Language injection

Одна из самых необычных возможностей IDEA — возможность обеспечивать поддержку своего языка в строковых константах других языков. Для этого достаточно сказать IDEA, какие именно строковые константы относятся к твоему языку, дальше IDEA сама автоматически:

  • генерирует виртуальный файл (или несколько файлов) с заданными префиксами для каждой строковой константы
  • создает в редакторе исходного файла для всех констант своего рода «окна» в этот виртуальный файл
  • обеспечивает в этом виртуальном файле поддержку всех возможностей «внедряемого» языка, таких как подсветку ошибок, переход к объявлению, автодополнение, поиск использований и, что особенно важно, рефакторинг. То есть, при переименовании любого элемента на одном языке, он автоматически переименовывается и во всех строковых константах, ссылающихся на этот элемент в других языках. Таким образом вы автоматически защищены от «битых» ссылок.

Лучшие плагины IntelliJ IDEA / Хабр

Здесь в IDEA тоже был (и сохраняется) небольшой баг. Когда виртуальный файл большой, то если при переходе к использованию IDEA должна перейти на начало «окна внедрения», она на самом деле переходит на конец предыдущего «окна внедрения» (то есть например на предыдущее использование свойства в Java-файле).

Существует конечно, простой обход этого бага — создавать по отдельному виртуальному файлу на каждый строковый литерал. Но такой подход тормозит когда использований больше 30, поэтому в этом случае все равно приходится использовать один большой виртуальный файл (с другой стороны, когда использований много, найти правильное, то есть следующее, использование не так уж и сложно).

Читайте также:  Преимущества и недостатки Apple iPad Pro по версии Уолта Моссберга | Яблык

Мы просили исправить этот баг опять-таки в рамках «обмена услугами», и разработчики JetBrains его вроде как пофиксили, но, как позже выяснилось, как-то не так (это еще по коммиту было видно, но мы подумали, что просто не до конца его поняли). Впрочем, у нас к этому багу все уже давно привыкли, благо ситуация с использованием больше 30 элементов в одном файле встречается достаточно редко.

Анализ

Перед тем как выполнить рефакторинг, часто бывает необходимо выяснить «что происходит» и «кто все эти люди».

Для этого IDEA, практически из коробки, позволяет просмотреть структуру выбранного класса (доступные для этого класса свойства и действия):

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

Лучшие плагины IntelliJ IDEA / Хабр

Все верхние возможности предоставляются IDEA автоматически (с минимальными телодвижениями) после реализации механизма поиска объявлений. Следующий набор возможностей заставил повозиться с плагином немного больше, но все равно значительную часть инфраструктуры предоставила IDEA (не без проблем конечно, но об этом позже).

Взаимодействие с ide

  • Новая версия IntelliJ IDEA автоматически находит проекты Eclipse, хранящиеся на локальной машине, поэтому теперь их можно открыть прямо из папки на приветственном экране.

  • В новом узле Advanced Settings в меню Preferences/Settings доступны продвинутые настройки для IDE.

  • Упорядочить окна стало проще: просто нажмите на заголовок и перетащите в любую выделенную область внутри основного окна IDE или за его пределы в отдельное окно.

  • IntelliJ IDEA автоматически очищает директории кэша и журналов, обновлявшиеся более 180 дней назад.

  • Если в проекте отсутствует плагин для используемого фреймворка, IDE предупредит об этом и предложит включить его.

  • Мы упростили перемещение между разделами Preferences/Settings: в правом верхнем углу окна появились удобные стрелки.

  • IDE сообщит о появлении обновлений для любых продуктов, если вы используете Toolbox App 1.20.8804 или более поздней версии.

  • Мы добавили новые специальные возможности для пользователей macOS: озвучили варианты автодополнения кода, выбранного пункта в поле со списком и всего списка целиком, а также результаты поиска при использовании функции Search Everywhere.

  • В этой версии устранена проблема зависания интерфейса при использовании контекстных меню, всплывающих окон и панелей инструментов. Кроме того, мы вынесли из потока пользовательского интерфейса некоторые операции, требующие индексации.

Визуализация форм

В lsFusion структура и дизайн форм задается в том же коде, что и доменная логика, при помощи специальных конструкций. При этом разные части формы могут быть объявлены в разных модулях, а при запуске сервера будут “сливаться” воедино в зависимости от подключенных модулей.

Чтобы видеть результирующий дизайн можно, конечно, перезапускать сервер, и смотреть результат в клиенте. Но на рестарт сервера требуется определенное время. Плагин же умеет:

https://www.youtube.com/channel/UC4ogdcPcIAOOMJktgBMhQnQ


Вот как это выглядит в IDE:

При построении формы учитываются только текущий активный модуль и все, от которых он зависит.

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

Другие изменения

Впечатляющий список, не правда ли? Мы надеемся, что все эти новые возможности и исправления вам понравятся и повысят эффективность вашей работы.

Программируйте с удовольствием!

Читайте также:  Как можно звонить с Айпада через сим карту и приложения

Инструменты для работы с базами данных

  • Мы добавили интерфейс для изменения прав доступа при редактировании объектов. Это обновление доступно для PostgreSQL, Redshift, Greenplum, MySQL, MariaDB, DB2, SQL Server и Sybase.

  • Добавлены шаблоны Live Templates, с помощью которых можно генерировать простые операторы прямо из проводника баз данных.

  • Упростилась навигация: действие Go to declaration (Ctrl/Cmd B), вызванное для объекта в SQL, теперь открывает DDL, а не проводник базы данных.

  • Мы улучшили сортировку данных.

  • Появилась возможность копировать, вырезать и вставлять источники данных при помощи всем известных сочетаний клавиш Ctrl/Cmd C/V/X.

  • Теперь вы можете редактировать данные в коллекциях MongoDB. Также доступен предпросмотр запросов.

Метапрограммирование

Иногда возникает потребность создавать однотипный код для различных задач. В lsFusion есть механизм метакодов, который позволяет генерировать код на основе некоторого шаблона. При этом, в случае изменения метакода, будет происходить автоматическая обновление кода. По сути, это автоматический copy/paste с возможностью замены определенных идентификаторов на заданные значения.

Для включения этого механизма нужно сначала активировать его в меню. После этого IDE будет сама автоматически изменять соответствующий код.

При запуске сервера будет использоваться только сгенерированный код. Сами шаблоны META при запуске сервера учитываться не будут.

Кстати, реализация возможности метапрограммирования заставила нас внести еще один вклад в open-source (в данном случае в лице Intellij IDEA). Дело в том, что в ERP метакоды используются достаточно активно, и, соответственно, часто возникает необходимость сгенерировать код / удалить сгенерированный код.

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


Возьмем логику из примера

. Предположим, нам нужно посмотреть, где объявляется свойство Цена. Для этого нужно под пользователем с правами администратора навести указатель мыши на заголовок нужной нам колонки:

В появившемся окне сразу видно, в каком модуле это свойство создано (Shipment), какой номер строки в нем (37), таблица в которой хранится (_auto_Shipment_ShipmentDetail), и ряд другой информации.

Чтобы перейти непосредственно к объявлению свойства, нужно начать поиск файла и в появившемся диалоге ввести Shipment:

Затем при помощи Navigate — Line/Column переходим к 37й строке, где видим объявление свойства:

Нажав CTRL ALT F7, стоя курсором на нужном свойстве, можно быстро найти все его использования по всем проектам:

В данном случае, первое использование цены идет в расчете суммы по строке. Два последних — это добавление на соответствующие формы.

При необходимости можно включить поиск только по записи в данное свойство, если убрать соответствующую опцию:

Тогда в списке останется только запись в это свойство. Чтобы узнать, какое конкретно значение в него записывается нужно встать курсором на salePrice и нажать Go To Declaration or Usages. Дальше вернутся через Navigation — Back и перейти к объявлению свойства item:

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

Отладчик

Когда по коду совершенно непонятно что происходит, то приходится обращаться к отладчику. На любой строке императивной логики (действия, события, ограничения) можно поставить breakpoint. Как только выполнение сервера достигнет этой точки, оно будет остановлено и управление перейдет в отладчик.

Читайте также:  Restore all content to iPad from a backup - Apple Support (HK)

При просмотре текущих значений можно обращаться как текущим объектам (например, Shipment s), так и к любым другим объектам из базы (например, Item i). Однако, разработчик сам несет ответственность за добавление в watches данных, считывание которых займет много времени или памяти, и приведет к падению производительности.

Также можно ставить breakpoint’ы на конкретное свойство. Выполнение остановится в любом месте, когда в него будет производится запись:

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

Для реализации отладчика мы на самом деле использовали существующий в IDEA Java Debugger. То есть отлаживается платформа как обычное Java приложение, но для lsFusion действий мы создаем proxy java методы и подменяем их отображение на свой код (я так понимаю в IDEA это сделано для поддержки Scala и других оберток над Java).

И вот тут был забавный момент. В какой-то момент разработчики IDEA сделали конструктор своего Java Debugger закрытым (private). И если ситуацию с вызовом private методов еще можно обойти через Reflection, то как унаследоваться от класса с private конструктором — непонятно.

Поддержка синтаксиса

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

Рефакторинг

Часто бывает ситуации, когда требуется изменить название свойства, класса, формы или любого другого элемента в системе. Для осуществления такого действия нужно стать на этот элемент и нажать Refactor — Rename:

Переименование элемента автоматически изменяет исходный код во всех местах его использования. Кроме того, если создан файл migration.script, туда будут добавлены соответствующие записи. Серверу необходимо знать изменения имен, чтобы, например, автоматически мигрировать данные из одной колонки в другую. Иначе, невозможно отличить переименование от создания нового свойства с другим именем.

Фреймворки и технологии (только в intellij idea ultimate)

  • В окне Endpoints можно вывести схему связей микросервисов, где можно проследить, какой клиент вызывает тот или иной сервис, и перейти к соответствующему вызову в коде. Схема доступна для проектов Java и Kotlin, если вы используете фреймворки Spring, Micronaut, Quarkus или Helidon.

  • Новый рефакторинг Migrate позволяет легко перенести проект или модуль с Java EE на Jakarta EE.

  • Если вы создаете новый проект Spring Initializer, IDE автоматически скачает заранее построенные индексы. Это позволяет сократить время на индексацию и ускоряет запуск IDE.

  • Мы реализовали поддержку графа сущностей JPA, который можно определить с помощью аннотации @NamedEntityGraph. Для атрибутов аннотации работает автодополнение кода, обнаружение ошибок и навигация.

  • Мы добавили поддержку аннотаций кэширования в Micronaut и Quarkus. С помощью значков редактора можно перемещаться между использованиями имени кэша, использовать действие Find usages и рефакторинг Rename для идентификаторов кэша.

  • Навигация по URL-адресам в JavaScript и TypeScript значительно улучшена как для клиентского (Angular или Axios), так и для серверного (Express) кода.

  • Плагин Protocol Buffers интегрирован с IntelliJ IDEA Ultimate, и команда JetBrains теперь обеспечивает его полную поддержку.

  • IntelliJ IDEA Ultimate поддерживает фреймворк gRPC. Первая возможность, которую мы реализовали — просмотр определений сервисов gRPC в окне Endpoints.

  • В новой версии проекты Ktor можно создавать прямо на начальном экране: в IntelliJ IDEA Ultimate встроена поддержка этого фреймворка.

Чего-то не хватает?


Какие ваши любимые плагины IDEA? Просьба поделиться в комментариях ниже.

Заключение

В статье описаны только основные варианты использования. В ней также присутствуют возможности по поиску реализаций абстрактных свойств и классов, визуализации зависимостей между модулями и свойствами, автоматической генерации форм на основе xml/json и многое другое.

Пойдя по пути разработки плагина к IDEA, мы небольшими усилиями получили очень мощную бесплатную интегрированную среду разработки, превосходящую по многим параметрам IDE конкурентов.

Оцените статью
iPad Мобайл