GoLand 2020.2: улучшенная поддержка Go modules, дженерики и многое другое

Хабр, привет! Две недели назад мы выпустили GoLand 2020.2 и хотим рассказать про основные изменения в этом релизе.


y5qypwklos4zgklxuvobtxrqfrw.png

Если коротко, то мы улучшили поддержку Go modules, сделали удобнее поиск возможных проблем и слабых мест в коде, добавили новые проверки кода.

Кроме того, вы найдете новые функции редактирования кода, экспериментальную поддержку дженериков, возможность отправлять код из редактора в Go Playground, обновления для системы контроля версий, включая поддержку WSL 2 для Git на Windows, и многое другое!

Кстати, узнавать о новой функциональности в интерактивной форме можно прямо в IDE. Пройдите урок What’s New in GoLand 2020.2 на экране приветствия.


Go modules

Начиная с версии Go 1.15 можно изменить расположение кэша модулей по умолчанию с $GOPATH/pkg/mod на другую папку, используя новую переменную окружения GOMODCACHE.

Для этого укажите GOMODCACHE в Preferences/Settings | Go Modules | Environment. IDE распознает новое расположение и использует его для всех последующих действий с зависимостями.


jyle0xhir7i1t0b8lysrakfb-qi.png

Теперь можно закомментировать строки в файле go.mod с помощью Comment With Line Comment (Ctrl+/ на Windows/Linux и ⌘/ на macOS).


hew1mr8hnzhcokd_0evsb0qqvmc.gif

Работа с комментариями

IDE отображает ссылки из комментариев на соответствующие объявления на уровне пакета и позволяет перейти к ним с помощью Navigate to Declaration or Usages (⌘B на macOS и Ctrl+B/ на Windows/Linux).


11k2xij0mww8qghnjxhsc_yyfug.gif

Инспекции кода

Inspections Widget показывает количество предупреждений, ошибок и опечаток в текущем файле в правом верхнем углу редактора. Вы можете переходить от одной ошибки к другой с помощью стрелок или хоткея Next Error (F2).

Виджет позволяет настроить уровень подсветки (не подсвечивать ничего, подсвечивать только ошибки или подсветить все), а также изменить уровень значимости проверок или переключиться в Compact View, чтобы виджет не отвлекал вас.


ulsb5-jn9v6tqrgvip5mgdxsrbu.gif

Новое окно Problems показывает список предупреждений и ошибок в текущем файле с описанием этих проблем и позволяет сразу же их исправить с помощью Alt+Enter.

Чтобы открыть окно Problems, нажмите на Inspections Widget или перейдите к нему через View | Tool Window | Problems. Чтобы перейти к строке кода с ошибкой в редакторе, щелкните по ней правой кнопкой мыши.


qk6vpwmmrkrrt-vhb7nxtyenql8.gif

Новая инспекция кода предупреждает о возможных проблемах преобразований string(int), которые возвращают UTF-8 представление символа Unicode x вместо ожидаемого десятичного представления строки x.

GoLand уведомит о таких потенциальных ошибках и предложит быстрое исправление.


qpbwdgah42tck1m2itgcei4xk_i.gif

GoLand предупредит о распространенных ошибках в использовании имен тестов и примеров — вам больше не нужно вызывать для этого go vet. IDE уведомит о таких потенциальных ошибках и предложит быстрое исправление (quick-fix). Например, GoLand предложит переименовать Testme в TestMe.


com27tfilehl-uko28m9qbdu0eo.png

Инспекция кода Malformed struct tag проверяет, соответствуют ли теги структур стандартам языка, и предупреждает о потенциальных проблемах в коде.


ypujv0_qjpu9_zfiqwubawrlqpm.png

Инспекция Impossible interface type assertion анализирует выражения проверки типов v.(T), в том числе внутри оператора switch, и уведомляет пользователя, если тип V переменной v является интерфейсом, который не может реализовывать целевой интерфейс T. Это происходит, когда V и T содержат методы с одинаковым именем, но разными сигнатурами.


oyloysqgxlqxjaywiu4b_voiyue.png

Редактирование кода

Чтобы посмотреть предварительный результат быстрого исправления перед его применением, вызовите Show Context Actions с помощью Alt+Enter, выберите нужное действие и нажмите ⌥+Space на macOS или Ctrl+Shift+I на Windows и Linux.


nxbosne9hfvb8kj7bj5wnpgewjg.gif

Add Caret Per Selected Line создает курсоры в конце каждой выделенной строки. Используйте Alt+Shift+G на Windows/Linux и ⌥⇧G на macOS.


dxx5szq7wgbk3md3yhmmjmm1aki.gif

Настройте перенос на новую строку для аргументов вызова, параметров функций и составных литералов в Preferences/Settings | Editor | Code Style | Go | Wrapping and Braces.

Также можно использовать Put arguments on separate lines и Put arguments on one line с помощью Alt+Enter, чтобы вручную разделить или объединить элементы.


vy2jucb7tg-lpqlppin1xololfq.gif

Работа с переменным числом аргументов

Рефакторинг Introduce Variable (Ctrl+Alt+V на Windows и Linux, ⌘⌥ V на macOS) теперь умеет упаковывать аргументы в новый слайс, в то время как Inline Variable (⌥⌘N на macOS и Ctrl+Alt+N на Linux и Windows), наоборот, распаковывает их из слайса.


w7dxrv9bqfxfgq3zczccfz8t05e.gif

А при помощи быстрого исправления Unpack slice можно передать слайс последним аргументом вариативной функции.


y-vdaf78drkfndnmtwgawsnt6p8.gif

Сохранение проекта в качестве шаблона

Теперь вы можете повторно использовать проекты или файлы, сохраняя их как пользовательские шаблоны. Для этого выберите Tools | Save Project as Template. В момент создания нового проекта IDE воссоздаст дерево проекта с файлами, папками и конфигурациями сборки.


xrjuqtafeuf6uhkl4kszrmb9awe.png

Go Playground

Теперь вы можете отправлять код в Go Playground, открыв контекстное меню. Выберите Go Tools | Share in Playground в раскрывающемся меню или Tools | Go Tools | Share in Playground, либо используйте горячие клавиши ⌥⇧⌘S на macOS или Ctrl+Alt+Shift+S на Windows/Linux.

Playground также работает с go2-файлами, в этом случае GoLand использует https://go2goplay.golang.org/.


nnev8ndvpzbh07g3c7qjojqikt4.png

Поддержка дженериков

Команда Go анонсировала прототип дизайна дженериков (или, более строго, параметров-типов). Подробности можно найти в черновике реализации.

В GoLand 2020.2 есть экспериментальная поддержку дженериков. Для работы с ними включите Enable experimental support for generics a.k.a type parameters в Settings/Preferences | Go.

Текущая реализация обеспечивает подсветку синтаксиса и базовую навигацию ссылок и работает только в go2-файлах.


tnidfrx0wusq3vviainq7etnmuq.png

Под капотом IDE

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

Теперь, если в проекте есть папка Vendor и включен режим Enable vendoring mode automatically в Settings/Preferences | Go | Go Modules, GoLand будет использовать только папку vendor и не будет обращаться к кэш памяти модулей.


tlaa7stxe8qtkupuynwg0l7_ei8.gif

GoLand 2020.2 запускает команды go list последовательно и показывает индикатор выполнения с информацией о количестве команд в очереди.


ty0cydkxmpr-qev6rgdhockymiy.gif

Система контроля версий


Поддержка WSL 2 для Git на Windows

GoLand 2020.2 позволят использовать Git из WSL 2, который изначально доступен в майском обновлении Windows 10, версия 2004. Если Git не установлен в Windows, GoLand автоматически будет искать Git в WSL и использовать его оттуда. IDE также автоматически переключится на Git из WSL для проектов, открытых из WSL (при помощи \wsl$ path).


r4om8ziscq8i3ha95zs48mwlsve.gif

Обновленные диалоги для работы с Git

Мы переработали диалоги Merge, Pull и Rebase для Git, сделав их более аккуратными и информативными. Также теперь легче понять, какая команда будет выполняться. И еще добавили опцию –rebase к диалогу Pull и –no-verify к диалогу Merge.


blpbguozuf8sivlkgeawlxz6xuo.png

Расширенная поддержка пул-реквестов GitHub

Мы добавили полную поддержку пул-реквестов GitHub. Просматривайте, назначайте и объединяйте пул-реквесты, читайте встроенные комментарии и изучайте хронологию, отправляйте комментарии и ревью, а также принимайте изменения, не покидая GoLand.


hls4bq8hsi_2cy4zfthnshbrdry.png

Улучшенная презентация результатов Compare branches

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


9kcp28pjijzr2-i8pybpc_nvuwq.png

На этом всё! Идеи улучшений мы зачастую берем из ваших отзывов и предложений, так что пишите нам здесь в комментариях, в наш баг-трекер или в Twitter.

По традиции напоминаю, что если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand доступны прямо там, нужно просто установить плагин Go.

Спасибо за внимание!

© Habrahabr.ru